中斷(轉載)

定義

在計算機科學中,中斷指計算機CPU獲知某些事,暫停正在執行的程序,轉而去執行處理該事件的程序,當這段程序執行完畢後再繼續執行以前的程序。整個過程稱爲中斷處理,簡稱中斷,而引發這一過程的事件稱爲中斷事件。中斷是計算機實現併發執行的關鍵,也是操做系統工做的根本。數據結構

分類

中斷按事件來源分類,能夠分爲外部中斷和內部中斷。中斷事件來自於CPU外部的被稱爲外部中斷,來自於CPU內部的則爲內部中斷。併發

       進一步細分,外部中斷還可分爲可屏蔽中斷(maskable interrupt)和不可屏蔽中斷(non-maskable interrupt)兩種,而內部中斷按事件是否正常來劃分可分爲軟中斷和異常兩種。spa

       外部中斷的中斷事件來源於CPU外部,必然是某個硬件產生的,因此外部中斷又被稱爲硬件中斷(hardware interrupt)。計算機的外部設備,如網卡、聲卡、顯卡等都能產生中斷。外部設備的中斷信號是經過兩根信號線通知CPU的,一根是INTR,另外一根是NMI。CPU從INTR收到的中斷信號都是不影響系統運行的,CPU能夠選擇屏蔽(經過設置中斷屏蔽寄存器中的IF位),而從NMI中收到的中斷信號則是影響系統運行的嚴重錯誤,不可屏蔽,由於屏蔽的意義不大,系統已經沒法運行。操作系統

       內部中斷來自於處理器內部,其中軟中斷是由軟件主動發起的中斷,常被用於系統調用(system call);而異常則是指令執行期間CPU內部產生的錯誤引發的。異常也和不可屏蔽中斷同樣不受eflags寄存器的IF位影響,區別在於不可屏蔽中斷髮生的事件會致使處理器沒法運行(如斷電、電源故障等),而異常則是影響系統正常運行的中斷(如除0、越界訪問等)。.net

中斷描述符表

       中斷描述符表(Interrupt Descriptor Table,IDT)是保護模式下用於存儲中斷處理程序入口的數據結構,實模式中採用中斷向量表(Interrupt Vector Table,IVT)。當CPU接收一箇中斷時,須要用中斷向量在此表中檢索對應的中斷描述符,在該描述符中找到中斷處理程序的起始地址,而後才能執行中斷處理程序。代理

       中斷描述符表中不單單有中斷描述符,還能夠有任務門描述符和陷阱門描述符,它們實質上都是記錄着某段程序的起始地址,所以能夠統稱爲門。blog

中斷處理過程及保護

       中斷過程因中斷來源而異,外部中斷由外設發出,經中斷代理芯片接收並處理後將該中斷的中斷向量號發送到CPU,最後由CPU執行該中斷向量號對應的中斷處理程序。內部中斷則不通過中斷代理芯片。索引

       中斷在處理器內部的處理程序以下:進程

(1)處理器根據中斷向量號定位中斷門描述符。

       中斷向量號是中斷描述符的索引,當處理器收到一個外部中斷向量號後,它用此向量號在中斷描述符表中查詢對應的中斷描述符,而後再去執行該中斷描述符指向的中斷處理程序。中斷描述符佔8字節,所以處理器用中斷向量號乘8後再與IDTR中的中斷描述符表地址相加獲得中斷描述符的位置。事件

(2)特權級檢查

       中斷向量號只是一個整數,其中沒有RPL,因此在對由中斷引發的特權級轉移作特權級檢查時並不涉及RPL。

       若是是由軟中斷int n、int三、和into這些由用戶進程引起的中斷,由用戶代碼控制,處理器要檢查當前特權級CPL和門描述符DPL,數值上CPL≤門描述符DPL才能經過檢查。經過上一步檢查後還須要檢查CPL和門描述符中所記錄的選擇子對應的目標代碼段DPL,數值上CPL>目標代碼段DPL才能經過檢查,由於除返回指令外,特權轉移只能由低到高。

       若中斷是由外部設備或異常引發的,只檢查CPL和目標代碼段的DPL便可。

(3)執行中斷處理程序

       特權級檢查經過後,將門描述符中目標代碼段選擇子加載到段寄存器CS中,把門描述符中的中斷處理程序的偏移地址加載到EIP,而後開始執行中斷處理程序。

       中斷髮生後,eflags中的NT位和TF位都會被置0。若是中斷對應的門描述符是中斷門,標誌寄存器eflags中的IF位也會被置0以免中斷嵌套(中斷處理過程當中又處理新的中斷),即默認狀況下處理器對中斷門描述符的中斷例程處理是不可中斷的。若中斷髮生時對應的門描述符是任務門或陷阱門的話,CPU不會將狀態寄存器中的IF位清0,即容許中斷嵌套。

原文連接

https://blog.csdn.net/qq_37653144/article/details/82929246

相關文章
相關標籤/搜索