亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 00000005.htm

?? 本書詳細(xì)地介紹了Linux下一些主要函數(shù)的功能
?? HTM
字號:
<HTML><HEAD>  <TITLE>BBS水木清華站∶精華區(qū)</TITLE></HEAD><BODY><CENTER><H1>BBS水木清華站∶精華區(qū)</H1></CENTER>發(fā)信人:&nbsp;axp33a&nbsp;(無聊中...),&nbsp;信區(qū):&nbsp;Linux&nbsp;<BR>標(biāo)&nbsp;&nbsp;題:&nbsp;Linux內(nèi)核源代碼分析2-2-2&nbsp;<BR>發(fā)信站:&nbsp;BBS&nbsp;水木清華站&nbsp;(Thu&nbsp;Aug&nbsp;&nbsp;3&nbsp;11:21:53&nbsp;2000)&nbsp;WWW-POST&nbsp;<BR>&nbsp;<BR>2.2.2&nbsp;&nbsp;&nbsp;等待隊(duì)列
&nbsp;<BR>前一節(jié)我們曾簡要的提到進(jìn)程(也就是正在運(yùn)行的程序)可以轉(zhuǎn)入休眠狀態(tài)以等待某個特&nbsp;<BR>定事件,當(dāng)該事件發(fā)生時(shí)這些進(jìn)程能夠被再次喚醒。內(nèi)核實(shí)現(xiàn)這一功能的技術(shù)要點(diǎn)是把等&nbsp;<BR>待隊(duì)列(wait&nbsp;queue)和每一個事件聯(lián)系起來。需要等待事件的進(jìn)程在轉(zhuǎn)入休眠狀態(tài)后插&nbsp;<BR>入到隊(duì)列中。當(dāng)事件發(fā)生之后,內(nèi)核遍歷相應(yīng)隊(duì)列,喚醒休眠的任務(wù)讓它投入運(yùn)行狀態(tài)。&nbsp;<BR>任務(wù)負(fù)責(zé)將自己從等待隊(duì)列中清除。
&nbsp;<BR>等待隊(duì)列的功能強(qiáng)大得令人吃驚,它們被廣泛應(yīng)用于整個內(nèi)核中。更重要的是,實(shí)現(xiàn)等待&nbsp;<BR>隊(duì)列的代碼量并不大。
&nbsp;<BR>1.&nbsp;wait_queue結(jié)構(gòu)
&nbsp;<BR>18662:簡單的數(shù)據(jù)結(jié)構(gòu)就是等待隊(duì)列節(jié)點(diǎn),它包含兩個元素:
&nbsp;<BR>*&nbsp;task—指向struct&nbsp;task_struct結(jié)構(gòu)的指針,它代表一個進(jìn)程。從16325行開始的&nbsp;<BR>struct&nbsp;task_struct結(jié)構(gòu)將在第7章中進(jìn)行介紹。
&nbsp;<BR>*&nbsp;next—指向隊(duì)列中下一節(jié)點(diǎn)的指針。因而,等待隊(duì)列實(shí)際上是一個單鏈表。
&nbsp;<BR>通常,我們用指向等待隊(duì)列隊(duì)首的指針來表示等待隊(duì)列。例如,printk使用的等待隊(duì)列&nbsp;<BR>log_wait(25647行)。
&nbsp;<BR>2.&nbsp;wait_event
&nbsp;<BR>16840:通過使用這個宏,內(nèi)核代碼能夠使當(dāng)前執(zhí)行的進(jìn)程在等待隊(duì)列wq中等待直至給定&nbsp;<BR>condition(可能是任何的表達(dá)式)得到滿足。
&nbsp;<BR>16842:如果條件已經(jīng)為真,當(dāng)前進(jìn)程顯然也就無需等待了。
&nbsp;<BR>16844:否則,進(jìn)程必須等待給定條件轉(zhuǎn)變?yōu)檎妗_@可以通過調(diào)用__wait_event來實(shí)現(xiàn)(&nbsp;<BR>16824行),我們將在下一節(jié)介紹它。由于__wait_event已經(jīng)同wait_event分離,已知條&nbsp;<BR>件為假的部分內(nèi)核代碼可以直接調(diào)用__wait_queue,而不用通過宏來進(jìn)行冗余的(特別是&nbsp;<BR>在這些情況下)測試,實(shí)際上也沒有代碼會真正這樣處理。更為重要的是,如果條件已經(jīng)&nbsp;<BR>為真,wait_event會跳過將進(jìn)程插入等待隊(duì)列的代碼。
&nbsp;<BR>注意wait_event的主體是用一個比較特殊的結(jié)構(gòu)封閉起來的:
&nbsp;<BR>奇怪的是,這個小技巧并沒有得到應(yīng)有的重視。這里的主要思路是使被封閉的代碼能夠像&nbsp;<BR>一個單句一樣使用。考慮下面這個宏,該宏的目的是如果p是一個非空指針,則調(diào)用free&nbsp;<BR>:
&nbsp;<BR>除非你在如下所述的情況下使用FREE1,否則所有調(diào)用都是正確有效的:
&nbsp;<BR>FREE1經(jīng)擴(kuò)展以后,else就和錯誤的if(FREE1的if)聯(lián)系在一起。
&nbsp;<BR>有些程序員通過如下途徑解決這種問題:
&nbsp;<BR>這兩種方法都不盡人意,程序員在調(diào)用宏以后自然而然使用的分號會把擴(kuò)展信息弄亂。以&nbsp;<BR>FREE2為例,在宏展開之后,為了使編譯器能更準(zhǔn)確地識別,我們還需要進(jìn)行一定的縮進(jìn)&nbsp;<BR>調(diào)節(jié),最終代碼如下所示:
&nbsp;<BR>這樣就會引起語法錯誤—else和任何一個if都不匹配。FREE3從本質(zhì)上講也存在同樣的問&nbsp;<BR>題。而且在研究問題產(chǎn)生原因的同時(shí),就能夠明白為什么宏體里是否包含if是無關(guān)緊要的&nbsp;<BR>。不管宏體內(nèi)部內(nèi)容如何,只要使用一組括號來指定宏體,就會碰到相同的問題。
&nbsp;<BR>引入do/while(0)技巧能夠克服前面所出現(xiàn)的所有問題,現(xiàn)在我們可以編寫FREE4。
&nbsp;<BR>將FREE4和其他宏一樣插入相同代碼之后,宏展開后其代碼如下所示(為清晰起見,我們&nbsp;<BR>再次調(diào)整了縮進(jìn)格式):
&nbsp;<BR>這段代碼當(dāng)然可以正確執(zhí)行。編譯器能夠優(yōu)化這個偽循環(huán),舍棄循環(huán)控制,因此執(zhí)行代碼&nbsp;<BR>并沒有速度的損失,我們也從而得到了能夠?qū)崿F(xiàn)理想功能的宏。
&nbsp;<BR>雖然這是一個可以接受的解決方案,但是我們不能不提到的是編寫函數(shù)要比編寫宏好得多&nbsp;<BR>。不過如果你不能提供函數(shù)調(diào)用所需的開銷,那么就需要使用內(nèi)聯(lián)函數(shù)。這種情況雖然在&nbsp;<BR>內(nèi)核中經(jīng)常出現(xiàn),但是在其他地方就要少得多。(不可否認(rèn),當(dāng)使用C++、gcc或者任何實(shí)&nbsp;<BR>現(xiàn)了將要出現(xiàn)的修正版ISO標(biāo)準(zhǔn)C的編譯器時(shí),這種方案只是一種選擇,就是最后為C增加&nbsp;<BR>內(nèi)聯(lián)函數(shù)。)
&nbsp;<BR>3.&nbsp;__wait_event
&nbsp;<BR>16824:__wait_event使當(dāng)前進(jìn)程在等待隊(duì)列wq中等待,直至condition為真。
&nbsp;<BR>16829:通過調(diào)用add_wait_queue(16791行),局部變量__wait可以被鏈接到隊(duì)列上。注&nbsp;<BR>意__wait是在堆棧中而不是在內(nèi)核堆中分配空間,這是內(nèi)核中常用的一種技巧。在宏運(yùn)行&nbsp;<BR>結(jié)束之前,__wait就已經(jīng)被從等待隊(duì)列中移走了,因此等待隊(duì)列中指向它的指針總是有效&nbsp;<BR>的。
&nbsp;<BR>16830:重復(fù)分配CPU給另一個進(jìn)程直至條件滿足,這一點(diǎn)將在下面幾節(jié)中討論。
&nbsp;<BR>16831:進(jìn)程被置為TASK_UNINTERRUPTIBLE狀態(tài)(16190行)。這意味著進(jìn)程處于休眠狀態(tài)&nbsp;<BR>,不應(yīng)被喚醒,即使是信號也不能打斷該進(jìn)程的休眠。信號在第6章中介紹,而進(jìn)程狀態(tài)&nbsp;<BR>則在第7章中介紹。
&nbsp;<BR>16832:如果條件已經(jīng)滿足,則可以退出循環(huán)。
&nbsp;<BR>請注意如果在第一次循環(huán)時(shí)條件就已經(jīng)滿足,那么前面一行的賦值就浪費(fèi)了(因?yàn)樵谘h(huán)&nbsp;<BR>結(jié)束之后進(jìn)程狀態(tài)會立刻被再次賦值)。__wait_event假定宏開始執(zhí)行時(shí)條件還沒有得到&nbsp;<BR>滿足。而且,這種對進(jìn)程狀態(tài)變量state的延遲賦值也并沒有什么害處。在某些特殊情況&nbsp;<BR>下,這種方法還十分有益。例如當(dāng)__wait_event開始執(zhí)行時(shí)條件為假,但是在執(zhí)行到&nbsp;<BR>16832行時(shí)就為真了。這種變化只有在為有關(guān)進(jìn)程狀態(tài)的代碼計(jì)算condition變量值時(shí)才會&nbsp;<BR>出現(xiàn)問題。但是在代碼中這種情況我沒有發(fā)現(xiàn)。
&nbsp;<BR>16834:調(diào)用schedule(26686行,在第7章中討論)將CPU轉(zhuǎn)移給另一個進(jìn)程。直到進(jìn)程再&nbsp;<BR>次獲得CPU時(shí),對schedule的調(diào)用才會返回。這種情況只有當(dāng)?shù)却?duì)列中的進(jìn)程被喚醒時(shí)&nbsp;<BR>才會發(fā)生。
&nbsp;<BR>16836:進(jìn)程已經(jīng)退出了,因此條件必定已經(jīng)得到了滿足。進(jìn)程重置TASK_RUNNING的狀態(tài)&nbsp;<BR>(16188行),使其適合CPU運(yùn)行。
&nbsp;<BR>16837:通過調(diào)用remove_wait_queue(16814行)將進(jìn)程從等待隊(duì)列中移去。&nbsp;<BR>wait_event_interruptible和__wait_event_interruptible(分別參見16868行和16847)&nbsp;<BR>基本上與wait_event和__wait_event相同,但不同的是它們允許休眠的進(jìn)程可以被信號中&nbsp;<BR>斷。信號將在第6章中介紹。
&nbsp;<BR>請注意wait_event是被如下結(jié)構(gòu)所包含的。
&nbsp;<BR>和do/while(0)技巧一樣,這樣可以使被封閉起來的代碼能夠像一個單元一樣運(yùn)行。這樣&nbsp;<BR>的封閉代碼就是一個獨(dú)立的表達(dá)式,而不是一個獨(dú)立的語句。也就是說,它可以求值以供&nbsp;<BR>其他更復(fù)雜的表達(dá)式使用。發(fā)生這種情況的原因主要在于一些不可移植的gcc特有代碼的&nbsp;<BR>存在。通過使用這類技巧,一個程序塊中的最后一個表達(dá)式的值將定義為整個程序塊的最&nbsp;<BR>終值。當(dāng)在表達(dá)式中使用wait_event_interruptible時(shí),執(zhí)行宏體后賦__ret的值為宏體&nbsp;<BR>的值(參見16873行)。對于有Lisp背景知識的程序員來說,這是個很常見的概念。但是&nbsp;<BR>如果你僅僅了解一點(diǎn)C和其他一些相關(guān)的過程性程序設(shè)計(jì)語言,你可能就會覺得比較奇怪&nbsp;<BR>。
&nbsp;<BR>__wake_up
&nbsp;<BR>26829:該函數(shù)用來喚醒等待隊(duì)列中正在休眠的進(jìn)程。它由wake_up和wake_up_&nbsp;&nbsp;<BR>interruptible調(diào)用(請分別參見16612行和16614行)。這些宏提供mode參數(shù),只有狀態(tài)&nbsp;<BR>滿足mode所包含的狀態(tài)之一的進(jìn)程才可能被喚醒。
&nbsp;<BR>26833:正如將在第10章中詳細(xì)討論的那樣,鎖(lock)是用來限制對資源的訪問,這在&nbsp;<BR>SMP邏輯單元中尤其重要,因?yàn)樵谶@種情況下當(dāng)一個CPU在修改某數(shù)據(jù)結(jié)構(gòu)時(shí),另一個CPU&nbsp;<BR>可能正在從該數(shù)據(jù)結(jié)構(gòu)中讀取數(shù)據(jù),或者也有可能兩個CPU同時(shí)對同一個數(shù)據(jù)結(jié)構(gòu)進(jìn)行修&nbsp;<BR>改,等等。在這種情況下,受保護(hù)的資源顯然是等待隊(duì)列。非常有趣的是所有的等待隊(duì)列&nbsp;<BR>都使用同一個鎖來保護(hù)。雖然這種方法要比為每一個等待隊(duì)列定義一個新鎖簡單得多,但&nbsp;<BR>是這就意味著SMP邏輯單元可能經(jīng)常會發(fā)現(xiàn)自己正在等待一個實(shí)際上并不必須的鎖。
&nbsp;<BR>26838:本段代碼遍歷非空隊(duì)列,為隊(duì)列中正確狀態(tài)的每一個進(jìn)程調(diào)用wake_up_process(&nbsp;<BR>26356行)。如前所述,進(jìn)程(隊(duì)列節(jié)點(diǎn))在此可能并沒有從隊(duì)列中移走。這在很大程度&nbsp;<BR>上是由于即使隊(duì)列中的進(jìn)程正在被喚醒,它仍然可能希望繼續(xù)存在于等待隊(duì)列中,這一點(diǎn)&nbsp;<BR>正如我們在__wait_event中發(fā)現(xiàn)的問題一樣。
&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR>※&nbsp;來源:·BBS&nbsp;水木清華站&nbsp;smth.org·[FROM:&nbsp;166.111.196.22]&nbsp;&nbsp;<BR><CENTER><H1>BBS水木清華站∶精華區(qū)</H1></CENTER></BODY></HTML>

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一区二区三区网站| 一区二区三区四区亚洲| 美女精品一区二区| 欧美一区二区久久久| 日韩精品福利网| 日韩一区二区三区av| 奇米色一区二区三区四区| 日韩女优av电影| 韩国一区二区视频| 国产精品美女久久久久久| 99国产精品一区| 亚洲第一搞黄网站| 日韩精品一区二区三区中文不卡| 精品影视av免费| 欧美国产97人人爽人人喊| 色欲综合视频天天天| 午夜激情综合网| 精品国产乱码久久久久久浪潮| 国产福利一区在线| 一区二区成人在线视频| 欧美一区二区日韩一区二区| 国产成人午夜精品影院观看视频 | 欧美色倩网站大全免费| 午夜不卡在线视频| 精品国产欧美一区二区| 成人激情小说网站| 性久久久久久久久久久久| 欧美videofree性高清杂交| 国产91精品精华液一区二区三区| 亚洲色图20p| 91精品国产综合久久久蜜臀粉嫩 | 国产乱国产乱300精品| 国产精品色婷婷久久58| 欧美日韩和欧美的一区二区| 激情av综合网| 亚洲永久免费av| 久久综合99re88久久爱| 91久久精品午夜一区二区| 捆绑变态av一区二区三区| 国产精品毛片久久久久久| 欧美精品自拍偷拍| 成人免费精品视频| 日本不卡一二三区黄网| 亚洲天堂网中文字| 欧美变态tickling挠脚心| 99re在线精品| 国产综合色在线视频区| 亚洲一区二区四区蜜桃| 国产日韩亚洲欧美综合| 欧美日韩在线不卡| 成人免费av网站| 精品一区二区三区日韩| 一区二区三区在线观看国产 | 中文字幕欧美一区| 欧美一级国产精品| 欧洲一区二区三区在线| 粉嫩av一区二区三区在线播放 | 日韩电影在线观看电影| 日韩美女啊v在线免费观看| 欧美α欧美αv大片| 欧美日韩一卡二卡三卡 | 欧美日韩激情在线| 91视频你懂的| 成人动漫视频在线| 蜜臀久久久久久久| 一区二区三区在线免费播放| 国产精品毛片久久久久久| 欧美mv和日韩mv国产网站| 在线不卡的av| 欧美日韩亚洲综合一区 | 欧美性猛交xxxx乱大交退制版| 成人高清视频在线观看| 国产一区二区不卡| 国内精品国产成人| 免费成人在线网站| 免费观看成人鲁鲁鲁鲁鲁视频| 日日摸夜夜添夜夜添国产精品| 亚洲日韩欧美一区二区在线| 国产精品国产三级国产a| 久久综合av免费| 日韩美一区二区三区| 欧美日韩国产另类一区| 欧美午夜影院一区| 欧美日韩亚洲国产综合| 91.xcao| 91社区在线播放| 色8久久精品久久久久久蜜| 久久人人97超碰com| 日韩精品一区二区三区四区 | 一区二区三区中文在线| 亚洲免费电影在线| 亚洲国产成人av网| 日本中文在线一区| 麻豆成人91精品二区三区| 久久精品国产一区二区三区免费看 | 欧美大白屁股肥臀xxxxxx| 欧美美女视频在线观看| 欧美精三区欧美精三区| 26uuu另类欧美亚洲曰本| 国产视频视频一区| 亚洲日本青草视频在线怡红院| 亚洲日本成人在线观看| 亚洲第一搞黄网站| 精久久久久久久久久久| 成人av动漫在线| 欧美天天综合网| 日韩免费电影一区| 成人免费一区二区三区视频| 亚洲一区二区三区三| 久久精品国产亚洲a| 成人免费电影视频| 欧美视频日韩视频在线观看| 91精品婷婷国产综合久久| 久久综合色一综合色88| 最新中文字幕一区二区三区| 亚洲欧美另类久久久精品2019| 亚洲永久精品大片| 激情都市一区二区| 在线免费观看一区| 精品久久久久久久一区二区蜜臀| 国产精品美女久久久久久久久| 亚洲一级片在线观看| 国产伦理精品不卡| 欧美日韩综合一区| 国产人久久人人人人爽| 亚洲成人免费看| 成人午夜伦理影院| 欧美电影在线免费观看| 国产精品天干天干在观线| 午夜影视日本亚洲欧洲精品| 国产suv精品一区二区883| 欧美日韩一区在线观看| 国产精品福利影院| 久久精品av麻豆的观看方式| 色拍拍在线精品视频8848| 久久综合九色欧美综合狠狠| 亚洲欧美日韩人成在线播放| 美女www一区二区| 日本韩国精品在线| 亚洲国产精品av| 久久精品国产**网站演员| 欧美视频日韩视频| 日韩伦理电影网| 国产精品综合二区| 日韩欧美一级精品久久| 亚洲尤物在线视频观看| aaa亚洲精品| 国产日产欧美精品一区二区三区| 免费观看久久久4p| 欧美精品在线一区二区| 亚洲精品综合在线| 国产成人免费av在线| 欧美日韩国产色站一区二区三区| 亚洲国产精品99久久久久久久久| 免费av网站大全久久| 国产成人在线视频网址| 欧美三区在线观看| 亚洲精品综合在线| 国产一区二区伦理| 精品99久久久久久| 青青国产91久久久久久| 欧美三级电影网站| 亚洲一区二区视频| 欧美午夜免费电影| 一区二区三区成人| 色菇凉天天综合网| 亚洲日本电影在线| 一本一道波多野结衣一区二区| 国产精品高潮呻吟| 97精品国产97久久久久久久久久久久| 国产日韩成人精品| 成人丝袜18视频在线观看| 欧美激情在线免费观看| 粉嫩绯色av一区二区在线观看| 久久久久久**毛片大全| 久久99精品久久久久久久久久久久 | 国产精品久久久久aaaa樱花| 国产精品一级片在线观看| 久久久综合视频| 国产毛片精品视频| 亚洲国产成人一区二区三区| 成人aaaa免费全部观看| 中文字幕在线观看不卡视频| 91丨九色丨黑人外教| 一区二区三区中文字幕精品精品 | 亚洲午夜激情av| 欧美天堂亚洲电影院在线播放| 亚洲高清不卡在线| 欧美一区二区三区思思人| 喷水一区二区三区| 久久亚洲二区三区| 成人av电影免费观看| 亚洲三级在线免费| 7777精品伊人久久久大香线蕉经典版下载 | 91蜜桃婷婷狠狠久久综合9色| 久久久99精品久久| 风间由美一区二区三区在线观看 | 综合久久国产九一剧情麻豆| 99re成人精品视频| 亚洲国产日韩av|