银行家算法

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

操作系统原理课程设计

题目银行家算法

学院

专业

姓名

年级

2013年12月25日

摘要

银行家算法是一个用来预防系统进入死锁状态的算法,用它可以判断系统的安全性,如果系统当前处于安全状态,则可以为申请资源的进程分配资源,如果不是安全状态,则不能为申请资源的进程分配资源。

银行家算法执行过程中,首先判断申请资源的进程所申请的资源数目是否合法,若是合法的,则可以为其进行试分配,再利用安全性算法求出安全序列,如果存在安全序列,则说明可以给申请资源的进程分配资源,分配成功,继续为其它进程服务。如果找不到安全序列,则说明为该进程分配资源后系统会进入不安全状态,所以不能为该进程分配资源,使该进程进入阻塞状态。若申请资源的进程申请的资源数目不合法,则不需要进行试分配,直接使其进入阻塞状态,处理其他申请资源的进程。

关键字:可用资源最大需求矩阵分配矩阵需求矩阵请求向量试分配安全性算法安全序列

目录

绪论 (1)

一算法原理 (1)

二算法思想 (2)

2.1安全性算法的算法思想 (2)

2.1.1设置两个向量 (2)

2.1.2安全性检测 (2)

2.2银行家算法的算法思想 (2)

2.2.1 银行家算法的思路 (4)

2.2.2 银行家算法 (3)

2.2.3 安全性检查算法 (3)

三详细设计 (4)

3.1银行家算法中用到的主要数据结构设计 (4)

3.2算法整体设计与调用 (5)

3.3模块设计与时间复杂度分析 (6)

3.3.1 int check_distribution(int* p,int k)函数 (6)

3.3.2 int check_safe()银行家算法 (6)

3.3.3 void print()输出函数 (6)

3.4程序流程图 (7)

3.4.1 主函数void main()函数流程图 (7)

3.4.2判断试分配函数int check_distribution(int* p,int k)流程图 (8)

3.4.3银行家算法int check_safe()流程图 (8)

3.4.4 输出函数void print() 流程图 (9)

四程序调试、分析与修改 (9)

4.1分模块调试与分析 (9)

4.1.1进程信息的输入与输出调试 (9)

4.1.2 进程请求资源输入出错提示信息处理 (11)

4.1.3 判断试分配函数int check_distribution(int* p,int k) (11)

4.1.4 求安全序列函数int check_safe() (11)

五结论 (12)

附录(源代码) (14)

参考文献 (24)

绪论

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

银行家算法

一、银行家算法原理

银行家算法是一种最有代表性的避免死锁的算法。要解释银行家算法,必须先解释操作系统安全状态和不安全状态。

安全状态:如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。

不安全状态:不存在一个安全序列。不安全状态不一定导致死锁。那么什么是安全序列呢?

安全序列:一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i ) 我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。

在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。

银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。它是最具有代表性的避免死锁的算法。

二算法思想

2.1 安全性算法的算法思想

思想:系统在进行资源分配之前,应先计算此次资源分配后状态的安全性。若此次分配后的状态是安全状态,则将资源分配给进程;否则,令进程等待。

2.1.1设置两个向量

(1)工作向量Work[m]: 它表示系统可提供给进程继续运行所需的各类资源

∶=Available;

数目, Work

(2) Finish[n]: 它表示系统是否有足够的资源分配给进程,使之运行完成。

false表示未完成, true表示完成。

2.1.2安全性检测

2.2.1 银行家算法的思路

相关文档
最新文档