我知道中斷處理是如何運作的(切換模式、儲存暫存器、更改堆疊......)。但是,我很好奇,如果在我們仍處於核心模式而不是用戶模式時發生中斷怎麼辦?
答案1
一模一樣。然而,如果我們正在處理一個中斷,那麼可能什麼都沒有,或者直到我們完成之前什麼都沒有。
我們在所有情況下都會做什麼:
- 無條件保存模式,並將模式設為管理模式(由硬體完成。由中斷觸發)
- 無條件保存狀態並切換堆疊
- 運行中斷程式碼
- 無條件切換堆疊、復原狀態和復原模式
短語「將模式設定為管理員模式」可以解讀為以下任一種:
- 確保模式是主管模式。
- 將 1 寫入狀態暫存器的 S 位
中斷中斷
可能有多個(但有限)中斷優先權。每個層級都會有一個堆疊。一個中斷只能被更高優先順序的中斷打斷。較低優先權的中斷可以被較高優先權的中斷所阻止。這解決了大部分問題,而不是堆疊不能被損壞。
然而,較低優先順序的中斷可以被阻止(包括用戶進程。這些是最低優先級的中斷)。因此,確保中斷快速(程式碼不多)非常重要,特別是對於較高優先順序的中斷:完成工作並退出,讓較低優先順序的中斷(例如使用者處理)執行需要時間的操作。
堆疊
當進程呼叫核心時,核心可以使用與進程相同的堆疊(同步呼叫:在程式碼中使用系統呼叫)。
核心還將為每個中斷優先權提供一個堆疊。請參閱有關中斷中斷的部分。