作業系統筆記(一):電腦怎麼處理各種作業的?
現在人手一支手機,上面搭載 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 mode 和 Kernel 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 一個一個取出來。
參考資料
複習一下?
作業系統筆記 目錄
- 作業系統筆記(一):電腦怎麼處理各種作業的?
- 作業系統筆記(二):利用處理程序、執行緒來多工處理
- 待續