实验一 银行家算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告

课程名称操作系统实验

实验名称银行家算法

实验类型设计型

实验地点实验日期

指导教师

专业计算机科学与技术

班级

学号

姓名

成绩______________ 辽宁石油化工大学计算机与通信工程学院

辽宁石油化工大学计算机与通信工程学院实验报告

(1)实验目的:

银行家算法是避免死锁的一种重要方法,本实验要求用高级语言编写和调试一个简单的银行家算法程序。加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。

(2)实验内容:

1.设计进程对各类资源最大申请表示及初值确定。

2.设定系统提供资源初始状况。

3.设定每次某个进程对各类资源的申请表示。

4.编制程序,依据银行家算法,决定其申请是否得到满足。

(3)实验原理:

当用户申请一组资源时,系统必须做出判断,如果把这些资源分出去,系统是否还处于安全状态。

若是,就可以分出这些资源;否则,该申请暂不予满足。

1.数据结构

假设有M个进程N类资源,则有如下数据结构:

MAX[M*N] M个进程对N类资源的最大需求量

A V AILABLE[N] 系统可用资源数

ALLOCATION[M*N] M个进程已经得到N类资源的资源量

NEED[M*N] M个进程还需要N类资源的资源量

2.银行家算法

设进程I提出请求Request[N],则银行家算法按如下规则进行判断。

(1)如果Request[N]<=NEED[I,N],则转(2);否则,出错。

(2)如果Request[N]<=A V AILABLE,则转(3);否则,出错。

(3)系统试探分配资源,修改相关数据:

A V AILABLE=A V AILABLE-REQUEST

ALLOCATION=ALLOCA TION+REQUEST

NEED=NEED-REQUEST

(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。

3.安全性检查

(1)设置两个工作向量WORK=A V AILABLE;FINISH[M]=FALSE

(2)从进程集合中找到一个满足下述条件的进程,

FINISH[i]=FALSE

NEED<=WORK

如找到,执行(3);否则,执行(4)

(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。

WORK=WORK+ALLOCATION

FINISH=TRUE

GO TO 2

(4)如所有的进程Finish[M]=true,则表示安全;否则系统不安全。(4)实验环境:

软件环境:Visual C++6.0

(5)实验步骤:

#include

#include

#include

#include /*用到了getch()*/

#define M 5 /*进程数*/

#define N 3 /*资源数*/

#define FALSE 0

#define TRUE 1

/*M个进程对N类资源最大资源需求量*/

int MAX[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};

/*系统可用资源数*/

int AVAILABLE[N]={10,5,7};

/*M个进程对N类资源最大资源需求量*/

int ALLOCATION[M][N]={{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}}; /*M个进程已经得到N类资源的资源量*/

int NEED[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}}; /*M个进程还需要N类资源的资源量*/

int Request[N]={0,0,0};

void main()

{

int i=0,j=0;

char flag;

void showdata();

void changdata(int);

void rstordata(int);

int chkerr(int);

showdata();

enter:{

printf("请输入需申请资源的进程号(从0到");

printf("%d",M-1);

printf("):");

scanf("%d",&i);

}

if(i<0||i>=M)

{

printf("输入的进程号不存在,重新输入!\n");

goto enter;

}

err:{

printf("请输入进程");

printf("%d",i);

printf("申请的资源数\n");

printf("类别: A B C\n");

printf(" ");

for (j=0;j

{

scanf("%d",&Request[j]);

if(Request[j]>NEED[i][j])

{

printf("%d",i);

printf("号进程");

printf("申请的资源数> 进程");

printf("%d",i);

printf("还需要");

printf("%d",j);

相关文档
最新文档