当前位置:文档之家› 《操作系统原理》实验报告六

《操作系统原理》实验报告六

{
finish[i]=-1;
finish1[i]=-1;
}
//请在此处插入完成安全性检查算法的代码!
if(r>=4){
printf("-----找到安全序列-----\n");
for(i=0;i<N;i++)
{
if(i!=N-1)
printf("p%d->",path[i]);
else
printf("p%d\n",path[i]);
Finish [i]=False
Need<=Work
如找到,执行(3);否则,执行(4)
(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。
Work=Work+Allocation
Finish=True
GO TO 2
(4)如所有的进程Finish[M]=true,则表示安全;否则系统不安全。
实验内容和步骤
need[i][j]=rand()%10;
max[i][j]=allocation[i][j]+need[i][j];
}
for(i=0;i<N;i++)
{
available[i]=rand()%12;
}
disp();
is_save=0;
}
voidshowMenu(){
puts("\n*****************************************************");
2015——2016学年第二学期
专业
班级
学号
姓名
日期


题 目
实验目的
1、了解掌握银行家算法;
2、学会模拟实现资源分配,同时按要求编写和调试一个系统分配资源的简单模拟程序;
3、观察死锁产生的条件,并使用适当的算法,有效的防止和避免死锁的发生。
实验理论基础
设计要求:编制银行家算法通用程序,并检测所给状态的系统安全性。
voiddisplay(int *a,int n) //显示一维数组
{ int i;
for(i=0;i<n;i++)
printf("%3d",a[i]);
}
void disp() //显示资源列表
{ int i;
printf("Nnumber\t Max\t\t need\t\t allocation\t avalible\n");
for(i=0;i<N;i++)
{printf("p%d\t",i);//--分别显示P0,P1,P2的Max,Need,Allocation,Avalible
display(max[i],M);
printf("\t");
display(need[i],M);
printf("\t");
display(allocation[i],M);
int work[3];//可用资源向量
int finish[10],finish1[10]; //记录进程申请的资源是否能分配
int path[10]={0,1,2,3,4,5,6,7,8,9};//记录安全序列
int is_save;//是否产生安全序列
intmark[10];//记录某进程是否已分配资源
puts("*0.初始化数据1.安全性算法2.银行家算法3.退出*");
puts("*******************************************************");
}
int safe()//检查安全序列
{
int i,j,k=1; // k用来结束安全序列的查找
int flag=1; // flag = 0表示当前可用资源<进程申请资源数
#include <time.h>
#define M 3 //资源种类m种
#define N 4 //进程个数n
int need[10][3];//进程还需资源矩阵
int max[10][3];//进程最大需求矩阵
int allocation[10][3];//已分配资源矩阵
int available[3];//可用资源向量
printf("\t");
if(i==0)
display(available,M);
printf("\n");
}
}
void init(){
int i,j;
srand(time(NULL));
for(i=0;i<M;i++)
for(j=0;j<N;j++)
{
allocation[i][j]=rand()%10;
1.银行家算法:
设进程i提出请求Request[n],则银行家算法按如下规则进行判断。
(1)如果Request[n]>Need[i,n],则报错返回。
(2)如果Request[n]>Available,则进程i进入等待资源状态,返回。
(3)假设进程i的申请已获批准,于是修改系统状态:
Available=Available-Request
(5)如果预分配后,系统处于不安全状态,则提示不能满足请求。
以下提供了部分该实例的源代码,要求同学们根据理论基础部分内容分析该源代码,并将缺失的程序代码补充完整,然后调试这段程序,最终按要求给出相应的结论。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
1、本试验设计的目的是通过编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁地Fra bibliotek生。要求如下:
(1)模拟一个银行家算法;
(2)初始化时让系统拥有一定的资源;
(3)用键盘输入的方式申请资源;
(4)如果预分配后,系统处于安全状态,则修改系统的资源分配情况;
int r=0,r1=0; //记录所需资源能被满足的进程数;
for( j = 0; j < M; j++) //初始化work
{
work[j] = available[j];
}
printf("现在进行安全性检查......\n");
for( i = 0; i < N; i++)//初始化finish[],1表示true,0表示false
}
return 1;
}
else{
Allocation=Allocation+Request
Need=Need-Request
(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。
2.安全性检查
(1)设置两个工作向量Work=Available;Finish[M]=False
(2)从进程集合中找到一个满足下述条件的进程,
相关主题