在Day 20有稍微提到中斷機制,我們稍微深入說明一下,中斷其實也是種不浪費資源
的方式,如果處理器一直處於很繁忙的狀態,很有可能造成處理器處理上的浪費,所以當中斷這個機制引進去之後,可以中斷某些等待中的任務,先讓處理器去處理其他更重要的任務,所以中斷機制還是有其必要性的。
中斷分成兩大類:
1.硬體中斷(Hardware Interrupt):
(1)遮罩式中斷(maskable interrupt):以遮罩的方式來關閉中斷封鎖暫存器。
(2)非遮罩中斷(non-maskable interrupt,NMI):無法通過在中斷封鎖暫存器時,設定位遮罩來關閉。。
(3)處理器間中斷(interprocessor interrupt):由處理器發出,被其它處理器接收。僅見於多處理器系統,以便於處理器間通信或同步。
(4)偽中斷(spurious interrupt):這種偽中斷,有可能是電路異常所產生的,這種偽中斷其實有時是被迫的。
2.軟體中斷(Software Interrupt):這種軟體中斷,簡單說,就是軟體因為異常,所以系統不得先不中斷軟體。
假設一個中斷,但卻讓機器處於一種確定狀態,則稱為精確中斷(precise interrupt),反之,則稱為非精確中斷。
精確中斷必須保證下列四個狀況:
1.程式計數器的值已經被儲存在已知位置,就是存檔完畢的意思。
2.程式計數器所指向的指令之前的所有指令已被執行完畢。
3.程式計數器所指向的指令之後的所有指令不可被執行。如果中斷訊號到來後而轉入處理前發生了任何針對暫存器/記憶體的更改,都必須予以還原。
4.程式計數器所指向的指令地執行狀態已知。
中斷儘管可以提高電腦處理效能,但過於密集的中斷請求/回應反而會影響系統效能。這類情形被稱作中斷風暴(interrupt storm)。其實,中斷機制還蠻很好用,在嵌入式語法裡面也常被使用,只要適當使用,基本上就能讓處理器發揮很好的任務處理效能。