# Operating System #1
## What is OS?
* 作業系統是一個介於使用者與電腦硬體之間,用於溝通的程式。
* 電腦硬體大致上可以切割成四個區塊,由上到下分別為**使用者**、**應用程式**、**作業系統**和**電腦硬體**。
* 作業系統就像一個資源管理者和資源分配者,讓所有使用者可以簡單、方便的使用電腦,不必在乎資源的控管,因為作業系統會幫你完成。
* 你可以想像,在電腦中有CPU、硬碟、IO控制裝置、顯示器等等,這些東西在不同的動作下可能需要透過BUS和彼此傳送資料或是和記憶體溝通。如果沒有作業系統的控管,使資料隨意傳輸,BUS可能會塞車或是造成資料異常覆蓋等情形。
## Kernel
* 作業系統本身也是一個軟體,我們將其稱作**Kernel**。
* 只有Kernel所有時間都在運作,好監控整個電腦的資源。而其他程式會根據Kernel的指示,同一時間一個運算器只有一個程式在運行。
## Interrupt
* 程式中斷出現在很多情形之下,包含正常或異常。
* 例如,一個程式執行太久了,我們會希望它先暫停使其他程式運算。
* 或是為了避免CPU閒置,因為CPU的運作速度非常快速,我們通常不希望它發生閒置的狀況。
* 若現在一個程式要等使用者輸入訊息才能繼續運算,也就是該期間需要等候IO。
* 因為不希望CPU閒置,作業系統就會要求該程式進行中斷,讓其他程式先行運作,IO指令進來之後再繼續執行。
* 當然,若程式發生exception,也有可能是錯誤中斷,避免後續其他程式無法運作。
* 例如Diviison by zero等等。
## Computer-System Architecture
* 許多特殊系統使用單一處理器的架構。
* 嵌入式系統等小型裝置常見。
* 多處理器架構在一般電腦上越來越普及。
* 耳熟能詳的平行化系統、tightly-coupled system等。
* 增加throughput、效益最大化。
* 其中又分對稱式和非對稱式:
* Asymmetric Multiprocessing: 每一個處理器分配到屬於自己的任務。
* Symmetric Multiprocessing: 每個處理器分配到的任務沒有限制。
### Multiprocessing VS Dual-Core Design
* Multiprocessing指擁有兩個或多個CPU,共享主記憶體的資源。
* 
* Dual-Core指單個CPU擁有兩個運算核心,主要差異在於可以共享到部分的快取。
* 
### Multiprogramming VS Multitasking
* Multiprogramming (Batch system)是為了效率。
* 先將工作在記憶體中排程,當遇到需要等待的時候OS就切換到其他工作。
* Timesharing (multitasking) 是為了互動性的計算。
* CPU頻率性的切換工作,讓使用者產生多個程式同時運行的錯覺。
* Response time必須夠短。
* 記憶體中等候的程式至少要有一個(不然沒得切換)。
* 多個程式等候需要進行排程。
* 資源不夠時可能執行swapping或是virtual memory。
## Dual-mode
* 為了保護OS本身正常運作而不受一般程式影響,我們將系統切成**User mode**和**Kernel mode**。
* 而有些指令只能在Kernel mode執行。
* 如果需要用到那些指令,系統會先切換至Kernel mode執行工作,在結束時在重置回User mode。
## Computing Environments
* 作業系統在不同的需求下可能有特化出不同的服務。
* 最常見的是給一般使用者的視覺化服務,讓使用者不必打指令,也能直覺地使用電腦。
* 網路伺服器可能有分散式服務。
* 手機可能需要吃大量的感測器和提供通訊服務等。
###### tags: `note`