- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
淮海工学院计算机工程学院
实验报告书
课程名: 《操作系统原理》
题 目: 银行家算法
班 级:
学 号:
姓 名:
一、实验目的
银行家算法是操作系统中避免死锁的典型算法,本实验可以加深对银行家算法的步骤和相关数据结构用法的更好理解。
实验环境
Turbo C 2.0/3.0或VC++6.0
实验学时
4学时,必做实验。
二、实验内容
用C语言编写一个简单的共享资源的。进程可动态地申请资源,系统按各进程的申请动态地分配资源。要求程序具有显示和打印各进程的某一时刻的资源分配表和安全序列;显示和打印各进程依次要求申请的资源以及为某进程分配资源后的有关资源数据的情况。
实验步骤
理解本实验中关于两种调度算法的说明。
根据调度算法的说明,画出相应的程序流程图。
按照程序流程图,用C语言编程并实现。
五、分析与思考
要找出某一状态下所有可能的安全序列,程序该如何实现?
答:要找出这个状态下的所有可能的安全序列,前提是要是使这个系统先处于安全状态,而
系统的状态可通过以下来描述:
进程剩余申请数=最大申请数-占有数; 可分配资源数=总数-占有数之和;
通过这个描述来算出系统是否安全,从而找出所有的安全序列。
银行家算法的局限性有哪些?
答:银行家算法是一种最有代表性的避免死锁的算法。银行家算法即把操作系统看作是银行 家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。但任何一种算法都存在其缺点,对各进程的资源分配要求严格,经常使其处于不安全状态,银行家算法的主要局限是过于谨慎和检查各申请者对各类资源的最大需求量开销较大。
六、测试数据与实验结果
银行家算法流程图(1)所示:
运行结果如图(2)(3)所示:
图(2)
图(3)银行家算法截图
七、实验心得与体会
银行家算法是操作系统中避免死锁的典型算法。所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象死锁。#includeiostream.h
#includestring.h
#includestdio.h
#define False 0
#define True 1
int Max[100][100]={0};//各进程所需各类资源的最大需求
int Avaliable[100]={0};//系统可用资源
char name[100]={0};//资源的名称
int Allocation[100][100]={0};//系统已分配资源
int Need[100][100]={0};//还需要资源
int Request[100]={0};//请求资源向量
int temp[100]={0};//存放安全序列
int Work[100]={0};//存放系统可提供资源
int M=100;//作业的最大数为100
int N=100;//资源的最大数为100
void showdata()//显示资源矩阵
{
int i,j;
cout系统目前可用的资源[Avaliable]:endl;
for(i=0;iN;i++)
coutname[i] ;
coutendl;
for (j=0;jN;j++)
coutAvaliable[j] ;//输出分配资源
coutendl;
cout Max Allocation Needendl;
cout进程名 ;
for(j=0;j3;j++){
for(i=0;iN;
文档评论(0)