# 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)