任务3 编程序模拟银行家算法 一、课程设计目的 通过设计和调试银行家算法通用程序,加深对死锁概念和死锁避免方法的了解。 二、课程设计内容 编制银行家算法程序,并检测所给状态的系统安全性。 三、课程设计指导 银行家算法是一种最有代表性的避免死锁的算法。 要解释银行家算法,必须先解释操作系统安全状态和不安全状态。 安全状态:如果存在一个由系统中所有进程构成的安全序列P1,„,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。 不安全状态:不存在一个安全序列。不安全状态不一定导致死锁。 那么什么是安全序列呢? 安全序列:一个进程序列{P1,„,Pn}是安全的,如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和。 1.银行家算法的思路 先对用户提出的请求进行合法性检查,即检查请求的是不大于需要的,是否不大于可利用的。若请求合法,则进行试分配。最后对试分配后的状态调用安全性检查算法进行安全性检查。若安全,则分配,否则,不分配,恢复原来状态,拒绝申请。 2.银行家算法中的数据结构 (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当前已分得 Rj类资源的数目为 K。 (4)需求矩阵 Need。这也是一个 n*m的矩阵,用以表示每一个进程尚需的各类资源数。如果 Need[i,j]=K,则表示进程 i还需要 Rj类资源 K个,方能完成其任务。 上述三个矩阵存在如下关系: Need[i,j]= Max[i,j]- Allocation[i,j] 3.银行家算法 设 Request[i] 是进程 Pi的请求向量,如果 Request[i,j]=K,表示进程需要 K个 Rj类型的资源。当 Pi发出资源请求后,系统按下述步骤进行检查: (1)如果 Request[i,j]<= Need[i,j],便转向步骤(2);否则认为出错,因为它所需要的资源数已超过它所宣...