死锁避免算法设计报告.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

漳州师范学院

操作系统课程设计

死锁防止算法设计

姓名:

学号:

系别:

专业:

年级:

指导教师:

一、课程设计题目介绍〔含设计目的〕

死锁防止算法设计是通过模拟实现银行家算法实现死锁防止

目的:

1、了解进程产生死锁的原因,了解为什么要进行死锁的防止。

2、掌握银行家算法的数据结构,了解算法的执行过程,加深对银行家算法的理解。

3、通过运用Dijkstra的银行家算法来防止多个进程运行中因争夺资源而造成僵局,即死锁

要求:

本课程设计可以实现教材节中所描述的银行家防止死锁算法。

可自定义进程数目、资源类型和每种类型资源的数目;可输入每个进程对每种资源的最大需求、已经获得的数量;当某进程发起某种资源请求时,计算系统状态是否平安。

思想:

操作系统按照银行家制定的规那么为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量那么按当前的申请量分配资源,否那么就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。假设超过那么拒绝分配资源,假设没有超过那么再测试系统现存的资源能否满足该进程尚需的最大资源量,假设能满足那么按当前的申请量分配资源,否那么也要推迟分配,从而到达死锁的防止。

二、总体设计〔含系统的结构、原理框图或模块介绍等〕

1.系统的结构

进入

进入银行家算法演示

初始化资源矩阵

初始化资源矩阵

尝试资源分配

尝试资源分配

检测系统的平安性

检测系统的平安性

退出

退出

原理框图

从主函数开始进入银行家算法系统,先调用初始化函数chushihua()分别输入Allocation[i][j],Max[i][j],All[y]并判断是否符合条件,在调用函数show(),输出当前状态Available,Max[i][j],Allocation[i][j],Need[i][j]。然后调用平安性算法函数safe()判断在该时刻是否处于平安状态,并输出平安序列。然后调用银行家算法函数bank()进行试分配后再调用平安性算法函数判断在该时刻是否处于平安状态,假设不平安,那么恢复试分配时改变的值。

进入银行家算法演示

进入银行家算法演示

调用银行家算法bank()

调用显示当前状态函数show()

调用初始化函数chushihua()

调用平安性检查算法safe()

ln

N

Y

拒绝申请

三、详细设计〔含主要的数据结构、程序流程图等〕

1.数据结构

资源的总数量All[i]:是个含有i个元素的数组,其中的每一个元素代表一类资源的总数量。如果All[i]=K,那么表示系统中现有i类资源总数为K个。可利用资源向量Available[i]:是个含有i个元素的数组,其中的每一个元素代表一类可利用的资源数目。如果Available[i]=K,那么表示系统中现有i类资源K个。

最大需求矩阵Max[i][j]:这是一个i×j的矩阵,它定义了系统中i个进程的每一个进程对j类资源的最大需求。如果Max[i][j]=K,那么表示进程i需要j类资源的最大数目为K。

分配矩阵Allocation[i][j]:这也是一个i×j的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i][j]=K,那么表示进程i当前已分得j类资源的数目为K。

需求矩阵Need[i][j]:这也是一个i×j的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i][j]=K,那么表示进程i还需要j类资源K个,方能完成其任务。

上述三个矩阵间存在关系:

Need[i][j]=Max[i][j]-Available[i]

程序流程图

2.1初始化函数chushihua()

输入进程的数量n和资源种类数m。使用for循环在二维数Allocation[i][j]中输入各进程当前已分配的资源数量。使用for循环在二维数组Max[i][j]中输入各进程对各类资源的最大需求,并求出对应的二维数组Need[i][j]用来记录尚需分配的资源。使用for循环在一维数组All[]中输入各种资源的总数量,并求出各类资源尚可利用的数量Available[j]。

输入n、m

输入n、m

for循环输Allocation

for循环输入Max,求出Need

for循环输入All,求出Available

图1初始化函数chushihua()流程图

2.2显示当前状态函数show()

用于输出当前各种数组的情况。

2.3银行家算法bank()

a、先输入申请资源的进程k,判断是否kn-1。再输入该进程申请各类资源的数量,没输入一个要申请的资源数都要用do……while循环判断申请输入的情况

文档评论(0)

181****7662 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档