银行家算法设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于银行家算法的研究

摘要

1.研究的目的和意义

加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。死锁的产生,必须同时满足四个条件,即一个资源每次只能由一个进程占用:第二个为等待条件,即一个进程请求资源不能满足时,它必须等待,但它仍继续保持已得到的所有其他资源:第四个为循环等待条件,系统中存在若干个循环等待的进程,即其中每一个进程分别等待它前一个进程所持有的资源。防止死锁的机构只能确保上述四个条件之一不出现,则系统就不会发生死锁。通过这个算法可用解决生活中的实际问题,如银行贷款等.

2.研究的内容及方法

银行家算法是最有代表性的避免死锁的算法,由于该算法能用于银行系统现金贷款的发放而得名。其实现思想是:允许进程动态地申请资源,系统在每次实施资源分配之前,先计算资源分配的安全性,若此次资源分配安全(即资源分配后,系统能按某种顺序来为每个进程分配其所需的资源,直至最大需求,使每个进程都可以顺利地完成),便将资源分配给进程,否则不分配资源,让进程等待。

关键词:银行家算法安全死锁

目录

摘要 (i)

1绪论 (1)

1.1前言 (1)

1.2本文主要研究内容 (1)

2需求分析 (2)

2.1死锁的概念 (2)

2.2关于死锁的一些概念 (2)

2.3资源分类 (2)

2.4产生死锁的必要条件 (2)

2.5死锁预防 (3)

2.6银行家算法 (3)

3概要设计 (4)

3.1设计思路 (4)

3.2 数据结构 (4)

3.3主要函数说明 (5)

4详细设计 (6)

4.1算法描述 (6)

4.1.1银行家算法 (6)

4.1.2 安全性检查算法 (7)

4.2函数的实现过程 (7)

4.3程序流程图 (9)

5测试结果 (10)

6结果分析 (12)

7总结 (13)

源程序清单 (14)

1绪论

1.1前言

银行家算法是避免死锁的一种重要方法。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。银行家算法确实能保证系统时时刻刻都处于安全状态,但它要不断检测每个进程对各类资源的占用和申请情况,需花费较多的时间。现在的大部分系统都没有采用这个算法,也没有任何关于死锁的检查。

1.2 本文主要研究内容

(1)设计银行家算法,能够检测系统某一时刻是否安全,输出安全序列。(2)实现安全性检测算法。即在某一进程在某时刻提出Request时,检测系统是否能够满足该进程的请求,并得到一个安全序列,若能够得到一个安全序列,则系统能够满足它的请求,同意分配资源。若不能够满足,则回到请求前状态。(3)对于此次课程设计通过需求分析、概要设计、详细设计、测试与分析、总结、源程序清单等模块进行全面分析,以加深对死锁概念的理解,以及银行家算法避免死锁的过程。能够利用银行家算法,有效避免死锁的发生,或检测死锁的存在。

2需求分析

2.1死锁的概念

所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象死锁。

2.2关于死锁的一些结论

1)参与死锁的进程最少是两个(两个以上进程才会出现死锁)

2)参与死锁的进程至少有两个已经占有资源

3)参与死锁的所有进程都在等待资源

4)参与死锁的进程是当前系统中所有进程的子集

注:如果死锁发生,会浪费大量系统资源,甚至导致系统崩溃。

2.3资源分类

1)可剥夺资源

2)不可剥夺资源

2.4产生死锁的必要条件

1、互斥条件(Mutual exclusion)

一个资源每次只能被一个进程使用。

2、请求与保持条件(占有等待)(Hold and wait)

一个进程因请求资源而阻塞时,对已获得的资源保持不放。

3、不剥夺条件(不可抢占)(No pre-emption)

进程已获得的资源,在未使用完之前,不能强行剥夺。

4、循环等待条件(Circular wait)

若干进程之间形成一种头尾相接的循环等待资源关系。

这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。

2.5死锁预防

理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态的情况下占用资源,在系统运行过程中,对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,若分配后系统可能发生死锁,则不予分配,否则予以分配。因此,对资源的分配要给予合理的规划。

2.6银行家算法

我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。

相关文档
最新文档