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

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

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 1222 | 回復(fù): 0
打印 上一主題 下一主題

7.Bottom halves and Deferring Work [復(fù)制鏈接]

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

    中斷句柄只是中斷處理的第一部分,因?yàn)橄旅嬉恍┫拗,必須要有另外一部分?lái)完整的處理中斷:
    1.中斷句柄是異步運(yùn)行的,只要發(fā)生中斷就會(huì)進(jìn)入中斷句柄,而中斷的發(fā)生是異步的,也就是說(shuō)隨時(shí)可以發(fā)生。因此中斷句柄可能會(huì)中斷一些正在執(zhí)行的重要代碼,包括另外一個(gè)中斷句柄。因此,中斷潯?枰?】贍蕓斕拇?斫崾??lt;/FONT>
    2.中斷句柄運(yùn)行時(shí)需要關(guān)中斷,最好情況是禁止了當(dāng)前的中斷級(jí)(未設(shè)置SA_INTERRUPT),最壞的情況是所有的中斷被中斷(設(shè)置SA_INTERRUPT)。當(dāng)然,關(guān)中斷只是運(yùn)行中斷句柄時(shí)必要的步驟,適當(dāng)?shù)臅r(shí)候還是需要打開(kāi)的。同樣這也決定了中斷句柄要盡快結(jié)束。
    3.中斷句柄一般都是時(shí)間緊迫的任務(wù),因?yàn)樗麄兲幚淼氖怯布?br />     4.中斷句柄不運(yùn)行在進(jìn)程上下文,因此不能被堵塞。
    因此,中斷處理分成了兩部分,第一部分就是中斷句柄(top halves),一旦發(fā)生中斷就必須執(zhí)行;第二部分叫做bottom halves,用來(lái)處理剩下的那些不那么緊急的工作,目的很簡(jiǎn)單,就是讓中斷句柄盡可能快的返回。
    當(dāng)然,中斷句柄必須做些事情,比如確認(rèn)收到中斷,以及從硬件復(fù)制數(shù)據(jù),這些事情是時(shí)間敏感的,因此必須在中斷句柄中進(jìn)行。
    剩下的事情就輪到bottom halves了,比如處理復(fù)制到內(nèi)存的數(shù)據(jù),什么是剩下的事情并沒(méi)有硬性的規(guī)定,完全取決于驅(qū)動(dòng)程序的作者。一般來(lái)說(shuō)雖然不能認(rèn)為哪一種劃分是錯(cuò)的,但很容易能夠找到次優(yōu)解,基本原則就是盡可能減少中斷句柄的持續(xù)時(shí)間。
    這是劃分工作的一些小提示:
    1.如果工作是時(shí)間敏感的,放到中斷句柄中。
    2.如果工作是與硬件本身相關(guān)的,放到中斷句柄中。
    3.如果工作需要確保不被其他中斷(尤其是同一個(gè)中斷)中斷,放到中斷句柄中。(好吧,第一個(gè)中斷是名詞,表示除了正在處理的中斷外發(fā)生的新的中斷,第二個(gè)中斷指的是正在處理一個(gè)中斷是,又發(fā)生了一個(gè)同樣的中斷,第三個(gè)中斷是動(dòng)詞。)
    4.其他的,放到bottom halves。
    寫驅(qū)動(dòng)程序時(shí)應(yīng)該問(wèn)問(wèn)自己:哪些是必須放到中斷句柄的,哪些是可以放到bottom halves里的。
    到這里應(yīng)該已經(jīng)清楚為什么要把中斷處理分成兩部分,不過(guò)bottom halves 要在什么時(shí)候調(diào)用?當(dāng)然是在從現(xiàn)在開(kāi)始將來(lái)系統(tǒng)不那么忙的某個(gè)時(shí)候。通常bottom halves總是在中斷句柄返回之后馬上運(yùn)行,這個(gè)時(shí)候所有的中斷都是打開(kāi)的,因此bottom halves也還是有可能會(huì)被新中斷打斷的,不過(guò)對(duì)于處理器來(lái)說(shuō),100ms也是很長(zhǎng)的時(shí)間了。
    Linux的發(fā)展史上出現(xiàn)了許多bottom halves處理機(jī)制,即便是現(xiàn)在的2.6內(nèi)核,也有3種機(jī)制在同時(shí)使用,既然能同時(shí)存在,自然是各有用途,或者說(shuō)各有各適合的場(chǎng)合。
    在早期,linux只有一個(gè)bottom halves,下面用BH來(lái)代替,這是個(gè)很簡(jiǎn)單的接口,當(dāng)然也很適合那個(gè)時(shí)代。BH提供了一個(gè)靜態(tài)創(chuàng)建的列表,包括32個(gè)BH,這樣就可以使用一個(gè)32位的整型位圖來(lái)標(biāo)志。每一個(gè)BH都是全局同步的,也就是說(shuō)無(wú)論什么情況下都只能有一個(gè)BH執(zhí)行,即使在不同的處理器上也不能有第二個(gè)BH存在。這很容易通過(guò)剛才說(shuō)的位圖來(lái)控制。這個(gè)接口是容易使用但不靈活的,簡(jiǎn)單但是一個(gè)瓶頸。
    再后來(lái),出現(xiàn)了task queues。內(nèi)核定義了一個(gè)隊(duì)列族,每一個(gè)隊(duì)列包含了一個(gè)函數(shù)列表。驅(qū)動(dòng)程序可以把需要調(diào)用的函數(shù)注冊(cè)到某一個(gè)合適的隊(duì)列中,排隊(duì)的函數(shù)在某一個(gè)時(shí)間運(yùn)行,這取決于位于哪一個(gè)隊(duì)列中。Task queues還是不夠靈活,仍然不能取代BH,對(duì)于處理像網(wǎng)絡(luò)那樣的performance-critical的子系統(tǒng)還是過(guò)于笨重。
   2.3開(kāi)始引入了softirq和tasklet完全取代了BH。Softirq也是32個(gè)靜態(tài)定義的bottom halves,不過(guò)與BH不同的是,softirq是可以同時(shí)在任一個(gè)處理器上運(yùn)行的,即使是同樣的兩個(gè)同類型的也可以并發(fā)運(yùn)行。Tasklet跟task沒(méi)有關(guān)系,只是建立在softirq之上的,可以認(rèn)為tasklet只是兩個(gè)特殊的softirq。兩個(gè)不同的tasklet可以在不同的處理器上并發(fā)運(yùn)行,但是同樣的tasklet不能同時(shí)運(yùn)行。Tasklet是性能和易用性的一個(gè)很好的折中,對(duì)于大多數(shù)bottom-half處理來(lái)說(shuō),tasklet已經(jīng)足夠,softirq適合性能要求比較高的場(chǎng)合,如網(wǎng)絡(luò),scsi設(shè)備。另外,softirq是要在編譯時(shí)靜態(tài)注冊(cè)的,而tasklet是可以動(dòng)態(tài)注冊(cè)的。
   2.5之后,work queue取代了task queue,這是運(yùn)行在進(jìn)程上下文的簡(jiǎn)單易用的一個(gè)方案。
    需要說(shuō)明的是softirq只是一種bottom half機(jī)制。"Bottom half"是一個(gè)操作系統(tǒng)的通用名詞,在linux中斷處理體系中處理延期工作的機(jī)制都是bottom half。當(dāng)然早期linux只有一種bottom half機(jī)制,這種機(jī)制也就被稱為bottom half,或者BH,不過(guò)現(xiàn)在這種機(jī)制已經(jīng)被丟棄。

to be continued...


本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u/10080/showart_1715811.html
您需要登錄后才可以回帖 登錄 | 注冊(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ū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP