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