資源簡介
本實驗要求設計并實現銀行家算法。銀行家算法是死鎖避免的經典算法,其核心思想是:進程動態地申請資源,每次申請資源時系統都執行安全狀態檢查算法判斷本次申請是否會造成系統處于不安全狀態,如果不安全則阻塞進程;如果安全狀態,則完成資源分配。
安全狀態檢查算法的思想是找到一個安全序列,使所有進程都能執行完畢。如果找到,則處于安全狀態,否則為不安全狀態。

代碼片段和文件信息
#include?“stdafx.h“
#include?
using?namespace?std;
/*
//所有資源
int?resource[3]?=?{?1057?};//如果知道可用資源,所有資源是不用知道的
*/
//可用資源向量
int?available[3]?=?{?332?};
//已分配矩陣A
int?allocation[5][3]?=?{?{?010?}{?200?}{?302?}{?211?}{?002?}?};
//最大需求矩陣C
int?maxRequest[5][3]?=?{?{?753?}{?322?}{?902?}{?222?}{?433?}?};
//C-A需求矩陣
int?nneed[5][3]?=?{?{?743?}{?122?}{?600?}{?011?}{?431?}?};
bool?safeTest();
void?request();
int?main()
{
request();
return?0;
}
void?request()
{
char?contn;
cout?< for?(int?i?=?0;?i<3;?i++)
cout?< cout?< for?(int?i?=?0;?i<5;?i++)
{
for?(int?l?=?0;?l<3;?l++)
cout?< cout?< }
cout?<“已分配矩陣Allocation:“?< for?(int?i?=?0;?i<5;?i++)
{
for?(int?l?=?0;?l<3;?l++)
cout?< cout?< }
cout?<“需求矩陣Need:“?< for?(int?i?=?0;?i<5;?i++)
{
for?(int?l?=?0;?l<3;?l++)
cout?< cout?< }
int?p;
cout?<“請輸入發起請求的進程,(0-4):“;
cin?>>?p;
while?(p?>?4?||?p?0)?{
cout?<“不要亂輸,進程是0到4之間的某個數:“?< cout?<“請輸入發起請求的進程,(0-4):“;
cin?>>?p;
}
int?a?b?c;
cout?<“請輸入請求資源數目,如3?4?5:“;
cin?>>?a?>>?b?>>?c;
/*
首先,進程p請求的資源必須得小于進程p的需求,如果大于需求,堅決不給分配。
其次,請求的資源必須得少于當前可用資源,若大于,給不了。
*/
if?(a?<=?nneed[p][0]?&&?b?<=?nneed[p][1]?&&?c?<=?nneed[p][2])
{
cout?<“請求資源滿足進程“?< if?(a?<=?available[0]?&&?b?<=?available[1]?&&?c?<=?available[2])
{
//滿足上兩個要求,就給進程p分配資源,分配完,當前可用資源要減掉分配掉的。
available[0]?=?available[0]?-?a;
available[1]?=?available[1]?-?b;
available[2]?=?available[2]?-?c;
//進程p的已分配資源向量要增加
allocation[p][0]?=?allocation[p][0]?+?a;
allocation[p][1]?=?allocation[p][1]?+?b;
allocation[p][2]?=?allocation[p][2]?+?c;
//需求矩陣C-A也發生了變化
nneed[p][0]?=?nneed[p][0]?-?a;
nneed[p][1]?=?nneed[p][1]?-?b;
nneed[p][2]?=?nneed[p][2]?-?c;
cout?< if?(safeTest())
{
/*
如果是安全的,那么開始分配資源,p執行完成后,將其已分配的資源還給availble
availble加上allocation[][],并且p的已分配資源變為0。
*/
cout?< cout?<“分配資源完成,已更新所有資源矩陣圖“?< for?(int?i?=?0;?i<5;?i++)
if?(nneed[i][0]?==?0?&&?nneed[i][1]?==?0?&&?nneed[i][2]?==?0)
for?(int?j?=?0;?j?3;?j++)?{
available[j]?=?available[j]?+?allocation[i][j];
allocation[i][j]?=?0;
}
}
else
{
/*
如果不安全,要恢復至最初的資源狀態,減了的加回來,加了的減回去
*/
cout?< available[0]?=?available[0]?+?a;
available[1]?=?available[1]?+?b;
available[2]?=?available[2]?+?c;
allocation[p][0]?=?allocation[p][0]?-?a;
allocation[p][1]?=?allocation[p][1]?-?b;
allocation[p][2]?=?allocation[p][2]?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????8738??2017-12-09?15:44??軟工1506+201526811028+鄭亞群\myprocess.cpp
?????文件??????22476??2017-12-09?15:45??軟工1506+201526811028+鄭亞群\軟工1506+201526811028+鄭亞群-實驗三.docx
?????目錄??????????0??2017-12-09?15:46??軟工1506+201526811028+鄭亞群
-----------?---------??----------?-----??----
????????????????31214????????????????????3
評論
共有 條評論