# 作業系統(Operating System)筆記
###### tags: `作業系統` `排程`
## 作業系統的主要功能
1. 管理硬體(作業系統下層)資源,將硬體抽象化。
2. 提供抽象的介面給作業系統的上層使用。
## 作業系統中的CPU資源分配 - 程式排程方式演進
* 由於CPU的資源很珍貴,人們開始嘗試寫監控程式讓CPU資源可以被充分利用。程式排程方式演進為:**多重程式(Multiprogramming) -> 分時系統(Time-Sharing System) -> 多工(Multi-tasking)系統**。以下將一一介紹。
### 1. 多重程式(Multiprogramming)
* 概念:
* **當某程式暫時不需使用CPU的時候,監控程式會啟動另外的正在等待CPU資源的程式**。目的是讓CPU資源能充分被使用。
* 優點:
* 看似原始但在當時確實大幅提高了CPU使用率。
* 缺點:
* 程式之間的排程策略太過粗糙,因為CPU是前一程式不使用時才能輪到其他需要CPU資源的程式使用CPU,也就是**程式沒有優先序高低的差別**;這會讓一些急需使用CPU完成任務的程式(例如使用者互動的任務),可能需要等待很長的時間才分配到CPU資源。這會造成你在你的laptop按了一下滑鼠、或者在鍵盤上敲了幾個鍵,結果過了10分鐘系統才有反應。
### 2. 分時系統(Time-Sharing System)
* 概念:
* 經過稍微改進後,程式執行模式變成一種合作模式: 每個程式執行一段時間後,會主動讓出CPU給其他程式。
* 優點:
* 在一小段時間內讓每個程式都有機會被執行到,對一些互動式任務來說很重要,可以解決前述問題,按下鍵盤滑鼠時,程式需要處理的任務可能不多,但需要系統盡快處理任務,讓使用者能立即看到結果。
* 缺點:
* 如果遇到程式在進行很耗時的計算,一直霸佔著CPU資源,那作業系統也沒辦法,其他程式都只能等著。整個系統會看起來像當機一樣卡住。例如程式進入while(1)無窮迴圈,會讓整個系統都卡住。
### 3. 多工(Multi-tasking)系統
因為前兩種排程方式的缺點,因而演進成我們現在很熟悉的多工(Multi-tasking)模式。
* 概念: 使用一種叫**先佔式**(**Preemptive**)的CPU分配方式
* 作業系統接管了所有硬體資源,且本身是執行在受硬體保護的級別。
* 所有程式都以行程(Process)的方式執行在比作業系統權限更低的級別,每個行程都有自己獨立的位址空間、有單獨的記憶體,使行程間的位址空間互相隔離。
* CPU由作業系統統一分配:
* 每個行程根據行程優先序都有機會得到CPU資源,但如果執行時間超過一定時間,作業系統會暫停該行程,將CPU資源釋出給其他等待執行的行程。
* 作業系統可強制剝奪CPU資源並分配給它認為目前最需要的行程。
* 如果作業系統分配給每個行程的時間都很短,即CPU在多個行程間快速切換,看起來會像是很多行程都在同時執行。
* 目前幾乎所有現代OS都是採用這種方式,比如UNIX、Linux、Windows NT以後的版本、Mac OS X以後的版本。