將I/O結構的時候提到,現代作業系統是中斷驅動(interrupt driven)的。如果沒有進程需要執行,沒有 I/O 裝置需要服務,而且沒有使用者需要響應,那麼作業系統會靜靜地等待某個事件的發生。
事件總是由中斷或陷阱引起的。陷阱(trap,或異常(exception))是一種軟體生成的中斷,或源於出錯(如除數為零或無效儲存存取),或源於使用者程式的特定請求(執行作業系統的某個服務)。這種作業系統的中斷特性規定了系統的通用結構。對於每種中斷,作業系統有不同程式碼段來處理。中斷服務程式用於處理中斷。
由於作業系統和使用者共用計算機系統的硬體和軟體,需要確保使用者程式的出錯僅僅影響自己。由於共用,一個程式錯誤(bug)可能會對多個進程造成不利的影響。例如,如果一個進程陷入死迴圈,那麼這個死迴圈可能阻止許多其他進程的正確執行。多道程式系統可能出現更多微妙錯誤,一個錯誤程式可能修改另一程式另一程式資料甚至作業系統本身。
如果對這些錯誤不加以預防,那麼計算機只能一次執行一個進程,否則所有輸出都值得懷疑。作業系統的正確設計必須確保錯誤程式(或惡意程式)不會造成其他程式的錯誤執行。
雙重模式與多重模式的執行
為了確保作業系統的正確執行,必須區分作業系統程式碼和使用者程式碼的執行。大多數計算機系統採用硬體支援,以便區分各種執行模式。
至少需要兩種單獨執行模式:
使用者模式(user mode)和
核心模式(kernel mode)(也稱為
監視模式(supervisor mode)、
系統模式(system mode)或
特權模式(privileged mode))。計算機硬體可以通過一個模式位(mode bit)來表示當前模式:
核心模式(0)和
使用者模式(1)。
有了模式位,就可區分為作業系統執行的任務和為使用者執行的任務。當計算機系統執行使用者應用時,系統處於使用者模式。然而,當使用者應用通過系統呼叫,請求作業系統服務時,系統必須從使用者模式切換到核心模式,以滿足請求,如圖 1 所示。正如將會看到的,這種架構改進也可用於系統操作的許多其他方面。
圖 1 使用者模式到核心模式的轉換