操作系统实验报告-银行家算法_第1页
操作系统实验报告-银行家算法_第2页
操作系统实验报告-银行家算法_第3页
操作系统实验报告-银行家算法_第4页
操作系统实验报告-银行家算法_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、:void input();用户输入银行家算法的初始数据;void output();输出当前系统资源分配情况;void change();当请求资源满足要求时,进行分配,系统资源发生改变int check(); 安全性算法,检查是否存在安全序列;void outputsafe(); 输出安全序列的资源分配表。4、检查代码,将编出的代码编译、链接,验证其正确性。开始输入银行家算法初始数据N 数据是否正确Y执行安全性算法输出当前资源分配表NY执行算法的Y是否存在安全序列是否为初始数据系统将资源分配给PiYN输出安全序列的资源情况YN 请求资源是否进程Pi 需等待小于系统资源资源分配无YPi 发出

3、的发出请求向效,恢复分配前的系统资源Y情况输入进程是否有进程请求资源是否量小于需求资源请求向量NN结束五、实验数据及处理结果云命曼宗林-tiank9 R.1<切伐 出司霁 %分如 的WP1玩 源K!运*2 宾PI漫源 尺单号 A-正不flax Rllvcat ion Head Availcib 1c n B C ABC ABC ABC3 23 y 0 1 K 4-20117 a 6HI4t4斛ess0 Rfi<8 式、 程司力 讲求, 的.番求 裔的谙i<星宜 桂UI配T 关分加 的»运沆 雷理_次 一XW 今1nxL 人.,«,二 正-' 彳是歪

4、歪法.Inr界X比否r:筏柞情况 flax Rllvcat ion Heed Avail«b le 法隹 ft B C ABC fl B C BBC83R2六、实验体会或对改进实验的建议体会:编写银行家算法需要较好分析能力,C语言也要掌握的很好,而且需要细 心和极大地耐心。我的程序在最开始编出来的第一份代码编译时大大小小一堆错 误,有些是一个小错误导致了下面全错,这些小错误在一百多行里找起来非常费 劲。然后小错误全部找出来以后,再编译,错误没有了,但是得到的结果却是错误 的,这样又要开始一行一行分析,看是哪里出了问题。到最后得到了想要的结果以 后,程序还需要修饰,至少要输出要简洁明朗

5、,要让别人一运行这个程序就知道自 己在什么时候该输入什么数据,数据是什么作用,而不是只有自己知道输进去的是 什么东西。七、参考资料计算机操作系统C程序设计C语言程序设计现代方法八、实验代码#include <stdio.h> / 本实验中使用到的库函数#include <stdlib.h>#include <string.h>int max53; 开始定义银行家算法中需要用到的数据int allocation53;int need53;int available3;int request53;char *finish5;int safe5;int n,i,m

6、;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() / 输入银行家算法起

7、始各项数据for (n=0;n<5;n+)printf("请输入进程P%d的相关信息:n”,n);printf("Max:");for (m=0;m<3;m+)scanf("%d",&maxnm);printf("Allocation:");for (m=0;m<3;m+)scanf("%d",&allocationnm);for (m=0;m<3;m+)neednm=maxnm-allocationnm;printf(" 请输入系统可利用资源数Avail

8、able:");for (m=0;m<3;m+)scanf("%d",&availablem); void output() / 输出系统现有资源情况line();printf(" 资源情况Max Allocation Need Availablen");printf(" 进程 A B C A B C A B C A B Cn");line();for(n=0;n<5;n+)printf("P%d%9d%3d%3d%5d%3d%3d%6d%3d%3d",n,maxn0,maxn1,ma

9、xn2,allocationn0,allocationn1,allocationn2,needn0,needn1,needn2);if (n=0)printf("%6d%3d%3dn",available0,available1,available2);elseprintf("n");line();void change() / 当 Requesti,j<=Availablej 时,系统把资源分配给进程Pi , Availablej 和 Needi,j发生改变for (m=0;m<3;m+)availablem-=requestim;allo

10、cationim+=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 B Cn");line();for(n=0;n<5;n+)printf("P%d%9d%3d%3d%5d%3d%3d%5d%3d%3

11、d%6d%3d%3d%12sn",safen,workssafen0,workssafen1,workssafen2,needsafen0,needsafen1,needsafen2,allocationsafen0,allocationsafen1,allocationsafen2,workssafen0+allocationsafen0,workssafen1+allocationsafen1,workssafen2+allocationsafen2,finishn);line();int check() / 安全性算法printf("开始执行安全性算法n")

12、;for (m=0;m<3;m+) / 数组 work 和 finish 初始化workm=availablem;for (n=0;n<5;n+)finishn="false"safen=0;k=0;for (m=0;m<5;m+)for (n=0;n<5;n+)if(strcmp(finishn,"false")=0 && needn0<=work0 &&needn1<=work1 &&needn2<=work2) / 查找可以分配资源但尚未分配到资源的进程saf

13、ek=n; / 以数组 safek 记下各个进程得到分配的资源的顺序workssafek0=work0;workssafek1=work1;workssafek2=work2;work0+=allocationn0; / 进程执行后释放出分配给它的资源work1+=allocationn1;work2+=allocationn2;finishn="ture" /finishn变为 1 以示该进程完成本次分k+;for (m=0;m<5;m+) / 判断是否所有进程分配资源完成if (strcmp(finishm,"false")=0)printf(

14、" 找不到安全序列,系统处于不安全状态。n");return 0; / 找不到安全序列,结束check 函数,返回0elseif (m=4) 此处m=4表示所有数组finish的所有元素都为tureprintf("找到安全序列P%d->P%d->P%d->P%d->P%g统是安全的n",safe0,safe1,safe2,safe3,safe4);j=1;outputsafe(); / 输出安全序列的资源分配表return 1;void main() / 主程序开始start();for (;j=0;) / 确认输入数据的正确性,

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

16、tf(" 请输入请求资源的进程i(0 、 1、 2、 3、 4):"); / 输入发出请求向量的进程及请求向量scanf("%d",&i);printf(" 请输入进程P%d的请求向量 Request%d:",i,i);for(n=0;n<3;n+)scanf("%d",&requestin);for (;requesti0>needi0 | requesti1>needi1 |requesti2>needi2;) / 若请求向量大于需求资源,则认为是输入错误,要求重新输入p

17、rintf("数据输入有误,请重试n请输入进程P%d勺请求向量Request%d:",i,i);for(n=0;n<3;n+)scanf("%d",&requestin);if(requesti0<=available0 && requesti1<=available1 &&requesti2<=available2)/ 判断系统是否有足够资源提供分配printf(" 系统正在为进程P%的配资源n”,i);change(); / 分配资源j=0;elseprintf(" 系统没有足够的资源,进程P%M要等待。n”,i);if (j=0) /j=0 表示系统有足够资源分配的情况printf(" 当前系统资源情况如下:n"); / 输出分配资源后的系统资源分配情况output();if(check()=0) / 若找不到安全系列,则之前的资源分配无效printf("

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论