Linux中斷處理流程大致如下:
- 硬件設(shè)備發(fā)生中斷,向CPU發(fā)送中斷信號(hào)。
- CPU接收到中斷信號(hào)后,暫停當(dāng)前執(zhí)行的程序,保存當(dāng)前執(zhí)行狀態(tài)的寄存器內(nèi)容。
- CPU根據(jù)中斷向量(中斷號(hào))找到相應(yīng)的中斷服務(wù)程序的入口地址。
- CPU跳轉(zhuǎn)到中斷服務(wù)程序入口地址開(kāi)始執(zhí)行中斷服務(wù)程序。
- 中斷服務(wù)程序根據(jù)中斷向量確定具體的中斷類(lèi)型,并執(zhí)行相應(yīng)的處理邏輯。
- 中斷服務(wù)程序執(zhí)行完畢后,恢復(fù)之前保存的執(zhí)行狀態(tài)的寄存器內(nèi)容。
- CPU返回到之前被中斷的程序繼續(xù)執(zhí)行。
在Linux內(nèi)核中,中斷處理是由中斷處理程序(interrupt handler)和中斷服務(wù)程序(interrupt service routine)共同完成的。中斷處理程序是由內(nèi)核注冊(cè)的,用于處理硬件中斷,而中斷服務(wù)程序則是具體處理中斷的實(shí)際代碼邏輯。