实验三死锁的检测和解除

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南华大学计算机科学与技术学院

实验报告

课程名称操作系统I 姓名

学号

专业班级

任课教师

日期

一、实验内容

死锁的检测与解除

二、实验目的

掌握操作系统的进程管理与资源分配原理,掌握对操作系统安全性检验和死锁的解除的原理和方法。

三、实验题目

系统中有 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]:"<

for(i=0;i

cout<

cout<

for(j=0;j

cout<

cout<

cout<<" Max Allocation Need"<

cout<<"进程名 ";

for (j=0;j<3;j++)//MAX ALLOCATION NEED 共列

{

for (i=0;i

{

cout<

}

cout<<" ";

} cout<

for(i=0;i

cout<<" "<

for(j=0;j

cout<

cout<<" ";

for(j=0;j

cout<

cout<<" ";

for(j=0;j

cout<

cout<

}

}

bool Safe() //安全性算法

{

int i,j,k;

for(i=0;i

Work[i]=Available[i]; //初始化工作向量

for(i=0;i

{

Finish[i]=false; //判断进程i是否已执行

}

for(i=0;i

{

if(Finish[i]==true)

{

continue;

} else

{

for(j=0;j

if(Need[i][j]>Work[j])

{

相关文档
最新文档