2020初學者理解的操作系統(3)----銀行家算法及分段地址變換

銀行家算法

考慮下面的系統快照:
在這裏插入圖片描述
回答以下問題:
1.計算需求矩陣Need.
2.此狀態是否爲安全狀態,如果是,則找出安全序列.
3.在此基礎上P1 申請(0,4,2,0)能否立即分配?爲什麼?
【解答】
1.這裏的最大需求量矩陣我們把它命名爲Max,把已分配的資源矩陣命名爲Allocation,第一問的需求矩陣Need = Max - Allocation =
ABCDP00000P10750P21002P30020P40642 \begin{matrix} & A & B& C & D\\ P0& 0 & 0 & 0 & 0\\ P1 & 0& 7 & 5 & 0 \\ P2& 1 & 0 & 0 & 2\\ P3&0&0&2&0\\ P4&0&6&4&2 \end{matrix}
2.安全狀態就是每一項都能正常合理分配的狀態,所以這裏第一步:
令Work = Available = (1,5,2,0),Finish[i] = false;
先分配給P0, then Work = (1,5,3,2),Finish[0] = true;
然後分配給P2,then Work = (2,8,8,6),Finish[2] = true;
然後分配給P1,then Work = (3,8,8,6),Finish[1] = true;
然後分配給P3,then Work = (3,14,11,8),Finish[3] = true;
然後分配給P4,then Work = (3,14,12,12),FInish[4] = true;
因爲一直都是true,所以{P0,P2,P1,P3,P4}是一個安全序列,當然,安全序列並不是唯一的,一般都是按照順序一步一步找出來的。
3.P1立即請求(0,4,2,0),
首先需要進行兩步判斷:

  • 請求向量是否小於A的Max
  • 請求向量是否小於Available

這裏我們能看出(0,4,2,0)<(1,7,5,0),同時(0,4,2,0)<(1,5,2,0)
假設可以立即分配,
令Work = Available =(1,1,0,0)Finish [i] = false;
先分配給P0, then Work = (1,1,1,2),Finish[0] = true;
然後分配給P2, then Work = (2,4,6,6),Finish[2] = true;
然後分配給P1, then Work =(3,8,8,6),Finish[1] = true;
然後分配給P3, then Work =(3,14,11,8),Finish[3] = true;
最後分配給P4, then Work =(3,14,12,12),Finish[4] =true;
所以{P0,P2,P1,P3,P4}是一個安全序列,也並不唯一

分段地址變換

已知段表和以下邏輯地址,請計算相應的物理地址:
a.< 0 , 430 >
b.< 1 , 10 >
c.< 2 , 500 >
d.< 3 , 400 >
e.< 4 , 112 >

段號 基址 長度 保護
0 219 600 R
1 2300 14 R/W
2 90 100 R/W
3 1327 580 R
4 1952 96 R

【解答】
對a來說,段號爲0,430<600,物理地址爲430+219= 649
對b來說,段號爲1,10<14,物理地址爲2300+10 = 2310
對c來說,段號爲2,500>100,所以發生越界中斷
對d來說,段號爲3,400<580,物理地址爲1327+400 =1727
對e來說,段號爲4,112>96,所以發生越界中斷
【總結】
這種題沒有啥難的,主要就是用所給的邏輯地址和各段的段長進行比較。
本文到此結束,歡迎大家在評論區探討~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章