1、重庆科技学院实 验 报 告课程名称:计算机操作系统_开课学期:09-10 学年第二学期院(系):_电子信息工程学院_开课实验室:_I515_学生姓名:_苏春雷 _ 专业班级:_07 计科普_ 学 号:_2007520005 重庆科技学院学生实验报告 课程名称 计算机操作系统 实验项目名称 死锁及其预防开课院系及实验室 I515 实验日期 2010-05-01学生姓名 苏春雷 学号 2007520005 专业班级 07计科普指导教师 黄永文 实验成绩教师评语:教师签字: 批改时间:一、实验目的和要求目的:(1) 熟悉 Windows系统提供的进程资源分配方法,加深了解有关资源申请、避免死锁等概念
2、,并体会和了解死锁和避免死锁的具体实施方法。(2) 掌握 Windows系统环境下进程资源分配时的安全状态的计算。(3) 掌握资源分配的银行家算法获得进程安全执行顺序。二、实验内容和原理编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用银行家算法,有效的防止和避免死锁的发生。银行家算法是避免死锁的一种重要方法,本实验要求用高级语言编写和调试一个简单的银行家算法程序实现资源分配。三、主要仪器设备装有 visual C+的计算机四、实验操作方法和步骤(1)启动 Visual C+ 6.0集成开发环境,单击菜单栏中的“文件”/“新建”命令打开“新建窗口” ,选择“文件”选项卡,
3、在列表中选择“C+ source File”项,在文件名称中输入文件名称“test3” ,在 Location中确定文件编程框架(项目资源文件)存放的位置“D:test3” ,确认输入正确后点击“OK”按钮.(2) #include#include#includetypedef struct Max1int m_a;int m_b;int m_c;Max;typedef struct Allocation1int a_a;int a_b;int a_c;Allocation;typedef struct Need1int n_a;int n_b;int n_c;Need;struct Avai
4、lable1int av_a;int av_b;int av_c; q;struct prchar name;Max max;Allocation allocation;Need need;int finishflag;p5;char na5;/*void init()/读入printf(“各进程的 NEED:n“);FILE *fp;fp=fopen(“1.txt“,“r+“);for(int i=0;i=pi.need.n_aq.av_b+=pi.allocation.a_b;q.av_c+=pi.allocation.a_c;pi.finishflag=1;finishcnt+;nak+
5、=pi.name;break;count+;/禁止循环过多if(count6)return 0;return 1;/*int shq()int m,i,j,k;printf(“请输入进程号和请求资源!如:0 2 0 2n“);scanf(“%d%d%d%d“,if(iAvailablen 让%c 等待.n“,pm.name);else printf(“RequestNeedn 让%c 等待.n“,pm.name);return 0;/*void main()int flag;char c;cout%c“,nak);printf(“n“);printf(“有进程发出 Request 请求向量吗?
6、(Enter y or Y)n“);c=getch();if(c=y|c=Y)if(shq()continue;else break;else flag=0;else flag=0;printf(“不安全n“);getch();五、实验记录与处理(数据、图表、计算等)五个进程p0,p1,p2,p3,p4共享三类资源A,B,C的系统, A,B,C的资源数量分别为 4,5,6。进程可动态地申请资源和释放资源,系统按进程的申请动态地分配资源,程序显示和打印各进程的某一个时刻的资源分配表和安全序列;显示和打印各进程依次申请的资源号以及为某进程分配资源后的有关资源数据。六、实验结果及分析死锁的发生有着多方面的原因,为保证系统中诸进程的正常运行,应事先采取必要的措施,来预防发生死锁。在系统中已经出现死锁后,则应及时检测到死锁的发生,并采取适当措施来解除死锁。在本次实验中,银行家算法很好的避免了死锁的发生。