《操作系统》实验四内容要求

2019-05-24 18:48

《操作系统》实验四内容要求YINHANGJIA

【实验题目】:预防进程死锁的银行家算法 【实验学时】: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)输出:如果安全输出安全的进程序列,不安全提示信息。

源程序

#include using namespace std;

#define MAXPROCESS 50 //最大进程数 #define MAXRESOURCE 100 //最大资源数 int AVAILABLE[MAXRESOURCE]; //可用资源数组 int MAX[MAXPROCESS][MAXRESOURCE]; //最大需求矩阵 int ALLOCATION[MAXPROCESS][MAXRESOURCE]; //分配矩阵 int NEED[MAXPROCESS][MAXRESOURCE]; //需求矩阵 int REQUEST[MAXPROCESS][MAXRESOURCE]; //进程需要资源数 bool FINISH[MAXPROCESS]; //系统是否有足够的资源分配 int p[MAXPROCESS]; //记录序列 int m,n; //m个进程,n个资源 void Init(); bool Safe(); void Bank(); void main() {

Init(); Safe(); Bank(); }

void Init() {

int i,j;

cout<<\请输入进程的数目:\ cin>>m;

cout<<\请输入资源的种类:\ cin>>n;

cout<<\请输入每个进程最多所需的各资源数,按照\矩阵输入\ for(i=0;i>MAX[i][j];

cout<<\请输入每个进程已分配的各资源数,也按照\矩阵输入\for(i=0;i

cin>>ALLOCATION[i][j];

NEED[i][j]=MAX[i][j]-ALLOCATION[i][j]; if(NEED[i][j]<0) {

cout<<\您输入的第\个进程所拥有的第\个资源数错误,请重新输入:\ continue; } } }

cout<<\请输入各个资源现有的数目:\ for(i=0;i>AVAILABLE[i]; } } void Bank() { int i,cusneed; char again; while(1) {

cout<<\请输入要申请资源的进程号(注:第1个进程号为0,依次类推)\ cin>>cusneed;

cout<<\请输入进程所请求的各资源的数量\ cin>>REQUEST[cusneed][i]; } for(i=0;i

if(REQUEST[cusneed][i]>NEED[cusneed][i]) {

cout<<\您输入的请求数超过进程的需求量!请重新输入!\ continue; }

if(REQUEST[cusneed][i]>AVAILABLE[i]) {

cout<<\您输入的请求数超过系统有的资源数!请重新输入!\ continue; } }

for(i=0;i

AVAILABLE[i]-=REQUEST[cusneed][i];

ALLOCATION[cusneed][i]+=REQUEST[cusneed][i]; NEED[cusneed][i]-=REQUEST[cusneed][i]; } if(Safe()) {

cout<<\同意分配请求!\ } else {

cout<<\您的请求被拒绝!\ for(i=0;i

AVAILABLE[i]+=REQUEST[cusneed][i]; ALLOCATION[cusneed][i]-=REQUEST[cusneed][i]; NEED[cusneed][i]+=REQUEST[cusneed][i]; } }

for(i=0;i

cout<<\您还想再次请求分配吗 是请按y/Y,否请按其它键\ cin>>again;

if(again=='y'||again=='Y') { continue; } break; } }

bool Safe() { int i,j,k,l=0;

int Work[MAXRESOURCE]; for(i=0;i

for(i=0;i

FINISH[i]=false; } for(i=0;iWork[j]) { break; } } if(j==n) { FINISH[i]=true; for(k=0;k

Work[k]+=ALLOCATION[i][k]; }

p[l++]=i; i=-1; } else { continue; } }

if(l==m) {

cout<<\系统是安全的\安全序列:\ for(i=0;i

cout<<\

return true; }


《操作系统》实验四内容要求.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:温病

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: