--- title: 第十二週 tags: 計概 --- # 作業系統 主要功能: - 監督/控制程式 (control program / monitor) - 控制程式的執行,以維持整個電腦正常運作 - 資源管理/分配者(resource manager / allocator) - 分配電腦的資源:CPU、記憶體、IO - 決定資源的有效利用和公平使用 - 使用者介面 - 方便使用者使用電腦 - 不一定所有 OS 都有,像是工控電腦 :::info - 開機時 bootloader 會從磁區把系統讀進 RAM,然後把控制權交給系統 - 不會一次讀全部,會先讀一部分,然後那一部分知道從哪裡找到其他部分 - 所以以前寫病毒就是會寫在系統的儲存位置前面,因此 bootloader 會先讀進病毒,才讀進系統,這樣系統就在病毒掌控底下 ::: # 種類 ## 單人單工作業系統 Single-User Single-Tasking System - 同意時間只能讓一個人使用,且只能處裡單一程式 - 如 MS-DOS - 屬於早期的系統,現在已很少見 ## 多工系統 Multi-Tasking System - 同時可以處裡多個程式,或一個程式可以分多個部分執行 - 例如 Windows、Linux、Mac OS、Unix 等等 - 可分為單人多工與多人多工兩種方式 - 現在常見的系統 ## 多程式系統 Multi-Programming System - 系統中有多個程式彼此輪流進行 - 主記憶體在同一時刻有多個程式載入,並透過排程機制輪流使用 CPU 來執行程式 - 特色是「充分利用系統資源」,因為一個程式在執行時不可能會一直都在使用 CPU 像是執行輸出輸入工作時就會有閒置的時間,將這個閒置的時間給其他程式使用可以達到更大的效率 ## 多重處理系統 Multi-Processing System - 電腦存在兩個以上的 CPU ,且同時可讓不同工作在不同 CPU 執行 - 一架構分為兩種 ### 緊耦合系統 Tightly Coupled - 所有 CPU 共用記憶體、作業系統、時脈及系統匯流排頻寬 ### 鬆耦合系統 Loosely Coupled - 所有 CPU 有各自的記憶體、作業系統、時脈及系統匯流排頻寬 - CPU 之間的通訊是透過通訊線路達成,又稱為分散式系統 - 將家裡電腦連上網路後,和其他電腦也透過網路分享彼此的資源,就是鬆耦合系統 ## 分散式系統 Distributed System - 上述 ## 多執行緒系統 Multi-Thread System - 每個程序(Process)可能會被分割成數個執行緒(Thread),執行緒又稱為輕型程序(Light Weight Process) - 在同意一間同一程序的不同執行緒可以同時執行,也因此執行緒是最小調度單位 ## 分時系統 Time Sharing System - 系統對每個程序(Process)都會分配一段時間配額(Time Quantum)給該程序用 - 時間配額用完,無論程序是否執行完畢,都必須將 CPU 的使用權交給下一個程序 ## 即時系統 Real Time System - 系統對某些特定事件必須在一定時間限制內做出反應 - 主要限制為程式段必須常駐在主記憶體內 - 例如飛彈導航系統或核電廠的安全控制系統 ## 整批處理系統 Batch Processing System - 是指將資料收集成批後一次處裡 - 又可分為定時和定量兩種方法 ## 交談式系統 Interactive System - 使用者與系統會透過交談的方式來完成工作 - 特別重視反應時間(Response Time) - 例如自動提款機的金融交易系統 # 中斷 Interrupt 程式執行的過程發生特殊的情況,系統會停止目前的處裡動作來處理特殊情形 如果沒有「中斷」這項功能的話,系統會在執行輸入輸出的時候,CPU會不斷詢問是否完成輸出輸入 >當然如果是個非常精簡,周邊IO很少的電腦,就可以採用 Polling 的方式 因此改成輸出入裝置完成工作時,藉由中斷,自動將訊息傳給 CPU ## 處理步驟 1. 作業系統取得 CPU 控制權 2. 儲存目前的狀態,像是 Register Counter 等資訊 3. 取得中斷處理程式的地址 4. 執行中斷處理程式 5. 回復中斷發生前的執行狀態,並繼續執行該動作 ## buffer cache spooling 這三個很像 - Buffer:是東西要送到別的地方去,待會有人會搬走,但是先放在特定地方等待 - Cache:是自己把東西刻意擺在特定的地方,以自己供快速使用,就不用每次都跟硬碟要 - Caching 就是在儲存系統中,提升速度的一個重要的技巧 - 在跟更慢的儲存設備要資料時,就先看 cache 有沒有資料,有的話就可以直接用 - 網路也有所謂的Cache ,就是直接把最近很有可能有大量需求的資料,給搬進local的儲存設備 像鍵盤滑鼠的操作不會直接影響記憶體,而是先放進 buffer,發出 interrupt,CPU 從 buffer 拿指令 >CPU 當掉就會讓沒拿走的內容被新內容覆蓋掉,像滑鼠就會有瞬移的現象 不同的 interrupt 有不同的代號,有個 Vector table 可以查要讓程序跳到哪裡 那如果interrupt 又被interrupt ,就要有額外的限制等等,這就更細了 # 程序 Process 指證在執行過程中的程式 (Program) # 分頁記憶體管理法 這是講義提到的,基本應該就是分頁記憶體管理法 允許程式載入主記憶體時,不占用連續的空間,因此 - 將實際記憶體分成固定大小的頁框(Frame) - 將程序也分成多個跟頁框相同大小的頁(Page) 這樣一來,任何頁都可以塞進任何頁框 不過因此每個程式就需要一個分頁表(Page Table)用來記錄頁跟頁框的對應關係 可以用一維陣列實作 - 以頁的編號作為 index - 頁框的編號就是 value # 虛擬記憶體管理 允許程式執行實可不必將整個程式碼完整載入主記憶體中 利用「需求分頁系統(Demand Paging System)」的觀念 - 程式執行前儲存在輔助記憶體中 - 各分頁指在執行時需要的時候才將該分頁載入到主記憶體中 ## 分頁錯誤 Page Fault 發生於程式要執行的程式分頁不在主記憶體中,處裡步驟如下 1. 要存取的程式分頁不在主記憶體中,發出 Page Fault 中斷 2. 將 CPU 的控制權交給中斷處理程式 3. 作業系統檢查此存取是否合法 - 合法的話找尋該分頁在輔助記憶體的位置 - 不合法則停止該程式之執行動作 5. 在主記憶體找尋一個可用的頁框 6. 將分頁由輔助記憶體載入到頁框中 7. 修改分頁表內容 8. 重新執行產生分頁錯誤的程序 ## 分頁取代 當分頁錯誤發生時,主記憶體有可用的頁框,就可以直接將分頁載入到頁框中 但是若沒有可用的頁框,則需要執行分頁取代的動作,常見的有三種 ### 先進先出 First In First OUT 就是將最早進入系統的分頁作為犧牲分頁(Victim Page),也就是將主記憶體中最久的分頁會被取代掉 但是有可能該分頁是最常使用的分頁,因此使用此策略會使分頁錯誤的機率提高 ### 最佳取代法 ### 最近最久未用取代法 Least Recently Used / LRU 將最近最久(?未使用的分頁取代調,實作方法就是檢視分頁上次的使用時間 將上次被存取時間距離現在最久的分頁給取代掉 概念為「用過去程式執行的模式去模擬將來程式執行的模式」 :::warning 講義 Buffer Management 的部分應該就是上面的內容 ::: --- OS 恐龍版第一節 這本是經典,想要go deeper可以去看 Distributed 分散式架構,像是AWS 寫driver 就要處理很多這些有關的事情 像是跟系統註冊查表的代號等等 進聯發科大都在寫driver 很少在寫演算法 --- # 網路 Pre fetch 就是去猜可能會用到的資料 LRU 可以看MysEQL 後面都不會考, 老師說虛擬化概念很重要,用在很多東西上 Local Area Network LAN 跨LAN之間是透過router 或 gateway 標準 Global:TCPIP 用 IP address 內網:IEEE 內網包括 WiFi ethernet 用MAC Adress IP address 就是像是140.112.1.0這類的 但是很難記,所以會用domain name 像是 www.ntu 也因此需要一個負責轉換的 Domanin Name Server Domain name 跟 IP 是多對多的關係 可以一個domain name 對多個 IP 或是同個 IP 對同個 domain name Hub是比較笨的 switch是比較聰明的 現在大多是switch packing sniffing 可以竊聽你的機密 送資料的時候,會把檔案分成很多的小packet,首先這樣子就不用因為其中某部分壞損導致整個都要重送 IP確定送達位置是對的 TCP確認送的內容是對的 TCP加上header後,就會把application 給切成多個封包送出去 Name Mask
×
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