現在作業系統是中斷驅動的。事件幾乎是用中斷或陷阱的發生來標記的。
陷阱(Trap)或者異常是由軟體產生的中斷,這個中斷是由一個錯誤(例如除0運算或者無效記憶體訪問)或者使用者進程產生的一個作業系統調用請求產生的。
共用系統資源改善了利用率,但與此同時也帶來了問題。如果沒有保護來處理這些錯誤,那麼電腦必須只能執行一個進程,否則所有輸出值都值得懷疑。
一、雙重模式操作
必須能區分系統代碼和使用者代碼的操作。大多數作業系統採取的方法是提供硬體支援,以允許使用者區分不同的執行模式。
至少需要兩種獨立的操作模式:使用者模式和監督程式模式(也稱系統模式或特權模式或者核心模式等)。通過在硬體上增加一個模式位來表明當前的操作模式。當電腦系統執行使用者應用程式時,系統處於使用者模式;當使用者應用程式向作業系統請求一個服務時(通過系統調用),系統會從使用者模式切換至監督程式模式以滿足使用者請求。
在系統引導時,系統處於監督程式模式,接著裝入作業系統,然後切換至使用者模式執行使用者應用程式。一旦出現陷阱或者中斷,系統從使用者模式切換至監督程式模式。因此,系統在將控制權交給使用者程式之前總是先切換到使用者模式(將模式位置位)。
我們將可能引起錯誤的機器指令稱為特權指令。系統僅允許在監督程式模式下執行特權指令。如果在使用者模式下試圖執行特權指令,那麼硬體並不執行該指令,而是認為該指令非法,並將其陷入到作業系統中。常見的特權指令包含切換到使用者模式的指令、I/O控制、時間管理和中斷管理等。
由上可知,指令執行的生命週期如下:系統的初始化控制在作業系統中執行,這時候指令在監督程式模式下執行。當控制交給使用者應用程式時,模式切換至使用者模式。最後通過中斷、陷阱或者系統調用切換回作業系統模式。
系統調用提供使用者程式請求作業系統執行為作業系統保留的任務的途徑。系統調用通常表現為陷阱的形式。這個陷阱可以被一般的陷阱指令所執行。當系統調用執行時,硬體將其視為一個軟體中斷。控制通過中斷向量傳遞給作業系統中的服務程式,這個系統服務程式是作業系統的一部分。核心檢索中斷指令以確認發生了什麼系統調用;其中的一個參數指明使用者程式請求什麼類型的服務;請求需要附加的資訊可以通過寄存器、堆棧或者記憶體(記憶體位址指標可通過寄存器傳送)來傳遞。監督程式檢驗參數是否正確、合法,然後執行請求,最後將控制權返回給系統調用之後的指令。
二、時間管理
定時器的周期可以是固定的或者是可變的。
一個可變的定時器通常是通過一個固定速率時鐘和一個計數器來實現的。作業系統設定計數器值,計數器值在每個刻度遞減,當計數值為0時產生中斷。
在將控制權交給使用者程式之前,作業系統應該確保設定好定時器中斷。一旦產生定時器中斷,控制權自動交給作業系統。作業系統可以將這個中斷看成是一個致命的錯誤來處理,或者給予使用者程式更多的執行時間。顯然,用於修改定時器操作的指令是特權指令。
因此,可以使用定時器防止使用者程式已耗用時間過長。一種簡單方法是用程式所允許執行的時間長度來初始化計數器。