实验六死锁避免的算法
【实验目的】
1、了解死锁避免的原理。
2、研究银行家算法的实现方法。
【实验内容】
编程实现银行家算法。
通过编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁地发生。
要求如下:
(1)模拟一个银行家算法;
(2)初始化时让系统拥有一定的资源;
(3)用键盘输入的方式申请资源;
(4)如果预分配后,系统处于安全状态,则修改系统的资源分配情况;
(5)如果预分配后,系统处于不安全状态,则提示不能满足请求,
【实验报告】
1、列出调试通过程序的清单,并附上文档说明。
2、总结上机调试过程中所遇到的问题和解决方法及感想。
【实验相关资料】
一、死锁概念
多个并发进程,每个进程占有部分资源,又都等待其它进程释放所占资源,造成均不能向前推进的现象。
二、死锁的避免
死锁避免原理就是使系统始终处于安全状态。
安全状态:所谓安全状态是指能够找到一个安全序列,系统能够按照这个安全序列依次为进程分配资源,使所有进程都能执行完毕,如果找不到这样的安全序列,系统就处于不安全状态。
三、银行家算法
银行家算法要求每个进程的最大资源需求,其基本思想是:始终保持系统处于安全状态,当进程提出资源请求时,系统先进行预分配,再判断系统分配后是否仍然处于安全状态。
如果仍然处于安全状态,就进行实际分配;如果处于不安全状态,则拒绝该进程的资源请求。
四、银行家算法相关数据结构
1. 最大需求矩阵:
d (t)=⎪⎪⎪⎪⎪⎭
⎫ ⎝⎛⋅
⋅⋅⋅nm n n m m d d d d d d d d d .........212222111211 其中,行表示进程,列表示资源,如:d ij =5表示第 i 个进程最多需要j 类资源5个。
2. 资源分配矩阵:
a(t)=⎪⎪⎪⎪⎪⎭
⎫ ⎝⎛⋅
⋅⋅⋅nm n n m m a a a a a a a a a .........212222111211 元素a ij =8表示分配给第 i 进程8个j 类资源。
3. 需求矩阵:
b(t)=⎪⎪⎪⎪⎪⎭
⎫ ⎝⎛⋅
⋅⋅⋅nm n n m m b b b b b b b b b .........212222111211 元素b ij =3表示第i 类进程还需要3个j 类资源。
最大需求矩阵=分配矩阵+需求矩阵,即d(t)=a(t)+b(t)。