操作系统实验报告银行家算法

上传人:人*** 文档编号:437684685 上传时间:2022-12-02 格式:DOC 页数:9 大小:253.50KB
返回 下载 相关 举报
操作系统实验报告银行家算法_第1页
第1页 / 共9页
操作系统实验报告银行家算法_第2页
第2页 / 共9页
操作系统实验报告银行家算法_第3页
第3页 / 共9页
操作系统实验报告银行家算法_第4页
第4页 / 共9页
操作系统实验报告银行家算法_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《操作系统实验报告银行家算法》由会员分享,可在线阅读,更多相关《操作系统实验报告银行家算法(9页珍藏版)》请在金锄头文库上搜索。

1、南昌大学实验报告 -(3)编程实现银行家安全算法学生姓名: 张虹 学 号: 6100409033 专业班级: 电091班 实验类型: 验证 综合 设计 创新 实验日期: 实验成绩: 一、实验目的通过实验加强对银行家安全算法的理解和掌握。二、实验内容熟悉避免死锁发生的方法,死锁与安全序列的关系,编程实现银行家算法,要求输出进程的安全序列。三、实验要求1、 需写出设计说明;2、 设计实现代码及说明3、 运行结果;四、主要实验步骤1、 分析银行家算法结构;2、 画出银行家算法的流程图,即设计说明;3、 根据画出的流程图使用C语言编写相应的代码(代码过长,放到最后);程序主要由main函数和以下几个函

2、数组成:void input();用户输入银行家算法的初始数据;void output();输出当前系统资源分配情况;void change();当请求资源满足要求时,进行分配,系统资源发生改变;int check();安全性算法,检查是否存在安全序列;void outputsafe();输出安全序列的资源分配表。4、 检查代码,将编出的代码编译、链接,验证其正确性。五、实验数据及处理结果六、实验体会或对改进实验的建议体会:编写银行家算法需要较好分析能力,C语言也要掌握的很好,而且需要细心和极大地耐心。我的程序在最开始编出来的第一份代码编译时大大小小一堆错误,有些是一个小错误导致了下面全错,这

3、些小错误在一百多行里找起来非常费劲。然后小错误全部找出来以后,再编译,错误没有了,但是得到的结果却是错误的,这样又要开始一行一行分析,看是哪里出了问题。到最后得到了想要的结果以后,程序还需要修饰,至少要输出要简洁明朗,要让别人一运行这个程序就知道自己在什么时候该输入什么数据,数据是什么作用,而不是只有自己知道输进去的是什么东西。七、参考资料计算机操作系统C程序设计C语言程序设计_现代方法八、实验代码#include /本实验中使用到的库函数#include #include int max53; /开始定义银行家算法中需要用到的数据int allocation53;int need53;int

4、 available3;int request53;char *finish5;int safe5;int n,i,m;int k=0;int j=0;int work3;int works53;void line() /美化程序,使程序运行时更加明朗美观printf(-n);void start() /表示银行家算法开始line();printf( 银行家算法开始n);printf( Designed by Zhang Hongn);line();void end() /表示银行家算法结束line();printf( 银行家算法结束,谢谢使用n);line();void input() /输

5、入银行家算法起始各项数据for (n=0;n5;n+)printf(请输入进程P%d的相关信息:n,n);printf(Max:);for (m=0;m3;m+)scanf(%d,&maxnm);printf(Allocation:);for (m=0;m3;m+)scanf(%d,&allocationnm);for (m=0;m3;m+)neednm=maxnm-allocationnm;printf(请输入系统可利用资源数Available:);for (m=0;m3;m+)scanf(%d,&availablem);void output() /输出系统现有资源情况line();pri

6、ntf(资源情况 Max Allocation Need Availablen);printf(进程 A B C A B C A B C A B Cn);line();for(n=0;n5;n+)printf(P%d%9d%3d%3d%5d%3d%3d%6d%3d%3d,n,maxn0,maxn1,maxn2,allocationn0,allocationn1,allocationn2,needn0,needn1,needn2);if (n=0)printf(%6d%3d%3dn,available0,available1,available2);elseprintf(n);line();vo

7、id change() /当Requesti,j=Availablej时,系统把资源分配给进程Pi,Availablej和Needi,j发生改变for (m=0;m3;m+)availablem-=requestim;allocationim+=requestim;needim-=requestim;void outputsafe() /输出安全序列的资源分配表printf(该安全序列的资源分配图如下:n);line();printf(资源情况 Work Need Allocation Work+Allocation Finishn);printf(进程 A B C A B C A B C A

8、 B Cn);line();for(n=0;n5;n+)printf(P%d%9d%3d%3d%5d%3d%3d%5d%3d%3d%6d%3d%3d%12sn,safen,workssafen0,workssafen1,workssafen2,needsafen0,needsafen1,needsafen2,allocationsafen0,allocationsafen1,allocationsafen2,workssafen0+allocationsafen0,workssafen1+allocationsafen1,workssafen2+allocationsafen2,finishn

9、);line();int check() /安全性算法printf(开始执行安全性算法n);for (m=0;m3;m+) /数组work和finish初始化workm=availablem;for (n=0;n5;n+)finishn=false;safen=0;k=0;for (m=0;m5;m+)for (n=0;n5;n+)if(strcmp(finishn,false)=0 & needn0=work0 & needn1=work1 & needn2=work2) /查找可以分配资源但尚未分配到资源的进程safek=n; /以数组safek记下各个进程得到分配的资源的顺序workss

10、afek0=work0;workssafek1=work1;workssafek2=work2;work0+=allocationn0; /进程执行后释放出分配给它的资源work1+=allocationn1;work2+=allocationn2;finishn=ture; /finishn变为1以示该进程完成本次分k+;for (m=0;mP%d-P%d-P%d-P%d,系统是安全的n,safe0,safe1,safe2,safe3,safe4);j=1;outputsafe(); /输出安全序列的资源分配表return 1;void main() /主程序开始start();for (;

11、j=0;) /确认输入数据的正确性,若输入错误,重新输入input();printf(以下为进程资源情况,请确认其是否正确:n);output();printf(数据是否无误:n正确:输入1n错误:输入0n请输入:);scanf(%d,&j);printf(数据确认无误,算法继续。n); if (check()=0) /若check函数返回值为0,表示输入的初始数据找不到安全序列,无法进行下一步,程序结束end();exit(0);for(;j=1;) /当有多个进程请求资源时,循环开始printf(请输入请求资源的进程i(0、1、2、3、4):); /输入发出请求向量的进程及请求向量scanf(%d,&i);printf(请输入进程P%d的请求向量Request%

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号