同步中斷和異步中斷區別


中斷有兩種,一種是CPU本身在執行程序的過程中產生的,一種是由CPU外部產生的。
外部中斷,就是通常所講的“中斷”(interrupt)。對於執行程序來說,這種“中
斷”的發生完全是異步的,因為不知道什么時候會發生。CPU對其的響應也完全是被動的,
可以通過“關中斷”指令關閉對其的響應。
由軟件產生的中斷一般是由專設的指令,如X86中的“INT n”在程序中有意產生的,
是主動的,同步的。只要CPU執行一條INT指令,在開始執行下一條指令之前一定會進入中
斷服務程序。這種主動的中斷稱為“陷阱”(trap)。 

 

 

       Linux 內核需要對連接到計算機上的所有硬件設備進行管理,毫無疑問這是它的份內事。如果要管理這些設備,首先得和它們互相通信才行,一般有兩種方案可實現這種功能:
1.輪詢(polling) 讓內核定期對設備的狀態進行查詢,然后做出相應的處理;
2.中斷(interrupt) 讓硬件在需要的時候向內核發出信號(變內核主動為硬件主動)。
       第一種方案會讓內核做不少的無用功,因為輪詢總會周期性的重復執行,大量地耗用 CPU 時間,因此效率及其低下,所以一般都是采用第二種方案。

什么是中斷?

        從物理學的角度看,中斷是一種電信號,由硬件設備產生,並直接送入中斷控制器(如 8259A)的輸入引腳上,然后再由中斷控制器向處理器發送相應的信號。處理器一經檢測到該信號,便中斷自己當前正在處理的工作,轉而去處理中斷。此后,處理器會通知 OS 已經產生中斷。這樣,OS 就可以對這個中斷進行適當的處理。
        不同的設備對應的中斷不同,而每個中斷都通過一個唯一的數字標識,這些值通常被稱為中斷請求線(IRQ)。

中斷可分為同步(synchronous)中斷和異步(asynchronous)中斷:
1. 同步中斷是當指令執行時由 CPU 控制單元產生,之所以稱為同步,是因為只有在一條指令執行完畢后 CPU 才會發出中斷,而不是發生在代碼指令執行期間,比如系統調用。
2. 異步中斷是指由其他硬件設備依照 CPU 時鍾信號隨機產生,即意味着中斷能夠在指令之間發生,例如鍵盤中斷。

什么是異常?

同步中斷又稱為異常(exception),異步中斷則被稱為中斷(interrupt)。我們通常講的中斷指的都是異步中斷。
1.中斷可分為可屏蔽中斷(Maskable interrupt)和非屏蔽中斷(Nomaskable interrupt)。
2.異常可分為故障(fault)、陷阱(trap)、終止(abort)三類。

這些類別之間的異同點請參看 表 1。

表 1:中斷類別及其行為

類別      原因                          異步/同步         返回行為
中斷      來自I/O設備的信號 異步                 總是返回到下一條指令
陷阱      有意的異常               同步                 總是返回到下一條指令
故障      潛在可恢復的錯誤   同步                 返回到當前指令
終止      不可恢復的錯誤       同步                 不會返回

什么是中斷處理程序?

在響應一個特定中斷的時候,內核會執行一個函數,該函數叫做中斷處理程序或中斷服務例程。產生中斷的每個設備都有一個相應的中斷處理程序,如果一個設備可以產生多種不同的中斷,那么該設備就可以對應多個中斷處理程序。一個設備的中斷處理程序是它設備驅動程序的一部分。

什么是中斷上半部和下半部?

中斷處理一般分為兩個部分,中斷處理程序是上半部:接收到一個中斷就立即執行,但只做有嚴格時限的工作,這些工作都是在所有中斷被禁止的情況下完成的。能夠被允許稍后完成的工作被推遲到下半部去。通常情況下,下半部會在中斷處理程序返回時立即執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM