预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

南京信息工程大学实验(实习)报告 实验(实习)名称银行家算法(实习)日期得分指导教师姜青山 专业计科班次大三姓名孙小荣学号20102308032 实验目的 1.1前言: Dijkstra(1965)提出了一种能够避免死锁的调度算法,称为银行家算法。 它的模型基于一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,每个客户都有一个贷款额度,银行家知道不可能所有客户同时都需要最大贷款额,所以他只保留一定单位的资金来为客户服务,而不是满足所有客户贷款需求的最大单位。 这里将客户比作进程,贷款比作设备,银行家比作系统。 客户们各自做自己的生意,在某些时刻需要贷款。在某一时刻,客户已获得的贷款和可用的最大数额贷款称为与资源分配相关的系统状态。一个状态被称为是安全的,其条件是存在一个状态序列能够使所有的客户均得到其所需的贷款。如果忽然所有的客户都申请,希望得到最大贷款额,而银行家无法满足其中任何一个的要求,则发生死锁。不安全状态并不一定导致死锁,因为客户未必需要其最大贷款额度,但银行家不敢抱这种侥幸心理。 银行家算法就是对每一个请求进行检查,检查如果满足它是否会导致不安全状态。若是,则不满足该请求;否则便满足。检查状态是否安全的方法是看他是否有足够的资源满足一个距最大需求最近的客户。如果可以,则这笔投资认为是能够收回的,然后接着检查下一个距最大需求最近的客户,如此反复下去。如果所有投资最终都被收回,则该状态是安全的,最初的请求可以批准。 1.2研究意义: 在多道程序系统中,多个进程的并发执行来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险——死锁。所谓死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace),当进程处于这种状态时,若无外力作用,他们都无法在向前推进。 要预防死锁,有摒弃“请求和保持”条件,摒弃“不剥夺”条件,摒弃“环路等待”条件等方法。 但是,在预防死锁的几种方法之中,都施加了较强的限制条件;而在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统状态分为安全状态和不安全状态,便可避免死锁的发生。 而最具代表性的避免死锁的算法,便是Dijkstra的银行家算法。 利用银行家算法,我们可以来检测CPU为进程分配资源的情况,决定CPU是否响应某进程的的请求并为其分配资源,从而很好避免了死锁的产生。 实验准备 操作系统图书,参考文献,课外资料 实验内容 根据设计题目的要求,充分地分析和理解题目,叙述系统的要求,明确程序要求实现的功能以及限制条件。 明白自己需要用代码实现的功能,清楚编写每部分代码的目的,做到有的放矢,有条理不遗漏的用代码实现银行家算法。 实验步骤 #include<iostream.h> #include<string.h> #include<stdio.h> #defineFalse0 #defineTrue1 intMax[100][100]={0};//各进程所需各类资源的最大需求 intAvaliable[100]={0};//系统可用资源 charname[100]={0};//资源的名称 intAllocation[100][100]={0};//系统已分配资源 intNeed[100][100]={0};//还需要资源 intRequest[100]={0};//请求资源向量 inttemp[100]={0};//存放安全序列 intWork[100]={0};//存放系统可提供资源 intM=100;//作业的最大数为100 intN=100;//资源的最大数为100 voidshowdata()//显示资源矩阵 { inti,j; cout<<"系统目前可用的资源[Avaliable]:"<<endl; for(i=0;i<N;i++) cout<<name[i]<<""; cout<<endl; for(j=0;j<N;j++) cout<<Avaliable[j]<<"";//输出分配资源 cout<<endl; cout<<"MaxAllocationNeed"<<endl; cout<<"进程名"; for(j=0;j<3;j++){ 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<<""; for(j=0;j<N;j++) cout<<Allocation[i][j]<<""; cout<<""; for(j=0;j<N;j++) cout<<Need[