中斷屏蔽
中斷屏蔽
中斷由非同步的外部事件引起。外部事件及中斷響應與正在執行的指令不存在關係。80386有兩根引腳INTR和NMI接受外部中斷請求信號,INTR接受可屏蔽中斷請求。在80386中,標誌寄存器EFLAGS中的IF標誌決定是否屏蔽可屏蔽中斷請求。
處理器必須接受和處理來自NMI的中斷請求。在80386系統中,處理器在響應NMI的中斷向量號固定為2。為了避免不可屏蔽中斷的嵌套,當接受到一個NMI中斷請求時,處理器自動屏蔽所有的NMI的中斷請求,直到執行中斷指令IRET后才重新開放NMI中斷請求,所以,NMI處理程序應以IRET指令結束。
什麼叫屏蔽中斷?允許中斷?怎樣實現?
按照是否可以被屏蔽,可將中斷分為兩大類:不可屏蔽中斷(又叫非屏蔽中斷)和可屏蔽中斷。不可屏蔽中斷源一旦提出請求,CPU必須無條件響應,而對可屏蔽中斷源的請求,CPU可以響應,也可以不響應。CPU一般設置兩根中斷請求輸入線:可屏蔽中斷請求INTR(Interrupt Require)和不可屏蔽中斷請求NMI(NonMaskable Interrupt)。對於可屏蔽中斷,除了受本身的屏蔽位控制外,還都要受一個總的控制,即CPU標誌寄存器中的中斷允許標誌位IF(Interrupt Flag)的控制,IF位為1,可以得到CPU的響應,否則,得不到響應。IF位可以由用戶控制,指令STI或Turbo c的Enable()函數,將IF位置1(開中斷),指令CLI或Turbo_c 的Disable()函數,將IF位清0(關中斷)。
典型的非屏蔽中斷源的例子是電源掉電,一旦出現,必須立即無條件地響應,否則進行其他任何工作都是沒有意義的。
典型的可屏蔽中斷源的例子是印表機中斷,CPU對印表機中斷請求的響應可以快一些,也可以慢一些,因為讓印表機等待會兒是完全可以的。
注意,可屏蔽中斷和非可屏蔽中斷都屬於硬體中斷(外部中斷)。軟中斷既不屬於可屏蔽中斷,也不屬於非可屏蔽中斷。