現在人手一支手機,上面搭載 Android/iOS 系統;而筆電也搭載 Windows、macOS、Linux 等作業系統。然而這些系統背後是怎麼運作的?想知道就要念作業系統啦!

這篇文章至少包含:中斷、System Call、Dual Mode。如果你有恐龍書的話,應該會對應到第二章。

電腦是怎麼開機的?

電腦的架構,從上往下大概是:
使用者(User) 使用各種程式(Program),並往下透過作業系統(OS) 來控制最底層的 硬體(Hardware)

而當你按下電腦電源鍵時,Bootstrap(開機的 Boot 就是這個詞的縮寫)載入 Kernel,開始執行一些像是 Init 的 Process,並開始等待中斷(Interrupt)

User mode、Kernel Mode

開機以後,你可能會打開 Chrome、開個網站、收個信件;或是開個資料夾,開始打下禮拜要交的期中報告。這些操作都會動到硬體資源,為了確保這些資源能夠妥善被利用,所以要分成兩種執行特權:User modeKernel Mode

Kernel mode 能夠做所有的硬體操作和其他系統停止指令:舉凡開新檔案、關機、分配記憶體等等。所以平常使用者只會碰到 User mode,需要的時候再請 Kernel mode 來操作。

中斷

而你在使用電腦時總會發生一些事件,例如插入隨身碟、或是某個程式突然停止回應,這時候就是發生了中斷(Interrupt)

其實中斷不一定是出錯,它包含:

  • 硬體中斷
    • 按下鍵盤上的按鍵
    • 記憶體存取錯誤
    • ......
  • 軟體中斷
    • Exception/Trap(軟體定義的錯誤)
    • 檔案管理
    • 系統設置
    • ......

當中斷發生時,會暫停目前的工作(其實是暫停 Process,後面的文章會再提到),做完中斷事情後才會恢復目前工作的處理狀況。

剛剛提到的關機或新增檔案等 Kernel mode 才能做的動作,就是透過 System call,從 User mode 跳到 Kernel mode 來執行,再回到目前的工作繼續執行。

System Call 如何傳遞資料給 Kernel mode?

System call 有三種方法把資料傳遞給 Kernel mode。

  • By Register:直接透過 CPU 中的暫存器(Register)來儲存資料,速度最快,但容量最小。
  • By Address:透過類似指標的方式直接傳遞記憶體位址,將記憶體位址存在暫存器(Register)中。可一次傳遞大量參數,但相對較慢。
  • By Stack:也可以利用堆疊(Stack),將資料一次一次放在 Stack 裡,再由 Kernel mode 一個一個取出來。

參考資料

複習一下?

作業系統筆記 目錄