logo资料库

银行家调度算法.doc

第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
资料共13页,剩余部分请下载后查看
《操作系统》实验三实验报告
【实验内容】
【实验过程】
}
【实验结果】
实验数据:
银行家算法判断当前状态:
当前状态安全,用户输入下一时刻进程Pk的资源请求
资源改变后的分配情况:
改变资源后的安全性算法:
《操作系统》实验三实验报告 【实验题目】:预防进程死锁的银行家算法 【实验目的】 通过这次实验,加深对进程死锁的理解,进一步掌握进程资源的 分配、死锁的检测和安全序列的生成方法。 【实验内容】 问题描述: 设计程序模拟预防进程死锁的银行家算法的工作过程。假设有系 统中有 n 个进程 P1, … ,Pn,有 m 类可分配的资源 R1, … ,Rm,在 T0 时刻,进程 Pi 分配到的 j 类资源为 Allocationij 个,它还需要 j 类资源 Need ij 个,系统目前剩余 j 类资源 Workj 个,现采用银行家算法进行 进程资源分配预防死锁的发生。 程序要求如下: 1)判断当前状态是否安全,如果安全,给出安全序列;如果不安 全给出理由。 2 ) 对 于 下 一 个 时 刻 T1 , 某 个 进 程 Pk 会 提 出 请 求 Request(R1, … ,Rm),判断分配给 P k 进程请求的资源之后。 3)输入:进程个数 n,资源种类 m,T0 时刻各个进程的资源分配 情况(可以运行输入,也可以在程序中设置); 4)输出:如果安全输出安全的进程序列,不安全提示信息。
【实验过程】 #include using namespace std; #define MaxNum 100 int Available[MaxNum]; int Max[MaxNum][MaxNum]; int Allocation[MaxNum][MaxNum]; int Need[MaxNum][MaxNum]; int Work[MaxNum]={0}; int Request[MaxNum]; int SafeOrder[MaxNum]; int AddRes[MaxNum]; int m,n,a; char name[MaxNum]; void InPut(); void OutPut(); int CheckSafe(); void AddResources(); void ChangResources(); void main() { InPut(); system("pause"); CheckSafe(); system("pause"); system("cls"); int choice=1; while(choice) { "<>choice; switch(choice) { case 1:AddResources(); system("pause");
system("cls"); break; case 2:ChangResources(); system("pause"); system("cls"); break; case 3:CheckSafe(); system("pause"); system("cls"); break; case 0:choice=0;break; default: cout<<"请正确选择功能号(0-4)!"<>n; for(int i=0;i>name[i]; //cout<>Available[i]; //cout<>m; cout<>Max[i][j]; do{ flag=0; cout<<"请输入各进程的分配资源 Allocation["<
cin>>Allocation[i][j]; if(Allocation[i][j]>Max[i][j]) flag=1; Need[i][j]=Max[i][j]-Allocation[i][j]; { } if(flag) cout<<"申请的资源大于最大需求量,请重新输入!\n"; }while(flag); cout<<"系统目前可分配的资源:"<
cout<
if(Request[i]==false&&Need[i][j]<=Work[j]) { apply++; if(apply==n) { for(int k=0;k"; } cout<:"; cin>>a; for(int i=0;i
cin>>name[i];*/ cout<<"请输入"<>AddRes[i]; } } void ChangResources() { for(int i=0;i
【实验结果】 实验数据:
分享到:
收藏