《《银行家算法》操作系统课程设计》由会员分享,可在线阅读,更多相关《《银行家算法》操作系统课程设计(21页珍藏版)》请在金锄头文库上搜索。
1、操作系统课程设计报告操作系统课程设计报告题目:银行家算法题目:银行家算法院院 (系):(系): 计算机科学与工程计算机科学与工程专专 业:业: 软件工程软件工程 班班 级:级: 100605 学学 生:生: 学学 号:号: 指导教师:指导教师: 2013 年 1 月目目 录录摘要摘要.3 3一一、问题描述、问题描述.4 4二二、概要设计、概要设计.4 42.1 算法思路 .4 42.2 银行家算法步骤 .4 42.3 安全性算法步骤 .5 52.3 各模块间的调用关键 .5 5三、详细设计三、详细设计.5 531 主要函数的核心代码 .5 532 程序流程图 .6 6四、测试结果及分析四、测试
2、结果及分析.9 94.1 用例测试 a.9 94.2 用例测试 b.9 94.3 用例测试 c.9 94.4 用例测试 d.9 94.5 用例测试 e.1010五五、总结总结.1010六六、附录附录源代码源代码.1212银行家算法银行家算法(西安工业大学计算机科学与工程学院,陕西西安,710021)摘摘 要要银行家算法是避免死锁的重要算法,本文介绍了银行家酸价的包括算法思路、步骤,以及要用到的主要数据结构、函数模块及其之间的调用关系等。在概要设计的基础上,又给出了详细的算法设计,实现概要设计中定义的所有函数,对每个函数写出核心算法,并画出了流程图。接着对编码进行了测试与分析(并在最后附上 Ja
3、va 编写的程序代码) 。最后对整个设计过程进行了总结。关键词关键词:安全状态 银行家算法 安全性算法 安全序列 流程图。Banker s AlgorithmAbstractBankers to avoid deadlock algorithm is an important algorithm, this paper introduces the bankers algorithm, including the steps of acid value, and to use the main data structure, function module and between the ca
4、ll relation. In the summary of the design basis, and gives a detailed algorithm design, design outline to achieve the definition of all functions, each function to write the core algorithms, and draw the flow chart. Then the coding are tested and analyzed ( and attached in the last Java program code
5、 ). The final design of the whole process are summarized.Key Words: safety security sequence bankers algorithm security algorithm flow chart.1 1、问题描述、问题描述银行家算法是一种最具有代表性的避免死锁的算法。要解释银行家算法,必须先解释操作系统的安全状态和不安全状态。所谓安全状态,是指系统能按照某种进程顺序P1,P2,,Pn(称P1,P2,,Pn 序列为安全序列) ,来为每个进程 Pi 分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可
6、以顺利完成。安全状态一定没有死锁发生。如果系统无法找到这样一个安全序列,则称系统处于不安全状态。么,什么是安全序列呢?如果对每一个进程 Pi(14135*此时刻资源分配情况*Number Name Max Allocation Need0 p0 7 5 3 0 1 0 7 4 31 p1 3 2 2 2 0 0 1 2 22 p2 9 0 2 3 0 2 6 0 03 p3 2 2 2 2 1 1 0 1 14 p4 4 3 3 0 0 2 4 3 14.24.2 用例测试用例测试b b:进程1发出请求Request(2,1,2)RequestNeed,请输入您要分配的资源进程号:1请输入进程
7、1申请的资源:A类资源请求:2B类资源请求:1C类资源请求:2进程1申请的资源大于它所需要的资源。请求不合理,不予分配!4.34.3 用例测试用例测试 c c:进程 0 发出请求 Request(5,3,2)RequestAvailable,不予分配请输入您要分配的资源进程号:0请输入进程0申请的资源:A类资源请求:5B类资源请求:3C类资源请求:2进程0申请的资源大于系统现在可利用的资源。 不能给与分配!4.44.4 用例测试用例测试 d d:进程 1 发出请求 Request(1,0,2)可以分配请输入您要分配的资源进程号:1请输入进程1申请的资源:A类资源请求:1B类资源请求:0C类资源
8、请求:2系统是安全的,安全序列为:24135*此时刻资源分配情况*Number Name Max Allocation Need0 p0 7 5 3 0 1 0 7 4 31 p1 3 2 2 3 0 2 0 2 02 p2 9 0 2 3 0 2 6 0 03 p3 2 2 2 2 1 1 0 1 14 p4 4 3 3 0 0 2 4 3 14.54.5 用例测试用例测试 e e:进程 0 发出请求 Request(1,0,1)系统不安全。请输入您要分配的资源进程号:0请输入进程0申请的资源:A类资源请求:0B类资源请求:2C类资源请求:0系统不安全!系统不安全!系统不安全! 5 5、总结
9、、总结在本程序代码中,总共有五个方法,一个是 main 方法,输入数据是用printFrame()函数来实现,输出结果是用 print()函数来实现的,银行家算法用judge( )函数来实现,而安全性算法是用 Safty()来实现的首先,输入欲申请资源的进程以及其所申请的资源数,存放在 Request 数组中。然后,判断进程请求的资源数是否大于其所需的资源数,若大于则报错并返回,若不大于则继续判断它是否大于系统在此时刻可利用的资源数,同样,如果大于则报错并反回,如果不大于则调用 changedata( )函数来进行预分配,之后再调用安全型算法 safty 检查。最后,无论此次分配是否成功,我们
10、都可以选择继续分配或者退出系统。总之,银行家算法是避免死锁的主要方法,其思路在很多方面都非常值得我们来学习借鉴。6 6、附录、附录源代码源代码import java.util.Scanner;public class Test int no1, no2;static int Max; /最大需求最大需求static int Allocation; /已分配资源数已分配资源数static int Need; /仍需资源数仍需资源数static int Available; /可利用资源数可利用资源数static String name1; static String name2; static
11、boolean Finish; static int temp = 0 ; /存放安全序列存放安全序列static int work;static int Request;Scanner input = new Scanner(System.in);public static void main(String args) /主方法主方法Test t = new Test();t.printFrame();t.Safty();t.judge();public void printFrame() /输入初始化数据输入初始化数据System.out.print(“请输入系统中进程的个数请输入系统中进程的个数:“);no1 = input.nextInt();System.out.print(“请输入资源的种类数:请输入资源的种类数:“);no2 = input.nextInt();Max = new intno1n