這是我們瘋狂核心系列的中斷處理專題開山之作,中斷,廣義的來說通常被定義為乙個事件,該事件觸發改變處理器執行指令的順序。狹義地來說,針對80x86體系,中斷被分為中斷和異常,又叫同步中斷和非同步中斷。注意廣義的中斷和狹義的中斷千萬不要混淆,以後我的博文中所有所謂的「中斷」二字,就是指狹義的中斷,即linux處理80x86非同步中斷的細節。我們首先必須好好理清一下80x86體系中,中斷和異常的區別:
中斷:由其他硬體依照cpu時鐘訊號隨機產生。
異常:由cpu本身執行指令時,cpu控制單元在一條指令終止之後產生。
更進一步,intel文件中又把中斷和異常繼續進行了細分:
中斷:1. 可遮蔽中斷:當中斷被遮蔽,則cpu控制單元就忽略它。這裡提一下,所有的irq中斷都是可遮蔽中斷。
2. 非可遮蔽中斷:總由cpu辨認並處理。所以,其為非常緊急的硬體故障。
異常:1. 處理器探測到得異常
(1)故障(fault)
通常可以糾正,所謂的「糾正」,就是在執行一條指令時發現故障,轉而執行對應的異常處理程式;一旦糾正完畢,即異常處理程式完成,程式就可以在不失連貫性的情況下,重新執行剛才那條發現故障的指令。儲存在eip暫存器中的值是引起故障的指令位址,因此,當異常處理程式終止時,那條指令會被重新執行。
(2)陷阱(trap)
陷阱的主要用途是為了除錯程式。在這種情況下,eip中存放的不是引起陷阱的指令,而是下乙個即將執行的指令。陷阱的中斷訊號的作用是通知除錯程式一條特殊指令已被執行。一旦使用者檢查到除錯程式所提供的資料,他就可能要求被除錯程式從下一條指令重新開始執行。
(3)異常終止(abort)
發生乙個嚴重錯誤;cpu控制單元出了問題,不能在eip暫存器中儲存引起異常指令所在的確切位置。所以,除了強制終止受影響的程序外,別無選擇。
2. 軟中斷
軟中斷由程式設計師通過int或int3指令觸發的。當into(檢查溢位)和bound(檢查位址出界)指令檢查的條件不為真時,也會引起軟中斷。cpu把軟中斷作為陷阱來處理,也叫程式設計異常。這樣的異常有兩種常用的用途:執行系統呼叫以及給除錯程式通報乙個特定的事件。
每個中斷和異常是由0~255之間的乙個數來標識的,我們把這個八位無符號整數叫做向量。非遮蔽中斷的向量和異常的向量是固定的,而可遮蔽中斷的向量可以通過對中斷控制器的程式設計來改變。
向量範圍
用途
0-19 (0x0 -0x13)
非遮蔽中斷和異常
20-31 (0x14 -0x1f)
intel
保留
32-127 (0x20 -0x7f)
外部中斷(irqs)
128 (0x80)
用於系統呼叫的可程式設計異常(重點)
129-238 (0x81 -0xee)
外部中斷(irqs)
239 (0xef)
本地apic 時鐘中斷(重點)
240 (0xf0 )
本地apic 高溫中斷(在pentium 4 模型中引入)
241-250 (0xf1 -0xfa)
由linux 留作將來使用
251-253 (0xfb -0xfd)
處理器間中斷
254 (0xfe )
本地apic 錯誤中斷(當本地apic 檢測到乙個錯誤條件時產生)
255 (0xff )
本地apic 偽中斷(cpu 遮蔽某個中斷時產生)
x86中斷(一) 中斷分類
一 中斷分類 x86系統支援256個中斷源,每個中斷源使用0 255數字標識,該標識稱作中斷向量號 即cpu中斷源的中斷號,要與外部中斷的中斷號irq n相區別 cpu通過獲取中斷向量號識別中斷源。256個中斷源可以分為 其中 1 內部中斷 由cpu內部事件及執行軟中斷指令產生,由除法中斷 溢位中斷...
中斷 中斷的種類
一 基本概念 計算機的中斷系統能夠加強cpu對多工事件的處理能力,中斷機制是現代計算機系統中的基礎設施之一,它在系統中起著通訊網路的作用,已協調系統對各種外部事件的響應和處理 中斷時實現的事件稱為中斷源 中斷源向cpu提出處理的請求稱為中斷請求 發生中斷時被打斷的程式的暫停點稱為斷點 cpu暫停現行...
嵌入式 中斷名詞詳解 分類與過程
當cpu正在正常執行時,外部發生的某一隨機事件請求cpu去處理,於是cpu暫時中止現行程式的執行而處理所發生的事件,處理完畢後,再回到原來被中止的地方繼續執行,這種能力和行為稱為中斷。系統為實現中斷而採取的硬體和軟體措施稱為中斷系統。乙個完整的中斷過程應該包括 中斷請求 中斷判優 中斷響應 中斷處理...