南华大学计算机科学与技术学院实 验 报 告课程名称 操作系统I 姓 名 学 号 专业班级 任课教师 日 期 0 / 10一、 实验内容死锁的检测与解除二、 实验目的掌握操作系统的进程管理与资源分配原理,掌握对操作系统安全性检验和死锁的解除的原理和方法三、 实验题目系统中有 m 个同类资源被 n 个进程共享,每个进程对资源的最大需求数分别为 S1,S2,…,Sn,且 Max(Si)<=m, (i=1,2,…n)进程可以动态地申请资源和释放资源编写一个程序,实现银行家算法,当系统将资源分配给某一进程而不会死锁时,就分配之否则,推迟分配,并显示适当的信息分别使用检测“进程—资源循环等待链”的方法和 Coffman 的算法来检测进程的死锁状态对于相同的进程资源分配、占用次序,比较两个算法的结果。
四、设计思路和流程图1.输入系统进程数量n和资源类型数量m 2.输入每类资源的数量 3.输入每个进程每类资源的最大需求量和已获资源量 4.检验系统的安全 5.若检测结果为系统不安全,可以对死锁进行解除,直到安全为止再检测 6.重复5操作,直到所有进程运行完毕五、 主要数据结构及其说明int Max[100][100]={0}; //各进程所需各类资源的最大需求; int Available[100]={0}; //系统可用资源; char Name[100]={0}; //资源的名称; int Allocation[100][100]={0}; //系统已分配资源; int Need[100][100]={0}; //还需要资源 int Request[100]={0}; //请求资源向量; int Temp[100]={0}; //存放安全序列; int Work[100]={0}; //存放系统可提供资源; bool Finish[100]={0};//存放已完成的序列六、 源程序并附上注释#include "stdafx.h" #include #define False 0 #define True 1 using namespace std; int Max[100][100]={0}; //各进程所需各类资源的最大需求; int Available[100]={0}; //系统可用资源; char Name[100]={0}; //资源的名称; int Allocation[100][100]={0}; //系统已分配资源; int Need[100][100]={0}; //还需要资源 int Request[100]={0}; //请求资源向量; int Temp[100]={0}; //存放安全序列; int Work[100]={0}; //存放系统可提供资源; bool Finish[100]={0}; int M=100; //作业的最大数 int N=100; //资源的最大数 int l=0;//记录安全进程的TEMP下标 void ShowData()//初始化资源矩阵 { int i,j; cout<<"系统可用资源[Available]:"<Work[j]) { break; } } if(j==N)//若Need都小于Work { Finish[i]=true; for(k=0;k"; } } cout<<""<>n; N=n; for (i=0;i>mc; Name[i]=mc; cout<<"资源"<>number; Available[i]=number; cout<>m; M=m; cout<<"请输入各进程的最大需求量("<>Max[i][j]; } do{ flag=0; cout<<"请输入各进程已经分配资源量("<>Allocation[i][j]; if(Allocation[i][j]>Max[i][j]) flag=1; Need[i][j]=Max[i][j]-Allocation[i][j]; } if(flag) cout<<"首次输入的已分配资源已经大于最大需求量请重新输入!\n"; }while(flag);// 当申请资源符合要求时end do ShowData();//显示 Safe();//安全检测 if(l!=m)//当安全进程数不等于所有进程数 unlock(); cout<<"运行结束"<>over; }七、 程序运行时的初值和运行结果八、 实验体会通过本次实验,比较完整的掌握了操作系统的进程管理与资源分配原理,以及对操作系统安全性检验和死锁的解除的原理和方法。
一开始,对于死锁的解除,我只是从第一个进程开始剥夺其资源,也不管它是不是发生了死锁,一直剥夺到死锁解除为止然后,通过对程序进行改进,让其可以判断死锁进程与非死锁进程,然后从第一个死锁进程开始剥夺已分配资源到最后,又进一步完善程序,让其判断一下在死锁进程中,哪个的已分配资源最多,就先剥夺它的资源,直到死锁解除通过以上这几次对程序的改进,我不仅对死锁的解除有了更进一步的理解,也加深了对编程理念的认识一种好的编程习惯、编程理念不仅可以帮助减少工作量,更可以帮助编程人员对程序的思想进行全面理解,对程序需求进行全面理解 。