【作業系統】複習薈萃(三)

旭日不冷發表於2020-11-21


排程——應用題
排程的層次:
高階排程:作業一開始階段——決定那幾個 作業調入記憶體——多道批處理系統(由多排程確定)FIFO,優先順序排程
低階排程:決定就緒佇列中哪個 程式應獲得處理機——多道批處理、分時、實時都要有(選一個程式進入排程,看佇列排列)
中級排程:提高 記憶體利用率和系統吞吐量(記憶體和外存之間)
高響比時間
輪轉演算法:
多級佇列反饋:沒看過的東西

處理機排程

作業:包含了通常的程式和資料,還配有一份作業說明書
高階排程(作業排程):從外存的後備佇列作業中選一個作業調入記憶體,併為其建立程式,每個作業調出一次,調入一次
中級排程(記憶體排程)程式外存調入記憶體,本來是掛起狀態,pcb還是在記憶體的,可多次調出,多次調入,掛起的作用是因為這個空間不夠用了,你就出去一會
低階排程(程式排程):從就緒佇列中選取一個程式,分配cpu

程式排程

低階排程,就緒佇列上的程式,選擇一個分配CPU
時機
主動放棄:程式正常終止,異常終止,主動請求阻塞
被動放棄:時間片用完,更緊急的事,更高的優先順序的程式進入就緒佇列
不可排程的情況:處理中斷中,該程式在核心程式臨界區(會影響核心工作)(普通臨界區可以),原語
程式排程方式

  1. 非搶佔方式,只允許程式主動放棄cpu
  2. 搶佔方式——暫停正在執行,重新分配另一個程式

排程演算法的評價指標

CPU利用率:CPU忙碌時間/總時間
吞吐量:單位時間內完成作業的數量
週轉時間:作業完成時間-作業提交時間
平均週轉時間=每個作業的週轉時間/作業數
帶權週轉時間=(作業完成時間-作業提交時間)/作業實際執行時間
平均帶權週轉時間=每個作業帶權的週轉時間/作業數
等待時間
程式:程式建立後等待被服務的時間之和,等待I/O不算
作業:作業在外存後備佇列中等待時間+建立程式後的等待時間
相應時間:使用者提交請求到首次響應

排程演算法

先來先服務(FCFS)
作業排程and程式排程,非搶佔

程式到達時間執行時間週轉時間帶權週轉時間等待時間
P107710
P22499/45
P341887
P4541111/47

一邊到達一邊計算
週轉時間=完成-到達
平均週轉時間=(7+9+8+11)/4
帶權週轉時間=週轉時間/實際時間
平均帶權週轉時間=(1+9/4+8+11/4)/4
等待時間:開始-到達=週轉-執行
優點:公平簡單,不會飢餓
缺點:排在長作業後的短作業帶權時間大

短作業優先(SJF)
作業排程and程式排程,帶權時間少,非搶佔

程式到達時間執行時間週轉時間帶權週轉時間等待時間
P107710
P2241010/46
P341443
P4541111/47

1-3-2-4
平均帶權週轉時間和,平均都低了
當前已到達且執行時間最短的作業/程式,一邊到達一邊計算
p1最先,還是p1第一個
平均帶權週轉時間和,平均都低了
還有一種搶佔式的短作業優先 SRTN,那幾個平均更低
缺點:不公平,長作業不好,會飢餓

高響應比優先演算法(HRRN)
作業and程式,即考慮了等待時間,又考慮了要求服務時間,非搶佔
響應比=(等待時間+要求服務時間)/要求服務時間

程式到達時間執行時間週轉時間帶權週轉時間等待時間
P107710
P2241010/46
P341443
P4541111/47

一邊到達一邊計算
0時只到達了P1,所以P1先算,算完再說
P2:等待了5,(5+4)/4
P3:等待了3,(3+1)/1
P4:等待了2,(2+4)/4
P3出去
P2:等待了9,(9+4)/4
P4:等待了6,(6+4)/4
P2出去
不會飢餓

時間片輪轉(RR)
公平地、輪流為各個程式服務,每個程式在一定的時間間隔內都可以相應
僅適用排程,搶佔式

程式到達時間執行時間週轉時間帶權週轉時間等待時間
P105710
P2241010/46
P341443
P4561111/47

時間片大小是2,5
到達的時刻插在隊尾,但是同時下來的<剛到的
在這裡插入圖片描述
若時間片太大,會退化成先進先出
時間片太小,會變得頻繁
不會飢餓

優先順序排程
就是自己設定優先順序,越高越先
作業and程式,有搶佔和非搶佔

程式到達時間執行時間優先數
P1071
P2242
P3413
P4542

非搶佔,一邊執行一邊上
0時刻,只有p1,上
在這裡插入圖片描述
搶佔式
在這裡插入圖片描述
靜態優先順序——程式的整個優先順序不變
動態優先順序——要變
適用於實時排程,但是會發生飢餓

多級反饋佇列
程式排程,可搶佔

程式到達時間執行時間
P108
P224
P351

各級優先佇列從高到低,時間片從小到大
新程式到達先進入第一級佇列,按FCFS排隊等待分配時間片
用完時間片程式還未結束,則程式進入下一級佇列隊尾
若已在最下級,重新放回最下級隊尾
在這裡插入圖片描述
被搶佔時退回本層

死鎖

互相等待對方資源,阻塞無法推進
死鎖的互斥條件
(1)互斥條件
(2)不可搶佔條件
(3)請求和保持條件
(4)迴圈等待條件
發生死鎖時一定有迴圈等待,發生迴圈等待未必死鎖,如果系統的每類資源只有一個,迴圈等待則是充分必要條件
發生死鎖的原因
(1)對系統資源的競爭
(2)程式推進順序非法
(3)訊號量使用不當
對不可搶佔的資源分配不合理
處理死鎖方法
(1)預防死鎖 //很多條件
(2)避免死鎖 //一些條件(重要)
(3)檢測死鎖 //任由產生
(4)解除死鎖
預防死鎖
很多時候無法破壞互斥條件
破壞不可搶佔
拿著資源還得不到滿足,就先主動釋放(只適用於易儲存和恢復的資源);強行剝奪
缺點:會飢餓,開銷大
破壞請求保持
靜態分配:執行前申請它需要的所有資源,未滿足前不投入使用
缺點:資源利用率極低,飢餓
破壞迴圈等待條件
順序資源分配法:給系統的資源編號,規定每個程式必須按編號遞增順序來佔有,只有在佔用小編號之後才能大編號
缺點:不方便增加新的裝置,要重新編號;資源浪費,先申請用不到的資源;程式設計麻煩
避免死鎖
安全序列:系統按程式順序(P2,P1,P3)為其分配資源,直至滿足每個程式對資源的最大需求
在這裡插入圖片描述
有一個安全序列,系統就是安全的,安全系統一定不會發生死鎖,不安全序列有可能會發生死鎖
安全演算法
手算的更快演算法,一次把滿足要求的全加上
銀行家演算法
可利用資源向量Available
最大需求矩陣Max
分配矩陣 Allocation
需求矩陣 Need
這一次想要獲得的分配資源 Request0
Need=Max-Allocation
(1) R e q u e s t i [ j ] < = N e e d [ i , j ] Request_i[j]<=Need[i,j] Requesti[j]<=Need[i,j] 比你之前告訴我的大出錯
(2) R e q u e s t i [ j ] < = A v a i l a b l e [ i , j ] Request_i[j]<=Available[i,j] Requesti[j]<=Available[i,j] 不滿足等待

(3)系統試探著把資源分配了,修改
在這裡插入圖片描述
(4)執行安全性演算法,判斷分配後是否安全,安全,才正式分配,否則作廢
已知

PAllocation已分配NeedAvailable
P0010743332
P1200122
P2302600
P3211011
P4002432

求:

PWorkAllocationNeedAllocation+WorkFinish
P1332200122532true
P3532211011743
P4743600
P0211011
P0002432

死鎖的檢測
資源分配圖
兩種結點:
程式結點——一個程式(圈),資源結點——一類資源(矩形)
兩種邊:
程式結點—資源結點:程式想申請幾個資源,每條邊是一個
資源結點—程式結點:表示已經為程式分配了幾個資源,每邊一個
如果剩餘資源足夠滿足,就可順利執行。結束之後去掉邊
去掉所有邊就沒有死鎖
死鎖的解除
(1)資源剝奪法
掛起死鎖程式,搶佔它的資源
缺點:飢餓
(2)撤銷程式
強制撤銷死鎖程式,剝奪資源
缺點:代價大,功虧一簣
(3)程式回退
讓一個或多個死鎖程式回退到足以避免死鎖的地步
缺點:不易實現
總之就是幹掉一個程式,選程式咯

相關文章