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