资源简介
广工,操作系统实验,银行家算法,源码
2 实验要求
1. 假定系统有3类资源A(10个)、B(15个)、C(12个),系有5个进程并发执行,进程调度采用时间片轮转调度算法。
2. 每个进程由一个进程控制块( PCB)表示,进程控制块可以包含如下信息:进程名、需要的资源总数、已分配的资源数、进程状态。
3. 由程序自动生成进程(包括需要的数据,要注意数据的合理范围)。
4. 进程在运行过程中会随机申请资源(随机生成请求的资源数),如果达到最大需求,表示该进程可以完成;如果没有达到最大需求,则运行一个时间片后,调度其它进程运行。资源分配采用银行家算法来避免死锁。
5. 每个进程的状态可以是就绪 W(Wait)、运行R(Run)、阻塞B(Block)或完成F(Finish)状态之一。
6. 每进行一次调度,程序都要输出一次运行结果:正在运行的进程、就绪队列中的进程、阻塞队列中的进程、完成的进程以及各个进程的 PCB,以便进行检查。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
using namespace std;
/***************BCP数据结构**********************/
struct PCB{
string name;
int id;
int abc; //需要的资源总数
int allocation_aallocation_ballocation_c; //已分配的资源总数
int need_aneed_bneed_c; //还需要的资源
char state; //进程状态
}pcb[5];
struct resource{
int abc;
}res;
/***************各队列和全局变量、函数声明*********************/
queue prepare;
vector wait;
vector run;
vector finish;
vector block;
int fini[5]; //表示是否有足够的资源分配给进程,有为1,无为0
void createProcess();
void printProcesses();
void BanderAlgorithm();
bool Safe();
/***************主函数**********************/
int main(){
srand(time(NULL));
cout.setf(std::ios::left);
res.a = 10; res.b = 15; res.c = 12;
int i;
printf(“ \n\n\n\n\n\n\n 操作系统实验报告 \n“);
printf(“ ################################################################\n“);
printf(“ ## ##\n“);
printf(“ ## 实验二银行家算法 ##\n“);
printf(“ ## ##\n“);
printf(“ ## ##\n“);
printf(“ ## 软件2班 邱伟锋 3115005282 ##\n“);
printf(“ ################################################################\n\n“);
printf(“ 请按任何键以继续 “);
getchar();
system(“cls“);
printf(“\n\n\n\n\n\n\n 请选择操作序号:\n“);
printf(“ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n“);
printf(“ @ @\n“);
printf(“ @ ** 1=开始 ** @\n“);
printf(“ @ ** 2=退出 ** @\n“);
printf(“ @ 注:可能需要2秒左右的时间才能执行完成 @\n“);
printf(“ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n“);
printf(“ 请输入您的选择:“);
scanf(“%d“ &i);
getchar();
while (i != 2)
{
switch (i)
{
case 1: createProcess();BanderAlgorithm();system(“PAUSE“);
break;
}
system(“cls“);
printf(“\n\n\n\n\n\n\n 请选择操作序号:\n“);
printf(“ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n“);
printf(“ @ @\n“);
printf(“ @ ** 1=开始 ** @\n“);
printf(“ @
- 上一篇:C语言实现日历阳历+农历输出
- 下一篇:基于暗通道和导向滤波的图像去雾算法C++实现
评论
共有 条评论