linux內(nèi)核中斷

linux內(nèi)核中斷

ID:39465470

大小:154.50 KB

頁數(shù):45頁

時間:2019-07-04

linux內(nèi)核中斷_第1頁
linux內(nèi)核中斷_第2頁
linux內(nèi)核中斷_第3頁
linux內(nèi)核中斷_第4頁
linux內(nèi)核中斷_第5頁
資源描述:

《linux內(nèi)核中斷》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、1.1中斷的由來及實質(zhì)Linux內(nèi)核要管理計算機(jī)上的硬件設(shè)備,首先要和他們通信。而處理器的速度跟外圍硬件設(shè)備的速度往往不在一個數(shù)量級上,因此,如果內(nèi)核采取讓處理器向硬件發(fā)出一個請求,然后專門等待回應(yīng)的辦法,顯然差強(qiáng)人意。既然硬件的響應(yīng)這么慢,那么內(nèi)核就應(yīng)該在此期間處理其他事務(wù),等到硬件真正完成了請求的操作之后,再回過頭來對它進(jìn)行處理。想要實現(xiàn)這種功能,輪詢(polling)可能會是一種解決辦法??梢宰寖?nèi)核定期對設(shè)備的狀態(tài)進(jìn)行查詢,然后做出相應(yīng)的處理。不過這種方法很可能會讓內(nèi)核做不少無用功,因為無論硬件設(shè)備是正

2、在忙碌著完成任務(wù)還是已經(jīng)大功告成,輪詢總會周期性地重復(fù)執(zhí)行。更好的辦法是由我們來提供一種機(jī)制,讓硬件在需要的時候再向內(nèi)核發(fā)出信號(變內(nèi)核主動為硬件主動)。這就是中斷機(jī)制。由中斷或異常處理程序執(zhí)行的代碼不是一個進(jìn)程,它是一個內(nèi)核控制路徑,代表中斷發(fā)生時正在運行的進(jìn)程執(zhí)行,內(nèi)核控制路徑比一個進(jìn)程要“輕“。1.2異常和中斷中斷(interrupt)通常被定為一個事件,該事件改變處理器執(zhí)行的指令順序。中斷通常分為同步中斷和異步中斷:l同步中斷是當(dāng)指令執(zhí)行時由CPU控制單元產(chǎn)生的,稱為同步,是因為只有在一條指令執(zhí)行完成

3、后CPU才會發(fā)生中斷。l異步中斷是由其他硬件設(shè)備依照CPU始終信號隨機(jī)產(chǎn)生的。同步中斷又稱為異常,異常是由程序的錯誤產(chǎn)生的(例如除0),或者是由內(nèi)核必須處理的異常條件(例如缺頁)產(chǎn)生的。前一種情況下,必須通知應(yīng)用程序出現(xiàn)了異常,內(nèi)核通過發(fā)送一個每個Unix程序員熟悉的信號來處理異常,后一種必須借助于內(nèi)核才能修復(fù),內(nèi)核執(zhí)行恢復(fù)異常需要的所有步驟。異常和異步中斷的相同點:如果CPU當(dāng)前不處于核心態(tài),則發(fā)起從用戶態(tài)到內(nèi)核態(tài)的轉(zhuǎn)變,接下來。內(nèi)核中執(zhí)行一個專門的中斷服務(wù)例程(ISRinterruptservicerou

4、tine)。異常和異步中斷的不同點:產(chǎn)生源的區(qū)別,產(chǎn)生原因的區(qū)別,及發(fā)生時間的區(qū)別。還有一方面,許多中斷可以禁用,但有些不行。此后本文所說中斷默認(rèn)指的都是異步中斷。(注意,這里是Intel劃分的,并不是Linux,Linux有自己的劃分方法)更進(jìn)一步,Intel文檔中又把中斷和異常繼續(xù)進(jìn)行了細(xì)分:l中斷:可屏蔽中斷:I/O設(shè)備發(fā)出的所有的中斷請求(IRQ)都產(chǎn)生可屏蔽中斷。可屏蔽中斷產(chǎn)生兩種狀態(tài):屏蔽的(masked)或非屏蔽的(unmasked);當(dāng)中斷被屏蔽,則CPU控制單元就忽略它。非可屏蔽中斷:總是由

5、CPU辨認(rèn)。只有幾個危急事件引起非屏蔽中斷。l異常:1.處理器探測到得異常:1)故障(fault)通常可以糾正;一旦糾正,程序可以在不失連貫性的情況下重新開始。保存在eip中的值是引起故障的指令地址。因此,當(dāng)異常處理程序停止時,那條指令會重新執(zhí)行2)陷阱(trap)在陷阱指令執(zhí)行后立即報告;內(nèi)核把控制權(quán)返回給程序后就可以繼續(xù)它的執(zhí)行而不失連貫性。保存在eip中的值是一個隨后要執(zhí)行的指令地址。只有當(dāng)沒有必要重新執(zhí)行已中止的指令時,才觸發(fā)陷阱。陷阱的主要用途是為了調(diào)試程序。3)異常終止(abort)發(fā)生一個嚴(yán)重錯

6、誤;CPU控制單元出了問題,不能在eip寄存器中保存引起異常指令所在的確切位置。這個異常中止處理程序除了強(qiáng)制中止受影響的進(jìn)程中止外,沒有別的選擇。2.編程異常(programmedexception)在編程者發(fā)出請求時發(fā)生。是由int或int3指令觸發(fā)的??刂茊卧丫幊坍惓W鳛橄葳鍋硖幚怼>幊坍惓R步熊浿袛?。用途:執(zhí)行系統(tǒng)調(diào)用及給調(diào)試程序通報一個特定的事件。綜上所述,從廣義上講,中斷可分為四類:中斷、故障、陷阱、終止。這些類別之間的同點請參看表1。表1中斷的類別(此表摘自《深入理解計算機(jī)系統(tǒng)》)類別原因異步/

7、同步返回行為中斷來自I/O設(shè)備的信號異步總是返回到下一條指令陷阱有意的異常同步總是返回到下一條指令故障潛在可恢復(fù)的錯誤同步返回到當(dāng)前指令終止不可恢復(fù)的錯誤同步不會返回在可能的情況下,內(nèi)核試圖避免禁用中斷,因為禁用會損害系統(tǒng)性能(比如禁用鍵盤,就交互不友好了),但有些場合禁用中斷是必要的,在處理第一個中斷時,如果發(fā)生第二個中斷,內(nèi)核會發(fā)生嚴(yán)重的問題。如果內(nèi)核在禁用中斷的情況下,花費過多時間處理一個ISR(中斷服務(wù)例程),會丟失一些系統(tǒng)正確運作不可必要的中斷。并且因為中斷隨時可能發(fā)生,即中斷處理程序隨時可能執(zhí)行,

8、必須保證中斷處理程序快速執(zhí)行,這樣才能保證盡可能快的恢復(fù)中斷代碼的執(zhí)行,中斷處理很重要,但對系統(tǒng)其它部分而言,中斷處理程序盡可能短時間內(nèi)處理完同樣重要。為了解決這些問題,一般把中斷處理且為兩個部分。中斷處理程序是上半部,接收到中斷立即開始執(zhí)行,但只做有嚴(yán)格時限的工作,例如對中斷的應(yīng)答,這些工作是在所有中斷被禁止的情況下完成的,能夠被允許稍后完成的會推遲到下半部去。此后,在合適的時機(jī),下半部會被開中斷

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。