《操作系统概念》知识点期末复习整理
對應(yīng)《操作系統(tǒng)概念》第7版以及《王道論壇操作系統(tǒng)》
另外附上三個 HTML 思維導(dǎo)圖(操作系統(tǒng)概述、進程、調(diào)度)
網(wǎng)盤鏈接:https://pan.baidu.com/s/1w3wxqH1ug9g4FjkteQ5aYg
提取碼:l9e1
1 操作系統(tǒng)綜述
-
一個完整的計算機系統(tǒng)是由硬件系統(tǒng)和軟件系統(tǒng)組成
-
操作系統(tǒng)是控制和管理計算機硬件和軟件的資源,合理對各作業(yè)進行調(diào)度,以及方便用戶使用程序的集合
-
進程是一個運行的程序?qū)嵗?#xff0c;由程序、數(shù)據(jù)、PCB組成,是系統(tǒng)資源分配的基本單位,進程間需要同步互斥是因為進程間會相互制約
-
從用戶視角看,操作系統(tǒng)是使用計算機硬件的接口
從系統(tǒng)角度看,操作系統(tǒng)是資源分配器和控制程序
-
存儲層次結(jié)構(gòu),隨著層次結(jié)構(gòu)下移,每一個位的存儲價格通常降低,而訪問時間通常增加
-
用戶與操作系統(tǒng)界面
- 命令行或命令中斷
- 圖形用戶界面
- 注意:系統(tǒng)調(diào)用不是,用戶是間接的使用系統(tǒng)調(diào)用的。系統(tǒng)調(diào)用接口也不是系統(tǒng)調(diào)用
-
微內(nèi)核:便于擴充操作系統(tǒng);便于移植;有更好的安全性。但是系統(tǒng)功能總開銷增加導(dǎo)致了系統(tǒng)性能下降
-
虛擬機:提供對系統(tǒng)資源的完全保護;解決系統(tǒng)兼容性問題的方法之一;其上開發(fā)不影響主機
1.1 向操作系統(tǒng)傳遞參數(shù)的三種方法
- 通過寄存器來傳遞參數(shù):最簡單
- 通過在內(nèi)存中的塊和表,將塊的地址通過寄存器來傳遞:寄存器不夠的時候
- 通過放在程序或壓入棧中,并通過操作系統(tǒng)彈出:不限制傳遞參數(shù)的數(shù)量或長度
1.2 中斷
事件的發(fā)生通常通過軟件、硬件中斷
硬件可隨時通過系統(tǒng)總線向CPU發(fā)出信號
軟件通過系統(tǒng)調(diào)用也能觸發(fā)中斷。陷阱是軟件中斷
中斷必須將控制轉(zhuǎn)移到中斷處理程序
1.3 雙重模式操作
- 用戶模式(目態(tài))
- 特權(quán)模式(管態(tài))
1.4 特權(quán)指令
用戶只有通過計算機系統(tǒng)提供的訪管指令才能實現(xiàn)由目態(tài)轉(zhuǎn)為管態(tài),進而調(diào)用這些功能程序的目的
訪管指令是非特權(quán)指令,功能是產(chǎn)生一個軟中斷,促使中央處理機由目態(tài)轉(zhuǎn)為管態(tài),也是操作系統(tǒng)唯一不能執(zhí)行的非特權(quán)指令
1.5 多處理器的優(yōu)點
增加吞吐量、節(jié)省錢、增加可靠性
1.6 多道程序設(shè)計
用過組織作業(yè)使CPU總有一個作業(yè)可以執(zhí)行,從而提高了CPU的利用率。宏觀上并行,微觀上串行
2 線程
從 Linux 內(nèi)核的角度來說,它并沒有線程的概念。Linux 把所有線程都當做進程來實現(xiàn),它將線程和進程不加區(qū)分的統(tǒng)一到了 task_struct 中。線程僅僅被視為一個與其他進程共享某些資源的進程,而是否共享地址空間幾乎是進程和 Linux 中所謂線程的唯一區(qū)別。線程創(chuàng)建的時候,加上了 CLONE_VM 標記,這樣 線程的內(nèi)存描述符 將直接指向 父進程的內(nèi)存描述符。
系統(tǒng)調(diào)度的最小單位,與屬于同一進程的其他線程共享代碼段、數(shù)據(jù)段(全局變量)、堆區(qū)和其他操作系統(tǒng)資源。
通過pthread_create(&tid,&attr,func,argv)、CreatThread(null,0,func,argv,0,&tid)可以創(chuàng)建線程,pthread_join(&tid,NULL)、WaitForSingleObject(handle,infinit)可以等待線程完成,pthread_exit(0)、CloseHandle退出
2.1 多線程編程的優(yōu)點
響應(yīng)度高、資源共享、經(jīng)濟(創(chuàng)建和切換線程更經(jīng)濟,進程就比較昂貴),在多CPU上加強了并發(fā)功能
2.2 多線程模型
- 多對一:實現(xiàn)簡單,開銷小,效率高,但一個阻塞全阻塞
- 一對一:創(chuàng)建內(nèi)核線程開銷大,且限制了線程個數(shù)
- 多對多:多路復(fù)用了許多用戶線程到同樣數(shù)量或更小數(shù)量的內(nèi)核線程上,可以創(chuàng)建更多線程,并且一個線程阻塞可以調(diào)度另一個線程執(zhí)行
2.3 線程庫:為程序員提供創(chuàng)建和管理線程的API
-
內(nèi)核級線程庫
由操作系統(tǒng)直接支持 -
用戶級線程庫
沒有內(nèi)核支持
2.4 線程池
在進程開始時創(chuàng)建一定數(shù)量的線程,并放入到池中以等待工作。當服務(wù)器收到請求時會喚醒池中一個線程,一旦線程完成服務(wù),它會返回到池中繼續(xù)等待
優(yōu)點:
- 用現(xiàn)有的線程處理請求要比重新創(chuàng)建一個新線程快
- 限制了可用的線程數(shù)量,更可靠
- 將執(zhí)行和創(chuàng)建線程分離
2.5 LWP輕量級進程
這是在用戶和內(nèi)核線程之間設(shè)置的一種數(shù)據(jù)結(jié)構(gòu)。對于用戶級線程,LWP表現(xiàn)為一種應(yīng)用程序可以調(diào)用用戶線程來運行的虛擬處理器。每個LWP與內(nèi)核線程相連,該內(nèi)核線程被OS調(diào)度到CPU運行
3 進程
進程不可以無限創(chuàng)建,進程句柄是DWORD類型,那么理論上進程數(shù)量最多就是 2322^{32}232 次方,在達到 2322^{32}232 次方之前,受計算機資源限制。
一個進程也不可以包含無限個線程。在 linux 中與線程棧大小有關(guān),調(diào)整線程棧大小可以增加/減少創(chuàng)建的線程數(shù).
- 通過命令 ulimit -s 或者 ulimit -a 可以查看默認棧大小
- 通過命令 ulimit -s+ 參數(shù),臨時修改線程棧大小
進程是一個活動的實體。提交到系統(tǒng)的作業(yè)還沒有被投入運行前,這些作業(yè)放在輔助存儲器中,形成后備作業(yè)隊列
- 操作系統(tǒng)管理進程:創(chuàng)建、刪除、掛起、喚醒進程,進程通信,死鎖處理
3.1 調(diào)度準則
- CPU使用率 = 運行時間 / 總時間
- 吞吐量 = 完成了幾個任務(wù) / 總時間,即每單位時間內(nèi)完成的任務(wù)數(shù)
- 周轉(zhuǎn)時間 = 完成時間 - 提交時間
- 等待時間 = 在就緒隊列 和 等待隊列中的時間
- 響應(yīng)時間:交互系統(tǒng)希望這個要小,響應(yīng)比 = 等待時間 / 需要CPU的時間
3.2 調(diào)度程序
分派程序:CPU調(diào)度把控制交給調(diào)度的進程,需要切換上下文,切換到用戶模式,跳轉(zhuǎn)到合適的位置執(zhí)行
-
長期調(diào)度:外存→內(nèi)存
-
短期調(diào)度(CPU調(diào)度/進程調(diào)度):內(nèi)存→CPU
-
先來先服務(wù) FCFS
-
優(yōu)點:公平,不會導(dǎo)致饑餓
-
缺點:對長作業(yè)有利,短作業(yè)不利(護航效果)
-
-
短作業(yè)優(yōu)先 SJF (搶占/非搶占)
-
優(yōu)點:如果所有作業(yè)”同時“到達后備作業(yè)隊列,那么采用短作業(yè)優(yōu)先的作業(yè)調(diào)度算法總會獲得最小的平均周轉(zhuǎn)時間和最小的平均等待時間
-
缺點:不公平,會餓死,對短作業(yè)有利,長作業(yè)不利
由于SJF需要知道下一個CPU區(qū)間的長度,所以難以實現(xiàn)。一般用近似SJF調(diào)度
下一個CPU區(qū)間可預(yù)測為 以前CPU區(qū)間的指數(shù)平均
τ(n+1)=αt(n)+(1?α)τ(n)τ(n+1) = αt(n)+(1-α)τ(n)τ(n+1)=αt(n)+(1?α)τ(n) ,線性插值,τ是預(yù)測,t是實際,α可以看做是近期實際區(qū)間的重要性(書上說的α表示最近歷史的重要性,τ存儲了過去歷史)。
-
-
優(yōu)先級調(diào)度 (搶占/非搶占)
- 優(yōu)點:區(qū)分任務(wù)緊急程度
- 缺點:低優(yōu)先級進程會餓死
老化技術(shù):逐漸增加在系統(tǒng)中等待很長時間的進程的優(yōu)先級
-
時間片輪轉(zhuǎn) RR
- 優(yōu)點:專門為分時系統(tǒng)設(shè)計的,公平,響應(yīng)快,不會饑餓
- 缺點:進程頻繁切換開銷大,平均等待時間長
如果時間片太大,變成FCFS;如果時間片太小開銷又很大
-
多級隊列
一個進程永久地被分配到一個隊列。每個隊列有自己的調(diào)度算法。隊列間也要有調(diào)度算法,通常采用優(yōu)先級搶占調(diào)度。每個隊列與更底層的隊列比有更高的優(yōu)先級。另一種是每個隊列有一定的時間片。最常用的模型例如RR調(diào)度前臺交互隊列,FCFS調(diào)度后臺批處理隊列。
-
多級反饋隊列
- 優(yōu)點:開銷小
- 缺點:不夠靈活
FCFS+RR+SJF,允許進程在隊列間移動。如果進程使用過多的CPU時間會轉(zhuǎn)移到低優(yōu)先級的隊列;在較低優(yōu)先級隊列中等待時間過長的進程會被轉(zhuǎn)移到更高優(yōu)先級的隊列。這種形式的老化阻止饑餓發(fā)生。
注意:如果所有作業(yè)”同時“到達后備作業(yè)隊列,那么采用短作業(yè)優(yōu)先的作業(yè)調(diào)度算法總會獲得最小的平均周轉(zhuǎn)時間
-
-
中期調(diào)度:將進程從內(nèi)存中移出,從而降低多道程序設(shè)計程度。之后進程能被重新調(diào)入內(nèi)存,并從中斷處執(zhí)行(交換)
3.3 調(diào)度算法評估
為了最大化CPU使用率 和 吞吐量
- 確定模型:分析評估法、確定模型法;排隊模型;模擬;實現(xiàn)
3.4 上下文切換
進程的上下文用PCB表示
先保存P1的PCB,然后執(zhí)行系統(tǒng)調(diào)用或中斷,加載P2的PCB執(zhí)行;再通過系統(tǒng)調(diào)用或中斷,保存P2的PCB,加載P1的PCB回到開始中斷處繼續(xù)執(zhí)行P1
3.5 創(chuàng)建子進程
- 父進程必須在其子進程之間功分配資源或共享資源
- 系統(tǒng)調(diào)用fork()、CreateProcess()可以創(chuàng)建子進程,fork創(chuàng)建的子進程是父進程的復(fù)制,但是父子進程中的變量的獨立的,二者并發(fā)執(zhí)行
3.6 通信模型
-
消息傳遞模型:進程通過彼此間交換消息來交換信息。直接或間接的通過一個“信箱”來交換信息
- 交換少量數(shù)據(jù)比較有用,也更容易實現(xiàn),通常通過系統(tǒng)調(diào)用來實現(xiàn),因此需要內(nèi)核介入
- 直接通信:send()、receive()原語,需要明確指出接受者/發(fā)送者
- 間接通信:通過信箱或端口來發(fā)送和接收
-
共享內(nèi)存模型:建立起一塊供協(xié)作進程共享的內(nèi)存區(qū)域
-
不需要內(nèi)核幫助,速度比消息傳遞快
-
生產(chǎn)者消費者
in==out表示緩沖區(qū)空;(in+1)%bufsize==out表示緩沖區(qū)滿。
-
3.7 臨界區(qū)
進程訪問臨界資源的那段代碼
3.8 互斥同步
-
進入?yún)^(qū),臨界區(qū),退出區(qū),剩余區(qū)
-
臨界區(qū)必須滿足三個要求:互斥;前進(能進入的時候就能夠進入);有限等待(不能一直阻塞)
-
Peterson算法(基于軟件)
- 兩個進程在臨界區(qū)與剩余區(qū)交替執(zhí)行;
- 共享兩個數(shù)據(jù)項,一個是turn:表示誰可以進入;一個是bool flag[2]:表示誰想進入;
- 孔融讓梨,最終的turn值決定了哪個進程可以進入臨界區(qū)
-
TestAndSet()(基于硬件)優(yōu)點:實現(xiàn)簡單,適用于多CPU;缺點:不滿足有限等待
-
信號量機制:wait()/P()和signal()/V()操作。一般緩沖區(qū)就要兩個信號量,一個是空數(shù)量,一個是滿數(shù)量
-
某套裝服裝廠有甲、乙兩個制作室和一個配套室。兩個制作室分別生產(chǎn)上衣和褲子,每制作一件上衣或褲子后制作室工人都要分別把它們送到配套室的衣架F1和褲架F2上,衣架F1上存放上衣,褲架F2上存放褲子,衣架最多能放50件上衣,褲架最多能放50條褲子。配套室工人每次從架上取一件上衣和一條褲子,然后將它們配成套裝,并進行包裝。為防止操作出錯, 甲制作室工人及配套室工人對衣架F1的存取動作應(yīng)互斥進行,乙制作室工人及配套室工人對褲架F2的存取動作應(yīng)互斥進行。用P、V原語進行正確管理,分別描述甲制作室工人、乙制作室工人以及配套室工人的工作過程
設(shè)互斥信號量mutex1和mutex2控制進程對衣架和褲架的互斥操作
設(shè)同步信號量empty1和empty2分別表示衣架和褲架的空位數(shù),full1表示衣架上的衣服數(shù),full2表示褲架上的褲子數(shù)
初始化 mutex1=1,mutex2=1,empty1=50,empty2=50,full1=0,full2=0
-
在一個盒子里,混裝了數(shù)量相等的黑白圍棋子。現(xiàn)在利用自動分揀系統(tǒng)把黑子、白子分開,設(shè)分揀系統(tǒng)有兩個進程 P1 和 P2,其中進程P1揀白子;進程P2揀黑子。規(guī)定每個進程一次揀一子,當一個進程在揀時不允許另一個進程去揀,當一個進程揀了一子時,必須讓另一個進程去揀。試寫出進程P1和P2能夠正確并發(fā)執(zhí)行的程序
-
有一個倉庫,可存放 X、Y 兩種產(chǎn)品,倉庫的存儲空間足夠大,但要求:
(1)每次只能存入一種產(chǎn)品X或Y
(2)滿足-N < X產(chǎn)品數(shù)量-Y產(chǎn)品數(shù)量 < M。其中 N 和 M 是正整數(shù),試用信號量與 P、V 操作實現(xiàn)產(chǎn)品 X 與 Y 的入庫過程
設(shè)互斥信號量mutex=1;同步信號量sx=M-1,sy=N-1
4 死鎖
產(chǎn)生死鎖的四個必要條件:死鎖→4個條件,沒有4個條件→不死鎖
互斥、占有并等待、非搶占、循環(huán)等待
4.1 資源分配圖
Pi→Rj 申請邊, Rj→Pi 分配邊;
如果圖中沒有環(huán),一定沒死鎖。如果有環(huán),且每個資源只有一個實例,說明有死鎖,環(huán)上的進程就是死鎖進程
4.2 處理死鎖的方法
-
預(yù)防死鎖:破壞四個必要條件中的一個
- 互斥:不能改變
- 占有并等待:在申請資源時必須一次性分配所有資源,否則不能接受請求(缺點是資源利用率低,可能發(fā)生饑餓)
- 非搶占:如果當前進程的請求不能滿足,它就要釋放已有的資源
- 循環(huán)等待:將系統(tǒng)中的資源編號,進程按編號排序,由小到大請求資源
-
避免死鎖:用某種方法防止系統(tǒng)進入不安全狀態(tài),確定當前申請是允許還是延遲。如果存在一個安全序列就是安全狀態(tài)。
-
死鎖→不安全;安全→不死鎖
-
只有一個資源實例:資源分配圖算法
Pi→Rj (虛線)需求邊,變成實線的時候就是真正的發(fā)出請求。當需求邊變成申請邊且不會有環(huán)時才允許申請。 -
有多個資源實例:銀行家算法
-
安全算法
就是要找到一個安全序列 -
資源請求算法
- 先驗證請求數(shù)量是否小于 Need
- 再驗證請求數(shù)量書否小于 Available
- 假定系統(tǒng)分配給了它,驗證當前是否存在安全序列,存在則可以接受請求
-
-
死鎖檢測并恢復(fù)
-
等待圖:所有資源只有一個實例,刪除所有資源點,合并適當邊得到等待圖。如果等待圖中有環(huán)就是死鎖
-
有多個資源實例,死鎖檢測算法(和資源請求算法差不多,前面用的是Need,后面用的是Request)
多了個請求矩陣,然后找到一種可以滿足所有請求的安全序列,有的話他就是安全的。沒有的話可能死鎖
-
恢復(fù):終止死鎖進程;資源搶占,回滾到未死鎖的狀態(tài)
忽略死鎖:如果死鎖了就重啟,這種方法很便宜
5 內(nèi)存
5.1 內(nèi)存的保護
基地址寄存器 和 界限地址寄存器,防止越界
保護位:標明可讀可寫或只可讀
有效-無效位:有效表明頁在進程的邏輯地址范圍內(nèi);無效就是超出了范圍
5.2 MMU
從虛擬地址(CPU生成)到物理地址(內(nèi)存看到的)的映射是由內(nèi)存管理單元(MMU)的硬件設(shè)備來完成的
5.3 高速緩存
- 寄存器和存儲器之間存儲器,用于備份主存中常用的數(shù)據(jù),提高訪內(nèi)速度,緩和內(nèi)存和CPU速度不匹配的問題
- CPU與緩存是“字”為傳輸單位;內(nèi)存與緩存是“塊”為傳輸單位
5.4 內(nèi)存分配方式
-
單一連續(xù)分配
- 只適合單道處理系統(tǒng),大作業(yè)無法在小內(nèi)存運行,資源浪費,有內(nèi)部碎片
- 為解決大作業(yè)無法在小內(nèi)存運行,提出了:
- 覆蓋技術(shù):允許一個作業(yè)的若干程序使用同一個存儲區(qū)。將程序分為多個段,常用的放在內(nèi)存(固定區(qū)),不常用的需要時才加入內(nèi)存(覆蓋區(qū)),覆蓋結(jié)構(gòu)必須由程序員聲明。(注意:范圍是用一進程)
- 交換技術(shù)(中級調(diào)度):進程可以暫時從內(nèi)存換出到備份存儲。但是交換的代價比較大,通常只有空閑內(nèi)存低于某個閾值的時候才交換;或者只交換進程的部分,以降低交換時間。(注意:范圍是不同進程間的)
-
固定分區(qū)分配/多分區(qū)分配
-
分區(qū)可以相等也可以不等,每個分區(qū)只能有一個進程
-
稍微提高了資源利用率,可用靜態(tài)重定位,無外部碎片,有內(nèi)部碎片
-
大作業(yè)無法在小內(nèi)存運行
-
-
可變分區(qū)分配/動態(tài)分區(qū)分配
-
進程多大就分配多大(按塊為單位分配)
-
需要用動態(tài)重定位,基本消除內(nèi)部碎片,但有外部碎片,外部碎片可以通過“緊湊(動態(tài)重定位)”來解決,但是很昂貴
- 注意:靜態(tài)重定位是軟件完成,動態(tài)重定位是硬件完成(動態(tài)加載不需要OS的特別支持)
-
大作業(yè)無法在小內(nèi)存運行
-
動態(tài)存儲分配算法
首次適應(yīng)(快、開銷小)、最佳適應(yīng)(很多外部碎片,因為要維護列表順序所以開銷大)、最差適應(yīng)(導(dǎo)致沒有大分區(qū))、循環(huán)首次適應(yīng)(開銷小)
-
-
分頁
- “塊”是分配單位
- 邏輯地址=(頁號,頁內(nèi)偏移);物理地址=頁號*頁大小+頁內(nèi)偏移
- 作業(yè)可以不連續(xù)存儲,結(jié)合虛存情況下,且大作業(yè)可以在小內(nèi)存運行
- 避免了外部碎片和緊縮,但有內(nèi)部碎片
- 硬件支持
- 頁表包含基地址
- 頁表指針存在PCB
- PTBR頁表基地址寄存器:頁表基地址和頁表長度
- TLB快表,是頁表的高速緩存,命中只需要一次訪內(nèi)
- EAT有效內(nèi)存訪問時間 = (x+y)×α + (x+2y)×(1-α),αTLB命中率,x訪問TLB,y訪內(nèi)
- 倒置頁表整個系統(tǒng)只有一張,由進程pid標識:(進程id,頁碼,偏移);減少了內(nèi)存占用,但是搜索變慢了
-
分段
- 目的是為了更好地滿足用戶需求
- 邏輯地址=(段號,段內(nèi)地址);物理地址=段的起始地址+段內(nèi)偏移
- 硬件支持:段表,包含段基址和段界限(偏移要小于段界限)
-
段頁式:(段號,頁號,頁內(nèi)地址),至少三次訪內(nèi)
6 虛擬內(nèi)存
允許將一個執(zhí)行的作業(yè)不完全放在內(nèi)存中,主要優(yōu)點就是程序可以比物理內(nèi)存大。再者,將用戶所理解的邏輯內(nèi)存和物理內(nèi)存分開,使得程序員不必擔心內(nèi)存空間不夠。
并發(fā)性是虛存的基本要求。利用了局部性原理。
注意,實時系統(tǒng)由于對延遲的嚴格要求,不使用虛存技術(shù)。
6.1 請求調(diào)頁
-
當所訪問的信息不在內(nèi)存時(缺頁錯誤是內(nèi)中斷,一種故障),由OS負責將所需信息從外存調(diào)入內(nèi)存。
-
頁表:外存地址,幀號,有效無效位,修改位,保護位
-
有效訪問時間 = (1-p)×內(nèi)存訪問時間 + p×缺頁錯誤需要的時間,p是頁錯誤率
6.2 寫時復(fù)制
允許父子進程共享相同的頁面,如果任何一個進程要修改共享頁面,就創(chuàng)建一個副本給他修改。
6.3 頁面置換算法
請求調(diào)頁且內(nèi)存空間不夠時,需要選擇犧牲頁換出。如果增加了多道程度,可能會導(dǎo)致過渡分配內(nèi)存。
-
FIFO(沒有考慮頁使用的頻率,性能較差,有belady異常);
-
OPT 最優(yōu)頁面置換,置換未來最久不使用的頁面(理想化,無法實現(xiàn))
-
LRU,置換過去最長時間沒有使用的頁(利用了局部性原理,實現(xiàn)困難,開銷大,需要硬件輔助)
- 計數(shù)器,記住的是頁面最后一次被引用的時間,置換計數(shù)器最小的(考慮時鐘溢出);
- 堆棧:最近最少使用的頁面總是在堆棧的底部。
-
近似 LRU,增加一個引用位,初始由 OS 來清 0,引用時由硬件置位 1
-
額外引用位算法
保留一個 8 位字節(jié),包含著最近 8 個周期內(nèi)頁面使用的情況,數(shù)字越大表明越為最近使用
-
第二次機會算法/時鐘算法
利用循環(huán)隊列,找到一個引用位為 0 的頁面,掃描過程中會把訪問為清 0。
-
增強型第二次機會算法
利用(引用位,修改位),最多進行四次掃描可以選擇一頁犧牲,過程如下:
- (0,0) 不修改
- (0,1) 把掃描過的幀的引用位都置0
- (0,0) 不修改
- (0,1) 一定可以找到,然后把它替換
-
基于計數(shù)的頁面置換算法(不常用)
- LFU 最不經(jīng)常使用,置換具有最小計數(shù)的頁面
- MFU 最經(jīng)常使用,置換具有最大計數(shù)的頁面
幀分配算法:平均分配、比例分配
局部分配、全局分配
6.4 抖動
本質(zhì)原因是分配給進程的內(nèi)存空間不夠。
6.5 防止抖動
-
工作集模型
基于局部性假設(shè),是最近使用頁面的集合。當總的工作集大小大于可用幀總數(shù)將發(fā)生抖動,這時OS選擇一個進程掛起。工作集策略可以防止抖動的同時還可以保持較高的多道程度
-
缺頁錯誤頻率
設(shè)置缺頁錯誤率的上下限,當頁錯誤率太高就分配多點幀,太低就給它刪除一些幀。
-
缺頁錯誤率曲線中一個峰的開始和下一個峰的開始之間的時間跨度表示從一個工作集到另一個工作集。
6.6 預(yù)先調(diào)頁
試圖阻止大量的最初調(diào)頁。
6.7 頁面大小
- 小頁面:局部性好,更小的內(nèi)部碎片
- 大頁面:最小化 IO 期望時間,最小化缺頁錯誤數(shù)量
6.8 提高TLB命中率
- 增加 TLB 條目,但是昂貴且耗能
- 增加 TLB 范圍(TLB 范圍 = 條目數(shù) * 頁大小),所以選擇增加頁面大小或提供多個頁面大小。
7 文件概念
內(nèi)存和磁盤的傳輸以 塊 為單位執(zhí)行。
7.1 文件目錄
一個 FCB 是一個目錄項,一個文件一個 FCB,多個 FCB 組成文件目錄。系統(tǒng)通過文件目錄來管理文件,由文件名查找文件目錄項就能找到文件的信息。
FCB 的改進:索引結(jié)點
- 只存放文件名和索引結(jié)點的指針,除文件名之外的信息都存在索引結(jié)點里。
- 因為這樣一個塊可以存放更多目錄項,因此提高了文件檢索速度
7.2 有結(jié)構(gòu)文件(文件的邏輯結(jié)構(gòu))
-
順序文件
可變成記錄的順序文件無法實現(xiàn)隨機存取,定長記錄可以。缺點是不方便增加和刪除 -
索引文件
索引表本身就是定長順序文件,方便增加和刪除,若按關(guān)鍵字排序的話支持快速檢索 -
索引順序文件
以上二者的結(jié)合,將記錄分組,每組對應(yīng)一個索引表項
7.3 文件操作
創(chuàng)建文件、寫文件、讀文件、刪除文件、截斷文件(條目仍在,但讓文件重置為0,并釋放它的空間)
7.4 打開文件表
避免頻繁搜索目錄,提高性能。通常操作系統(tǒng)采用兩級內(nèi)部表:
每個進程表:每個條目相應(yīng)地指向整個系統(tǒng)的打開文件表
整個系統(tǒng)表:包含與進程無關(guān)的信息
當有進程打開一個文件,系統(tǒng)表就包含該文件的條目,而進程只需要在其進程打開表中增加一個指向系統(tǒng)表的相應(yīng)條目的條目即可
每個打開的文件關(guān)聯(lián)以下信息:文件指針§、訪問權(quán)限§、文件大小(OS)、文件打開計數(shù)(OS)、文件的磁盤位置(OS)
7.5 訪問方式
順序訪問、直接訪問(隨機訪問)、索引訪問
7.6 目錄及其操作
一個文件對應(yīng)一個FCB,一個FCB就是一個目錄項,多個FCB組成文件目錄
搜索文件、創(chuàng)建文件、刪除文件、遍歷目錄、重命名文件、遍歷文件系統(tǒng)
7.7 目錄類型
- 單級目錄:整個系統(tǒng)只有一張目錄表,實現(xiàn)了按文件名存取,不允許文件同名,難以支持多用戶
- 兩級目錄:主文件目錄(MFD) → 用戶文件目錄(UFD),不同用戶可以有相同的文件名,提高了檢索速度,缺點是用戶需要合作時受到了隔離,而且不能對自己的文件進行分類
- 樹形目錄:每個用戶可以創(chuàng)建自己的子目錄并相應(yīng)組織文件,方便地對文件分類,層次結(jié)構(gòu)清晰,缺點是樹結(jié)構(gòu)禁止共享文件或目錄
- 無環(huán)圖目錄:允許目錄共享子目錄和文件,在修改文件時要維護一致性。為共享結(jié)點設(shè)置一個共享計數(shù)器
- 通用圖目錄:容易有環(huán),要避免這樣的還有三種方法:1.只允許鏈接文件而不能是目錄 2.垃圾收集 3.增加新鏈接前先檢測是否有環(huán)
7.8 文件共享
- 基于索引結(jié)點的共享方式(硬鏈接)
- 基于符號鏈的共享方式(軟鏈接)
7.9 分區(qū)與安裝
- 生分區(qū):沒有文件系統(tǒng),如數(shù)據(jù)庫、交換分區(qū)
- 熟分區(qū):含有文件系統(tǒng)
- 根分區(qū):包括操作系統(tǒng)內(nèi)核和其他系統(tǒng)文件,在啟動時安裝
7.10 文件空間分配方法
-
連續(xù)分配
- 支持順序、隨機訪問,尋道時間少
- 缺點:需要預(yù)先知道文件的大小,不好擴展,有難以利用的磁盤碎片
-
鏈接分配(最基本)
-
實現(xiàn)簡單,磁盤利用率高,方便擴展,沒有外部碎片,只支持順序訪問,讀入i號邏輯塊需要i+1次磁盤IO
-
缺點:不支持隨機訪問,指針需要占用一些空間
-
鏈接分配的變種:使用文件分配表FAT
先在FAT中找到要訪問的塊,再去訪問磁盤。一整個磁盤只有一張FAT,常駐內(nèi)存。這樣一來也支持隨機訪問
-
-
索引分配
- 為每個文件建立一個索引表,存放在索引塊,記錄了各個文件對應(yīng)的物理塊
- 支持順序、隨機訪問,容易擴展,沒有外部碎片,但是索引表要占用一些空間
- 索引塊太小的話采取以下機制
- 連接方案:將多個索引塊鏈接起來
- 多層索引
- 混合索引:即包含直接地址索引、又包含一級間接索引、兩級間接索引。
7.11 文件系統(tǒng)的保護
避免物理損壞和非法訪問。
- 物理損壞:把筆記本鎖起來;備份
- 非法訪問:控制多個不同的操作類型;根據(jù)用戶身份控制訪問,可以為用戶分類型:所有者、組、其他用戶;加密碼;加口令
7.12 文件系統(tǒng)層次結(jié)構(gòu)
應(yīng)用程序→邏輯文件系統(tǒng)→文件組織模塊→基本文件系統(tǒng)→IO控制→設(shè)備
7.13 空閑空間管理
- 位向量/位示圖/位圖:用(字號,位號)對應(yīng)一個盤塊,盤塊號=字號*字長+位號
- 鏈表:將所有空閑磁盤塊用鏈表鏈接起來
- 組:(略)
7.14 提升性能
- 虛擬磁盤:在內(nèi)存中建立磁盤的映像。
- 隨后釋放和預(yù)先讀取頁面
8 磁盤和I/O
8.1 SSD
更可靠,無噪音,防震防摔,耗能低,速度快。但是壽命更短,更貴
8.2 磁盤空閑空間管理方法
位示圖、空閑塊表、空閑塊鏈
8.3 磁盤調(diào)度算法
- 先來先服務(wù) FCFS:性能差,尋道時間長)
- 后來先服務(wù) LCFS:提高吞吐量,局部性原理,可能餓死
- 最短尋道優(yōu)先 SSTF:與一開始的位置有關(guān),不一定是全局最優(yōu)的。可能餓死
- 電梯算法 SCAN:不會饑餓,對各個位置磁道相應(yīng)頻率不平均
- 單向掃描 C-SCAN:到終點了直接回到開頭掃描,為了平均請求的等待時間
- LOOK 和 C-LOOK:只訪問到最遠請求處的磁道就返回
8.4 磁盤管理
- 存儲數(shù)據(jù)之前必須經(jīng)過低級格式化或物理格式化。然后要進行邏輯格式化就是磁盤分區(qū),創(chuàng)建文件系統(tǒng),引導(dǎo)程序。手動處理壞塊(格式化時發(fā)現(xiàn)壞塊就標記為不可用);采用備用塊來代替壞塊:扇區(qū)備用或扇區(qū)轉(zhuǎn)寄,扇區(qū)滑動
8.5 IO子系統(tǒng)包括
- 一個包括緩沖、高速緩存、假脫機的內(nèi)存管理部分
- 通用設(shè)備驅(qū)動器接口
- 特定硬件設(shè)備的驅(qū)動程序
8.6 IO設(shè)備
IO 設(shè)備一般是由執(zhí)行 IO 操作的機械部分和執(zhí)行控制 IO 的電子部件組成,為各類設(shè)置相應(yīng)的設(shè)備驅(qū)動程序,供用戶或系統(tǒng)進程調(diào)用(設(shè)備獨立性軟件)。
字符設(shè)備:以單個字符為單位,鍵盤
塊設(shè)備:磁盤、磁帶
8.7 設(shè)備控制器
-
組成:設(shè)備控制器與CPU的接口、設(shè)備控制器與IO設(shè)備的接口、IO邏輯
-
功能:接收和識別命令、地址識別、數(shù)據(jù)緩沖區(qū)、報告和標識設(shè)備狀態(tài)、差錯控制
-
維護的寄存器:數(shù)據(jù)寄存器、狀態(tài)寄存器、控制寄存器
- 寄存器或有多個,所以需要地址。有兩種編址方式:內(nèi)存映像IO和獨立編址
8.8 IO控制方式
-
輪詢
傳送單位:字;數(shù)據(jù)流向需要經(jīng)過CPU;會浪費CPU資源,CPU和IO不能很好并行 -
中斷
傳送單位:字;數(shù)據(jù)流向需要經(jīng)過CPU;CPU和IO可并行,但頻繁的中斷會消耗較多的CPU時間 -
DMA
傳送單位:塊;數(shù)據(jù)流向不經(jīng)過CPU;
使IO設(shè)備直接和內(nèi)存進行成批數(shù)據(jù)的快速傳輸(塊數(shù)據(jù)),減少了中斷,CPU和IO并行得到提升 -
通道
專門用來管理IO操作的處理機,使CPU徹底從IO中解放出來,CPU只需要進行善后處理和啟動即可
8.9 IO層
用戶軟件→【設(shè)備獨立性軟件→設(shè)備驅(qū)動程序→中斷處理程序】(IO核心子系統(tǒng))→硬件
- 設(shè)備驅(qū)動程序為內(nèi)核IO子系統(tǒng)隱藏設(shè)備控制器之間的差異,簡化OS開發(fā)人員的工作,有利于硬件制造商
8.10 假脫機技術(shù)(SPOOLing):保存設(shè)備輸出的緩沖區(qū)
- 組成:輸入輸出井、輸入輸出緩沖區(qū)、輸入輸出進程、井管理程序
- 對IO的模擬,提高IO速度,將獨占設(shè)備改造為共享設(shè)備,實現(xiàn)了虛擬設(shè)備的功能
8.11 緩沖原因
- 緩和CPU和IO設(shè)備之間速度不匹配的矛盾
- 減少對CPU的中斷頻率
- 協(xié)調(diào)傳輸大小不一樣數(shù)據(jù)的設(shè)備
- 支持應(yīng)用程序IO的復(fù)制語義
- 提高CPU和IO設(shè)備之間的并行性
8.12 緩存
保存數(shù)據(jù)副本的高速內(nèi)存區(qū)域。
8.13 提升性能途徑
-
減少上下文切換的次數(shù)
-
減少數(shù)據(jù)拷貝次數(shù)
-
通過DMA和通道來為主CPU承擔數(shù)據(jù)拷貝來增加并發(fā)性
-
減少中斷頻率
會浪費CPU資源,CPU和IO不能很好并行 -
中斷
傳送單位:字;數(shù)據(jù)流向需要經(jīng)過CPU;CPU和IO可并行,但頻繁的中斷會消耗較多的CPU時間 -
DMA
傳送單位:塊;數(shù)據(jù)流向不經(jīng)過CPU;
使IO設(shè)備直接和內(nèi)存進行成批數(shù)據(jù)的快速傳輸(塊數(shù)據(jù)),減少了中斷,CPU和IO并行得到提升 -
通道
專門用來管理IO操作的處理機,使CPU徹底從IO中解放出來,CPU只需要進行善后處理和啟動即可
8.9 IO層
用戶軟件→【設(shè)備獨立性軟件→設(shè)備驅(qū)動程序→中斷處理程序】(IO核心子系統(tǒng))→硬件
- 設(shè)備驅(qū)動程序為內(nèi)核IO子系統(tǒng)隱藏設(shè)備控制器之間的差異,簡化OS開發(fā)人員的工作,有利于硬件制造商
8.10 假脫機技術(shù)(SPOOLing):保存設(shè)備輸出的緩沖區(qū)
- 組成:輸入輸出井、輸入輸出緩沖區(qū)、輸入輸出進程、井管理程序
- 對IO的模擬,提高IO速度,將獨占設(shè)備改造為共享設(shè)備,實現(xiàn)了虛擬設(shè)備的功能
8.11 緩沖原因
- 緩和CPU和IO設(shè)備之間速度不匹配的矛盾
- 減少對CPU的中斷頻率
- 協(xié)調(diào)傳輸大小不一樣數(shù)據(jù)的設(shè)備
- 支持應(yīng)用程序IO的復(fù)制語義
- 提高CPU和IO設(shè)備之間的并行性
8.12 緩存
保存數(shù)據(jù)副本的高速內(nèi)存區(qū)域。
8.13 提升性能途徑
- 減少上下文切換的次數(shù)
- 減少數(shù)據(jù)拷貝次數(shù)
- 通過DMA和通道來為主CPU承擔數(shù)據(jù)拷貝來增加并發(fā)性
- 減少中斷頻率
- 在CPU、總線、IO之間保持均衡
總結(jié)
以上是生活随笔為你收集整理的《操作系统概念》知识点期末复习整理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用ajax下载文件失败
- 下一篇: 电子政务源代码java_基于jsp的电子