1、7 银行家算法实现银行家算法实现 一、一、 概述概述 所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成 的一种僵局,当进程处于这种僵局状态时,若无外力作用,它们都将无法再向 前推进。 这就给计算机系统带来了问题, 银行家算法就是一个避免死锁的算法。 我们可以把操作系统看作是银行家, 操作系统管理的资源相当于银行家管理 的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按 照银行家制定的规则给进程分配资源,当进程首次申请资源时,要测试该进程 对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前 的申请量分配资源,否则就推迟分配。 当进程在执行中继
2、续申请资源时, 先测试该进程已占用的资源数与本次申请 的资源数之和是否超过了该进程对资源的最大需求量;若超过则拒绝分配资源, 若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量, 若能满 足则按当前的申请量分配资源,否则也要推迟分配。 二、设计目的二、设计目的 1、理解银行家算法; 2、掌握进程安全性检查的方法及资源分配的方法; 3、加深了解有关资源申请、避免死锁等概念; 4、体会和了解死锁和避免死锁的具体实施方法。 三、三、设计内容设计内容 用 C+语言编写并调试一个银行家算法,简单模拟动态分配,观察死锁产生 的条件,学习如何有效的防止和避免死锁的发生,掌握安全性算法。 四、开发
3、环境四、开发环境:Microsoft visual C+ 6.0 五、设计思路五、设计思路 1 1、银行家算法中的数据结构、银行家算法中的数据结构 (1)、可利用资源向量Available。这是一个含有 m 个元素的数组,其中的每一 个元素代表一类可利用的资源数目, 其初始值是系统中所配置的该类全部可用资 7 源的数目, 其数值随该类资源的分配和回收而动态地改变。 如果Available j= K, 则表示系统中现有 R 类资源 K 个 (2)、最大需求矩阵 Max。这是一个 n*m 的矩阵,它定义了系统中 n 个进程 对 m 类资源的最大需求。如果 Maxi,j=K,则表示进程 i 需要 R
4、 类资源的数目 为 K。 (3)、分配矩阵 Allocation。这也是一个 n*m 的矩阵,它定义了系统中每一 类资源当前已分配给每一进程的资源数。如果 Allocation i,j=K,则表示进 程 i 当前已分得 R 类资源的数目为 K。 (4)、需求矩阵 Need。这也是一个 n*m 的矩阵,用以表示每一个进程尚 需的各类资源数。如果 Need i,j=K,则表示进程 i 还需要 R 类资源 K 个,才 能完成其任务。 上述矩阵存在关系:Needi,j= Maxi,jAllocationi,j 2 2、银行家算法、银行家算法 设 Requesti是进程 Pi的请求向量,Requesti=K 表示进程 Pi 需要 K 个 j 类资 源。Pi 发出资源请求后,按下列步骤进行检查: (1)、如果 requestijneedi,j,转向步骤(2);否则认为错误,所需要 的资源数已超过它所宣布的最大值。 (2)、如果 requestijavailablej,转向步骤(3);否则,表示尚无足 够资源,Pi 需等待