文章目錄
- 資料結構.
- 向量.
- 系統安全測驗演算法.
- 資源請求演算法.
- 實體一.
- 解答.
- 實體二.
- 解答.
資料結構.
- n:整型,行程數量;
- m:整型,資源型別的種類數;
- Available[m]:一維陣列,保存[1…m]每種資源的可用實體數量;
- Max[n][m]:n×m矩陣,Max[i][j]表示i號行程對于j號資源的總需求量;
- Allocation[n][m]:n×m矩陣,Allocation[i][j]表示i號行程已經持有的j號資源數量;
- Need[n][m]:n×m矩陣,Need[i][j]表示i號行程還需要的j號資源數量,
向量.
- 對于兩個長度為n的向量 X X X和 Y Y Y,當且僅當 X [ i ] < Y [ i ] X[i]<Y[i] X[i]<Y[i]對于所有的 i ∈ [ 1.. n ] i∈[1..n] i∈[1..n]都成立時,我們說 X < Y . X<Y. X<Y.
系統安全測驗演算法.
- 用于測驗系統此時是否處于安全狀態,演算法如下:
TestSafety()
{
//1.
Work[1..m]=Available[1..m];
//向量Work初始化為當前可用資源實體數向量.
Finish[1..n]=false;
//向量Finish每個分量都為false,表示初態都是未完成.
//2.
change=true; //回圈控制變數.
while(change)
{
//Need[i]表示矩陣的第i行,也就是行程Pi所需資源數向量,
//若行程Pi未完成,并且需求能夠得到滿足,就執行Pi,后續
//釋放其中的資源,等價于Work獲得Pi已經持有的資源數向量
//Allocation[i].
change=false;
for(int i=1;i<=n;++i)
{
if(Finish[i]==false && Need[i]<Work)
{
Work=Work+Allocation[i];
Finish[i]=true;
change=true;
}
}
}
//不動點演算法:只有當Finish和Allocation不再發生改變時,
//也就意味著所有的行程都已經完成或者剩余行程都無法運行
//這兩種情況之一發生時,才會跳出while回圈.
//3.
for(int i=1;i<=n;++i)
{
if(Finish[i]==false)
{
return false;
}
}
return true;
//全真為真,一假俱假.
}
資源請求演算法.
- Request[n][m]:n×m矩陣,Request[i][j]表示i號行程此時申請的j號資源數量,
if(Request[i]<Need[i])
{
if(Request[i]<Available)
{
//Simulate allocation.
Available=Available-Request[i];
Allocation[i]=Allocation[i]+Request[i];
Need[i]=Need[i]-Request[i];
if(TestSafety())
{
Agree Allocation;
//System safe,just allocate.
}
else
{
Rollback;
//System unsafe,rollback.
}
}
else
{
Wait;
//Cause resource insufficient.
}
}
else
{
Error;
//Cause request too many resources.
}
實體一.

- 此時系統是否處于安全狀態?
- 如果行程 P 1 P_1 P1?提出資源請求 R e q u e s t 1 = ( 1 , 0 , 2 ) Request_1 =(1, 0, 2) Request1?=(1,0,2),能滿足嗎?
- 如果行程 P 0 P_0 P0?提出資源請求 R e q u e s t 0 = ( 0 , 2 , 0 ) Request_0 =(0, 2, 0) Request0?=(0,2,0) ,能滿足嗎?
- 如果行程 P 4 P_4 P4?提出資源請求 R e q u e s t 4 = ( 3 , 3 , 0 ) Request_4 =(3, 3, 0) Request4?=(3,3,0) ,能滿足嗎?
解答.


實體二.
2、考慮系統T0時刻的狀態如下所示:
| Allocation | Max | Available | |
|---|---|---|---|
| A B C D | A B C D | A B C D | |
| P 0 P_0 P0? | 0 0 1 2 | 0 0 1 2 | 1 5 2 0 |
| P 1 P_1 P1? | 1 0 0 0 | 1 7 5 0 | |
| P 2 P_2 P2? | 1 3 5 4 | 2 3 5 6 | |
| P 3 P_3 P3? | 0 6 3 2 | 0 6 5 2 | |
| P 4 P_4 P4? | 0 0 1 4 | 0 6 5 6 |
- 需求矩陣Need的內容如何?
- 此時刻該系統是否處于安全狀態?
- 若此時 P 1 P_1 P1?請求資源 R e q u e s t 1 = ( 0 , 4 , 2 , 0 ) Request_1=(0,4,2,0) Request1?=(0,4,2,0),系統是否滿足其請求?為什么?
解答.




轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/34756.html
標籤:其他
上一篇:VMware Workstation 與 Device/Credential Guard 不兼容。
下一篇:BUUCTF:隱藏的鑰匙
