中斷與異常
在任何一臺計算機中,在程序正常執行期間,都有可能發生導致CPU暫時停止的事件。像這樣的事件叫做中斷。中斷可能由軟件或硬件故障引起。硬件中斷稱為(簡單地)中斷,而軟件中斷稱為異常。一旦中斷(軟件或硬件)被觸發,控制權就被轉移到一個稱為ISR(中斷服務程序)的特殊子程序上,該子程序可以處理由中斷引起的條件。
什麼是中斷?
術語中斷通常是為硬件中斷保留的。它們是由外部硬件事件引起的程序控制中斷。這裡,external是指CPU之外的。硬件中斷通常來自許多不同的來源,如定時器芯片、外圍設備(鍵盤、鼠標等)、I/O端口(串行、並行等)、磁盤驅動器、CMOS時鐘、擴展卡(聲卡、視頻卡等)。與硬件相關的事件幾乎永遠不會發生。例如,用戶在鍵盤上按鍵或內部硬件計時器超時等事件都會引發這種中斷,並通知CPU某個設備需要注意。在這樣的情況下,CPU將停止它正在做的事情(即暫停當前程序),提供設備所需的服務,並返回正常程序。當發生硬件中斷且CPU啟動ISR時,其他硬件中斷被禁用(例如在80×86機器中)。如果需要在ISR運行時發生其他硬件中斷,則需要通過清除中斷標誌(使用sti指令)來顯式地執行此操作。在80×86機器中,清除中斷標誌只會影響硬件中斷。
什麼是例外?
異常是一個軟件中斷,它可以被標識為一個特殊的處理程序例程。異常可以標識為自動發生的陷阱(陷阱可以標識為控制權的轉移,由程序員啟動)。通常,沒有與異常相關聯的特定指令(陷阱是使用特定指令生成的)。因此,異常是由於程序執行期間發生的“異常”條件而發生的。例如,除零、執行非法操作碼或內存相關錯誤都可能導致異常。每當發生異常時,CPU會暫時掛起正在執行的程序並啟動ISR。ISR將包含如何處理異常。它可以糾正問題,或者如果不可能,它可以通過打印適當的錯誤消息優雅地中止程序。雖然特定指令不會導致異常,但異常總是由指令引起的。例如,除法零錯誤只能在除法指令執行期間發生。
中斷和異常有什麼區別?