快轉到主要內容
  1. 文章/

OSTEP 第六章:Limited Direct Execution 重點整理

·159 字·1 分鐘

Heptabase 筆記

核心問題:如何有效地虛擬化並控制好 CPU ?

上一章我們了解了 Process 有許多可用的 APIs 可以使用,這一章節我們將要討論,我們如何在 CPU 上執行 Process 。

Direct execution protocol #

直接讓 Process 運行在 CPU 上是最有效率的方法。我們常在 embedded system 中看到這種做法。

但這有可能會帶來兩個問題:

  1. 如果我想要保護一些特定的操作該怎麼辦?舉例來說,不想要 Process 直接操作 I/O 寫入檔案,因為這樣惡意的程式可以隨意讀寫。
  2. 如果 Process 一直佔用著 CPU 怎麼辦?

Limited direct execution protocol #

為了解決上面的第一個問題,作業系統發展出了兩個機制

Processor modes #

  1. user mode
    • 一般的程式就是使用 user mode 去跑,user mode 僅有有限的權限,無法執行所有的操作。
  2. 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)

  1. 儲存 Process 狀態
  2. 轉換 Processor mode (user mode -> kernal mode)
  3. 執行 System call
  4. 回覆 Process 狀態
  5. 回到 Process 繼續執行
  6. 釋放資源

作業系統如何拿回控制權? #

合作模式 #

在早期的作業系統,我們信任每個 Process 會適時的將控制權交還給作業系統。

但顯然這不是個可靠的方法。

Timer interrupt #

我們可以理解成我們電腦裡有一個小時鐘,每一段時間(e.g., 1 ms)會通知 CPU 暫停一下。

當 CUP 被中斷時,CPU 就會將控制權交還給作業系統,作業系統此時就可以做決定是否要換執行其他 Process 。

決定要不要執行其他 Process 就叫做 Scheduler,這個轉換過程就是 context-switch

我們會在下一章開始討論 Scheduler