# OS初體驗
###### tags: `IT鐵人`
## 甚麼是OS
OS是Operating System的縮寫,比如說現在常聽到的Windows系統、macOS、以及以Linux核心衍生出來的眾多OS。
前面的文章提到的基本上偏向電腦的零件架構,而OS就是運行在這些硬體上面,並且讓APP運行在自身之上,OS必須確保APP能夠順暢且安全的運行,電腦的架構可以用下面這張圖詮釋:

大概就是一層一層的向上疊,其中OS大致上含括了kernel、在外面一層還有一部分最外面的program,通常最外層還會加上User。
## OS作用
前面提到OS是運行在硬體之上,可以達成以下事情:
* 提供一個讓User易於操作電腦之溝通界面。
* 提供一個讓User programs易於執行之環境(提供一系列service)。
* 作為一個resource的管理者,協調分類這些resource(CPU, Memory, I/O)。
* 作為一個監督者,監督所有process執行,避免process破壞system造成為害。
而會需要以上作用就是因為電腦不會只跑一個程式,一定是許多之程式同時運作,這就稱為Multiprogramming System。
## Multiprogramming System
Multiprogramming System要能夠允許多個Jobs(process)運行。為了達成這件事,就需要Job Scheduling的技術。Job Scheduling技術指的是讓各個程式輪流使用CPU,讓每支程式都覺得自己一直都在運作。
Multiprogramming有Concurrent跟Parallel兩種方法:

concurrent代表一下跑這個一下跑那個,只有單核心的CPU就會採用這種方式。
Parallel代表同時跑好幾個Jobs,多核心的才可以這麼運作。
不過基本上核心的數目沒辦法符合Job的數目,所以通常會是兩者合併執行,並且設定一個Job能佔用的時這種時間到了就切換成下一個Job,這種作法稱為RR(Round-Robin) Scheduling。
## First Blood
OS的第一個章節篇幅比較少,跟計算機組織一樣,不過放心,後面的篇幅就會很長了。
| 上一篇 | 下一篇 |
|-|-|
|[RAID](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/rkjkZXBZY)|[I/O運作](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/SyexQvsWt)
