圖解中斷 | 中斷從產生到消失的一生
本文轉載自微信公眾號「虛機」,作者cloud3 。轉載本文請聯系虛機公眾號。
中斷系統是現代PC的基礎架構之一。中斷處理在操作系統也具有舉足輕重的作用 。
中斷處理,伴隨著軟硬件的協同,伴隨著外設與CPU的傳遞,伴隨著內核棧和用戶棧的切換,下面我們就看一下中斷短暫而充實的一生。
以上是從設備觸發到中斷處理函數處理完畢的整個流程,為了看到中斷處理的全貌,我們隱藏了一些實現細節,具體的細節以后再單獨描述。
下面對每個調節進行簡單的描述。
從設備到APIC
外部中斷的發起者是設備,設備通過電平觸發IRQ信號線產生一個中斷。
檢測到中斷信號后,IOAPIC使用寫內存的方式把中斷信息發送到系統總線上。
LAPIC接收到中斷信息后把中斷能否發送給CPU處理。
CPU內部
CPU感知到中斷線后,從LAPIC上接收中斷號。
切換到內核棧。保存當前進程棧,例如在X86上會保存SS, ESP, EFLAGS, CS, EIP以及錯誤碼。
然后通過IDTR寄存器和中斷號找到中斷服務程序的入口。
中斷處理程序
一般把中斷處理分為兩個半部:中斷處理程序是上半部(top half)和下半部(bottom half)。
上半部立會即執行,只做有嚴格時限的工作,例如對接收的中斷進行應答或復位硬件,這些工作都是在所有中斷被禁止的情況下完成的。
能夠被允許稍后完成的工作會推遲到下半部(bottom half)去做。
從中斷處理返回到CPU
恢復之前保存的flag和寄存器狀態,恢復之前運行的進程。
再到中斷處理程序
運行中斷處理程序的下半部,把中斷任務執行完成。
上面為了看到中斷處理的全貌,我們隱藏了一些實現細節,具體的細節后面會在單獨描述。