任务3 编程序模拟银行家算法 一、课程设计目的 通过设计和调试银行家算法通用程序,加深对死锁概念和死锁避免方法的了解
二、课程设计内容 编制银行家算法程序,并检测所给状态的系统安全性
三、课程设计指导 银行家算法是一种最有代表性的避免死锁的算法
要解释银行家算法,必须先解释操作系统安全状态和不安全状态
安全状态:如果存在一个由系统中所有进程构成的安全序列P1,„,Pn,则系统处于安全状态
安全状态一定是没有死锁发生
不安全状态:不存在一个安全序列
不安全状态不一定导致死锁
那么什么是安全序列呢
安全序列:一个进程序列{P1,„,Pn}是安全的,如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和
1.银行家算法的思路 先对用户提出的请求进行合法性检查,即检查请求的是不大于需要的,是否不大于可利用的
若请求合法,则进行试分配
最后对试分配后的状态调用安全性检查算法进行安全性检查
若安全,则分配,否则,不分配,恢复原来状态,拒绝申请
银行家算法中的数据结构 (1)可利用资源向量 Available
这是一个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变
Available[j]=K,则表示系统中现有Rj类资源 K个
(2)最大需求矩阵 Max
这是一个n*m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求
如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为 K
(3)分配矩阵 Allocation
这也是一个n*m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数
如果 Allocation[i,j]=K,则表示进程 i当前已分得