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