课程设计。
题目:银行家算法的设计与实现
学生姓名:朱见涛
学院:信息工程学院。
系别:计算机系
专业:软件工程
班级:软08-1
指导教师:秦俊平讲师。
马志强讲师。
22024年1月18日
学院(系):信息学院计算机系课程名称:操作系统课程设计指导教师(签名。
专业班级: 软件工程 08-1 学生姓名: 朱见涛学号: 200810205004
目录。第一章设计内容 1
1.1 设计目的 1
1.2 设计要求 1
1.3 程序设计思想 1
第二章数据结构、算法和算法流程图 2
2.1 数据结构 2
2.2 程序功能图 2
2.3 程序流程图 3
第三章程序运行结果及分析 6
3.1 程序运行结果 6
3.2 程序分析 7
第四章心得体会 8
参考文献 9
附录程序清单 10
通过银行家算法设计与实现,可以加深学生对死锁的理解,掌握死锁的预防、避免、检测和解除的基本原理,重点掌握死锁的避免方法—银行家算法。使学生初步具有研究、设计、编制和调试操作系统模块的能力。
1.问题描述。
银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态的申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。
要解释银行家算法,必须先解释操作系统安全状态和不安全状态。
安全序列是指一个进程序列是安全的,如果对于每一个进程pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程pj (j < i )当前占有资源量之和。
安全状态:如果存在一个由系统中所有进程构成的安全序列p1,…,pn,则系统处于安全状态。安全状态一定是没有死锁发生。
不安全状态:不存在一个安全序列。不安全状态不一定导致死锁。
我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当与用户向银行家贷款。操作系统按照银行家指定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足他的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。
若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。
2.基本要求。
1)分析设计内容,给出解决方案(要说明设计实现的原理,采用的数据结构)。
2)画出程序的基本结构框图和流程图。
3)对程序的每一部分要有详细的设计分析说明。
4)源**格式要规范。
5)设计合适的测试用例,队得到的运行结果要有分析。
6)设计中遇到的问题,设计的心得体会。
7)按期提交完整的程序**,可执行程序和课程设计报告。
1.设计思想。
输入当前进程资源的使用情况以及整个系统的资源使用情况,并进行初始化安全性检查;如果是不安全状态,重新初始化系统;否则,从等待队列中提取一个等待进程,使用银行家算法进行检测,输出当前系统的状态和安全序列;如果是安全状态,系统继续从等待队列中提取等待进程进行检查;如果是不安全状态,进程回到等待队列,系统从等待队列中提取等待进程进行检查。系统中申请资源的进程全部进入等待队列等候处理。
银行家算法中用到的主要数据结构。
可用资源向量 int **ailable[i] /j为资源的种类。
最大需求矩阵 int max[i][ji为进城的数量。
分配矩阵 int allocation[i][j]
需求矩阵 int need[i][j]=max[i][j]-allocation[i][j]
申请各类资源数量 int request[i][j] /i申请j资源的数量。
工作向量 int work[i] int finish[i]
安全序列 int p[i]
文件系统提供的文件操作有建立文件(mkfile)、复制文件(copy)、显示文件所有内容(type)、删除文件(delfile)。可以通过键盘输入命令来模拟文件的操作。
1)初始化界面。
2)检测系统资源分配是否安全(若安全,输入安全序列)
本程序依靠键盘输入初始化系统资源数量及种类,有银行家算法检验系统资源是否安全,输出安全序列。提出请求request[i],同意分配,则进行安全性算法safe(),否则输出提示:请求被拒绝。
直到所有进程finish=true,安全且输出安全序列,安全算法safe()结束。
通过本次的课程设计,使我能够正确运用操作系统课程中所学的基本理论和知识。操作系统的基本特征是并发与共享。系统允许多个进程并发执行,并且共享系统的软、硬件资源。
为了最大限度的利用计算机系统的资源,操作系统应采用动态分配的策略,但是这样就容易因资源不足,分配不当而引起“死锁”。而我本次课程设计就是得用银行家算法来避免“死锁”。银行家算法是一个分配资源的过程,是分配的序列不会产生死锁。
此算法的中心思想是:按该法分配资源时,每次分配后总存在着一个进程,如果让它单独运行下去,必然可以获得它所需要的全部资源,也就是说,它能结束,而它结束后可以归还这类资源以满足其他申请者的需要。本次程序就是按照上面的思路展开的。
但是因为时间上的仓促,本课程设计存在以下不足:一、不能实现并发操作,即当总资源同时满足几个进程所需要的资源数时,这些进程不能同时进行,只能一一按进程顺序执行。二、扫描进程顺序单一,只能按进程到来的顺序来扫描,从而产生的安全序列只能是在这个顺序的基础上产生的,而其实安全序列是有多个的。
三、对进程数和资源数进行的数量进行了限制,都只能最多有十个。四、运行程序后,界面较差,进程数,所需要资源数,已分配资源数,能用资源数,不能一目了然。设计一个软件,先要做好需求分析,这一点很重要,如果没有分析好需求,到软件设计的最后,发现所做的功能不符合要求,那么一切都得重做。
还有比较重要的是,画好程流程图。在编程和调试的过程中,经常会出现意想不到的问题,并非每个问题都可以从相关资料中找到解决方法,有些问题是无法预料到的,这就需要通过自己理性的分析得出问题的解决方案。在设计过程中,查询了不少相关资料,不断的发现问题、提出问题、解决问题。
总的来说通过这次的设计的学习使我学到了很多在平时的学习中学不到的很多东西,通过这次课程设计,使我学到了很多的实用性知识。除了更深的了解这个算法,而且对c语言进行了复习,而且其过程中有很多的知识点都不记得了,所以在此感谢在此过程中帮助过我的老师和同学。
1] 张尧学编.计算机操作系统教程(第三版)习题解答与实验指导.北京:清华大学出版社,2006
2] 汤子瀛主编.计算机操作系统(第三版).西安:西安电子科技大学出版社,2001
3] csdn论坛.
4] 张丽芬等编.操作系统实验教程.北京:清华大学出版社,2006
#include
using namespace std;
#define maxprocess 10最大进程数*/
#define maxresource 10最大资源数*/
int **ailable[maxresource可用资源数组*/
int max[maxprocess][maxresource最大需求矩阵*/
int allocation[maxprocess][maxresource分配矩阵*/
int need[maxprocess][maxresource需求矩阵*/
int request[maxprocess][maxresource进程申请资源数*/
bool finish[maxprocess系统是否有足够的资源分配*/
int p[maxprocess记录序列*/
int m,nm个进程,n个资源*/
void init();
bool safe();
void bank();
int main()
操作系统课程设计报告
西安郵電大學。院系名称 计算机学院。专业名称 软件工程。班级 1104 学生姓名 赵大伟。学号 8位 04113124 指导教师 舒新峰。设计起止时间 2013.11.10 2013.11.20 1 通过观察 分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在posix 规范中...
操作系统课程设计报告
课程设计。课程名称操作系统。题目名称多级文件系统 2 学生学院计算机学院 专业班级。学号。学生姓名。指导教师。年月日。目录。一 课程设计 6 二 开发工具及环境 6 三 设计内容 6 四 结构图 8 五 部分 9 六 运行截图 11 七 参考文献 15 八 心得体会 15 本课程设计要求设计一个模拟...
操作系统课程设计报告
实验一进程管理。一 实验目的。1 开发一个函数,建立进程控制块和资源控制块结构,并实现相关数据结构的初始化。2 开发一系列操作,由进程调用这些操作,达到控制进程申请或释放各种资源的目的。通过实验理解进程的概念,进程的组成 pcb结构 进程的并发执行和操作系统进行进程管理的相关原语 主要是进程的创建 ...