儲存、匯流排與輸入輸出

中斷(interrupt)

與其守在烤箱旁每十秒查看一次,你設一個計時器,蛋糕好了就響,然後你去看書。鈴一響,你放下書、拿出蛋糕,再從剛才停下的地方接著看。中斷就是那個鈴。它是裝置送給 CPU 的硬體訊號,意思是「先停一下你在做的事,我需要注意」。它讓 CPU 能繼續做有用的工作,並在慢裝置終於完成的那一刻被準確通知,而不必浪費週期去輪詢。

以下是逐步的機制。裝置拉起一條中斷線。在指令之間的安全點,CPU 注意到了,存下足夠的當前狀態(至少是程式計數器)以便稍後返回,然後跳到一個固定的常式,叫做中斷處理常式(或中斷服務常式),由是哪個裝置中斷來決定跳到哪個。處理常式做緊急的事——讀資料、回應裝置——再執行一個「從中斷返回」,恢復存下的狀態,被中斷的程式便像沒事發生過一樣繼續。兩個控制讓這一切有序:遮罩(masking)讓軟體在精細操作期間暫時忽略(延後)中斷,而優先權決定多個中斷同時到達時誰勝出,好讓關鍵的計時器搶在懶散的鍵盤之前。

中斷是「一台 CPU 如何在許多裝置與程式之間靈敏分享」的骨幹。計時器中斷是作業系統重新奪回控制、切換程式的方式;磁碟完成中斷是喚醒等待中程式的方式。相對於輪詢的誠實取捨是開銷與回應延遲:進出一次中斷要花時間存與還狀態,而中斷的洪流(例如來自非常快的網路卡)可能淹沒 CPU——這就是為什麼高速率裝置有時把許多事件合併成一個中斷,或改用輪詢。

CPU 啟動一次磁碟讀取,然後跑去執行別的程式碼。十毫秒後磁碟控制器發出中斷;CPU 存下進度,跳到磁碟處理常式,由它複製資料並把請求標記為完成,再返回到原本一模一樣的位置。沒有任何週期浪費在空轉上。

存狀態、跑處理常式、還狀態、繼續——把 CPU 從等待中解放的中斷往返。

中斷既不免費也非瞬時:每一次都要花時間存/還狀態並擾動快取。在高事件速率下,正是這份開銷讓驅動程式有時把中斷合併,或退回到輪詢。

又称
hardware interruptIRQinterrupt handlerISR中斷中斷處理常式