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

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

Chinaunix

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

中斷處理程序?yàn)槭裁床荒茏枞菝???以前真沒認(rèn)真思考過! [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-11-24 20:36 |只看該作者 |倒序?yàn)g覽
一直認(rèn)為中斷處理函數(shù)不能休眠的是天經(jīng)地義的,可從沒認(rèn)真思考過問什么不能休眠,阻塞。最近看了一下ulk中對(duì)這個(gè)的解釋,感覺還是有點(diǎn)不太明白,
“The price to pay for allowing nested kernel control paths is that an interrupt handler must never block, that is, no process switch can take place until an interrupt handler is running. In fact, all the data needed to resume a nested kernel control path is stored in the Kernel Mode stack, which is tightly bound to the current process.”
上面把中斷處理程序不能休眠歸結(jié)為中斷處理程序可以嵌套,而恢復(fù)嵌套的中斷處理程序的相關(guān)數(shù)據(jù)放在內(nèi)核態(tài)堆棧中,這個(gè)棧和當(dāng)前進(jìn)程相關(guān)聯(lián),這里有一點(diǎn)不明白,既然有棧存儲(chǔ)數(shù)據(jù),而且進(jìn)程切換出去后,這個(gè)棧也不會(huì)被銷毀,等進(jìn)程在切回來時(shí),不同樣可以是嵌套的中斷處理程序返回嗎?(這里先不考了中斷處理時(shí)間的太長,影響對(duì)中斷處理的服務(wù)問題,只說明中斷是否可休眠)。同時(shí)我google一下,看到有人對(duì)中斷不能休眠的以一種解釋:

中斷處理程序用到的所有數(shù)據(jù)有保存在當(dāng)前進(jìn)程的內(nèi)核堆棧中(一般情況下),如果此時(shí)發(fā)生了
進(jìn)程切換,中斷處理程序?qū)⒈蛔枞?當(dāng)在一次發(fā)生進(jìn)程切換時(shí),不一定馬上就換回來。比如當(dāng)
發(fā)生一個(gè)鍵盤中斷時(shí),鍵盤處理程序正在進(jìn)行,此時(shí)又恰好發(fā)生了進(jìn)程搶占,切換到了另一個(gè)進(jìn)程
中,假如那個(gè)進(jìn)程不會(huì)引起內(nèi)核的穩(wěn)定,那么中斷處理程序?qū)⒁恢弊枞瑑?nèi)禾根本就沒法響應(yīng)那個(gè)中斷,
直到在一次發(fā)生進(jìn)程切換。假設(shè)最后又切換回執(zhí)行中斷處理程序的那個(gè)進(jìn)程中時(shí),如果它的內(nèi)核堆棧
受到了無意的破壞怎么辦呢?那中斷處理程序可能無法在繼續(xù)運(yùn)行下去了,此次中斷服務(wù)失敗。而且
現(xiàn)在的處理程序都允許中斷嵌套,一個(gè)中斷被阻塞,其它的都將被阻塞。所以面對(duì)錯(cuò)綜復(fù)雜的內(nèi)核邏輯,
最好的辦法就是在中斷處理程序中禁止發(fā)生進(jìn)程切換,這樣既提高了中斷處理程序的響應(yīng)速度,也增加了
內(nèi)核的穩(wěn)定性與安全性。


我感覺他的理由有兩個(gè):一個(gè)事效率,可能影響處理速度,另一就是:如果它的內(nèi)核堆棧
受到了無意的破壞怎么辦?
對(duì)于第一種理由先不討論,
可第二種,理由我感覺很牽強(qiáng),如果棧那么容易破壞,哪我也可以說描述進(jìn)程的數(shù)據(jù)結(jié)構(gòu)什么的也可能被破壞,哪豈不是進(jìn)程調(diào)度都是不安全的了,
這樣按他的說法,就只有第一個(gè)效率的原因了。

回到ulk的解釋,不知道是不是我理解的有問題,The price to pay for allowing nested kernel control paths is that an interrupt handler must never block
感覺他把中端不能休眠的原因都?xì)w結(jié)為可支持中斷處理程序的嵌套上了。那是不是可以這樣理解,如果不支持中斷嵌套,中斷處理程序就可以休眠了,呵呵呵,貌似這樣也不對(duì)吧,
問題:中斷處理程序不能休眠的原因究竟是什么呢?

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2009-11-24 21:37 |只看該作者

暫時(shí)的理解是:
只有在一定條件下,中斷才會(huì)產(chǎn)生,中斷一但休眠,則產(chǎn)生中斷的條件可能會(huì)喪失,那樣中斷處理程序執(zhí)行還有什么意義?
具體不懂,請(qǐng)大蝦指點(diǎn)

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2009-11-25 08:23 |只看該作者
記得這個(gè)問題去年內(nèi)核版激烈討論過,很精彩,去翻翻貼子吧

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2009-11-25 09:51 |只看該作者
原帖由 cskyrain 于 2009-11-24 20:36 發(fā)表
一直認(rèn)為中斷處理函數(shù)不能休眠的是天經(jīng)地義的,可從沒認(rèn)真思考過問什么不能休眠,阻塞。最近看了一下ulk中對(duì)這個(gè)的解釋,感覺還是有點(diǎn)不太明白,
“The price to pay for allowing nested kernel control path ...


我的理解是中斷的發(fā)生是不和任何進(jìn)程關(guān)聯(lián)的,如果它被block,那么它的上下文肯定要被保存下來以恢復(fù)執(zhí)行,但是怎么恢復(fù)它執(zhí)行呢?
只能是把中斷產(chǎn)生那個(gè)時(shí)刻正在運(yùn)行的進(jìn)程的狀態(tài)設(shè)置為block之類的,等重新調(diào)度。
這對(duì)進(jìn)程顯然是不合理的:我運(yùn)行得好好的,你中斷優(yōu)先級(jí)高,那我可以讓你運(yùn)行,你完了如果不發(fā)生調(diào)度,那么還是我運(yùn)行。但是憑什么你中斷被block就要把我block?

與之相對(duì),系統(tǒng)調(diào)用可以被block,因?yàn)樗P(guān)聯(lián)到具體的一個(gè)進(jìn)程。是進(jìn)程本身的請(qǐng)求得不到滿足,那么應(yīng)該被block。

所以,中斷的上下文實(shí)際上是獨(dú)立的上下文,與進(jìn)程上下文無關(guān),不參與調(diào)度。系統(tǒng)調(diào)用仍然是進(jìn)程的上下文。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2009-11-25 09:57 |只看該作者

回復(fù) #4 huangwei0413 的帖子

“我的理解是中斷的發(fā)生是不和任何進(jìn)程關(guān)聯(lián)的”
早些的內(nèi)核中斷的確是和進(jìn)程相關(guān)關(guān)聯(lián)的。

”系統(tǒng)調(diào)用可以被block,因?yàn)樗P(guān)聯(lián)到具體的一個(gè)進(jìn)程。是進(jìn)程本身的請(qǐng)求得不到滿足,那么應(yīng)該被block。“
這個(gè)有道理!我一直也認(rèn)為系統(tǒng)調(diào)用不是原子的,但是可重入。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2009-11-25 10:38 |只看該作者

回復(fù) #4 huangwei0413 的帖子

完全的暈了,如果說系統(tǒng)調(diào)用不是原子的,也就是說系統(tǒng)調(diào)用可以block,該系統(tǒng)調(diào)用代表的進(jìn)程可以被切換出去,
問題來了,系統(tǒng)調(diào)用實(shí)際上是通過int80軟中斷實(shí)現(xiàn)的,中斷是不能block的啊,這樣不是矛盾了嗎?

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2009-11-25 11:52 |只看該作者

回復(fù) #6 cskyrain 的帖子

中斷不能block,應(yīng)該特指異步中斷吧。
看了LZ這兩天的帖子,我覺得還是類似4樓的說法比較靠譜:異步中斷是獨(dú)立的上下文,與當(dāng)前進(jìn)程無關(guān),所以不能因?yàn)橹袛嗌舷挛牡腷lock而將無辜的進(jìn)程給block了?赡芫褪腔谶@一初衷吧~ 那些已經(jīng)將中斷處理程序線程化了的實(shí)時(shí)linux應(yīng)該是允許中斷block的。
而同步的中斷(比如系統(tǒng)調(diào)用、缺頁異常)是代表當(dāng)前進(jìn)程的,本來就是可以block的。

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2009-11-25 12:14 |只看該作者

回復(fù) #7 kouu 的帖子

呵呵,又翻了翻書,思考了一下,由于時(shí)間問題,沒心情再從頭讀ulk,只是跳著查了一下,難免會(huì)漏下很多東西,不過還是說說我的理解:
這里中斷只代表異步中斷,異常代表同步中斷,這樣系統(tǒng)調(diào)用是異常處理,不是中斷處理。
這里異常處理是可以休眠block的,因?yàn)楫惓L幚硭璧臄?shù)據(jù)是存儲(chǔ)在異常棧中,而每個(gè)進(jìn)程都有一個(gè)異常棧,所以異常處理和進(jìn)程是相關(guān)聯(lián)的,這樣異常處理可以block,被調(diào)度出去。
而對(duì)于中斷,分為兩種情況,一種是中斷使用單獨(dú)的中斷棧而不使用進(jìn)程的內(nèi)核棧的情況,這樣,由于所有中斷共享一個(gè)中斷棧,這個(gè)中斷棧不和特定進(jìn)程關(guān)聯(lián),所以,這種中斷時(shí)不能block的,block后他是不能再被調(diào)度。
第二種情況是,中斷不使用單獨(dú)的中斷棧,而是使用當(dāng)前進(jìn)程的內(nèi)核棧,這種情況我認(rèn)為是和異常處理時(shí)一樣的,這種中斷時(shí)可以block的,之所以不準(zhǔn)許中斷block不是技術(shù)上切換不回來,而是邏輯上為了提高處理的效率強(qiáng)制其不能block。

以上是我現(xiàn)階段的理解,感覺,前倆個(gè)的解釋應(yīng)該沒什么問題,但最后對(duì)不是用中斷棧的中斷的解釋可能有錯(cuò)誤的認(rèn)識(shí),不知kouu對(duì)這種解釋有何看法?

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2009-11-25 13:22 |只看該作者

回復(fù) #8 cskyrain 的帖子

嗯,我的想法也差不多。
不過,中斷是可以嵌套的,如果block了,不光是阻塞了當(dāng)前進(jìn)程、還阻塞了被嵌套的那些中斷處理過程;
而異常是不會(huì)嵌套的,否則就是double fault了,這應(yīng)該屬于內(nèi)核BUG

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2009-11-25 13:30 |只看該作者
一個(gè)異步中斷特殊,就是時(shí)鐘中斷。
這個(gè)可以休眠。
您需要登錄后才可以回帖 登錄 | 注冊(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