面試CS基礎之作業系統

gettogetto發表於2017-03-24
作者:尤汐_Jennica
連結:https://www.nowcoder.com/discuss/22395
來源:牛客網

前言

北大《作業系統原理》課堂筆記,涵蓋面試筆試中作業系統知識點。

大綱如下:

  1. 作業系統概述
  2. 作業系統執行環境
  3. 程式執行緒模型
  4. 處理器排程
  5. 同步機制
  6. 儲存模型
  7. 檔案系統
  8. I/O系統
  9. 死鎖

PS:原文首發於個人部落格,評論和建議請直接回復到部落格,以便及時交流。

作業系統概述

  1. 執行程式:通過排程選中程式開始執行,在執行過程中,不斷陷入作業系統提供各種服務支援,再排程選中程式,直到完成
  2. 功能:有效(充分利用CPU、記憶體、磁碟等資源)、合理(公平的資源管理策略)、易用(使用者介面和程式設計介面)
  3. 作用:管理資源(硬體、軟體)、向使用者提供服務(建立、執行、IO、統計)、對硬體機器擴充套件(遮蔽硬體細節、提供虛擬機器器介面)
  4. 特徵:併發(處理多個同時性活動)、共享(非同時互斥共享、同時共享有限系統資源)、虛擬(對映為若干邏輯實體)、隨機(不可預知執行次序)
  5. 典型架構(使用者態、核心態):Windows(硬體抽象、裝置驅動、核心、圖形視窗、執行體、核心態可呼叫介面、服務分發器、DLL)、Unix(硬體控制層、排程、程式間通訊、儲存管理、記憶體管理、檔案系統、裝置驅動、系統呼叫介面)、Linux(程式、排程、虛擬記憶體、實體記憶體管理、各種裝置驅動、網路模組、陷入異常模組、中斷處理模組、系統呼叫介面) 、Android(Linux核心、系統庫和Android執行時系統、應用程式框架、應用程式)
  6. 分類:批處理(Spooling快取I/O到磁碟)、分時(時間片、追求響應時間、互動式)、實時(嚴格時間、高可靠)、個人計算機(使用方便)、網路(通訊、資源共享)、分散式(多機協同完成一項任務)、嵌入式(特定裝置中的軟硬體系統)

作業系統執行環境

  1. CPU:運算器、控制器、通用暫存器、控制和狀態暫存器(PC、IR、PSW)、快取記憶體
  2. CPU狀態:核心態(特權指令R0)、使用者態(使用者R3)
  3. 中斷/異常機制:CPU暫停當前執行程式,保留現場,硬體自動轉去處理程式,處理完後回到斷點,繼續被打斷的程式
  4. 事件:中斷響應外部事件,非同步處理,總是返回下一條指令,如I/O、時鐘、硬體故障;異常源於內部正在執行的程式,同步處理,分為陷入、故障、終止,如系統呼叫、頁故障、斷點、許可權保護、程式
  5. 中斷響應(硬體):指令週期末掃描中斷暫存器,CPU切換到核心態,儲存現場(PSW+PC),通過中斷碼查中斷向量表(中斷處理程式入口+處理機狀態字),推送中斷處理程式入口到暫存器
  6. 中斷處理程式(軟體):儲存相關暫存器資訊,分析發生原因。執行處理功能,恢復現場
  7. 系統呼叫:使用者在程式設計時可以呼叫的作業系統功能,如程式控制、通訊、檔案使用、目錄操作、裝置管理、資訊維護
  8. 程式呼叫:應用程式可以通過庫函式和API進入系統呼叫,也可直接引發系統呼叫,系統呼叫再呼叫對應核心函式
  9. 系統呼叫設計:中斷/異常機制(支援系統呼叫服務的實現),陷入指令(引發異常,使用者態切換到核心態),系統呼叫號和引數(不同系統呼叫的編號),系統呼叫表(服務程式的入口地址),引數傳遞(陷入指令自帶、通用暫存器、記憶體中專用堆疊區)
  10. 系統呼叫過程:CPU執行到特殊的陷入指令;中斷硬體保護現場,通過門描述符(段選擇符+偏移量)查系統呼叫表;轉入查到的系統呼叫總入口程式,保護現場,儲存引數到核心堆疊,通過系統呼叫號查系統呼叫表;執行查到的系統呼叫例程;恢復現場,返回使用者程式

程式執行緒模型

  1. 併發程式:一段時間內,單處理器上多個程式同時處於開始執行但未結束狀態,且次序不是事先確定的
  2. 程式:程式的一次執行,正在執行程式的抽象、將CPU虛擬為多個,系統資源分配單位,每個具有獨立地址空間,作業系統將CPU排程給程式
  3. 程式控制塊PCB:程式描述(PID、使用者標識、程式組關係)、程式控制(狀態、優先順序、入口地址、佇列指標)、資源和使用狀況(儲存空間、檔案)、CPU現場(程式不執行時儲存暫存器值、指向頁表的指標)
  4. 程式狀態:執行(佔用CPU)、就緒(CPU不空閒)、等待/阻塞(等待某事);建立(資訊設定完但資源有限)、終止(統計資訊、回收資源);掛起(分就緒掛起和阻塞掛起,回收記憶體存磁碟,條件允許後可啟用)
  5. 程式佇列:每類程式狀態有一個或多個佇列,元素為PCB,程式狀態改變就是換隊
  6. 程式控制:利用完成某種功能的不允許中斷的控制原語,轉換程式狀態
  7. Unix程式控制操作:fork(複製呼叫程式建立)、exec(新程式碼覆蓋原地址空間建立)、wait(主動阻塞)、exit(撤銷,回收資源和PCB)
  8. 程式層次結構:程式由其他程式建立,Unix程式家族樹以init為根,Windows中各程式的地位相同
  9. 程式地址空間:核心地址空間、使用者地址空間(程式碼段、資料段、堆、共享庫、棧)
  10. 程式映像:程式地址空間、硬體暫存器、PCB及各種資料結構、進入程式時所需的核心棧
  11. 上下文context切換:CPU硬體狀態從一個程式換到另一個,執行的程式硬體狀態儲存在CPU暫存器上,不執行時儲存在PCB中,之後可推送至CPU暫存器
  12. 引入執行緒:應用需要(如Web伺服器)、減少開銷(建立和切換花費時間少,通訊無需核心)、提升效能(多處理器)
  13. 執行緒與程式:執行緒是程式中的執行實體,CPU的排程單位,增加了多個執行序列
  14. 執行緒屬性:ID、狀態、上下文、棧指標;共享程式的地址空間和其他資源;程式以單執行緒程式開始,執行緒由執行緒建立和撤銷
  15. 執行緒的實現:Unix是使用者級執行緒,核心無法感知執行緒存在,切換較快,但同程式的執行緒不能分到多CPU上,阻塞會阻塞整個程式;Windows是核心級執行緒,核心中包含執行緒表,排程以執行緒為單位;Solaris為混合模型,執行緒建立在使用者空間,排程在核心
  16. Pthread:POSIX多執行緒程式設計介面,執行緒協商誰上CPU;如yield函式主動讓出CPU
  17. 程式特性:併發(任何程式都可和其他同時推進)、動態(生命週期中切換狀態)、獨立(資源)、互動(程式間產生關係)、非同步(程式獨立不可預知的推進)、程式映像(程式+資料+棧+PCB)
  18. 可重入程式:純程式碼,執行不改變,呼叫它的程式提供資料區;大部分程式和執行緒只有可重入程式才可以執行

處理器排程

  1. CPU排程:在合適的排程時機,按排程演算法,排程就緒佇列中的程式進CPU
  2. 排程時機:核心對中斷/異常/系統呼叫處理後,就緒佇列改變引發重新排程,如程式終止、建立、執行轉入阻塞、執行轉入就緒
  3. 程式切換:切換全域性頁目錄載入新的地址空間,切換核心棧和硬體上下文;程式A切換到B,儲存A上下文環境,更新A的PCB,A移至合適佇列,B設為執行態,從B的PCB恢復上下文
  4. 排程演算法考慮:優先順序與優先數?多級就緒佇列如何組織?是否搶佔?I/O密集或CPU密集友好?時間片長度?
  5. 不同系統的排程演算法:批處理處理看重吞吐量、週轉時間、CPU利用率、平衡(先來先服務FCFS、最短作業優先SJF、最短剩餘時間優先SRTN、最高響應比優先HRRN);互動式系統看重響應時間、平衡(輪轉Round-Robin、最高優先順序HPF、多級反饋佇列Feedback、類似SJF的最短程式優先SPN)
  6. 優先順序反轉:搶佔式最高優先順序排程時,高優先順序受制於低優先順序(如臨界區等待),而低優先順序被執行時間較長的中優先順序程式搶佔,導致高優先順序無法上CPU
  7. 多級反饋佇列:多個就緒佇列,順次優先順序遞減,時間片遞增,每個佇列內部按時間片輪轉;新建程式進一級佇列,用完時間片進下一級就緒佇列;因阻塞進入等待佇列的程式在等待完畢後,回到原級別的就緒佇列,但可設定時間片是否重新分配,加入隊首或隊尾
  8. 排程演算法對比:
    排程演算法 是否搶佔CPU 吞吐量 響應時間 開銷 對程式的影響 飢餓問題
    FCFS N 不強調 可能很長 對短程式和I/O不利
    SJF N 對長程式不利
    SRTN Y 對長程式不利
    HRRN N 很好的平衡
    Round-Robin Y 時間片小則低 公平
    Feedback Y 不強調 對I/O型有利
  9. 系統排程演算法:Unix動態優先數,5.3BSD多級反饋佇列,Linux搶佔式排程,Windows基於優先順序的搶佔式多工排程

  10. Windows執行緒排程:排程單位是執行緒,基於動態優先順序的搶佔式排程,結合時間配額的調整;引發排程的條件除執行緒終止、建立、執行轉入阻塞、執行轉入就緒外,還有執行緒優先順序改變和親和處理機集合改變
  11. 執行緒優先順序提升:I/O完成、訊號量或事件等待結束、前臺程式的執行緒完成等待、視窗被喚醒、飢餓超時

同步機制

  1. 併發:程式的執行是間斷的,相對執行速度不可預測,共享資源帶來制約性
  2. 競爭條件:多個程式讀寫共享資料時,結果取決於程式的精確時序
  3. 程式互斥:多個程式的臨界區程式碼對臨界資源的使用需要排他性,各程式間競爭使用這些共享資源
  4. 臨界區:臨界區空則可進入,但臨界區中至多一個程式,臨界區外的程式不能阻塞其他程式進臨界區,不能讓想進臨界區的程式無限等待
  5. 軟體解決互斥:臨界區空閒標誌(free)、進區的使用者(turn)、各自進區標誌(pturn+qturn)、dekker演算法(turn+pturn+qturn)、peterson(enter_region+leave_region/turn+interest[])、
  6. 硬體解決互斥:開關中斷指令(特權指令、中斷遮蔽限制CPU併發、不適合多CPU)、測試並加鎖指令(對匯流排加鎖)、交換指令(交換暫存器與鎖變數)
  7. 忙等待:程式在得到臨界區訪問權前,在CPU持續測試而不做別的事;多處理器中使用自旋鎖測試,讓其他CPU改鎖狀態,切換代價反而比持續測試大
  8. 程式同步:多程式中發生的事件存在時序關係,需要協作完成任務
  9. 生產者/消費者問題:生產者寫入緩衝區,消費者從緩衝區取資料,不能同時消費和生產,緩衝區空不能消費,緩衝區滿不能生產
  10. 訊號量:用於程式間傳遞資訊的整數值,包含佇列;操作包括初始化(非負數),原語操作P(減)V(增);二元訊號量解決互斥,多值訊號量解決同步
  11. PV解決互斥:劃定臨界區,初始化mutex為1,進臨界區前執行P申請資源,出臨界區後執行V喚醒等待
  12. PV解決生產者/消費者:初始化mutex為1,empty為空位,full為0;用mutex對緩衝區進行PV解決互斥,用empty和full進行PV解決同步
  13. PV解決讀者/寫者問題:允許多個讀者同時讀,不允許同時讀寫;針對w訊號,第一個讀前P,最後一個讀完V,寫前後PV;針對讀者序列rc,也需要在修改或判斷前後用PV保護
  14. Linux讀寫鎖:每個執行實體對臨界區的訪問或讀或寫,不會同時讀寫,此時可應用讀者/寫者模型;如路由表中的讀寫鎖
  15. 管程:有自己名字的特殊模組,由關於共享資源的資料結構和在其上的操作過程組成,程式可呼叫管程的過程以操作管程中的資料結構;編譯器複雜管程的互斥,設定條件變數及等待喚醒操作解決同步問題
  16. 管程內多程式:若P喚醒Q,則管程中同時存在活躍狀態的P和Q兩個程式;處理方法有Hoare(P等待Q)、Mesa(Q等待P),Hansen併發pascal(讓喚醒是管程中最後可執行操作)
  17. 管程應用:直接構造條件變數恰當的管程,用已有的同步機制間接構造;C++不支援管程,Java支援類似管程
  18. Hoare管程:管程入口設定入口等待佇列,內部設定緊急等待佇列放置喚醒程式,P喚醒Q則P等待Q;wait(c)優先喚醒緊急佇列隊首,再將程式加入c鏈尾,signal(c)優先喚醒c鏈首進入緊急等待佇列
  19. Mesa管程:P喚醒Q則Q等待P,避免額外程式切換開銷;signal衍化到notify,程式排程執行前再次檢查條件,每個條件原語關聯監視計時器超時即就緒,再衍化到broadcast使所有該條件佇列上等待的程式進入就緒佇列;Mesa優於Hoare
  20. Pthread中的同步機制:互斥變數保護臨界區Pthread_mutex_[init/destroy/lock/unlock/trylock];條件變數解決同步Pthread_cond_[init/destroy/wait/signal/broadcast]
  21. 程式間通訊:訊息傳遞、共享記憶體、管道、用於網路分散式系統的套接字和遠端過程呼叫
  22. 訊息傳遞:send原語,陷入核心,作業系統複製到訊息緩衝區,並掛接訊息到接受程式的訊息佇列指標;receive原語,作業系統將訊息複製到接收程式的地址空間
  23. 共享記憶體:實體記憶體中建立一塊能夠共享的記憶體空間,將實體記憶體空間對映到兩個程式的地址空間;利用讀者/寫者問題解決互斥
  24. 管道:利用緩衝傳輸介質記憶體或檔案連線兩個程式;按字元流讀寫,先進先出,解決互斥同步
  25. Linux核心同步機制:原子操作(不可分割)、屏障(一組執行緒都到達匯合點後再一起推進)、自旋鎖、訊號量、完成變數、互斥體等

儲存模型

  1. 地址重定位:將邏輯/相對/虛擬地址,對映到物理/絕對/實地址;程式載入時用軟體靜態重定位,執行每條指令時用記憶體管理單元MMU動態重定位
  2. 實體記憶體管理:資料結構(點陣圖、空閒+已分配區表、空閒塊連結串列);分配演算法(首次適配、下次適配、最佳適配、最差適配)
  3. 夥伴系統:Linux底層記憶體分配演算法,記憶體按2的整數次冪劃分,組成空閒塊連結串列,在連結串列中查詢長度大於等於申請空間且不大於其一半的空閒塊,記憶體回收時遞迴合併空閒夥伴
  4. 基本記憶體管理方案:佔據記憶體連續空間(單一連續區、固定分割槽、可變分割槽),分佈在記憶體中不連續區域(頁式、段式、段頁式)
  5. 單一連續區:單一程式獨佔記憶體,總是被載入到同一記憶體地址
  6. 固定分割槽:將記憶體分割為若干連續分割槽,大小可不同但必須固定不變,每個分割槽裝載一個程式
  7. 可變分割槽:根據程式需要,動態分割出分割槽分配給程式
  8. 頁式:使用者地址空間劃分為大小相等的頁,記憶體空間按頁大小劃分為多個頁框,分配單位是頁
  9. 段式:使用者地址空間按自身邏輯劃分為若干段,記憶體空間劃分為若干個長度不同的區域(可變分割槽),分配單位是段
  10. 段頁式:使用者程式地址空間是段式,每段內含有多頁,記憶體空間是頁式,分配單位是頁
  11. 緊縮技術:在記憶體中移動程式,將所有小的碎片合併為較大的空閒區,不能解決頁式管理造成的內碎片
  12. 覆蓋技術:將不會同時執行的程式段共享同一塊記憶體,需要程式設計師顯式程式設計,現在很少用
  13. 交換技術:將程式記憶體中的堆疊(靜態資料一直在磁碟),在很少使用或記憶體不夠時,暫時移動到磁碟上的交換區(swap/pagefile),讓外存中的程式佔據其原有記憶體
  14. 空間增長:程式的資料段和棧段會持續增長(堆向上,棧向下),可預留一些空間供給它們同向或反向增長
  15. 虛擬儲存:程式執行時先將部分裝入記憶體,另一部分暫留在磁碟,執行指令或訪問資料時按需從磁碟調入記憶體;虛存構建在儲存體系上,由作業系統排程各儲存器的使用;虛存大小與機器位數和磁碟大小有關
  16. 儲存保護:每個程式有獨立地址空間,訪問合法地址範圍,許可權合法
  17. 虛擬頁式:虛擬儲存技術結合頁式儲存管理;方式有請求調頁和預先調頁
  18. 頁式對映:遞迴查詢多級頁表起始地址,與頁內偏移拼接為實體地址;頁表項中有效位代表是否已存入記憶體
  19. 反轉頁表:以實體記憶體大小建立頁表,將虛擬地址的頁號部分雜湊,指向反轉頁表的某個位置,藉助連結串列解決衝突
  20. 記憶體管理單元MMU:查頁表和頁表項的功能位,將虛擬地址轉換為實體地址
  21. 塊表TLB:由cache組成,是按內容並行查詢的相聯儲存器,儲存部分頁表項;MMU先查快表,沒命中再查頁表
  22. 頁錯誤:地址轉換過程中硬體產生異常,包括缺頁、違反許可權、地址指向未定義
  23. 駐留集:給每個程式分配的頁框數;可根據程式型別和需要的固定分配,或依據缺頁率評估的動態分配
  24. 置換策略:置換範圍為當前程式的駐留集叫區域性置換,記憶體中所有未鎖定頁面都為候選叫全域性置換;區域性、全域性置換結合固定、動態分配策略,共產生三種方案,區域性固定、全域性固定、全域性動態
  25. 清除策略:從程式駐留集中收回頁框;分頁守護程式,保證系統中總有一定數量的空頁框;頁緩衝技術,不丟棄置換頁而是加入修改頁連結串列中,定期批量寫回磁碟
  26. 頁面置換演算法:OPT(未來最遠使用)、NRU(LRU的粗略近似)、FIFO(先進先出)、第二次機會(第一次先放隊尾)、時鐘(在環上移動指標)、LRU(優秀開銷大)、老化(左置右移)、工作集(保持活躍頁面的集合)
  27. 影響缺頁次數:置換(磁碟排程頁面比執行時間多產生顛簸),頁面大小(最優值為2倍的程式規模乘頁表項再開根),程式編制方法(多維陣列),駐留集(平衡點)
  28. Belady現象:FIFO演算法,駐留集增大,缺頁率可能反而增加
  29. 記憶體對映檔案:用系統呼叫將檔案對映到虛擬地址空間,訪問檔案就像訪問大陣列
  30. 寫時複製:父程式建立子程式後共享一塊標記為寫時複製的虛擬空間,當子程式執行自己程式碼資料時,作業系統為其分配新的空間

檔案系統

  1. 檔案:標識為檔名,對使用者而言有完整的邏輯含義,對作業系統而言是資訊項的序列
  2. 檔案系統:管理磁碟空間,實現按名存取(名字空間到磁碟空間的轉換),共享及保護,向使用者和I/O提供介面
  3. 檔案分類:普通檔案(包含使用者資訊的ASCII或二進位制檔案)、目錄檔案(管理檔案系統的系統檔案)、特殊檔案(字元/塊裝置)、管道檔案、套接字
  4. 邏輯結構:流式檔案(字元)、記錄式檔案(記錄)
  5. 蔟:資訊儲存、分配、傳輸的獨立物理塊單元
  6. 磁碟結構:實體地址由磁頭/盤面號、磁軌/柱面號、扇區號構成;扇區包括10B標題、512B資料、12~16B的ECC糾錯資訊
  7. 磁碟中檔案相關資料結構:點陣圖(設定0/1)、空閒塊表(起始塊號和空閒長度)、空閒塊連結串列(每個節點含下一個指標)、成組連結法(從專用塊出發,每組首個空閒塊記錄下組的空閒塊號和塊數)
  8. 檔案控制塊FCB:包含管理檔案所需的檔案屬性或後設資料,包括名字、時間、地址、標誌等
  9. 檔案目錄:統一管理每個檔案的後設資料,完成名字到地址轉換;檔案目錄以目錄檔案的形式儲存在磁碟;目錄項是FCB
  10. 物理結構:順序結構、連結結構、索引結構(存放索引表的索引塊地址放在FBC中)
  11. 索引表的組織:索引表很大,需要多個物理快儲存時,可採用連結方式連結多個塊、上級索引表每個表項放置下級索引表地址的多級索引、或兩者結合的綜合模式
  12. 檔案卷:磁碟邏輯分割槽,由一個或多個蔟組成,包含2的整數次冪個扇區;格式化就是在檔案捲上初始化後設資料,建立檔案系統
  13. 分割槽內容:引導區(引導作業系統所需資訊,第一扇區)、卷資訊(總蔟數、空閒蔟數和指標、空閒FCP數量和指標等)、目錄檔案(根目錄及其他目錄檔案)、使用者檔案
  14. Unix檔案系統佈局:引導區、超級資料塊(檔案系統結構資訊)、空閒區管理(空閒表或相關結構)、i節點區、根目錄區
  15. Windows中FAT系統佈局:引導區(檔案系統資料記錄)、檔案分配表1(蔟的分配狀態、標註下一簇)、檔案分配表2(1的映象)、根目錄、其他目錄和檔案
  16. 記憶體中檔案相關資料結構:系統開啟檔案表,整個系統一張,包括FCB(i節點)資訊、引用計數、修改標記;使用者開啟檔案表,儲存在每個程式的PCB中,包括檔案描述符、開啟方式、讀寫指標、系統開啟檔案表索引
  17. 目錄項分解:把FCB分為2部分,符號目錄項(檔名、檔案號)和基本目錄項(除檔名外所有欄位,描述檔案相關資訊);Unix中FCB=目錄項+i節點,每個檔案由目錄項、i節點、若干磁碟塊構成
  18. Unix檔案查詢/a/b/c:超級資料塊中得到根目錄檔案地址,根目錄檔案中得到a的i節點地址,a的i節點中得到a目錄檔案地址,a目錄檔案中得到b的i節點地址,b的i節點中得到b目錄檔案地址,b目錄檔案中得到c的i節點地址,c的i節點中得到檔案實體地址
  19. FAT檔案系統:按FAT表項位元組數分為FAT12、FAT16、FAT32;FAT16根目錄大小固定,不支援Unicode;目錄項都為32B,包含檔案屬性和起始蔟號
  20. 檔案分配表FAT:可看作整數陣列,每個整數代表磁碟分割槽的一個蔟號,記錄狀態和下一組蔟號
  21. 解決長檔名:使用不固定長度的目錄項,新增長度和結束標誌;名字統一在堆存放,目錄項中包含指向堆內的指標;FAT32的每個長目錄項可儲存13字元,長目錄項前必須有一個普通的短目錄項
  22. 檔案操作:建立(建FCB,分配儲存空間);開啟(找目錄項,更新共享計數,獲取檔案描述符);指標定位(fd查使用者開啟檔案表找表項,設定讀寫指標);讀檔案(由檔案描述符找FCB,轉換為物理塊,申請緩衝區,進行I/O);重新命名(修改FCB中的名字)
  23. 一致性:磁碟塊寫回記憶體前出現故障,後設資料一致性被破壞;Unix中用兩個表記錄使用中的塊和空閒塊,對比修復一致性
  24. 寫入策略:同時考慮速度和一致性;通寫、延遲寫、可恢復寫(日誌,如NTFS、ext3)
  25. 訪問控制:訪問控制表(每個檔案能被哪些使用者操作),能力表(每個使用者能操作哪些檔案);使用者(owner、group、other),操作(r、w、x、-)
  26. 提高效能:目錄項分解、當前目錄、磁碟碎片整理、塊快取記憶體(一式三份存在於磁碟、記憶體、快取)、提前讀取、合理分配磁碟空間(FCB與蔟同組)、磁碟排程、資訊的優化分佈(磁軌排列方式)、記錄的成組與分解(若干邏輯記錄組成一塊)、RAID等
  27. 磁碟排程演算法:FCFS、最短尋道時間優先、SCAN(電梯)、C-SCAN(總是從0號向內)、N-step-SCAN(每次服務n長子佇列)、FSCAN(兩個佇列,新請求入另一個佇列)、旋轉排程(旋轉延遲)
  28. RAID:獨立磁碟冗餘矩陣,檔案卷跨盤,用資料分條(如RAID0)並行I/O提高效能、用映象(如RAID1)和校驗(如RAID4)提供容錯

I/O系統

  1. I/O管理:建立裝置和記憶體間的資料通道,從應用程式或檔案系統獲得請求,交由裝置硬體響應,過程由CPU控制
  2. 裝置分類:塊裝置(以塊定址)、字元裝置(速率低);獨享裝置(單程式使用,可靜態或動態分配)、共享裝置(多程式排隊分時共享)、虛裝置(共享裝置模擬的獨佔裝置,如Spooling技術)
  3. 管理目標:按照使用者請求,控制裝置完成與記憶體間的資料交換;建立方便、統一的獨立於裝置的介面;提高CPU與裝置、裝置與裝置的並行工作能力;保護資料的安全性、完整性、保密性
  4. 硬體組成:機械部分是裝置本身,物理裝置;電子部分是裝置控制器,完成埠編址、訊號處理、緩衝
  5. I/O地址:獨立編址,埠與記憶體地址空間完全獨立,分配給I/O地址空間很少,操作不靈活;記憶體映像編址,將I/O埠看作儲存單元,與記憶體空間統一編址,不能對控制暫存器快取記憶體
  6. 控制方式:可程式設計(輪詢,CPU忙等待)、中斷驅動(操作結束後用中斷主動通知驅動)、DMA(直接儲存器訪問,不通過CPU)
  7. I/O演化:CPU控制->輪詢->中斷->DMA->單獨的處理器->擁有區域性儲存器(本身已是計算機)
  8. 軟體層次:使用者程式I/O(使用者層執行輸入輸出系統呼叫,準備假離線)、邏輯I/O(驅動程式的統一介面,錯誤報告,緩衝,分配和釋放裝置)、裝置驅動程式(設定暫存器,檢查執行狀態)、中斷處理程式(完成後喚醒裝置驅動)
  9. 裝置獨立性:使用者編寫程式時使用邏輯裝置名,由系統實現邏輯裝置到物理裝置的對映;作業系統設計I/O軟體時,除直接與裝置打交道的底層軟體外不依賴於硬體;裝置分配靈活,易於實現I/O重定向
  10. 緩衝技術:解決到達與離開速度不匹配的問題,提高CPU與I/O裝置的並行性;按緩衝區位置有硬緩衝、軟緩衝,按緩衝池個數有單緩衝、雙緩衝、緩衝池
  11. 緩衝區:由緩衝控制塊和緩衝資料區組成,相關資料結構有空閒緩衝區佇列av鏈和裝置緩衝佇列b鏈;開始時在av鏈,開始I/O請求時在I/O請求佇列和b鏈,完成I/O後在av鏈和b鏈
  12. 裝置管理資料結構:描述裝置的表格、建立同類資源的佇列、面向I/O程式的動態資料結構、建立I/O的佇列
  13. 驅動程式:每個裝置驅動程式管理一類裝置,從上層接受並釋放命令,監督執行時可讓程式等待也可以不等待;與作業系統、用於初始化的系統引導、裝置都有介面
  14. I/O程式:系統級程式,優先順序高;對於I/O請求,使用者通過send傳送給I/O程式,阻塞自己直到I/O完成並被喚醒,作業系統通過wakeup喚醒I/O程式,完成時使用者要求的任務;對於I/O中斷,作業系統判斷為正常中斷則交給I/O程式,異常則交給錯誤處理程式
  15. 提高效能:緩衝(減少CPU和I/O的速度差距)、非同步I/O(等待I/O期間CPU可進行其他操作)、DMA(CPU擺脫I/O)

死鎖

  1. 死鎖:每個程式無限等待被該組程式中另一程式佔有的資源;與之對比,活鎖為先加鎖再輪詢不阻塞不推進,飢餓是由於資源分配策略如優先順序導致得不到資源
  2. 死鎖條件:互斥使用(資源獨佔),佔有且等待(部分分配),不可搶佔(不可剝奪),迴圈等待(程式等待環路)
  3. 資源分配圖:程式是圓,資源類是方,資源例項是方框中黑點;申請邊(程式,資源類)表示程式請求某類資源,分配邊(資源例項,程式)表示資源分配給某程式
  4. 死鎖定理:在資源分配圖中,無環路必無死鎖,有環路可能有死鎖,有環且資源類只包含一個例項必有死鎖
  5. 資源分配圖簡化:找只有分配邊的資源,去掉邊分配給需要的程式,自己變成孤點;重複上述步驟,若最後所有都是孤點則無死鎖,否則有死鎖
  6. 解決死鎖:鴕鳥演算法(不考慮死鎖)、死鎖預防(靜態分配)、死鎖避免(動態評估)、死鎖檢測和解除
  7. 死鎖預防:破壞死鎖必要條件;獨佔轉為共享資源,一次性申請和分配、主動釋放部分分配,作業系統幫助搶佔,資源有序分配法(資源按熱度編號,程式按資源號增序請求)
  8. 死鎖避免:對程式發出的每一個能滿足的資源申請進行動態檢查,根據分配後系統是否為不安全狀態(死鎖)決定是否分配
  9. 安全序列:程式序列中任意程式,它還需要的資源不超過當前系統剩餘資源與它之前的所有程式佔有資源的和;此時系統為安全狀態,一定無死鎖,若不存在任何安全序列則為不安全狀態,一定導致死鎖
  10. 銀行家演算法:五類陣列available, max[i], allocation[i], need[i], request[i];當程式i提出request[i]時,若不大於available則將allocation[i]加request[i]、available和need[i]減request[i],此時判斷新狀態是否安全,安全則分配否則等待
  11. 死鎖檢測:允許死鎖發生,在資源不足、利用率下降時或週期性檢測系統進展判斷是否真的有死鎖發生;死鎖後解除死鎖並以最小的代價恢復系統執行,可通過撤銷死鎖程式組、回退再啟動、按某種原則逐一撤銷程式或剝奪資源
  12. 哲學家就餐:同步互斥問題,五個哲學家日常行為是思考,兩兩間放一隻筷子,飢餓時要從左右取兩隻筷子才可吃飯,都先拿右邊筷子時出現死鎖;解決方法包括最多允許四個哲學家、利用管程一次性拿兩隻筷子、設定哲學家的三種狀態結合檢測和PV操作、每個哲學家按筷子增序拿、由銀行家演算法將最後的筷子分配給已拿到一隻的人

相關文章