面試CS基礎之操作系統


前言

北大《操作系統原理》課堂筆記,大綱如下:

  1. 操作系統概述
  2. 操作系統運行環境
  3. 進程線程模型
  4. 處理器調度
  5. 同步機制
  6. 存儲模型
  7. 文件系統
  8. I/O系統
  9. 死鎖

操作系統概述

  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. 系統調度算法:Unix動態優先數,5.3BSD多級反饋隊列,Linux搶占式調度,Windows基于優先級的搶占式多任務調度
  9. Windows線程調度:調度單位是線程,基于動態優先級的搶占式調度,結合時間配額的調整;引發調度的條件除線程終止、創建、運行轉入阻塞、運行轉入就緒外,還有線程優先級改變和親和處理機集合改變
  10. 線程優先級提升:I/O完成、信號量或事件等待結束、前臺進程的線程完成等待、窗口被喚醒、饑餓超時
  11. 調度算法對比:
調度算法 是否搶占CPU 吞吐量 響應時間 開銷 對進程的影響 饑餓問題
FCFS N 不強調 可能很長 對短進程和I/O不利
SJF N 對長進程不利
SRTN Y 對長進程不利
HRRN N 很好的平衡
Round-Robin Y 時間片小則低 公平
Feedback Y 不強調 對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操作、每個哲學家按筷子增序拿、由銀行家算法將最后的筷子分配給已拿到一只的人
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • word直接復制來了,格式就不改了。至于這門課怎么復習,只要平時實驗都認真完成、報告認真寫,平時分都很高;考試的話...
    Jozhn閱讀 4,626評論 0 8
  • 北林操作系統2015級教材用書:《操作系統實用教程》第三版 任愛華,王雷 概念題: 實時操作系統:指操作系統能及時...
    仰望星空的先生閱讀 5,040評論 2 27
  • 第一章:概述 什么是操作系統? 是一段一直運行在計算機上的程序 是資源的分配者 向上管理軟件向下管理硬件 為用戶提...
    Moonsmile閱讀 2,346評論 0 4
  • 獨自去酒吧喝了兩瓶啤酒,對于我這種兜里從來沒有超過二百塊錢的窮逼來說,敢去酒吧這種比較小資的地方也算是勇氣可嘉。 ...
    北默閱讀 404評論 2 0
  • 從邏輯上講,世俗和宗教是有先后之分的,順序上必然是先有“組織性的世俗”,隨后才會有“組織性的宗教”,所以在基督教在...
    W小萌閱讀 1,468評論 1 4