操作系统实验报告(8)

2019-08-01 23:24

山东科技大学学生课程设计

#include #include #include # define M 50

int pro; //进程数 int res; //资源数

int safe; //safe=1 系统安全 safe==0 系统不安全

int allocation[M][M],need[M][M],available[M],max[M][M];

char name1[M],name2[M]; //定义全局变量 void main() {

//函数声明 void check(); void print(); int i,j,p=0,q=0;

int flag=1;//flag=1继续分配 flag=0不再进行分配

int request[M],allocation1[M][M],need1[M][M],available1[M];

程序源代码

- 33 -

山东科技大学学生课程设计

printf(\银行家算法*****\\n\ printf(\请输入进程个数:\\n\ scanf(\

printf(\请输入资源种类数:\\n\ scanf(\

printf(\请输入Max矩阵:\\n\ for(i=0; i

scanf(\进程运行所需要的最大资源数目

printf(\请输入Allocation矩阵:\\n\ for(i=0; i

scanf(\已分配给进程的资源数 printf(\请输入Available矩阵\\n\ for(i=0; i

scanf(\现在可以利用的资源 for(i=0; i

need[i][j]=max[i][j]-allocation[i][j]; //进程还需要的资源数目 print(); //输出 check(); //检测安全状态 if(safe==1) //安全 {

while(flag==1) {

q=0;//q=1 超过需要的最大资源数 p=0;//p=1 超过此时系统的资源 printf(\请输入请求资源的进程:\\n\ scanf(\

- 34 -

山东科技大学学生课程设计

printf(\请输入该进程所请求的资源数:\\n\ for(j=0; j

if(request[j]>need[i][j]) p=1;//超过需要的最大资源数 if(p)

printf(\请求资源超过该进程最大的资源需求量,请求失败.\\n\ else {

for(j=0; j

if(request[j]>available[j]) q=1; //超过此时系统的资源 if(q)

printf(\系统没有足够的资源,请求失败!\\n\ else //请求满足条件 {

for(j=0;j

//备份此时的available矩阵、allocation矩阵、need矩阵

available1[j]=available[j]; allocation1[i][j]=allocation[i][j]; need1[i][j]=need[i][j];

//系统尝试把资源分配给请求的进程 available[j]=available[j]-request[j]; allocation[i][j]+=request[j]; need[i][j]=need[i][j]-request[j]; } print();

- 35 -

山东科技大学学生课程设计

check(); //检测分配后的安全性 if(safe==0) //如果分配后系统不安全 {

for(j=0;j

//还原

available[j]=available1[j]; allocation[i][j]=allocation1[i][j]; need[i][j]=need1[i][j]; }

printf(\返回分配前资源数\\n\ print(); } } }

printf(\是否还要继续分配资源:是:1 否:0\\n\ scanf(\ } } }

void check() //安全算法函数 {

int k,f; int s=0; int i,j;

int work[M];//]表示可提供进程继续运行的各类资源数 int a[M]; bool finish[M]; safe=1;

for(i=0; i

- 36 -

山东科技大学学生课程设计

finish[i]=false; //初始化进程均没得到足够资源数 未完成 for(i=0; i0) {

for(i=0;i

if(finish[i]==false) { f=1;

for(j=0;jwork[j]) f=0;//不能满足需求

if(f==1) //找到还没有完成且需求数小于work的进程 {

finish[i]=true;

a[s++]=i; //记录安全序列 for(j=0;j

work[j]=work[j]+allocation[i][j]; //释放该进程已分配的资源

} } } k--; } f=1;

for(i=0;i

if(finish[i]==false)

- 37 -


操作系统实验报告(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:DNF大转移NPK补丁翻译

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

马上注册会员

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