当前位置:文档之家› 操作系统-实验报告-进程管理实验

操作系统-实验报告-进程管理实验

int have[n][m]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};
int want[n][m]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};
for (i=0;i<n;i++) //初始化进程资源分配状态
for (j=0;j<m;j++)
7)状态标志finish
具有n个元素的数据,表示进程是否可在有限时间内获得所有资源执行完,初值为fals
#include <stdio.h>
#include <stdlib.h>
/*----------------------常量定义--------------------*/
#define F 0
#define T 1
#define n 5 //进程数量
#define m 3 //资源种类数量
/*--------------------------------------------------*/
/*--------------------数据结构定义------------------*/
void safeCheck(int num); //安全性检查
void Print(); //状态输出
/*主函数(只需改变n、m和下面的初始数组便可形成新的进程量,资源量和状态)*/
int main()
{
int i, j, num;
int total[n][m]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};
n*m矩阵,need[i,j]=k表示进程还需要的第j类资源的数目为k
need[i,j] = max[i,j] - allocation[i,j]
5)进程pi的请求向量request[i]
具有m个元素的数组,说明进程pi对每类资源的请求数目
6)工作向量work系统提供给进程继续运行所需各类资源数目
初值:work:=available
return 0;
Print();
}
return 0;
}
/*--------------------------------------------------------------------*/
/*----------------------------试分配函数-----------------------------*/
(2)设计用按序分配算法实现资源分配的资源分配程序,应具有显示或打印各进程依次要求申请的资源号以及依次分配资源地情况。
(3)确定两组各进程依次要求申请的资源号,要求其中的一组中各进程按序地申请资源,另一组中各进程申请资源不受序号限制,分别运行上述设计的资源分配程序,观察运行结果。
三、数据结构tryAdminister(int num) //试分配
{
int j;
for (j=0;j<m;j++)
具有m个元素的数组,available[j]=k表示系统中第j类资源有k个可用
2)最大需求矩阵max
n*m矩阵,max[i,j]=k表示进程i需要第j类资源的最大数目为k
3)分配矩阵allocation
n*m矩阵,allocation[i,j]=k表示进程i当前已占用的第j类资源的数目为k
4)需求矩阵need
(2)设计用银行家算法和随机分配算法,实现资源分配的两个资源分配程序,应具有显示或打印各进程依次要求申请的资源数以及依次分配资源的情况。
(3)确定一组各进程依次申请资源数的序列,在相同的情况下分别运行上述两种资源分配程序,观察运行结果。
第二题:用按序分配策略实现资源分配。要求:
(1)设计一个3个进程共享10个资源的系统,进程可动态地申请资源和释放资源,系统按各进程的申请动态地分配资源。
一、实验目的
本实验要求学生编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁的发生。
二、实验题目
第一题:用银行家算法实现资源分配。要求:
(1)设计一个3个并发进程共享10个同类资源的系统,进程可动态地申请资源和释放资源,系统按各进程的申请动态地分配资源。
/*--------------------------------------------------*/
/*-----------------------进程-----------------------*/
struct PCB
{
int flag; //状态标志,是否运行完
int Max[m]; //资源最大需求量
scanf("%d %d %d",&P[num].Request[0],&P[num].Request[1],&P[num].Request[2]);
if (tryAdminister(num)==T)
safeCheck(num);
Recycle(); //资源回收
if(backDos()==T) //所有进程完则返回操作系统
int Allocation[m]; //已分配资源
int Need[m]; //还需要的资源
int Request[m]; //请求资源量
}P[n];
/ *-----------------------函数声明--------------------*/
int tryAdminister(int num);//试分配
{
P[i].flag = F;
P[i].Max[j]=total[i][j];
P[i].Allocation[j]=have[i][j];
P[i].Need[j]=want[i][j];
}
Print(); //状态输出
while (scanf("%d",&num)!=EOF)
{
printf("输入进程%d对这三类资源的需求向量(用空格隔开):\n",num);
int Available[m]={3,3,2}; //可用资源
int Work[m]; //工作向量
i nt Finish[n]; //用以判断系统是否有足够资源分给相应进程
void Recycle(); //若进程运行完资源回收
int backDos(); //判断所有进程是否运行完,完后返回操作系统
相关主题