Linux

Linux 中的中斷是如何處理的?

  • September 30, 2020

我只知道這Interrupthardware signal assertion處理器引腳引起的。但我想知道 Linux 作業系統如何處理它。

發生中斷時會發生什麼?

這是低級處理的高級視圖。我正在描述一個簡單的典型架構,真正的架構可能更複雜,或者在這種細節級別上無關緊要的方式有所不同。

發生中斷時,處理器會查看中斷是否被屏蔽。如果是,那麼在它們被揭開之前什麼都不會發生。當中斷被取消屏蔽時,如果有任何掛起的中斷,處理器就會選擇一個。

然後處理器通過跳轉到記憶體中的特定地址來執行中斷。該地址處的程式碼稱為中斷處理程序。當處理器在那里分支時,它會屏蔽中斷(因此中斷處理程序具有獨占控制權)並將某些寄存器的內容保存在某個位置(通常是其他寄存器)。

中斷處理程序做它必須做的事情,通常是通過與觸發中斷的外設通信來發送或接收數據。如果中斷是由計時器引發的,則處理程序可能會觸發 OS 調度程序,以切換到不同的執行緒。當處理程序完成執行時,它會執行一個特殊的從中斷返回指令來恢復保存的寄存器並取消屏蔽中斷。

中斷處理程序必須快速執行,因為它阻止任何其他中斷執行。在Linux核心中,中斷處理分為兩部分:

  • “上半部分”是中斷處理程序。它只做最少的必要工作,通常與硬體通信並在核心記憶體的某處設置一個標誌。
  • “下半部分”執行任何其他必要的處理,例如將數據複製到程序記憶體中,更新核心資料結構等。它可能會花費時間甚至阻塞等待系統的其他部分,因為它在啟用中斷的情況下執行。

像往常一樣,有關此主題的更多資訊,請閱讀Linux 設備驅動程序第 10 章是關於中斷的。

引用自:https://unix.stackexchange.com/questions/5788