# Operating System Ch 0 - Historical Prospective [清大周志遠老師的課程錄影](https://www.youtube.com/playlist?list=PLS0SUwlYe8cxj8FCPRoPHAehIiN9Vo6VZ)的筆記。 contributed by <[`kaeteyaruyo`](https://github.com/kaeteyaruyo)> ## 大型電腦系統 (Mainframe System) * 最最最早期的一種電腦 * 特色就是很大一台(跟一個房間一樣大)、很貴(國家等級才買得起) * I/O 很慢:讀卡機、印表機、磁帶機 * 每台電腦就專心做一件事,例如:銀行的資料管理、科學數值運算等 * 現在的企業級用的大型伺服器依然是 Mainframe system * 專門用來做 critical application,可靠度高、安全性高 * 可以一次處理很多任務 * 在企業、醫院、銀行等單位廣為使用 * 程式在電腦上執行的模式經歷了以下三個階段的演進 * **批次系統 (Batch)**:將所排程的作業一次完成,一件做完才做下一個 * **多工系統 (Multi-programming)**:利用完成一個作業的空檔,進行另一個作業 * **分時系統 (Time shared)**:每個作業分給一個固定長度的(很短的)時間段進行處理,快速在多個作業之間切換,體感上就好像很多程式同時在運作一樣 ### 批次系統 (Batch system)  * 程式處理流程 1. 使用把他要執行的任務放進電腦裡(用打卡紙) 2. Operator 會把需求相近的工作排在一起 3. OS 單純就只要把一件事情做完,然後把電腦控制權交給下一個工作,就沒事了(簡單來說就是啥事也沒做) * 缺點 * 一次只能做一件事 * 程式沒辦法和使用者做互動 * **CPU 大部分的時間都沒事幹** * 因為 I/O 的速度比 CPU 的運算速度慢了大概 1000 倍,在等 I/O 的時候,CPU 就沒事做 * 這電腦很貴耶開什麼玩笑ˋˊ ### 多工系統 (Multi-programming System)  * 單一支程式在某一個瞬間一定要嘛是在做計算要嘛是在做 I/O,如果放在電腦裡的那一支程式現在就是要 I/O,那 CPU 毫無選擇只能沒事做 * 我們希望 CPU 可以一直不斷做事情 -> 那就要**放進更多個程式**,當一個程式在 I/O,CPU 就可以算其他程式的工作(讓程式們 overlap) * **Spooling** (**S**imultaneous **P**eripheral **O**peration **O**n-**L**ine) * 想辦法讓 I/O 不需要 CPU 的干涉也可以自主作業 * CPU 只需要等待 I/O 完成後送給他一個通知再去做下一件事就好了 * 可以透過**中斷 (Interrupt)** 來實現 Spooling * 在多工系統中,OS 要做的事情有以下 * **記憶體管理 (Memory Management)**:現在記憶體裡面同時有很多個程式了,每個人可以分到多少記憶體呢?是平分還是動態分配?(第 9 章會提到) * **CPU 排程 (CPU Scheduling)**:所有放在記憶體裡面的程式,現在 CPU 要挑哪一個來執行呢?(第 6 章會提到) * **I/O 系統 (I/O System)**:怎麼透過中斷來實現 spooling?怎樣達到不需要 CPU 也可以執行 I/O?(第 13 章會提到) ### 分時系統 (Time-sharing System) * 多工系統只是讓電腦可以交叉執行多個程式,但是對於每一個使用者(放一支程式進去的人)而言,單一一個程式的速度並沒有加快,反而可能變慢了(因為還要禮讓資源,有時候還會延遲),程式依然沒辦法跟使用者進行互動 * 為了**讓使用者可以跟程式互動**,並且讓很**多個使用者在同時使用**這台電腦時,感覺起來像是只有自己在使用,我們就發明了分時系統,用時間的概念來切割大家所使用的資源 * 透過**頻繁地在 CPU 和 I/O 之間交換**,使用者就會覺得跟程式有在互動的感覺 * 使用者可以馬上看到程式的執行結果(反應時間小於 1 秒) * 在這種系統上,通常就不會再使用讀卡機和印表機來做 I/O,而是會使用鍵盤和銀幕 * 也因為電腦可以在很短的時間之內在不同工作之間切換,所以很多使用者同時使用電腦時,也會不會覺得受到他人的影響(雖然總體的執行時間可能是變長的,但因為反應時間縮短了,就比較不會有感覺到受影響) * 分時系統的 CPU 會在以下三個情況切換去做另一個程式 * 目前這個程式做完了 * 目前這個程式要去 I/O 了 * **一段很短的時間 (time slot) 經過了**(每隔固定時間就切換) * 在分時系統中,OS 要做的事情有以下 * **虛擬記憶體 (Virtual Memory)**:一次要同時執行的程式愈來愈多了,實體記憶體不夠用,去跟硬碟借一點空間來充當記憶體(第 10 章會提到) * **檔案系統與硬碟管理 (File System and Disk Management)**:使用者之所以希望可以和程式互動,就是希望可以去針對檔案內容做讀寫等操作;而檔案是需要存放在硬碟裡面的。所以就需要有檔案系統和硬碟管理工具來管理使用者資料(第 11, 12 章會提到) * **行程同步和死結處理 (Process Synchronization and Deadlock)**:現在可以同時執行很多個程式了,就會發展出可以互相溝通的程式,為了讓程式可以順利運行,他們需要遵守一些協定。而同時運作的程式可能會搶佔同一份資源(一個人在用時另一個人就不能用),為了不讓多個程式互相佔據彼此所需的資源而造成死結 (deadlock),也需要有規則來管理這些資源的鎖定 (lock)(第 7, 8 章會提到) ### 小結 |-|批次系統 (Batch)|多工系統 (Multi-process)|分時系統 (Time-sharing)| |-|-|-|-| |**系統模型**|單一使用者、單一任務|多程式|多使用者、多程式| |**設計目標**|簡單就好|資源最大化利用|降低反應時間以增加互動性| |**OS 特色**|沒啥特色|CPU 排程、記憶體管理、I/O 系統|檔案系統、虛擬記憶體、同步化、死結處理| ## 電腦系統架構 ### 桌面系統 (Destop System) * 單一處理器的電腦 * 個人電腦 (Personal computers) * 專門給單一使用者用的 * 使用者的方便性和可互動性是最優先考量 => 因此發展出**圖形化介面 (GUI)** * I/O 裝置:鍵盤、滑鼠、銀幕、印表機、觸控是銀幕、麥克風(語音輸入) * 許多不同種類的個人電腦作業系統,例如: * Windows * MacOS * Unix * Linux * 安全性沒有很好,容易受蠕蟲或病毒等惡意程式入侵 * 因為早期個人電腦發展出來的時候,設計這些電腦的人沒有料想到未來網際網路會全世界普及,所以當時只要使用者不要惡意破壞自己的電腦,電腦就不會壞掉,所以當時的安全性設計並沒有很嚴謹 ### 平行系統 (Parallel Systems) * 有多個處理器 (multiprocessor) 的電腦。這些處理器 (CPU) 是**用電線**直接焊死在同一個主機板上的,因此也叫作 tightly coupled system * 所有處理器和主記憶體連接在同一個匯流排上,因此所有處理器都可以存取到同一個**共享記憶體 (shared memory)** => 會有同步的問題 * 之所以需要平行系統是因為 * **提高吞吐量 (Throughput)**:每秒做的工作可以增加 * **節省成本 (Economical)**:多個核心可以共用其他的硬體,例如:記憶體、I/O 裝置,整個主機板上的裝置都可以共用 * 提升可靠度 (Reliability):(次要考量)當有一個核心壞掉了,整個電腦不會因此停止運作 * 根據各個**處理器的工作分配方式**的不同,多處理器系統可以被分成以下兩大類: * **對稱式多處理器系統 (Symmetric Multiprocessor System, SMP)** * 每一個處理器都做差不多的事情,透過同一個 OS 進行管理,沒有主從之分 * 一般的家用電腦大概都是這種 * 因為每個人要做的事情都一樣,因此會需要額外的協定進行核心之間的**同步化** * 可以塞進去的處理器數量比較少 * **非對稱式多處理器系統 (Asymmetric Multiprocessor System, ASMP)** * 每個處理器各自負責一個專門的任務 * 會有一個主要處理器 (Master CPU) 負責接收指令,再把這些指令分派給各個特化的從屬處理器 (Slave CPU) * 常被應用在高效能的大型系統當中 * 可以塞進去的處理器數量比較多(因為不用做同步化) * 根據**存取記憶體的方式**的不同,多處理器系統可以被分成以下兩大類: * **統一記憶體存取模型 (Uniform Memory Access, UMA)**  * 每個處理器存取記憶體的**時間**是相同的,所以不管使用者被分配到哪一個 CPU,不會有效能上的差異 * 最常配合對稱式架構使用,通常核心數不會太多,不然搶佔記憶體的情況會很嚴重 * 大部分的個人電腦都使用這種記憶體存取方式 * **非統一記憶體存取模型 (Non-Uniform Memory Access, NUMA)**  * 把記憶體階層化 (hierarchical),把處理器分組並給各組分別分配一塊記憶體,存取自己那組的記憶體比較快,存取其他組的記憶體比較慢 * 通常用來連接兩到多個對稱式架構的系統 * 高效能的大型主機通常採用這樣的記憶體存取方式 * **Multi-core Processor** * 現在的個人電腦很多是**多核心**的電腦,意思是一個處理器裡面有很多個計算核心 * **Many-Core Processor** * 近十年開始發展的高平行化的處理器,一個 CPU 裡面有上百等級數量的處理器時,就被稱作 Many-Core Processor * [Nvidia General-Purpose GPU (GPGPU)](https://zh.wikipedia.org/zh-tw/%E5%9B%BE%E5%BD%A2%E5%A4%84%E7%90%86%E5%99%A8%E9%80%9A%E7%94%A8%E8%AE%A1%E7%AE%97) * 通用功能的圖形處理器,也就是用 GPU 來做原本應該由 CPU 來做的那些運算工作 * [Single Instruction Multiple Data (SIMD)](https://zh.wikipedia.org/zh-tw/%E5%8D%95%E6%8C%87%E4%BB%A4%E6%B5%81%E5%A4%9A%E6%95%B0%E6%8D%AE%E6%B5%81): 可以在一個指令之內平行處理多筆資料(例如矩陣運算),進而大幅加快運算速率 * [Intel Xeon Phi](https://zh.wikipedia.org/zh-tw/%E8%87%B3%E5%BC%BA%E8%9E%8D%E6%A0%B8) * 介於傳統的通用功能的處理器和上述的 GPGPU 之間 * 雖然只有 72 個核心,但比起 SIMD 更 flexible * TILE64 :::info :memo: **多處理器系統、多核心處理器和眾核心處理器的差別** * 多處理器系統 (Multiprocessor System):有很多個處理器 (CPU/GPU) 的插槽**的電腦** * 多核心處理器 (Multi-Core Processor):裡面有很多個計算核心**的處理器** * 眾核心處理器 (Many-Core Processor):裡面有超多個(上百個)計算核心**的處理器** 所以你可以在一個多處理器系統裡面,每一個處理器的插槽都插多核心的處理器,你的電腦就會跑得飛快 (・∀・) ::: ### 分散式系統 (Distributed Systems) * 多台電腦**透過網路連線**組成的系統,又稱 loosely coupled system * 因為是由網路連接的,因此可以很輕易地擴展成一個大型系統。要說網際網路是一個超大的分散式系統也不是不行 * 每台電腦都是一個獨立的系統,擁有自己的**本地記憶體 (local memory)** 和自己的計算資源,其他人就算透過網路連上也不能隨意存取這台電腦上的資源 * 之所以需要分散式系統是因為 * 分享資源,例如檔案 * **負載平衡 (Load balancing)**,平分工作量讓大家一起把事情做完 * 增加系統**可靠度 (Reliability)**,不會因為系統中單一一台電腦壞掉,整個系統就壞掉不能用了 * 分散式系統可以根據**電腦之間的連接方式**分成以下兩種架構: * **主從式架構 (Client-Server Architecture)** * (請直接參見[我的電腦網路筆記](https://hackmd.io/@kaeteyaruyo/computer-networking-2-1#211-Network-Application-Architectures)) * 有一台電腦作為伺服器,其他很多台電腦都是客戶端的架構 * 比較容易管理資源 * 伺服器容易成為瓶頸,容易有單點故障問題 * **對等式架構 (Peer-to-Peer Architecture)**: * (同樣參見筆記) * 每一台電腦都是對等的,做差不多的事 * 容易做到負載平衡、不容易有單點故障問題 * **叢集式系統 (Clustered System)** * 透過**高速的區域網路 (LAN)** 連結的分散式系統,例如:InfiniBand (300 GB/s) * 通常一個叢集內的所有電腦都會用相同的作業系統,做差不多的事情 * 同樣可以根據叢集內有沒有一台負責管理其他電腦的主要電腦分成對等式叢集 (Symmetric clustering) 和非對等式叢集 (Asymmetric clustering) ### 小結  ## 特殊目的系統 (Special Purpose System) ### 實時系統 (Real-Time Operating Systems) * 重點不是快,是要遵守每一個任務的**截止期限 (Deadline)**,在期限之前必須把事情做完 * Deadline 指的是使用者可以接受的回應時間或是反應時間 * 實時系統時常扮演相當重要的角色,因為有很多關鍵性的系統控制都是在時間上斤斤計較的(例如:假設車子的油門和煞車是由微電腦控制的,如果踩了油門不會走或是踩了煞車不會停,都很有可能造成相當大的危害)。實時系統經常用在: * 科學實驗 * 醫療影像系統 * 工業控制系統 * 軍武系統 * 根據**對於即時性的要求**,實時系統可以被分成以下兩種: * **Soft Real-Time System** * 儘量達成 Deadline,但真的錯過期限了天也不會垮下來的系統 * 最要緊的事情優先度 (priority) 會比較高,這些事情會儘量被趕在期限之前做完,其他不那麼要緊的事情有可能會錯過期限。這樣可以最大程度滿足使用者的需求 * 例如:多媒體串流的系統 * **Hard Real-Time System** * 錯過了 Deadline 可能會死人或是系統會直接爆炸(?),所以連一次也不能錯過期限的系統 * 為了確保所有事情都要準時完成,這類系統幾乎不會有 secondary storage(就是硬碟啦,因為硬碟的存取速度很慢而且時長很難預測),並且會確保所有工作和需要的資料都被放在主記憶體或是很快速的唯讀記憶體 (Read only memory, ROM) 裡面 * 例如:核能發電廠的控制系統 ### 多媒體系統 (Multimedia Systems) * 用來即時傳遞影片或音訊等多媒體資料的系統,也算是一種實時系統 * 多媒體系統要解決的問題有 * Time constranints: 影音的播放速率大概是每秒 24 到 30 幀,如果傳遞封包的速度比這還要慢的話,影片看起來就會卡頓,因此要解決即時性的問題 * On-demand / live streaming: 像 YouTube 或 Netflix 那樣隨選隨看還是像新聞或世界杯那樣實況轉播,會有不同的傳遞封包的需求 * Compression: 由於多媒體資料很大但是又不是那麼重要,所以發展出很多不同的壓縮演算法,也因此就產生了各式各樣的影音格式 ### 掌上型/嵌入式系統 (Handheld/Embedded Systems) * 體積小、重量輕,可以帶著到處走的系統 * 由於攜帶式裝置的硬體和桌上型電腦擁有的資源相去甚遠,所以大部分的硬體和作業系統都是特製的,例如 * 沒插電只能用電池 => 要省電 * 處理器跑很慢、記憶體很有限 => 作業系統要省事,不能吃掉太多資源 * 顯示器很小 => 圖形計算的系統要特別設計 ## 總結  ---- | [目錄](https://hackmd.io/@kaeteyaruyo/operating-system-index) | [Ch 1 - Introduction >>](https://hackmd.io/@kaeteyaruyo/operating-system-1)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up