武汉轻工大学

  • 格式:doc
  • 大小:224.64 KB
  • 文档页数:21

下载文档原格式

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

武汉轻工大学

数学与计算机学院

计算机系统与系统软件

课程设计说明书

题目:模拟实现银行家算法实现死锁避免专业:信息管理和信息系统

班级:信管1202 学号: 1205020225 姓名:夏蒙

指导老师:欧阳峥峥

2014年9 月10 日

一.目的和要求

在熟练掌握死锁发生原理和解决死锁问题的基础上,利用一种程序设计语言模拟实现利用银行家算法实现死锁避免,一方面加深对原理的理解,另一方面提高学生通过编程根据已有原理解决实际问题的能力,为学生将来进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础。

二.设计内容

模拟实现银行家算法实现死锁避免。

三.设计环境

Windows操作系统、VC++6.0

C语言

四.设计提示

模拟实现银行家算法对系统资源进行分配,以防止死锁的出现。本课题肯定不可能实现对实际操作系统的资源管理,而是通过对模拟资源数据的处理,检测银行家算法在防止死锁出现的作用。

银行家算法描述:

第一部分:银行家算法(扫描)

1.如果Request<=Need,则转向2;否则,出错

2.如果Request<=Available,则转向3,否则等待

3.系统试探分配请求的资源给进程

4.系统执行安全性算法

第二部分:安全性算法

1.设置两个向量

(1).工作向量:Work=Available(表示系统可提供给进程继续运行所需要的

各类资源数目)

(2).Finish:表示系统是否有足够资源分配给进程(True:有;False:没有).

初始化为False

2.若Finish[i]=False&&Need<=Work,则执行3;否则执行4(i为资源类别)

3.进程P获得第i类资源,则顺利执行直至完成,并释放资源:

Work=Work+Allocation;

Finish[i]=true;

转2

请充分理解以上银行家算法描述的核心思想。(详细银行家算法描述见p95)本课题的设计思路:

●需根据教材上银行家算法的描述定义一些模拟数据:

系统中资源的种数(假设:n);

每类资源的数量(假设:m1,m2,…,m n);

当前系统中资源的使用情况等。

●设计方法:

通过静态数据,人工输入来完成银行家算法的工作流程。此方法只需给出一个当前系统资源的使用情况的模拟数据矩阵(该数据可事先保存于磁盘文件,程序执行后从该磁盘文件读入矩阵数据),然后通过用户手工输入下一个进程的资源申请要求的一维向量(控制台输入,此方式可以输入各种资源请求的可能情况,以检测当前的资源申请后是否系统处于安全状态)。

五、源程序结构分析及代码实现

1.程序结构

程序共有以下五个部分:

(1).初始化chushihua():用于程序开始进行初始化输入数据:进程数量、资源种类、各种资源可利用数量、各进程的各种资源已分配数量、各进程对各类资源最大需求数等。

(2).当前安全性检查safe():用于判断当前状态安全性,根据不同地方的调用提示处理不同。

(3).银行家算法bank():进行银行家算法模拟实现的模块,调用其他各个模块

进行银行家算法模拟过程。

(4).显示当前状态show():显示当前资源分配详细情况,包括:各种资源的总数量(all)、系统目前各种资源可用的数量、各进程已经得到的资源数量、各进程还需要的资源量。

(5).主程序main()

逐个调用初始化、显示状态、安全性检查、银行家算法函数,使程序有序的进行。

2.数据结构

程序使用的全局变量:

const int x=10,y=10; //定义常量

int Available[x]; //各种资源可利用的数量

int Allocation[y][y]; //各进程当前已分配的资源数量

int Max[y][y]; //各进程对各类资源的最大需求数

int Need[y][y]; //还需求矩阵

int Request[x]; //申请各类资源的数量

int Work[x]; //工作向量,表系统可提供给进程运行所需各类资源数量

int Finish[y]; //表系统是否有足够的资源分配给进程,0为否,1为是

int p[y]; //存储安全序列

int i,j; //全局变量,主要用于循环语句中

int n,m; //n为进程的数量,m为资源种类数

int l=0,counter=0;

3.函数声明

void chushihua(); //系统初始化函数

void safe(); //安全性算法函数

void bank(); //银行家算法函数

void show (); //输出当前资源分配情况

4.主函数main()

int main()

{

cout<<…… //显示程序开始提示信息

chushihua(); //初始化函数调用

cout<

showdata(); //输出初始化后的状态

//===判断当前状态的安全性===

safe(); //安全性算法函数调用

if (l

cout<<"\n当前状态不安全,无法申请,程序退出!!!!!"<

system("pause");

sign(); //调用签名函数

return 0; // break;

}

else{

int i; //局部变量

l=0;

cout<<"\n安全的状态!!!"<

cout<<"安全序列为: ";

cout<

for (i=1; i

cout<<"==>>"<<"进程"<<"("<

}

for (i=0; i

cout<

}