什么是中斷
什么是中斷
Linux 內核需要對連接到計算機上的所有硬件設備進行管理,毫無疑問這是它的份內事。如果要管理這些設備,首先得和它們互相通信才行,一般有兩種方案可實現這種功能:
輪詢(polling) 讓內核定期對設備的狀態進行查詢,然后做出相應的處理;
中斷(interrupt) 讓硬件在需要的時候向內核發出信號(變內核主動為硬件主動)。
第一種方案會讓內核做不少的無用功,因為輪詢總會周期性的重復執行,大量地耗用 CPU 時間,因此效率及其低下,所以一般都是采用第二種方案 。
從物理學的角度看,中斷是一種電信號,由硬件設備產生,并直接送入中斷控制器(如 8259A)的輸入引腳上,然后再由中斷控制器向處理器發送相應的信號。處理器一經檢測到該信號,便中斷自己當前正在處理的工作,轉而去處理中斷。此后,處理器會通知 OS 已經產生中斷。這樣,OS 就可以對這個中斷進行適當的處理。不同的設備對應的中斷不同,而每個中斷都通過一個唯一的數字標識,這些值通常被稱為中斷請求線。
中斷分類
中斷可分為同步(synchronous)中斷和異步(asynchronous)中斷:
1. 同步中斷是當指令執行時由 CPU 控制單元產生,之所以稱為同步,是因為只有在一條指令執行完畢后 CPU 才會發出中斷,而不是發生在代碼指令執行期間,比如系統調用。
2. 異步中斷是指由其他硬件設備依照 CPU 時鐘信號隨機產生,即意味著中斷能夠在指令之間發生,例如鍵盤中斷。
根據 Intel 官方資料,同步中斷稱為異常(exception),異步中斷被稱為中斷(interrupt)。
中斷可分為可屏蔽中斷(Maskable interrupt)和非屏蔽中斷(Nomaskable interrupt)。異常可分為故障(fault)、陷阱(trap)、終止(abort)三類。
從廣義上講,中斷可分為四類:中斷、故障、陷阱、終止。這些類別之間的異同點請參看 表 1。
類別 | 原因 | 異步/同步 | 返回行為 |
---|---|---|---|
中斷 | 來自I/O設備的信號 | 異步 | 總是返回到下一條指令 |
陷阱 | 有意的異常 | 同步 | 總是返回到下一條指令 |
故障 | 潛在可恢復的錯誤 | 同步 | 返回到當前指令 |
終止 | 不可恢復的錯誤 | 同步 | 不會返回 |
X86 體系結構的每個中斷都被賦予一個唯一的編號或者向量(8 位無符號整數)。非屏蔽中斷和異常向量是固定的,而可屏蔽中斷向量可以通過對中斷控制器的編程來改變。
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
相關閱讀:
- [電子說] 學習STM32F103的定時器功能 2023-10-24
- [電子說] STM32基礎知識:中斷系統 2023-10-24
- [電子說] HAL庫中對串口中斷執行流程的分解 2023-10-24
- [電子說] nrf_serial庫的使用技巧 2023-10-24
- [電子說] STM32 RTC Alarm的使用 2023-10-24
- [電子說] GD32的中斷-外部中斷的實現 2023-10-24
- [電子說] STM32學習筆記一外部中斷 2023-10-24
- [電子說] 中斷可分為哪幾個階段?在執行中斷響應后,要完成哪些主要功能? 2023-10-24
( 發表人:admin )