操作系统课程设计报告—银行家算法

  • 格式:doc
  • 大小:535.50 KB
  • 文档页数:26

下载文档原格式

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

操作系统课程设计报告题目:银行家算法

院(系):

专业:

班级:

学生:

学号:

指导教师:

操作系统课程设计报告

摘要

Dijkstra提出的银行家算法,是最具代表性的避免死锁的算法。

本文对如何用银行家算法来处理操作系统给进程分配资源做了详细的说明,包括需求分析、概要设计、详细设计、测试与分析、总结、源程序清单。

首先做了需求分析,解释了什么是银行家算法,并指出它在资源分配中的重要作用。

然后给出了银行家算法的概要设计,包括算法思路、步骤,以及要用到的主要数据结构、函数模块及其之间的调用关系等。

在概要设计的基础上,又给出了详细的算法设计,实现概要设计中定义的所有函数,对每个函数写出核心算法,并画出了流程图。

接着对编码进行了测试与分析(并在最后附上Java编写的程序代码)。

最后对整个设计过程进行了总结。

关键词:安全状态;安全序列;银行家算法;安全性算法;安全序列;流程图。

目录

摘要 (1)

1绪论 (4)

1.1前言 (5)

1.2研究意义 (5)

1.3结构安排 (5)

2需求分析 (4)

2.1题目描述 (5)

2.2银行家算法 (5)

2.3基本要求 (5)

2.4目的 (5)

3概要设计 (4)

3.1基本思路 (5)

3.2银行家算法步骤 (5)

3.3安全型算法步骤 (5)

3.4数据结构 (5)

3.4.1主要用到的数据结构 (6)

3.4.2程序模块 (6)

3.4.3各模块间的调用关系 (6)

4详细设计 (4)

4.1主要函数的核心代码 (5)

4.1程序流程图 (5)

5测试 (4)

5.1测试用例 (5)

5.1测试结果分析和截图 (5)

6总结 (4)

参考文献 (4)

附录:原程序清单 (4)

绪论

1绪论

1.1前言:

Dijkstra (1965)提出了一种能够避免死锁的调度算法,称为银行家算法。

它的模型基于一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,每个客户都有一个贷款额度,银行家知道不可能所有客户同时都需要最大贷款额,所以他只保留一定单位的资金来为客户服务,而不是满足所有客户贷款需求的最大单位。

这里将客户比作进程,贷款比作设备,银行家比作系统。

客户们各自做自己的生意,在某些时刻需要贷款。在某一时刻,客户已获得的贷款和可用的最大数额贷款称为与资源分配相关的系统状态。一个状态被称为是安全的,其条件是存在一个状态序列能够使所有的客户均得到其所需的贷款。如果忽然所有的客户都申请,希望得到最大贷款额,而银行家无法满足其中任何一个的要求,则发生死锁。不安全状态并不一定导致死锁,因为客户未必需要其最大贷款额度,但银行家不敢抱这种侥幸心理。

银行家算法就是对每一个请求进行检查,检查如果满足它是否会导致不安全状态。若是,则不满足该请求;否则便满足。

检查状态是否安全的方法是看他是否有足够的资源满足一个距最大需求最近的客户。如果可以,则这笔投资认为是能够收回的,然后接着检查下一个距最大需求最近的客户,如此反复下去。

如果所有投资最终都被收回,则该状态是安全的,最初的请求可以批准。1.2研究意义:

在多道程序系统中,多个进程的并发执行来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险——死锁。所谓死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace),当进程处于这种状态时,若无外力作用,他们都无法在向前推进。

银行家算法课程设计报告

要预防死锁,有摒弃“请求和保持”条件,摒弃“不剥夺”条件,摒弃“环路等待”条件等方法。

但是,在预防死锁的几种方法之中,都施加了较强的限制条件;而在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统状态分为安全状态和不安全状态,便可避免死锁的发生。

而最具代表性的避免死锁的算法,便是Dijkstra的银行家算法。

利用银行家算法,我们可以来检测CPU为进程分配资源的情况,决定CPU是否响应某进程的的请求并为其分配资源,从而很好避免了死锁的产生。

1.3结构安排:

一、绪论:介绍了题目背景以及研究意义。

二、需求分析:介绍了题目描述、银行家算法、以及基本要求和所需达到的目的。

三、概要设计:介绍了基本的算法思路、步骤,以及数据结构和主要的函数模块及其调用关系。

四、详细设计:介绍了主要函数及其核心代码,以及程序流程图。

五、测试

六、总结

参考文献

附录:原程序清单

需求分析

2 需求分析

2.1题目描述:

银行家算法是一种最具有代表性的避免死锁的算法。

要解释银行家算法,必须先解释操作系统的安全状态和不安全状态。

所谓安全状态,是指系统能按照某种进程顺序{P1,P2,…,Pn}(称{P1,P2,…,Pn }序列为安全序列),来为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可以顺利完成。安全状态一定没有死锁发生。

如果系统无法找到这样一个安全序列,则称系统处于不安全状态。

那么,什么是安全序列呢?

如果对每一个进程Pi(1

2.2银行家算法:

我们可以把操作系统看做是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求资源相当于客户向银行家贷款。

操作系统按银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程尚需求的资源量,若是系统现存的资源可以满足它尚需求的资源量,则按当前的申请量来分配资源,否则就推迟分配。

当进程在执行中继续申请资源时,先测试该进程申请的资源量是否超过了它尚需的资源量。若超过则拒绝分配,若没有超过则再测试系统尚存的资源是否满足该进程尚需的资源量,若满足即可按当前的申请量来分配,若不满足亦推迟分配。

2.3基本要求:

(1)可以输入某系统的资源以及T0时刻进程对资源的占用及需求情况的表项,以及T0时刻系统的可利用资源数。

(2)对T0时刻的进行安全性检测,即检测在T0时刻该状态是否安全。

(3)进程申请资源,用银行家算法对其进行检测,分为以下三种情况:

A. 所申请的资源大于其所需资源,提示分配不合理不予分配并返回。