---
# System prepended metadata

title: Chap. 00 - Operating System
tags: [課堂筆記, 作業系統]

---

# Chap. 00 - Operating System

> 課程內容參考 : 清華大學開放式課程 周志遠教授
> 參考書目 : Operating System Concepts (9th), Abraham Silberschatz, Peter Baer, Galvin, Greg Gagne
> 
> 其他科目內容請參見 [[Here]](https://hackmd.io/@ChenZE/By4SOO6Jyl)
> 

## Content

* [Mainframe Systems](#Mainframe-Systems)
    * [1. Batch](#1-Batch)
    * [2. Multi-programmming](#2-Multi-programmming)
    * [3. Time-sharing](#3-Time-sharing)
* [Computer system architecture](#Computer-system-architecture)
    * [1. Desktop systems](#1-Desktop-systems)
    * [2. Parallel systems](#2-Parallel-systems)
        * [2.1 Multi-processor](#21-Multi-processor)
        * [2.2 Multi-core processor](#22-Multi-core-processor)
        * [2.3 Many-core processor](#23-Many-core-processor)
        * [2.4 Memory access architecture](#24-Memory-access-architecture)
    * [3. Distributed systems](#3-Distributed-systems)


## Mainframe Systems

Mainframe systems 是早期的大型電腦系統，時至今日還是有在使用，但主要是提供給具有**特定任務或產業領域**的行業，例如醫院、銀行等。因為對這些特定任務來說會有更好的**可靠性(reliability)**與**安全性(security)**。

### 1. Batch

最早的 mainframe 是使用 batch systems 的方式運作，稱為**批次處理系統**。電腦每次**只能**處理一個 batch 的資料。所謂的執行程式就是使用類似打卡的方式進行，每支程式都是一張卡片。因為只是單純執行一個一個的程式，沒有任何額外設計，所以記憶體的設計也是做簡單的切割，如下圖所示。

![image](https://hackmd.io/_uploads/BkGmy_dgke.png)

在 batch system 中的處理過程如下 :

* 使用者(user)提供工作，通常是一張一張的卡(program card，data card，...)
* 透過**人為控制**來進行 **program 的排序**
* OS 只有簡單的進行 program 間**資源的控制與轉移**

透過上述 batch system 設計的過程可歸納出這類的系統具有以下幾項缺點 :

* **同一時間**只會進行**一項**工作
* 在 user 與 job 之間**沒有任何的互動**(interaction)
* 因為 CPU 的運行速度 >> I/O 的速度，所以 **CPU 時常處於 idle(閒置狀態)**

> OS does not need to make any decision in this system !

### 2. Multi-programmming

> [!Note]
> Multi-programming = 系統中放置**多個 program 輪流執行**

下一個世代的發展是 multi-programming，也就是在**系統中可以放置多個程式輪流執行**，改善 batch system 的第一項缺點。因此 job 的計算(computation)與 I/O 的運行時間會有**重疊**。

在 multi-programming 的系統中因為 CPU 與 I/O  會輪流執行，所以**何時交換**會是一個問題，由此延伸出一個稱為 SPOOLING(Simultaneous Peripheral Operation On-Line)的概念 : 

* CPU **不會干擾** I/O 的工作
* 只會在 I/O 工作完成時**收到通知**(notify)

此外，因為 multi-programming 會在系統中放置多個 program 進行，這些 program 都會被放置在 main memory，所以**哪些系統要被執行與載入至 main memory** 就會是一個問題。從這邊再加上輪流使用的概念可再延伸出兩種排程(scheduling)問題 : 

![image](https://hackmd.io/_uploads/SJ8iBO_eJl.png)

* Job scheduling : 決定從 disk 載入哪些 program 到 memory 執行
* CPU scheduling : 決定要執行哪個 job

甚至在 memory 中還會需要有管理記憶體資源分配的問題。

### 3. Time-sharing

第二階段的 multi-programming 還是沒有解決 interaction 的問題，所以發展出第三種 time-sharing system。

Time-sharing 是一種具有 **interaction 的系統**，可以提供 user 與 system 直接且**隨時的切換資源**的控制權。通常是**每項工作都執行很短的時間(ms)就馬上些換到其他工作**。簡單來說就是用時間觀念做切割，所有人都能夠一起執行。工作切換的時間點大約有 3 個 :

* 工作完成(finish)時
* 等待 I/O 時
* 執行一小段時間後

在 time-sharing 的系統中，OS 的任務有以下幾個 :

* Virtual memory 的管理 : Virtual memory 指的是**把 disk 作為 memory**
* File system : 幫 user 管理檔案
* Synchronization(同步化) and deadlock : 多個 program 之間如果都會修改 memory 的數值，那要怎麼決定這些數值的修改方式與時間

![image](https://hackmd.io/_uploads/ryKadOOlkx.png)


## Computer system architecture

### 1. Desktop systems

此種系統多用於個人電腦(personal computer, PC)中提供給單一 user 使用。具有很方便且反應極好的同行化介面(GUI)，常用的 I/O device 是鍵盤(keyboard)、滑鼠(mice)、螢幕(screen)等。

這類系統有非常多例子，像是 Windows、MacOS、Linux、Unix 等。缺點是少了對檔案與系統的保護，容易中毒。

### 2. Parallel systems

#### 2.1 Multi-processor
平行系統又可稱為**多處理器(multi-processor)系統**。Multi-processor 指的是具有**多個 CPU**，每個 CPU 擁有自己的核心(core)與快取(cache)，但會共享 memory 並使用 mother board 連結起，通過 bus 來傳輸資料。

![image](https://hackmd.io/_uploads/rJqva__e1l.png)

#### 2.2 Multi-core processor
另一種類似的系統稱為**多核心(multi-core)系統**，指的是有**多個核心(core)在同一塊 CPU 晶片上**，每個核心有**自己的運算單元可以執行不同任務**，但(可能)會**共享 CPU 內的其他資源**，例如快取，記憶體控制器等，核心間的溝通效率比 multi-processor 更好。

![image](https://hackmd.io/_uploads/HJLNJF_l1g.png)

#### 2.3 Many-core processor
最後一種平行系統稱為 many-core processor，與 multi-core processor 類似，但**具有==更多的核心==數量來進行平行化的運算**。一般 multi-core processor 的核心數大概只有 2 到 16 不等，例如 Intel Core i7 就有 8 個核心。

但 many-core processor 具有數百到數千個核心，同時核心的設計與功能也相對更簡單，能夠**進行更專一的任務**，例如 NVIDIA A100 GPU 具有數千個 CUDA 核心專門用於圖形處理。

#### 2.4 Memory access architecture
從記憶體的角度來看，大概可以分為兩種架構

* Uniform Memory Access(UMA) : 具有相同 memory access time 的設計
* Non-Uniform Memory Access : 記憶體 access 時間不同，具有階層化的設計

![未命名](https://hackmd.io/_uploads/B1RiGtdlJe.png)

### 3. Distributed systems

分散式系統主要是透過網路連接，且**不能共享彼此的記憶體**。分散式系統設計的目的如下 :

* Resource sharing
* Load sharing
* Reliability

常見的架構有 : (1) client-server，具有一個中央的 server，易於管理與控制資源，但只要 server 掛了，系統就會崩過。(2) peer-to-peer，沒有 server，任何人都可以加入或離開，且任何一台電腦掛了都不會影響整體系統運作

![未命名](https://hackmd.io/_uploads/HJbUVK_g1l.png)


