实验一

更新时间:2024-04-19 17:29:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验一、进程管理与进程同步

实验目的:

了解进程管理的实现方法,理解和掌握处理进程同步问题的方法。

实验内容:

实现银行家算法、进程调度过程的模拟、读者-写者问题的写者优先算

法。

实验步骤:

? 理解安全性算法和银行家算法的核心机制:

针对3类资源、5个进程的情况,设计相应的数据结构,分别表示

每个进程占用各类资源的情况;

编程实现安全性算法函数,编制主函数,动态输入资源的占用情况,

进程的资源申请,调用安全性函数,实现银行家算法;

测试:输入可分配和不可分配的请求,测试系统的正确性。

代码:

#include #include #include #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]:\ for(i=0;i

cout<

cout<<\ Max Allocation cout<<\进程名 \ for(j=0;j<3;j++){ for(i=0;i

cout<

cout<<\ \ for(j=0;j

cout<

int changdata(int i)//进行资源分配 { int j;

for (j=0;j

Avaliable[j]=Avaliable[j]-Request[j];

Need\ Allocation[i][j]=Allocation[i][j]+Request[j]; Need[i][j]=Need[i][j]-Request[j]; } return 1; }

int safe()//安全性算法 {

int i,k=0,m,apply,Finish[100]={0}; int j; int flag=0;

Work[0]=Avaliable[0]; Work[1]=Avaliable[1]; Work[2]=Avaliable[2]; for(i=0;i

if (Finish[i]==False&&Need[i][j]<=Work[j]){ apply++; if(apply==N){ for(m=0;m

Work[m]=Work[m]+Allocation[i][m];//变分配数 Finish[i]=True; temp[k]=i; i=-1; k++; flag++; } } } }

for(i=0;i

cout<<\系统不安全\不成功系统不安全 return -1;

} }

cout<<\系统是安全的!\如果安全,输出成功 cout<<\分配的序列:\

for(i=0;i

cout<

void share()//利用银行家算法对申请资源对进行判定 { char ch; int i=0,j=0; ch='y';

cout<<\请输入要求分配的资源进程号(0-\ cin>>i;//输入须申请的资源号

cout<<\请输入进程 \申请的资源:\for(j=0;j

cout<

cin>>Request[j];//输入需要申请的资源 }

for (j=0;j

if(Request[j]>Need[i][j])//判断申请是否大于需求,若大于则出错 {

cout<<\进程 \申请的资源大于它需要的资源\ cout<<\分配不合理,不予分配!\ ch='n'; break; }

else {

if(Request[j]>Avaliable[j])//判断申请是否大于当前资源,若大于则

{ //出错

cout<<\进程\申请的资源大于系统现在可利用的资源\ cout<<\分配出错,不予分配!\ ch='n'; break; } } }

if(ch=='y') {

changdata(i);//根据进程需求量变换资源 showdata();//根据进程需求量显示变换后的资源 safe();//根据进程需求量进行银行家算法判断 } }

int main()//主函数 {

int i,j,number,m,n,flag; char ming;

cout<<\银行家算法的实现*****************\cout<<\请首先输入系统可供资源种类的数量:\cin>>n; N=n;

for(i=0;i

cout<<\资源\的名称:\ cin>>ming; name[i]=ming; cout<<\资源的数量:\ cin>>number; Avaliable[i]=number; }

cout<

cout<<\请输入作业的数量:\

cin>>m; M=m;

cout<<\请输入各进程的最大需求量(\矩阵)[Max]:\for(i=0;i>Max[i][j]; do{ flag=0;

cout<<\请输入各进程已经申请的资源量(\矩阵)[Allocation]:\

for(i=0;i>Allocation[i][j]; if(Allocation[i][j]>Max[i][j]) flag=1;

Need[i][j]=Max[i][j]-Allocation[i][j]; } if(flag)

cout<<\申请的资源大于最大需求量,请重新输入!\\n\}

while(flag);

showdata();//显示各种资源

safe();//用银行家算法判定系统是否安全

cout<<\银行家算法演示***************\ return 1; }

实验结果:

银行家算法程序提供一个用户界面,可以在上边发出资源申请命令,系

统应能给出是否可以接受申请,并且有结论输出;

进程调度模拟程序根据一个进程调度文件,模拟进程的各种调度过程,

用适合的表达方式表示出来。

写者优先同步控制程序根据一个读写进程模拟信息文件,按照写者优先

同步控制过程,用适合的表达方式表示出各读写进程的执行次序。

本文来源:https://www.bwwdw.com/article/bf2p.html

Top