本教程涵蓋面試筆試中操做系統知識點,做爲複習和學習使用,轉載請註明出處,謝謝
目錄:程序員
操做系統概述面試
執行程序:經過調度選中程序開始執行,在執行過程當中,不斷陷入操做系統提供各類服務支持,再調度選中程序,直到完成
功能:有效(充分利用CPU、內存、磁盤等資源)、合理(公平的資源管理策略)、易用(用戶界面和編程接口)
做用:管理資源(硬件、軟件)、向用戶提供服務(建立、執行、IO、統計)、對硬件機器擴展(屏蔽硬件細節、提供虛擬機器界面)
特徵:併發(處理多個同時性活動)、共享(非同時互斥共享、同時共享有限系統資源)、虛擬(映射爲若干邏輯實體)、隨機(不可預知運行次序)
典型架構(用戶態、內核態):Windows(硬件抽象、設備驅動、內核、圖形窗口、執行體、內核態可調用接口、服務分發器、DLL)、Unix(硬件控制層、調度、進程間通訊、存儲管理、內存管理、文件系統、設備驅動、系統調用接口)、Linux(進程、調度、虛擬內存、物理內存管理、各類設備驅動、網絡模塊、陷入異常模塊、中斷處理模塊、系統調用接口) 、Android(Linux內核、系統庫和Android運行時系統、應用程序框架、應用程序)
分類:批處理(Spooling緩存I/O到磁盤)、分時(時間片、追求響應時間、交互式)、實時(嚴格時間、高可靠)、我的計算機(使用方便)、網絡(通訊、資源共享)、分佈式(多機協同完成一項任務)、嵌入式(特定裝置中的軟硬件系統)
操做系統運行環境
CPU:運算器、控制器、通用寄存器、控制和狀態寄存器(PC、IR、PSW)、高速緩存
CPU狀態:內核態(特權指令R0)、用戶態(用戶R3)
中斷/異常機制:CPU暫停當前執行程序,保留現場,硬件自動轉去處理程序,處理完後回到斷點,繼續被打斷的程序
事件:中斷響應外部事件,異步處理,老是返回下一條指令,如I/O、時鐘、硬件故障;異常源於內部正在執行的程序,同步處理,分爲陷入、故障、終止,如系統調用、頁故障、斷點、權限保護、程序
中斷響應(硬件):指令週期末掃描中斷寄存器,CPU切換到內核態,保存現場(PSW+PC),經過中斷碼查中斷向量表(中斷處理程序入口+處理機狀態字),推*斷處理程序入口到寄存器
中斷處理程序(軟件):保存相關寄存器信息,分析發生緣由。執行處理功能,恢復現場
系統調用:用戶在編程時能夠調用的操做系統功能,如進程控制、通訊、文件使用、目錄操做、設備管理、信息維護
程序調用:應用程序能夠經過庫函數和API進入系統調用,也可直接引起系統調用,系統調用再調用對應內核函數
系統調用設計:中斷/異常機制(支持系統調用服務的實現),陷入指令(引起異常,用戶態切換到內核態),系統調用號和參數(不一樣系統調用的編號),系統調用表(服務程序的入口地址),參數傳遞(陷入指令自帶、通用寄存器、內存中專用堆棧區)
系統調用過程:CPU執行到特殊的陷入指令;中斷硬件保護現場,經過門描述符(段選擇符+偏移量)查系統調用表;轉入查到的系統調用總入口程序,保護現場,保存參數到內核堆棧,經過系統調用號查系統調用表;執行查到的系統調用例程;恢復現場,返回用戶程序
進程線程模型
併發程序:一段時間內,單處理器上多個程序同時處於開始運行但未結束狀態,且次序不是事先肯定的
進程:程序的一次執行,正在運行程序的抽象、將CPU虛擬爲多個,系統資源分配單位,每一個具備獨立地址空間,操做系統將CPU調度給進程
進程控制塊PCB:進程描述(PID、用戶標識、進程組關係)、進程控制(狀態、優先級、入口地址、隊列指針)、資源和使用情況(存儲空間、文件)、CPU現場(進程不執行時保存寄存器值、指向頁表的指針)
進程狀態:運行(佔用CPU)、就緒(CPU不空閒)、等待/阻塞(等待某事);建立(信息設置完但資源有限)、終止(統計信息、回收資源);掛起(分就緒掛起和阻塞掛起,回收內存存磁盤,條件容許後可激活)
進程隊列:每類進程狀態有一個或多個隊列,元素爲PCB,進程狀態改變就是換隊
進程控制:利用完成某種功能的不容許中斷的控制原語,轉換進程狀態
Unix進程控制操做:fork(複製調用進程建立)、exec(新代碼覆蓋原地址空間建立)、wait(主動阻塞)、exit(撤銷,回收資源和PCB)
進程層次結構:進程由其餘進程建立,Unix進程家族樹以init爲根,Windows中各進程的地位相同
進程地址空間:內核地址空間、用戶地址空間(代碼段、數據段、堆、共享庫、棧)
進程映像:進程地址空間、硬件寄存器、PCB及各類數據結構、進入進程時所需的內核棧
上下文context切換:CPU硬件狀態從一個進程換到另外一個,運行的進程硬件狀態保存在CPU寄存器上,不運行時保存在PCB中,以後可推送至CPU寄存器
引入線程:應用須要(如Web服務器)、減小開銷(建立和切換花費時間少,通訊無需內核)、提高性能(多處理器)
線程與進程:線程是進程中的運行實體,CPU的調度單位,增長了多個執行序列
線程屬性:ID、狀態、上下文、棧指針;共享進程的地址空間和其餘資源;程序以單線程進程開始,線程由線程建立和撤銷
線程的實現:Unix是用戶級線程,內核沒法感知線程存在,切換較快,但同進程的線程不能分到多CPU上,阻塞會阻塞整個進程;Windows是內核級線程,內核中包含線程表,調度以線程爲單位;Solaris爲混合模型,線程建立在用戶空間,調度在內核
Pthread:POSIX多線程編程接口,線程協商誰上CPU;如yield函數主動讓出CPU
進程特性:併發(任何進程均可和其餘同時推動)、動態(生命週期中切換狀態)、獨立(資源)、交互(進程間產生關係)、異步(進程獨立不可預知的推動)、進程映像(程序+數據+棧+PCB)
可重入程序:純代碼,執行不改變,調用它的進程提供數據區;大部分進程和線程只有可重入程序才能夠運行
處理器調度
CPU調度:在合適的調度時機,按調度算法,調度就緒隊列中的進程進CPU
調度時機:內核對中斷/異常/系統調用處理後,就緒隊列改變引起從新調度,如進程終止、建立、運行轉入阻塞、運行轉入就緒
進程切換:切換全局頁目錄加載新的地址空間,切換內核棧和硬件上下文;進程A切換到B,保存A上下文環境,更新A的PCB,A移至合適隊列,B設爲運行態,從B的PCB恢復上下文
調度算法考慮:優先級與優先數?多級就緒隊列如何組織?是否搶佔?I/O密集或CPU密集友好?時間片長度?
不一樣系統的調度算法:批處理處理看重吞吐量、週轉時間、CPU利用率、平衡(先來先服務FCFS、最短做業優先SJF、最短剩餘時間優先SRTN、最高響應比優先HRRN);交互式系統看重響應時間、平衡(輪轉Round-Robin、最高優先級HPF、多級反饋隊列Feedback、相似SJF的最短進程優先SPN)
優先級反轉:搶佔式最高優先級調度時,高優先級受制於低優先級(如臨界區等待),而低優先級被運行時間較長的中優先級進程搶佔,致使高優先級沒法上CPU
多級反饋隊列:多個就緒隊列,順次優先級遞減,時間片遞增,每一個隊列內部按時間片輪轉;新建進程進一級隊列,用完時間片進下一級就緒隊列;因阻塞進入等待隊列的進程在等待完畢後,回到原級別的就緒隊列,但可設置時間片是否從新分配,加入隊首或隊尾
調度算法對比:
調度算法 是否搶佔CPU 吞吐量 響應時間 開銷 對進程的影響 飢餓問題
FCFS N 不強調 可能很長 小 對短進程和I/O不利 無
SJF N 高 短 大 對長進程不利 有
SRTN Y 高 短 大 對長進程不利 有
HRRN N 高 短 大 很好的平衡 無
Round-Robin Y 時間片小則低 短 小 公平 無
Feedback Y 高 不強調 大 對I/O型有利 有
系統調度算法:Unix動態優先數,5.3BSD多級反饋隊列,Linux搶佔式調度,Windows基於優先級的搶佔式多任務調度算法
Windows線程調度:調度單位是線程,基於動態優先級的搶佔式調度,結合時間配額的調整;引起調度的條件除線程終止、建立、運行轉入阻塞、運行轉入就緒外,還有線程優先級改變和親和處理機集合改變
線程優先級提高:I/O完成、信號量或事件等待結束、前臺進程的線程完成等待、窗口被喚醒、飢餓超時
同步機制
併發:進程的執行是間斷的,相對運行速度不可預測,共享資源帶來制約性
競爭條件:多個進程讀寫共享數據時,結果取決於進程的精確時序
進程互斥:多個進程的臨界區代碼對臨界資源的使用須要排他性,各進程間競爭使用這些共享資源
臨界區:臨界區空則可進入,但臨界區中至多一個進程,臨界區外的進程不能阻塞其餘進程進臨界區,不能讓想進臨界區的進程無限等待
軟件解決互斥:臨界區空閒標誌(free)、進區的用戶(turn)、各自進區標誌(pturn+qturn)、dekker算法(turn+pturn+qturn)、peterson(enter_region+leave_region/turn+interest[])、
硬件解決互斥:開關中斷指令(特權指令、中斷屏蔽限制CPU併發、不適合多CPU)、測試並加鎖指令(對總線加鎖)、交換指令(交換寄存器與鎖變量)
忙等待:進程在獲得臨界區訪問權前,在CPU持續測試而不作別的事;多處理器中使用自旋鎖測試,讓其餘CPU改鎖狀態,切換代價反而比持續測試大
進程同步:多進程中發生的事件存在時序關係,須要協做完成任務
生產者/消費者問題:生產者寫入緩衝區,消費者從緩衝區取數據,不能同時消費和生產,緩衝區空不能消費,緩衝區滿不能生產
信號量:用於進程間傳遞信息的整數值,包含隊列;操做包括初始化(非負數),原語操做P(減)V(增);二元信號量解決互斥,多值信號量解決同步
PV解決互斥:劃定臨界區,初始化mutex爲1,進臨界區前執行P申請資源,出臨界區後執行V喚醒等待
PV解決生產者/消費者:初始化mutex爲1,empty爲空位,full爲0;用mutex對緩衝區進行PV解決互斥,用empty和full進行PV解決同步
PV解決讀者/寫者問題:容許多個讀者同時讀,不容許同時讀寫;針對w信號,第一個讀前P,最後一個讀完V,寫先後PV;針對讀者序列rc,也須要在修改或判斷先後用PV保護
Linux讀寫鎖:每一個執行實體對臨界區的訪問或讀或寫,不會同時讀寫,此時可應用讀者/寫者模型;如路由表中的讀寫鎖
管程:有本身名字的特殊模塊,由關於共享資源的數據結構和在其上的操做過程組成,進程可調用管程的過程以操做管程中的數據結構;編譯器複雜管程的互斥,設置條件變量及等待喚醒操做解決同步問題
管程內多進程:若P喚醒Q,則管程中同時存在活躍狀態的P和Q兩個進程;處理方法有Hoare(P等待Q)、Mesa(Q等待P),Hansen併發pascal(讓喚醒是管程中最後可執行操做)
管程應用:直接構造條件變量恰當的管程,用已有的同步機制間接構造;C++不支持管程,Java支持相似管程
Hoare管程:管程入口設置入口等待隊列,內部設置緊急等待隊列放置喚醒進程,P喚醒Q則P等待Q;wait(c)優先喚醒緊急隊列隊首,再將進程加入c鏈尾,signal(c)優先喚醒c鏈首進入緊急等待隊列
Mesa管程:P喚醒Q則Q等待P,避免額外進程切換開銷;signal衍化到notify,進程調度執行前再次檢查條件,每一個條件原語關聯監視計時器超時即就緒,再衍化到broadcast使全部該條件隊列上等待的進程進入就緒隊列;Mesa優於Hoare
Pthread中的同步機制:互斥變量保護臨界區Pthread_mutex_[init/destroy/lock/unlock/trylock];條件變量解決同步Pthread_cond_[init/destroy/wait/signal/broadcast]
進程間通訊:消息傳遞、共享內存、管道、用於網絡分佈式系統的套接字和遠程過程調用
消息傳遞:send原語,陷入內核,操做系統複製到消息緩衝區,並掛接消息到接受進程的消息隊列指針;receive原語,操做系統將消息複製到接收進程的地址空間
共享內存:物理內存中創建一塊可以共享的內存空間,將物理內存空間映射到兩個進程的地址空間;利用讀者/寫者問題解決互斥
管道:利用緩衝傳輸介質內存或文件鏈接兩個進程;按字符流讀寫,先進先出,解決互斥同步
Linux內核同步機制:原子操做(不可分割)、屏障(一組線程都到達匯合點後再一塊兒推動)、自旋鎖、信號量、完成變量、互斥體等
存儲模型
地址重定位:將邏輯/相對/虛擬地址,映射到物理/絕對/實地址;程序加載時用軟件靜態重定位,執行每條指令時用內存管理單元MMU動態重定位
物理內存管理:數據結構(位圖、空閒+已分配區表、空閒塊鏈表);分配算法(首次適配、下次適配、最佳適配、最差適配)
夥伴系統:Linux底層內存分配算法,內存按2的整數次冪劃分,組成空閒塊鏈表,在鏈表中查找長度大於等於申請空間且不大於其一半的空閒塊,內存回收時遞歸合併空閒夥伴
基本內存管理方案:佔據內存連續空間(單一連續區、固定分區、可變分區),分佈在內存中不連續區域(頁式、段式、段頁式)
單一連續區:單一程序獨佔內存,老是被加載到同一內存地址
固定分區:將內存分割爲若干連續分區,大小可不一樣但必須固定不變,每一個分區裝載一個進程
可變分區:根據進程須要,動態分割出分區分配給進程
頁式:用戶地址空間劃分爲大小相等的頁,內存空間按頁大小劃分爲多個頁框,分配單位是頁
段式:用戶地址空間按自身邏輯劃分爲若干段,內存空間劃分爲若干個長度不一樣的區域(可變分區),分配單位是段
段頁式:用戶程序地址空間是段式,每段內含有多頁,內存空間是頁式,分配單位是頁
緊縮技術:在內存中移動程序,將全部小的碎片合併爲較大的空閒區,不能解決頁式管理形成的內碎片
覆蓋技術:將不會同時執行的程序段共享同一塊內存,須要程序員顯式編程,如今不多用
交換技術:將程序內存中的堆棧(靜態數據一直在磁盤),在不多使用或內存不夠時,暫時移動到磁盤上的交換區(swap/pagefile),讓外存中的程序佔據其原有內存
空間增加:進程的數據段和棧段會持續增加(堆向上,棧向下),可預留一些空間供給它們同向或反向增加
虛擬存儲:進程運行時先將部分裝入內存,另外一部分暫留在磁盤,執行指令或訪問數據時按需從磁盤調入內存;虛存構建在存儲體系上,由操做系統調度各存儲器的使用;虛存大小與機器位數和磁盤大小有關
存儲保護:每一個進程有獨立地址空間,訪問合法地址範圍,權限合法
虛擬頁式:虛擬存儲技術結合頁式存儲管理;方式有請求調頁和預先調頁
頁式映射:遞歸查找多級頁表起始地址,與頁內偏移拼接爲物理地址;頁表項中有效位表明是否已存入內存
反轉頁表:以物理內存大小創建頁表,將虛擬地址的頁號部分哈希,指向反轉頁表的某個位置,藉助鏈表解決衝突
內存管理單元MMU:查頁表和頁表項的功能位,將虛擬地址轉換爲物理地址
塊表TLB:由*組成,是按內容並行查找的相聯存儲器,保存部分頁表項;MMU先查快表,沒命中再查頁表
頁錯誤:地址轉換過程當中硬件產生異常,包括缺頁、違反權限、地址指向未定義
駐留集:給每一個進程分配的頁框數;可根據進程類型和須要的固定分配,或依據缺頁率評估的動態分配
置換策略:置換範圍爲當前進程的駐留集叫局部置換,內存中全部未鎖定頁面都爲候選叫全局置換;局部、全局置換結合固定、動態分配策略,*生三種方案,局部固定、全局固定、全局動態
清除策略:從進程駐留集中收回頁框;分頁守護程序,保證系統中總有必定數量的空頁框;頁緩衝技術,不丟棄置換頁而是加入修改頁鏈表中,按期批量寫回磁盤
頁面置換算法:OPT(將來最遠使用)、NRU(LRU的粗略近似)、FIFO(先進先出)、第二次機會(第一次先放隊尾)、時鐘(在環上移動指針)、LRU(優秀開銷大)、老化(左置右移)、工做集(保持活躍頁面的集合)
影響缺頁次數:置換(磁盤調度頁面比運行時間多產生顛簸),頁面大小(最優值爲2倍的程序規模乘頁表項再開根),程序編制方法(*數組),駐留集(平衡點)
Belady現象:FIFO算法,駐留集增大,缺頁率可能反而增長
內存映射文件:用系統調用將文件映射到虛擬地址空間,訪問文件就像訪問大數組
寫時複製:父進程建立子進程後共享一塊標記爲寫時複製的虛擬空間,當子進程執行本身代碼數據時,操做系統爲其分配新的空間
文件系統
文件:標識爲文件名,對用戶而言有完整的邏輯含義,對操做系統而言是信息項的序列
文件系統:管理磁盤空間,實現按名存取(名字空間到磁盤空間的轉換),共享及保護,向用戶和I/O提供接口
文件分類:普通文件(包含用戶信息的ASCII或二進制文件)、目錄文件(管理文件系統的系統文件)、特殊文件(字符/塊設備)、管道文件、套接字
邏輯結構:流式文件(字符)、記錄式文件(記錄)
蔟:信息存儲、分配、傳輸的獨立物理塊單元
磁盤結構:物理地址由磁頭/盤面號、磁道/柱面號、扇區號構成;扇區包括10B標題、512B數據、12~16B的ECC糾錯信息
磁盤中文件相關數據結構:位圖(設置0/1)、空閒塊表(起始塊號和空閒長度)、空閒塊鏈表(每一個節點含下一個指針)、成組連接法(從專用塊出發,每組首個空閒塊記錄下組的空閒塊號和塊數)
文件控制塊FCB:包含管理文件所需的文件屬性或元數據,包括名字、時間、地址、標誌等
文件目錄:統一管理每一個文件的元數據,完成名字到地址轉換;文件目錄以目錄文件的形式存儲在磁盤;目錄項是FCB
物理結構:順序結構、連接結構、索引結構(存放索引表的索引塊地址放在FBC中)
索引表的組織:索引表很大,須要多個物理快存儲時,可採用連接方式連接多個塊、上級索引表每一個表項放置下級索引表地址的多級索引、或二者結合的綜合模式
文件卷:磁盤邏輯分區,由一個或多個蔟組成,包含2的整數次冪個扇區;格式化就是在文件捲上初始化元數據,創建文件系統
分區內容:引導區(引導操做系統所需信息,第一扇區)、卷信息(總蔟數、空閒蔟數和指針、空閒FCP數量和指針等)、目錄文件(根目錄及其餘目錄文件)、用戶文件
Unix文件系統佈局:引導區、超級數據塊(文件系統結構信息)、空閒區管理(空閒表或相關結構)、i節點區、根目錄區
Windows中FAT系統佈局:引導區(文件系統數據記錄)、文件分配表1(蔟的分配狀態、標註下一簇)、文件分配表2(1的鏡像)、根目錄、其餘目錄和文件
內存中文件相關數據結構:系統打開文件表,整個系統一張,包括FCB(i節點)信息、引用計數、修改標記;用戶打開文件表,保存在每一個進程的PCB中,包括文件描述符、打開方式、讀寫指針、系統打開文件表索引
目錄項分解:把FCB分爲2部分,符號目錄項(文件名、文件號)和基本目錄項(除文件名外全部字段,描述文件相關信息);Unix中FCB=目錄項+i節點,每一個文件由目錄項、i節點、若干磁盤塊構成
Unix文件查找/a/b/c:超級數據塊中獲得根目錄文件地址,根目錄文件中獲得a的i節點地址,a的i節點中獲得a目錄文件地址,a目錄文件中獲得b的i節點地址,b的i節點中獲得b目錄文件地址,b目錄文件中獲得c的i節點地址,c的i節點中獲得文件物理地址
FAT文件系統:按FAT表項字節數分爲FAT十二、FAT1六、FAT32;FAT16根目錄大小固定,不支持Unicode;目錄項都爲32B,包含文件屬性和起始蔟號
文件分配表FAT:可看做整數數組,每一個整數表明磁盤分區的一個蔟號,記錄狀態和下一組蔟號
解決長文件名:使用不固定長度的目錄項,添加長度和結束標誌;名字統一在堆存放,目錄項中包含指向堆內的指針;FAT32的每一個長目錄項可保存13字符,長目錄項前必須有一個普通的短目錄項
文件操做:建立(建FCB,分配存儲空間);打開(找目錄項,更新共享計數,獲取文件描述符);指針定位(fd查用戶打開文件表找表項,設置讀寫指針);讀文件(由文件描述符找FCB,轉換爲物理塊,申請緩衝區,進行I/O);重命名(修改FCB中的名字)
一致性:磁盤塊寫回內存前出現故障,元數據一致性被破壞;Unix中用兩個表記錄使用中的塊和空閒塊,對比修復一致性
寫入策略:同時考慮速度和一致性;通寫、延遲寫、可恢復寫(日誌,如NTFS、ext3)
訪問控制:訪問控制表(每一個文件能被哪些用戶操做),能力表(每一個用戶能操做哪些文件);用戶(owner、group、other),操做(r、w、x、-)
提升性能:目錄項分解、當前目錄、磁盤碎片整理、塊高速緩存(一式三份存在於磁盤、內存、緩存)、提早讀取、合理分配磁盤空間(FCB與蔟同組)、磁盤調度、信息的優化分佈(磁道排列方式)、記錄的成組與分解(若干邏輯記錄組成一塊)、RAID等
磁盤調度算法:FCFS、最短尋道時間優先、SCAN(電梯)、C-SCAN(老是從0號向內)、N-step-SCAN(每次服務n長子隊列)、FSCAN(兩個隊列,新請求入另外一個隊列)、旋轉調度(旋轉延遲)
RAID:獨立磁盤冗餘矩陣,文件卷跨盤,用數據分條(如RAID0)並行I/O提升性能、用鏡像(如RAID1)和校驗(如RAID4)提供容錯
I/O系統
I/O管理:創建設備和內存間的數據通道,從應用程序或文件系統得到請求,交由設備硬件響應,過程由CPU控制
設備分類:塊設備(以塊尋址)、字符設備(速率低);獨享設備(單進程使用,可靜態或動態分配)、共享設備(多進程排隊分時共享)、虛設備(共享設備模擬的獨佔設備,如Spooling技術)
管理目標:按照用戶請求,控制設備完成與內存間的數據交換;創建方便、統一的獨立於設備的接口;提升CPU與設備、設備與設備的並行工做能力;保護數據的安全性、完整性、保密性
硬件組成:機械部分是設備自己,物理裝置;電子部分是設備控制器,完成端口編址、信號處理、緩衝
I/O地址:獨立編址,端口與內存地址空間徹底獨立,分配給I/O地址空間不多,操做不靈活;內存映像編址,將I/O端口看做存儲單元,與內存空間統一編址,不能對控制寄存器高速緩存
控制方式:可編程(輪詢,CPU忙等待)、中斷驅動(操做結束後用中斷主動通知驅動)、DMA(直接存儲器訪問,不經過CPU)
I/O演化:CPU控制->輪詢->中斷->DMA->單獨的處理器->擁有局部存儲器(自己已經是計算機)
軟件層次:用戶進程I/O(用戶層執行輸入輸出系統調用,準備假脫機)、邏輯I/O(驅動程序的統一接口,錯誤報告,緩衝,分配和釋放設備)、設備驅動程序(設置寄存器,檢查執行狀態)、中斷處理程序(完成後喚醒設備驅動)
設備獨立性:用戶編寫程序時使用邏輯設備名,由系統實現邏輯設備到物理設備的映射;操做系統設計I/O軟件時,除直接與設備打交道的底層軟件外不依賴於硬件;設備分配靈活,易於實現I/O重定向
緩衝技術:解決到達與離開速度不匹配的問題,提升CPU與I/O設備的並行性;按緩衝區位置有硬緩衝、軟緩衝,按緩衝池個數有單緩衝、雙緩衝、緩衝池
緩衝區:由緩衝控制塊和緩衝數據區組成,相關數據結構有空閒緩衝區隊列av鏈和設備緩衝隊列b鏈;開始時在av鏈,開始I/O請求時在I/O請求隊列和b鏈,完成I/O後在av鏈和b鏈
設備管理數據結構:描述設備的表格、創建同類資源的隊列、面向I/O進程的動態數據結構、創建I/O的隊列
驅動程序:每一個設備驅動程序管理一類設備,從上層接受並釋放命令,監督執行時可以讓進程等待也能夠不等待;與操做系統、用於初始化的系統引導、設備都有接口
I/O進程:系統級進程,優先級高;對於I/O請求,用戶經過send發送給I/O進程,阻塞本身直到I/O完成並被喚醒,操做系統經過wakeup喚醒I/O進程,完成時用戶要求的任務;對於I/O中斷,操做系統判斷爲正常中斷則交給I/O進程,異常則交給錯誤處理程序
提升性能:緩衝(減小CPU和I/O的速度差距)、異步I/O(等待I/O期間CPU可進行其餘操做)、DMA(CPU擺脫I/O)
死鎖
死鎖:每一個進程無限等待被該組進程中另外一進程佔有的資源;與之對比,活鎖爲先加鎖再輪詢不阻塞不推動,飢餓是因爲資源分配策略如優先級致使得不到資源
死鎖條件:互斥使用(資源獨佔),佔有且等待(部分分配),不可搶佔(不可剝奪),循環等待(進程等待環路)
資源分配圖:進程是圓,資源類是方,資源實例是方框中黑點;申請邊(進程,資源類)表示進程請求某類資源,分配邊(資源實例,進程)表示資源分配給某進程
死鎖定理:在資源分配圖中,無環路必無死鎖,有環路可能有死鎖,有環且資源類只包含一個實例必有死鎖
資源分配圖簡化:找只有分配邊的資源,去掉邊分配給須要的進程,本身變成孤點;重複上述步驟,若最後全部都是孤點則無死鎖,不然有死鎖
解決死鎖:鴕鳥算法(不考慮死鎖)、死鎖預防(靜態分配)、死鎖避免(動態評估)、死鎖檢測和解除
死鎖預防:破壞死鎖必要條件;獨佔轉爲共享資源,一次性申請和分配、主動釋放部分分配,操做系統幫助搶佔,資源有序分配法(資源按熱度編號,進程按資源號增序請求)
死鎖避免:對進程發出的每個能知足的資源申請進行動態檢查,根據分配後系統是否爲不安全狀態(死鎖)決定是否分配
安全序列:進程序列中任意進程,它還須要的資源不超過當前系統剩餘資源與它以前的全部進程佔有資源的和;此時系統爲安全狀態,必定無死鎖,若不存在任何安全序列則爲不安全狀態,必定致使死鎖
銀行家算法:五類數組available, max[i], allocation[i], need[i], request[i];當進程i提出request[i]時,若不大於available則將allocation[i]加request[i]、available和need[i]減request[i],此時判斷新狀態是否安全,安全則分配不然等待
死鎖檢測:容許死鎖發生,在資源不足、利用率降低時或週期性檢測系統進展判斷是否真的有死鎖發生;死鎖後解除死鎖並以最小的代價恢復系統運行,可經過撤銷死鎖進程組、回退再啓動、按某種原則逐一撤銷進程或剝奪資源
哲學家就餐:同步互斥問題,五個哲學家平常行爲是思考,兩兩間放一隻筷子,飢餓時要從左右取兩隻筷子纔可吃飯,都先拿右邊筷子時出現死鎖;解決方法包括最多容許四個哲學家、利用管程一次性拿兩隻筷子、設置哲學家的三種狀態結合檢測和PV操做、每一個哲學家按筷子增序拿、由銀行家算法將最後的筷子分配給已拿到一隻的人編程