記事ディレクトリ
データ構造。
- n:整数、プロセスの数。
- m:整数、リソースタイプの数。
- Available [m]:各リソースの使用可能なインスタンスの数を[1 ... m]に格納する1次元配列。
- Max [n] [m]:n×m行列、Max [i] [j]はプロセスiによるリソースjの総需要を表します。
- Allocation [n] [m]:nxm行列、Allocation [i] [j]は、プロセスiがすでに保持しているリソースjの数を表します。
- Need [n] [m]:n×m行列、Need [i] [j]はプロセスiが必要とするリソースjの数を表す。
ベクター。
- 長さnの2つのベクトルXXX和YYY、当そして仅当X [i] <Y [i] X [i] <Y [i]X [ i ]<Y [ i ]すべてのi∈[1 .. n]i∈[1..n]私∈[ 1 。。N- ]真であるとき、私たちはと言う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.
}
例1。
- 現在、システムは安全な状態にありますか?
- プロセスP 1 P_1P1リソース要求を行う要求1 =(1、0、2)要求1 =(1、0、2)R E 、Q 、U 、E 、S 、T1=(1 、0 、2 )満足できますか?
- プロセスP 0 P_0P0リソース要求を行う要求0 =(0、2、0)要求_0 =(0、2、0)R E 、Q 、U 、E 、S 、T0=(0 、2 、0 )、満足できますか?
- プロセスP 4 P_4の場合P4リソース要求を行う要求4 =(3、3、0)要求4 =(3、3、0)R E 、Q 、U 、E 、S 、T4=(3 、3 、0 )、満足できますか?
回答。
例2。
2. T0でのシステムの状態を次のように検討します。
割り当て | マックス | 利用可能 | |
---|---|---|---|
あいうえお | あいうえお | あいうえお | |
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 |
- ニードの内容は何ですか?
- 現在、システムは安全な状態にありますか?
- P 1 P_1の場合P1リクエストリソースリクエスト1 =(0、4、2、0)Request_1 =(0,4,2,0)R E 、Q 、U 、E 、S 、T1=(0 、4 、2 、0 )、システムはその要求を満たしていますか?どうして?
回答。