银行家算法报告和代码
7.使用说明
图7-1 系统界面图
图7-2资源分配图
图7-3 安全性检查图
图7-4预分配资源图
图7-5预分配资源安全检查图
图7-6预分配资源出错图
8.设计总结
此次操作系统课程设计,实现了银行家算法,他是避免死锁的重要方法。其中,我学到了很多的东西。首先,接到设计题目之后,在对本题目进行分析的时候,我懂得了一个很重要的道理,那就是说一个程序的产生需要一个对题目要求有一个正确全面的分析。其次,就该考虑程序算法的问题了,一个好的算法是一个好程序的灵魂,也决定了一个程序的质量。通过课程设计,我加深了对操作系统这门课的认识。使自己对软件的使用能力得到提升。通过操作系统这门课的课程设计,我更加知道了实践的重要性。在做课设的过程当中,遇到了很多的问题。比如,在运行程序时,输入已分配资源时出现问题,怎么调都调不正确,于是及时向郭同学请求帮助,她认真地对待并且解决了问题,使我能够及时地明白哪里不对并且改正。
void showdata()
此函数主要是在确定好资源和进程以及各进程的最大需求量和已分配的资源后,显示的此刻资源的分配情况。
void share()
此函数对申请的资源进行判定,如果合法,则予以分配;如果出错,则不给分配。
int safe()
此函数当为进程分配资源以后,检查这个状态是不是安全的,如安全,则确认分配;否则不予分配。
5.4 具体模块设计
图5-4-!安全性算法流程图
6.调试分析
(1)测试数据:
根据主界面提示,输入资源的名称数量和进程的数量以及进程所需的最大需求量和已分配的资源,然后进行观察。
(2)算法改进设想:
在程序设计前期,代码运行语法部分没有出现问题,但是在运行时,在输入已分配资源那块出现问题,经过不断地修改和请教,终于成功运行出来。
4.概要设计
4.1 数据结构
数组:
可利用资源向量Available 最大需求矩阵Max
分配矩阵Allocation 需求矩阵Need
4.2 系统包含的函数
void showdata(); //显示主界面函数
int safe(); //安全性算法函数
void share(); //银行家算法
int main();//主函数
3.需求分析
3.1 数据需求
系统可分配资源量,进程已申请到的资源量,进程所需最大资源量,进程还需要的资源量
3.2 基本功能需求
此系统主要通过银行家算法为进程进行资源的分配。
3.3 非功能性需求
用户界面需求:简洁、易用、易懂、友好的用户界面。
硬件要求:装有Visual C++6.0的计算机。
可靠性需求:保证用户在正常使用本系统时,用户的操作或误操作不会产生数据的丢失。
(3)当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:
Work[j]:= Work[j]+ Allocation[i,j];
Finish[i]:=true;
go to step 2;
(4)如果所有进程的Finish[i]=true都满足,则表示系统处于安全状态;否则,系统处于不安全状态。
五、审核批准意见
教研室主任(签字)
设计总说明
我们可以把操作系统看成是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配,若没超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配,否则也要推迟。
【5】蒋立翔编著.C++程序设计技能百练.北京:中国铁道出版社,2004.1
10.程序源代码
#include<stdio.h>
#include<iostream.h>
#include<string.h>
#define false 0
#define true 1
int Available[50]={0};
课程设计(论文)
题 目:银行家算法
院 (系):信息与控制工程系
专业班级:
姓 名:
学 号:
指导教师:
2016年1月15日
西安建筑科技大学华清学院课程设计(论文)任务书
专业班级:学生姓名:指导教师(签名):
一、课程设计(论文)题目
银行家算法:设计一个n个并发进程共享m个系统资源的程序以实现银行家算法。
二、本次课程设计(论文)应达到的目的
四、应收集的资料及主要参考文献:
操作系统经典算法的编程实现资料非常丰富,可以在图书馆找书籍或在因特网上找资料,都很容易找到,但是大部分代码是不全的,不能直接运行,希望大家只是把它当参考,编码还是自己做。
参考文献:
【1】汤小丹、梁红兵、哲凤屏、汤子瀛 编著.计算机操作系统(第三版).西安:西安电子科技大学出版社,2007.5
int Max[50][50]={0};
int Allocation[50][50]={0};
int Need[50][50]={0};
int Request[50]={0};
int Work[50]={0};
char name[100]={0};
int temp[50]={0};
int Finish[50]={0};
银行家算法分配资源的原则是:系统掌握每个进程对资源的最大需求量,当进程要求申请资源时,系统就测试该进程尚需资源的最大量,如果系统中现存的资源数大于或等于该进程尚需求资源最大量时,就满足进程的当前申请。这样就可以保证至少有一个进程可能得到全部资源而执行到结束,然后归还它所占有的全部资源供其它进程使用。
课程设计要求学生在完成程序设计的同时能够撰写比较规范的设计报告。严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。
2.问题描述
在死锁的皮免责,银行家算法把系统状态分为安全状态和不安全状态,只要能使系统始终处于安全状态便可以避免发生死锁。所谓安全状态,是指系统能按某种顺序为每个进程分配所需资源,直到最大需求,是每个进程都可以顺利完成,即可找到一个安全资源分配序列。模拟视线这个过程。
(3)系统试探着把资源分配给进程Pi,并修改下面数据结构中的数值:
Available[j]:= Available[j]—Requesti[j];
Allocation[i,j]:=Allocation[i,j]+Requesti[j];
Need[i,j]:= Need[i,j]—Requesti[j];
操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统基本理论与管理方式。在算法基础上,解决实际的管理功能的问题,提高学生实际应用、编程的能力。
4.3 函数间的关系
此系统各个函数之间相互是有联系的,比如在主函数中会调用其他的函数,在share函数中也对前面两个函数进行了调用。
4.4 系统功能模块图
图4-4-1系统功能模块图
5.详细设计
5.1 结构体的详细定义
int Available[50]={0};
int Max[50][50]={0};
Finish,他表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finish[i]:=flase;当有足够资源分配给进程后,再令Finish[i]:=True.
(2)从进程集合中找到一个能满足下述条件的进程:
Finish[i]=flase;
Need[i,j]<or=Work[j];若找到,执行步骤(3),否则,执行步骤(4)。
课程设计几天的时间下来,对操作系统这门课有了更深的了解,它是一门很重要的课程,算法比较多,需要我们很好地去掌握。而且在过程当中,我们也好地复习了c语言这门课,在计算机领域,很多课程都是相互联系的,相互交叉的,所以我们应该认真地对待每一门课程。这次的课设让我明白,以后一定要自己多动手做,这样才能印象深刻,才能更好地掌握这门课。
5.3 系统功能模块介绍
显示模块:此模块主要是显示某时刻的资源分配情况。
银行家算法模块:由银行家算法对资源进行分配,算法如下:
(1)如果Requesti[j]<or=Need[i,j],便转向步骤2;否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。
(2)如果Requesti[j]<or=Available[j], 便转向步骤3,否则,表示尚无足够资源,Pi需等待。
int Allocation[50][50]={0};
int Need[50][50]={0};
int Request[50]={0};
int Work[50]={0};
char name[100]={0};
int temp[50]={0};
int Finish[50]={0};
5.2 系统函数详细介绍
for(j=0;j<4;j++)
{for(i=0;i<N;i++)
【2】史美林编.计算机操作系统教程.北京:清华大学出版社,1999.11
【3】徐甲同编著.操作系统教程.西安:西安电子科技大学出版社,1996.8
【4】Clifford,A.Shaffer编著.数决结构与算法分析(C++版).北京:电子工业出版社,2005.7