课程名称: 计算机操作系统
设计题目: 银行家算法实现。
院系。专业及班级:
设计者。学号。
指导教师。设计时间: 2023年1月2日--月 6日
目录。一引言 2
1.1 研究背景 2
1.2 研究意义 2
二需求分析 3
2.1 题目描述 3
2.2 银行家算法描述 3
2.3 基本要求 3
2.4 目的 4
三实验内容 4
四实验步骤 4
五详细设计 6
5.1 头文件** 6
5.2 函数功能表 7
六源程序** 7
七实验结果 12
八实验总结 14
九参考资料 15
一引言。1.1 研究背景。
dijkstra (1965)提出了一种能够避免死锁的调度算法,称为银行家算法。
它的模型基于一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,每个客户都有一个贷款额度,银行家知道不可能所有客户同时都需要最大贷款额,所以他只保留一定单位的资金来为客户服务,而不是满足所有客户贷款需求的最大单位。
这里将客户比作进程,贷款比作设备,银行家比作系统。
客户们各自做自己的生意,在某些时刻需要贷款。在某一时刻,客户已获得的贷款和可用的最大数额贷款称为与资源分配相关的系统状态。一个状态被称为是安全的,其条件是存在一个状态序列能够使所有的客户均得到其所需的贷款。
如果忽然所有的客户都申请,希望得到最大贷款额,而银行家无法满足其中任何一个的要求,则发生死锁。不安全状态并不一定导致死锁,因为客户未必需要其最大贷款额度,但银行家不敢抱这种侥幸心理。
银行家算法就是对每一个请求进行检查,检查如果满足它是否会导致不安全状态。若是,则不满足该请求;否则便满足。
检查状态是否安全的方法是看他是否有足够的资源满足一个距最大需求最近的客户。如果可以,则这笔投资认为是能够收回的,然后接着检查下一个距最大需求最近的客户,如此反复下去。
如果所有投资最终都被收回,则该状态是安全的,最初的请求可以批准。
1.2 研究意义
在多道程序系统中,多个进程的并发执行来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险——死锁。所谓死锁(deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(deadlyembrace),当进程处于这种状态时,若无外力作用,他们都无法在向前推进。
要预防死锁,有摒弃“请求和保持”条件,摒弃“不剥夺”条件,摒弃“环路等待”条件等方法。
但是,在预防死锁的几种方法之中,都施加了较强的限制条件;而在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统状态分为安全状态和不安全状态,便可避免死锁的发生。
而最具代表性的避免死锁的算法,便是dijkstra的银行家算法。
利用银行家算法,我们可以来检测cpu为进程分配资源的情况,决定cpu是否响应某进程的的请求并为其分配资源,从而很好避免了死锁的产生。
二需求分析。
2.1 题目描述
银行家算法是一种最具有代表性的避免死锁的算法。
要解释银行家算法,必须先解释操作系统的安全状态和不安全状态。
所谓安全状态,是指系统能按照某种进程顺序(称序列为安全序列),来为每个进程pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可以顺利完成。安全状态一定没有死锁发生。
如果系统无法找到这样一个安全序列,则称系统处于不安全状态。
那么,什么是安全序列呢?
如果对每一个进程pi(12.2 银行家算法描述。
我们可以把操作系统看做是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求资源相当于客户向银行家贷款。
操作系统按银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程尚需求的资源量,若是系统现存的资源可以满足它尚需求的资源量,则按当前的申请量来分配资源,否则就推迟分配。
当进程在执行中继续申请资源时,先测试该进程申请的资源量是否超过了它尚需的资源量。若超过则拒绝分配,若没有超过则再测试系统尚存的资源是否满足该进程尚需的资源量,若满足即可按当前的申请量来分配,若不满足亦推迟分配。
2.3 基本要求
可以输入某系统的资源以及t0时刻进程对资源的占用及需求情况的表项,以及t0时刻系统的可利用资源数。
对t0时刻的进行安全性检测,即检测在t0时刻该状态是否安全。
进程申请资源,用银行家算法对其进行检测,分为以下三种情况:
ⅰ 所申请的资源大于其所需资源,提示分配不合理不予分配并返回。
所申请的资源未大于其所需资源,但大于系统此时的可利用资源,提示分配不合理不予分配并返回。
所申请的资源未大于其所需资源,亦未大于系统此时的可利用资源,预分配并进行安全性检查:
预分配后系统是安全的,将该进程所申请的资源予以实际分配并打印后返回。
与分配后系统进入不安全状态,提示系统不安全并返回。
对输入进行检查,即若输入不符合条件,应当报错并返回重新输入。
2.4 目的。
通过实验加强对银行家安全算法的理解和掌握。
通过本次实验掌握有关资源申请、避免死锁等概念,体会和了解死锁和避免死锁的具体实施方法。
三实验内容。
本设计的目的是通过编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁地发生。要求如下:
模拟一个银行家算法;
初始化时让系统拥有一定的资源;
用键盘输入的方式申请资源;
如果预分配后,系统处于安全状态,则修改系统的资源分配情况;
如果预分配后,系统处于不安全状态,则提示不能满足请求,设计的主要内容是模拟实现动态资源分配。同时编写和调试一个系统动态资源的简单模拟程序,观察死锁产生的条件,并使用适当的算法,有效的防止和避免死锁的发生。
背景知识:银行家算法,顾名思义是**于银行的借贷业务,一定数量的本金要应对多个客户的借贷周转,为了防止银行家资金无法周转而倒闭,对每一笔贷款,必须考察其是否能限期归还。在操作系统中研究资源分配策略时也有类似问题,系统中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的时间内归还资源,以供其他进程使用资源。
如果资源分配不得到就会发生进程循环等待资源,则进程都无法继续执行下去的死锁现象。
四实验步骤。
1 分析银行家算法结构;
2 画出银行家算法的流程图,即设计说明;
3 根据画出的流程图使用c语言编写相应的**(**过长,放到最后);
检查**,将编出的**编译、链接,验证其正确性。
五详细设计。
5.1 头文件**。
#include <>本实验中使用到的库函数。
#include <>
#include <>
int max[5][3开始定义银行家算法中需要用到的数据。
int allocation[5][3];
int need[5][3];
int **ailable[3];
int request[5][3];
char *finish[5];
int safe[5];
int n,i,m;
int k=0;
int j=0;
int work[3];
int works[5][3];
5.2 函数功能表。
六源程序**。
#include <>本实验中使用到的库函数。
#include <>
#include <>
int max[5][3开始定义银行家算法中需要用到的数据。
int allocation[5][3];
int need[5][3];
int **ailable[3];
int request[5][3];
char *finish[5];
int safe[5];
int n,i,m;
int k=0;
int j=0;
int work[3];
int works[5][3];
void line() 美化程序,使程序运行时更加明朗美观。
printfn");
void start() 表示银行家算法开始。
line();
printf银行家算法开始");
printfdesigned by zhang hong");
line();
void end() 表示银行家算法结束。
line();
printf银行家算法结束,谢谢使用");
line();
void input() 输入银行家算法起始各项数据。
for (n=0;n<5;n++)
printf("请输入进程p%d的相关信息:",n);
printf("max:")
for (m=0;m<3;m++)
scanf("%d",&max[n][m]);
printf("allocation:")
for (m=0;m<3;m++)
操作系统课程设计报告
西安郵電大學。院系名称 计算机学院。专业名称 软件工程。班级 1104 学生姓名 赵大伟。学号 8位 04113124 指导教师 舒新峰。设计起止时间 2013.11.10 2013.11.20 1 通过观察 分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在posix 规范中...
操作系统课程设计报告
课程设计。课程名称操作系统。题目名称多级文件系统 2 学生学院计算机学院 专业班级。学号。学生姓名。指导教师。年月日。目录。一 课程设计 6 二 开发工具及环境 6 三 设计内容 6 四 结构图 8 五 部分 9 六 运行截图 11 七 参考文献 15 八 心得体会 15 本课程设计要求设计一个模拟...
操作系统课程设计报告
实验一进程管理。一 实验目的。1 开发一个函数,建立进程控制块和资源控制块结构,并实现相关数据结构的初始化。2 开发一系列操作,由进程调用这些操作,达到控制进程申请或释放各种资源的目的。通过实验理解进程的概念,进程的组成 pcb结构 进程的并发执行和操作系统进行进程管理的相关原语 主要是进程的创建 ...