輸入輸出系統與裝置管理

中斷(an interrupt)

中斷是一下拍肩,意思是「停下你手邊的事,現在有東西需要關注」。想像你正在寫信,門鈴響了。你在句子中途停下,記住寫到哪裡,去應門、處理完,再回來,從你停住的地方接著寫。中斷就是 CPU 的門鈴:一個通常來自裝置的電子訊號,讓處理器暫停目前的程式,切換到特殊的程式碼去處理那個事件。

具體來說,這套機制很精確。一個裝置控制器拉起一條中斷線。在做完目前的指令後,CPU 自動存下它的關鍵狀態(至少是程式計數器與狀態旗標)、切換到核心模式,並用一個中斷編號去查一個稱為中斷向量的表,找出正確處理常式(中斷服務常式)的位址。它執行那個處理常式,然後還原存下的狀態,繼續被中斷的程式,彷彿什麼都沒發生過。中斷有不同種類:可遮罩的,當 CPU 不容打擾時能暫時忽略(封鎖);不可遮罩的(用於即將斷電之類的緊急情況),永遠都能進來;它們還帶有優先權,使較緊急的中斷能搶佔較不緊急的處理常式。同一條硬體路徑也服務陷阱與例外——由軟體觸發的中斷,例如系統呼叫或分頁錯誤。

為什麼重要:中斷是現代作業系統的心跳。裝置靠它回報完成而不必由 CPU 輪詢;計時器中斷靠它讓排程器從執行中的行程手裡把 CPU 收回(這是先佔式多工的基礎);系統呼叫與錯誤也靠它進入核心。沒有中斷,CPU 就得不斷問每個裝置「有事了沒?」;有了它,機器能執行有用的工作,並在世界改變時立即反應。

你正在編輯一份文件,這時一個網路封包抵達。網路卡發出第 11 號中斷;CPU 暫停你的編輯器、透過中斷向量跳到網路處理常式、複製那個封包,然後從緊接著的下一條指令繼續你的編輯器——全部在幾微秒內完成。

執行中的程式被暫停、事件被處理,然後執行從它停住的地方原封不動地繼續。

中斷是非同步的——它可能在任意兩條指令之間抵達——所以處理常式必須小心地存取與還原狀態並且跑得快;在中斷裡做緩慢的工作會讓其他一切停滯,這正是把工作拆成快速上半部與延後下半部的原因。

又称
hardware interruptIRQinterrupt request中斷請求