没有合适的资源?快使用搜索试试~ 我知道了~
操作系统实验三银行家算法.docx
资源推荐
资源详情
资源评论
操作系统实验三银行家算法
实验三 银行家算法
一、实验内容
运用某种高级语言(如 C 或 C++)模拟银行家算法的处理过程。
二、实验目的
银行家算法是避免死锁的代表性算法。本实验旨在加深了解有关资源申请、避免死锁、
状态安全性等概念,并体会和运用避免死锁的具体实施方法。然后依照本实验,自行设计模
拟程序。
三、实验题目
银行家算法的模拟。
[提示]:
(1) 我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金
,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则
为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现
存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在
执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了
该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源
能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分
配。
(2) 安全状态:如果存在一个由系统中所有进程构成的安全序列 P1,…,Pn,则系统处
于安全状态。安全状态一定是没有死锁发生。
不安全状态:不存在一个安全序列。不安全状态一定导致死锁。
安全序列:一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程 Pi(1≤i≤n),它
以后尚需要的资源量不超过系统当前剩余资源量与所有进程 Pj (j < i )当前占有资源量之和。
(3) 设 requesti 为进程 p[i]的请求向量,如果 requesti[j]=K,表示进程 p[i]需要 K 个 Rj 资
源。当系统发出请求后,系统按下述步骤开始检查:
1)如果 requesti[j]<=need[i][j],转向步骤 2;否则报告出错,申请的资源已经大于它需要
的最大值。
2)如果 requesti[j]<=available[j],转向步骤 3;否则报告出错,尚无足够的资源。
3)系统试探着把资源分配给 p[i],并修改下列数据结构中的值:
available[j]=available[j]-request[j]
allocation[i][j]=allocation[i][j]+request[j]
need[i][j]=need[i][j]-request[j]
4)系统进行安全性算法,检查此次分配后,系统是否还处于安全状态,若安全,把资
源分配给进程 p[i];否则,恢复原来的资源分配状态,让进程 p[i]等待。
(4) 安全性算法:
int work[RESOURCE_NUMBER];
bool finish[PROCESS_NUMBER];
1) Work=Available;
Finish=false;
2) 寻找满足条件的 i:
A、Finish[i]=false;
B、Need[i]≤Work;
如果不存在,则转 4)
操作系统实验三银行家算法
3) Work:=Work+Allocation[i]; Finish[i]:=true;转 2)
4) 若对所有 i,Finish[i]=true,则系统处于安全状态,否则处于不安全状态
(5) 银行家算法程序流程图(如下:)
(6) 按模拟算法设计程序,运行设计的程序,观察得到的结果。
四、思考题
设计本实验时,就尽可能的将设计人性化和考虑全面。如:能不断地进行资源分配;能
修改资源的初始状态;提示信息就能充分反映算法过程等。
五、数据结构
1)可利用资源向量 Available
是个含有 m 个元素的数组,其中的每一个元素代表一类可利用的资源数目。如果
Available[j]=K,则表示系统中现有 Rj 类资源 K 个。
2)最大需求矩阵 Max
这是一个 n×m 的矩阵,它定义了系统中 n 个进程中的每一个进程对 m 类资源的最大
需求。如果 Max[i,j]=K,则表示进程 i 需要 Rj 类资源的最大数目为 K。
3)分配矩阵 Allocation
这也是一个 n×m 的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。
如果 Allocation[i,j]=K,则表示进程 i 当前已分得 Rj 类资源的 数目为 K。
操作系统实验三银行家算法
4)需求矩阵 Need。
这也是一个 n×m 的矩阵,用以表示每一个进程尚需的各类资源数。如果 Need[i,j]=K,
则表示进程 i 还需要 Rj 类资源 K 个,方能完成其任务。
Need[i,j]=Max[i,j]-Allocation[i,j]
5)work 和 finish。
是用来判断是否存在安全序列使得系统安全。是安全判断算法的内容。
源代码:
#include<STRING.H>
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<CONIO.H>/*用到了 getch()*/
using namespace std;
int M,N;
//数据结构
int MAX[100][100];
int AVAILABLE[100];
int ALLOCATION[100][100];
int NEED[100][100];
int Request[100];
void dqzt();
void shitan(int);
void bcgong(int);
int anquan();
/*当前状态*/
void dqzt()
{
int i,j;
cout << "系统可用资源向量:\n----Available----\n 资源类别:";
for(int ii = 0; ii <N; ii++)
{
char dd = 'A' + ii;
cout << dd << " ";
}
printf("\n 资源数目:");
for(j=0;j<N;j++)
{
剩余10页未读,继续阅读
资源评论
是空空呀
- 粉丝: 168
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功