操作系统实验3 银行家算法附代码.docVIP

  • 56
  • 0
  • 约2.83千字
  • 约 6页
  • 2019-07-27 发布于江西
  • 举报
《操作系统》实验三内容要求 09软一 0925114047 杨秦香 【实验题目】:预防进程死锁的银行家算法 【实验学时】:4学时 【实验目的】 通过这次实验,加深对进程死锁的理解,进一步掌握进程资源的分配、死锁的检测和安全序列的生成方法。 【实验内容】 问题描述: 设计程序模拟预防进程死锁的银行家算法的工作过程。假设有系统中有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)输出:如果安全输出安全的进程序列,不安全提示信息。 实现提示: 用C++语言实现提示: 1)程序中进程调度时间变量描述如下: int Available[MaxNumber]; int Max[MaxNumber][MaxNumber]; int Allocation[MaxNumber][MaxNumber]; int Need[MaxNumber][MaxNumber]; int Request[MaxNumber]; int SafeOrder[MaxNumber]; 2)进程调度的实现过程如下: 变量初始化; 接收用户输入n,m,(输入或者默认的)Allocationij,Need ij; 按照银行家算法判断当前状态安全与否,安全给出安全序列,不安全给出提示; 如果安全,提示用户输入下一时刻进程Pk的资源请求Request(R1, … ,Rm); 如果不安全或者无新请求则退出。 代码: #includeiostream using namespace std; int Available[100]; int Allocation[100][100]; int Need[100][100]; int Request[100]; int SafeOrder[100]; int Work[100]; bool Finish[10]; int n,m; int i,j; int k; int s; void output(); void input(); bool Bank(); void main() { cout--------银行家算法---------endl; input(); Bank(); cout输入请求的进程endl; cins; cout请输入进程的Requestendl; for(k=0;km;k++) cinRequest[k]; if(Bank()) { cout当前时刻系统安全endl; } else { cout系统不安全endl; return; } } void input() { cout请输入进程数 n=endl; cinn; coutendl; cout请输入资源数 m=endl; cinm; coutendl; cout请输入进程的Availableendl; for(i=0;im;i++) cinAvailable[i]; coutendl; cout请输入进程的Needendl; for(i=0;in;i++) for(j=0;jm;j++) cinNeed[i][j]; cout请输入进程的Allocationendl; for(i=0;in;i++) for(j=0;jm;j++) cinAllocation[i][j]; coutendl; } bool Bank() { for(j=0;jm;j++) { Available[j]=Available[j]-Request[j]; Allocation[s][j]=Allocation[s][j]+Request[j]; Need[s][j]=Need[s][j]-Request[j]; } for(i=0;im;i++) Work[i]=Available[i]; for(i=0;in;i++) Finish[i]=

文档评论(0)

1亿VIP精品文档

相关文档