OSTEP 第六章:Limited Direct Execution 重點整理
·159 字·1 分鐘
目錄
核心問題:如何有效地虛擬化並控制好 CPU ?
上一章我們了解了 Process 有許多可用的 APIs 可以使用,這一章節我們將要討論,我們如何在 CPU 上執行 Process 。
Direct execution protocol #
直接讓 Process 運行在 CPU 上是最有效率的方法。我們常在 embedded system 中看到這種做法。
但這有可能會帶來兩個問題:
- 如果我想要保護一些特定的操作該怎麼辦?舉例來說,不想要 Process 直接操作 I/O 寫入檔案,因為這樣惡意的程式可以隨意讀寫。
- 如果 Process 一直佔用著 CPU 怎麼辦?
Limited direct execution protocol #
為了解決上面的第一個問題,作業系統發展出了兩個機制
Processor modes #
- user mode
- 一般的程式就是使用 user mode 去跑,user mode 僅有有限的權限,無法執行所有的操作。
- kernel mode
- 作業系統使用所使用
因為 Processor mode ,Process 如果要進行 system call 時都需要透過作業系統(回到 kernal mode)才能執行。
如此一來,我們就可以確保 Process 在受控制下操作資源。
trap instruction, trap table, trap handler #
我們可以簡單地理解這三個東西為
- trap handler: 一個程式(重開機)
- trap table: 紀錄 trap instruction 跟 trap handler 的關係;舉例來說
sd
-> 重開機 - trap instruction: 某個指令。舉例來說
sd
。
Trap table 跟 Trap handler 在電腦一開機就會被初始話並且告知 CPU 這些指令放在哪裡。
如何執行受限制的操作? #
當一個 Process 需要執行系統層級的操作時(舉例來說 I/O)
- 儲存 Process 狀態
- 轉換 Processor mode (user mode -> kernal mode)
- 執行 System call
- 回覆 Process 狀態
- 回到 Process 繼續執行
- 釋放資源
作業系統如何拿回控制權? #
合作模式 #
在早期的作業系統,我們信任每個 Process 會適時的將控制權交還給作業系統。
但顯然這不是個可靠的方法。
Timer interrupt #
我們可以理解成我們電腦裡有一個小時鐘,每一段時間(e.g., 1 ms)會通知 CPU 暫停一下。
當 CUP 被中斷時,CPU 就會將控制權交還給作業系統,作業系統此時就可以做決定是否要換執行其他 Process 。
決定要不要執行其他 Process 就叫做 Scheduler
,這個轉換過程就是 context-switch
。
我們會在下一章開始討論 Scheduler
。