• 大小: 10KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: C/C++
  • 标签:

资源简介

广工,操作系统实验,银行家算法,源码 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(“                               @     

评论

共有 条评论