亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 5410 | 回復(fù): 15
打印 上一主題 下一主題

[數(shù)據(jù)結(jié)構(gòu)] linux 內(nèi)核 等待隊(duì)列 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2013-08-25 16:31 |只看該作者 |倒序?yàn)g覽

進(jìn)程以阻塞方式訪問設(shè)備并對(duì)其進(jìn)行操作時(shí),如果不能及時(shí)獲得設(shè)備資源則會(huì)被掛起,直到滿足可操作的條件時(shí)才進(jìn)行相應(yīng)的操作。被掛起的進(jìn)程會(huì)進(jìn)入睡眠狀態(tài),并被移至某個(gè)等待隊(duì)列;當(dāng)條件滿足時(shí)候,會(huì)被移出這個(gè)等待隊(duì)列

這個(gè)事對(duì)于等待隊(duì)列的描述

其中有個(gè)問題我不太清楚,

比如說:

           A 進(jìn)程在等待 讀file1,磁盤比較慢,A進(jìn)程會(huì)被放入一個(gè)等待隊(duì)列阻塞,直到內(nèi)核完成讀,喚醒進(jìn)程A

但是這種類似的事件很多,系統(tǒng)中有數(shù)千個(gè)進(jìn)程,每個(gè)進(jìn)程可能讀文件,可能等待socket,可能等待信號(hào)量.....
內(nèi)核中不就有成千個(gè)不同的等待隊(duì)列了?
例如:

        file1 有一個(gè)等待隊(duì)列
        file2 有一個(gè)等待隊(duì)列
        .......
        file1000 有一個(gè)等待隊(duì)列

請(qǐng)大家指教了

論壇徽章:
6
金牛座
日期:2013-10-08 10:19:10技術(shù)圖書徽章
日期:2013-10-14 16:24:09CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34獅子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亞洲杯之阿聯(lián)酋
日期:2015-05-09 14:36:15
2 [報(bào)告]
發(fā)表于 2013-08-26 09:04 |只看該作者
回復(fù) 1# tianhailong
但是這種類似的事件很多,系統(tǒng)中有數(shù)千個(gè)進(jìn)程,每個(gè)進(jìn)程可能讀文件,可能等待socket,可能等待信號(hào)量.....
內(nèi)核中不就有成千個(gè)不同的等待隊(duì)列了?
例如:

        file1 有一個(gè)等待隊(duì)列
        file2 有一個(gè)等待隊(duì)列
        .......
        file1000 有一個(gè)等待隊(duì)列

請(qǐng)大家指教了


以socket為例,如果設(shè)置socket為block類型,那么對(duì)這個(gè)sock的recv,如果沒有數(shù)據(jù)包到達(dá)就會(huì)將讀取的進(jìn)程放到sock->sk_sleep()等待隊(duì)列中。
每個(gè)socket都有一個(gè)等待隊(duì)列,所以內(nèi)核的確有非常多的等待隊(duì)列。
   

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2013-08-26 14:39 |只看該作者
謝謝,還有點(diǎn)不明白的,
一個(gè)機(jī)器可能有幾萬個(gè)socket,
如果都設(shè)置成阻塞的,
內(nèi)核不是至少要幾萬個(gè)等待隊(duì)列了?回復(fù) 2# 瀚海書香

論壇徽章:
6
金牛座
日期:2013-10-08 10:19:10技術(shù)圖書徽章
日期:2013-10-14 16:24:09CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34獅子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亞洲杯之阿聯(lián)酋
日期:2015-05-09 14:36:15
4 [報(bào)告]
發(fā)表于 2013-08-26 19:15 |只看該作者
回復(fù) 3# tianhailong
謝謝,還有點(diǎn)不明白的,
一個(gè)機(jī)器可能有幾萬個(gè)socket,
如果都設(shè)置成阻塞的,
內(nèi)核不是至少要幾萬個(gè)等待隊(duì)列了


1. 內(nèi)核socket默認(rèn)就是阻塞的
2. 如果socket有幾萬個(gè),那就有幾萬個(gè)等待隊(duì)列了。

你應(yīng)該去看看等待隊(duì)列的代碼。 其實(shí)幾萬個(gè)等待隊(duì)列跟有幾萬個(gè)socket沒有什么本質(zhì)的區(qū)別,就是多用些內(nèi)存罷了。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2013-08-28 16:15 |只看該作者
你的對(duì)等待隊(duì)列的理解沒什么大問題,但是這個(gè)等待隊(duì)列的隊(duì)列頭卻不是以文件或者socket來指定的,而是指特定的事請(qǐng),比如說你的文件讀寫導(dǎo)致進(jìn)程睡眠,很可能是磁盤驅(qū)動(dòng)器在驅(qū)動(dòng)層
建立一個(gè)等待隊(duì)列頭,所有等待訪問磁盤的進(jìn)程都掛載這一隊(duì)列上

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2013-08-29 18:53 |只看該作者
謝謝指教,昨天一直忙沒顧上問您,具體的事件指什么呢,
等待 讀 文件 是個(gè) 事件
等待 讀 socket 也是個(gè)事件,?
如果等待一個(gè)socket算一個(gè)事件,
那么內(nèi)核還是有可能為每個(gè)socket建立一個(gè)隊(duì)列?

還有您舉得列子:
比如說你的文件讀寫導(dǎo)致進(jìn)程睡眠,很可能是磁盤驅(qū)動(dòng)器在驅(qū)動(dòng)層
建立一個(gè)等待隊(duì)列頭,所有等待訪問磁盤的進(jìn)程都掛載這一隊(duì)列上
但是當(dāng)一個(gè)讀滿足條件時(shí),應(yīng)該有一個(gè)進(jìn)程被喚醒處理,但是這個(gè)隊(duì)列上有很多進(jìn)程,
內(nèi)核怎么決定喚醒誰呢
回復(fù) 5# dxyf1524


   

論壇徽章:
7
丑牛
日期:2013-10-18 14:43:21技術(shù)圖書徽章
日期:2013-11-03 09:58:03辰龍
日期:2014-01-15 22:57:50午馬
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亞洲杯之伊朗
日期:2015-03-16 10:24:352015亞冠之城南
日期:2015-05-31 09:52:32
7 [報(bào)告]
發(fā)表于 2013-08-29 23:27 |只看該作者
回復(fù) 6# tianhailong


    全部喚醒吧,然后發(fā)生所謂的驚群效應(yīng)?

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2013-08-30 08:56 |只看該作者
回復(fù) 6# tianhailong


    你應(yīng)該向底層看去,比如說為了滿足用戶的文件的需求,這里涉及到文件系統(tǒng)和塊設(shè)備驅(qū)動(dòng)的設(shè)計(jì),不同的環(huán)境不同的機(jī)制,我說不全。
但是針對(duì)磁盤訪問來說,我給你一個(gè)假想的流程吧,訪問磁盤文件,你的內(nèi)核驅(qū)動(dòng)最終要操作磁盤控制器讀取某一位置的數(shù)據(jù)。而很可能塊設(shè)備驅(qū)動(dòng)
里面有一個(gè)IO請(qǐng)求隊(duì)列,將所有的訪問該磁盤的文件讀寫請(qǐng)求調(diào)度和排列,以更好的使磁盤連續(xù)讀取,提高整體性能,所謂的你讀文件的某一進(jìn)程
睡眠,就是現(xiàn)在的磁盤驅(qū)動(dòng)程序還無法滿足你的要求,正在為別人服務(wù),所以讓你睡一會(huì),等我調(diào)度到你的時(shí)候,我自然有辦法喚醒你,通知你,醒來吧
至于這個(gè)醒來的機(jī)制,有很多方法,也跟你訪問的方式有關(guān),至于上面說的全部喚醒,實(shí)際上如果是互斥的訪問要求,一般只喚醒一個(gè),內(nèi)核也會(huì)盡量避免所有睡眠
在某一等待隊(duì)列的進(jìn)程如洪水猛獸般醒來的這樣的事發(fā)生,你說對(duì)吧

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2013-08-30 08:59 |只看該作者
回復(fù) 6# tianhailong

http://blog.163.com/leyni@126/bl ... 010220122611523786/
你可一看下這個(gè)
   

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2013-08-30 09:38 |只看該作者
回復(fù) 6# tianhailong
#define wake_up(x)                        __wake_up(x, TASK_NORMAL, 1, NULL)
#define wake_up_nr(x, nr)                __wake_up(x, TASK_NORMAL, nr, NULL)
#define wake_up_all(x)                        __wake_up(x, TASK_NORMAL, 0, NULL)
#define wake_up_locked(x)                __wake_up_locked((x), TASK_NORMAL)

等待隊(duì)列喚醒有好幾種方式,可以只喚醒一個(gè),也可以喚醒全部,不同場(chǎng)景應(yīng)用不同


   
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP