資源簡介
內容:編程實現銀行家算法、安全性算法
基本要求
能夠根據給定的資源分配情況,及某進程提出的資源請求,通過算法得出是否能進行分配。如能分配,需得出相應的安全序列。
內含多個實驗報告 資源整合

代碼片段和文件信息
#include?
#include?
#include?“banker.h“
//試探分配
void?ProbeAlloc(int?processRESOURCE?*res)
{
Available.A?-=?res->A;
Available.B?-=?res->B;
Available.C?-=?res->C;
Allocation[process].A?+=?res->A;
Allocation[process].B?+=?res->B;
Allocation[process].C?+=?res->C;
Need[process].A?-=?res->A;
Need[process].B?-=?res->B;
Need[process].C?-=?res->C;
}
//若試探分配后進入不安全狀態,將分配回滾
void?RollBack(int?processRESOURCE?*res)
{
Available.A?+=?res->A;
Available.B?+=?res->B;
Available.C?+=?res->C;
Allocation[process].A?-=?res->A;
Allocation[process].B?-=?res->B;
Allocation[process].C?-=?res->C;
Need[process].A?+=?res->A;
Need[process].B?+=?res->B;
Need[process].C?+=?res->C;
}
//安全性檢查
bool?SafeCheck()
{
RESOURCE Work?=?Available;
bool Finish[PROCESSES_NUMBER]?=?{falsefalsefalsefalsefalse};
int i;
int j?=?0;
for?(i?=?0;?i? {
//是否已檢查過
if(Finish[i]?==?false)
{
//是否有足夠的資源分配給該進程
if(Need[i].A?<=?Work.A?&&?Need[i].B?<=?Work.B?&&?Need[i].C?<=?Work.C)
{
//有則使其執行完成,并將已分配給該進程的資源全部回收
Work.A?+=?Allocation[i].A;
Work.B?+=?Allocation[i].B;
Work.C?+=?Allocation[i].C;
Finish[i]?=?true;
safe[j++]?=?i;
i?=?-1; //重新進行遍歷
}
}
}
//如果所有進程的Finish向量都為true則處于安全狀態,否則為不安全狀態
for?(i?=?0;?i? {
if?(Finish[i]?==?false)
{
return?false;
}
}
return?true;
}
//資源分配請求
bool?request(int?processRESOURCE?*res)
{
//request向量需小于Need矩陣中對應的向量
if(res->A?<=?Need[process].A?&&?res->B?<=?Need[process].B?&&?res->C?<=?Need[process].C)
{
//request向量需小于Available向量
if(res->A?<=?Available.A?&&?res->B?<=?Available.B?&&?res->C?<=?Available.C)
{
//試探分配
ProbeAlloc(processres);
//如果安全檢查成立,則請求成功,否則將分配回滾并返回失敗
if(SafeCheck())
{
return?true;
}
else
{
printf(“安全性檢查失敗。原因:系統將進入不安全狀態,有可能引起死鎖。\n“);
printf(“正在回滾...\n“);
RollBack(processres);
}
}
else
{
printf(“安全性檢查失敗。原因:請求向量大于可利用資源向量。\n“);
}
}
else
{
printf(“安全性檢查失敗。原因:請求向量大于需求向量。\n“);
}
return?false;
}
//輸出資源分配表
void?PrintTable()
{
printf(“\t\t\t*********資源分配表*********\n“);
printf(“Process???????Max??????????Allocation??????????Need??????????Available\n“);
printf(“??????????A????B????C?????A????B????C???????A????B????C??????A????B????C\n“);
printf(“??P0??????%d????%d????%d?????%d????%d????%d???????%d????%d????%d??????%d????%d????%d\n“Max[0].AMax[0].BMax[0].CAllocation[0].AAllocation[0].BAllocation[0].CNeed[0].ANeed[0].BNeed[0].CAvailable.AAvailable.BAvailable.C);
printf(“??P1??????%d????%d????%d?????%d????%d????%d???????%d????%d????%d\n“Max[1].AMax[1].BMax[1].CAllocation[1].AAllocation[1].BAllocation[1].CNeed[1].ANeed[1].BNeed[1].C);
printf(“??P2??????%d????%d????%d?????%d????%d????%d???????%d????%d????%d\n“Max[2].AMax[2].BMax[2].CAllocation[2].AAllocation[2].BAllocation[2].CNeed[2].ANeed[2].BNe
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????637??2011-05-15?14:59??banker.h
?????文件???????4537??2011-05-15?19:32??main.c
-----------?---------??----------?-----??----
?????????????????5174????????????????????2
評論
共有 條評論