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