Linux

Linux中中斷的重新進入

  • February 9, 2011

我正在閱讀“Linux 設備驅動程序,第 3 版”並且不完全理解描述中斷處理程序的部分。我想澄清一下:

  • Linux 中的中斷處理程序是不可搶占的嗎?
  • Linux 中的中斷處理程序是不可重入的嗎?

我相信我非常了解上/下半部分的模型,並且根據它,只要執行 TopHalf,中斷就會被禁用,因此無法重新進入處理程序,對嗎?

但是高優先級中斷呢?它們是否僅受 vanilla Linux 或特定實時擴展支持?如果低優先級中斷被高優先級中斷中斷,會發生什麼?

Linux 核心是可重入的(就像所有 UNIX 核心一樣),這僅僅意味著 CPU 可以執行多個程序。他不必等到磁碟訪問讀取由致命的慢速 HDD 控制器處理,CPU 可以處理一些其他內容,直到磁碟訪問完成(如果完成,它本身將觸發中斷)。

通常,一個中斷可以被另一個中斷(搶占)中斷,這稱為“嵌套執行”。根據架構的不同,仍然有一些關鍵功能必須通過完全禁用中斷來不間斷地執行(非搶占式)。在 x86 上,這些是一些與時間相關的函式(time.c, hpet.c)和一些xen東西。

關於中斷只有兩個優先級:“啟用所有中斷”或“禁用所有中斷”,所以我猜你的“高優先級中斷”是第二個。這是 Linux 核心唯一知道的有關中斷優先級的行為,與實時擴展無關。

如果一個可中斷中斷(您的“低優先級中斷”)被另一個中斷(“高”或“低”)中斷,核心會保存被中斷中斷的舊執行程式碼並開始處理新中斷。這種“嵌套”可以發生多次,因此可以創建多級中斷中斷。之後,核心從舊中斷重新載入保存的程式碼並嘗試完成舊中斷。

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