中斷中斷

中斷中斷

我知道中斷處理是如何運作的(切換模式、儲存暫存器、更改堆疊......)。但是,我很好奇,如果在我們仍處於核心模式而不是用戶模式時發生中斷怎麼辦?

答案1

一模一樣。然而,如果我們正在處理一個中斷,那麼可能什麼都沒有,或者直到我們完成之前什麼都沒有。

我們在所有情況下都會做什麼:

  • 無條件保存模式,並將模式設為管理模式(由硬體完成。由中斷觸發)
  • 無條件保存狀態並切換堆疊
  • 運行中斷程式碼
  • 無條件切換堆疊、復原狀態和復原模式

短語「將模式設定為管理員模式」可以解讀為以下任一種:

  • 確保模式是主管模式。
  • 將 1 寫入狀態暫存器的 S 位

中斷中斷

可能有多個(但有限)中斷優先權。每個層級都會有一個堆疊。一個中斷只能被更高優先順序的中斷打斷。較低優先權的中斷可以被較高優先權的中斷所阻止。這解決了大部分問題,而不是堆疊不能被損壞。

然而,較低優先順序的中斷可以被阻止(包括用戶進程。這些是最低優先級的中斷)。因此,確保中斷快速(程式碼不多)非常重要,特別是對於較高優先順序的中斷:完成工作並退出,讓較低優先順序的中斷(例如使用者處理)執行需要時間的操作。

堆疊

當進程呼叫核心時,核心可以使用與進程相同的堆疊(同步呼叫:在程式碼中使用系統呼叫)。

核心還將為每個中斷優先權提供一個堆疊。請參閱有關中斷中斷的部分。

相關內容