⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 z xzx z
💻
字号:


#include "stdio.h"
#include "conio.h"
#include "string.h"
#include "stdlib.h"

#define  RUNNING 1 
#define  BLOCK   3
#define  READY   2
#define FINISHED 0

#define  NUM 3
#define TIME 20

struct PCB
{                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ,m
int ID;
int priority;
int cputime;
int alltime;
int startblock;
int blocktime;
int state;
};


int runtime[NUM];
int blocktime[NUM];

struct PCB pcblist[NUM];

void init()
{
int i=0;
for(i=0;i<NUM;i++)
{
printf("PCB[%d]:ID PRIO CPUTIME ALLTIME STARTBLOCK BLOCKTIME \n",i+1);
scanf("%d%d%d%d%d%d",&pcblist[i].ID,&pcblist[i].priority,&pcblist[i].cputime,&pcblist[i].alltime,&pcblist[i].startblock,&pcblist[i].blocktime);
pcblist[i].state=READY;
}

}

int max_prio_process()

{
int key=0;
int max=-9999;
int i;
for (i=0;i<NUM;i++)
 {
  if(pcblist[i].state==RUNNING)
  return -1;
  else if(max<pcblist[i].priority&&pcblist[i].state==READY)
    {
    max=pcblist[i].priority;
    key=i;
    }
 }
 if(pcblist[key].state!=READY)//the value of key never changed
 key=-1;
 return key;

}

void showstate(int i)
{

switch(i)
{
case 0:printf(" FINISHED");break;
case 1:printf(" RUNNING");break;
case 3:printf(" BLOCK");break;
case 2:printf(" READY");
}

}


void showlist()
{
int i=0;

printf("\n\n     ID    PRIO CPUTIME ALLTIME STARTB(R) BLOCKT(B) STATE\n");

printf("--------------------------------------------------------------\n");
for(i=0;i<NUM;i++)
  {

printf("\n%6d%6d%8d%8d%8d(%d)%6d(%d)   ",pcblist[i].ID,pcblist[i].priority,pcblist[i].cputime,pcblist[i].alltime,pcblist[i].startblock,runtime[i],pcblist[i].blocktime,blocktime[i]);
showstate(pcblist[i].state);

  }
printf("\npress any key to continue...\n");
}

void schedle()
{
  int i=0,j=0;
  printf("\nbefore schedle ,the conditon is folling:\n");
  showlist();
  getch();
  for(j=0;j<TIME;j++)

  {

   if(max_prio_process()!=-1)

   {
   pcblist[max_prio_process()].state=RUNNING;
 //  pcblist[max_prio_process()].alltime-=1;//the state about after 1 cputime
   }

   for(i=0;i<NUM;i++)
   {
    if(pcblist[i].state!=FINISHED)
      {
    pcblist[i].cputime++;//add cputime;
    if(pcblist[i].state==READY)  //process is ready
      pcblist[i].priority+=1;
    else if(pcblist[i].state==RUNNING)  //process is running
      {
       pcblist[i].alltime--;
       pcblist[i].priority-=3;
       runtime[i]++;

       if(pcblist[i].alltime==0)
       pcblist[i].state=FINISHED;

       else if(pcblist[i].startblock==runtime[i])
	{
	  pcblist[i].state=BLOCK;
	  runtime[i]=0;
	}
      }

    else if(pcblist[i].state==BLOCK)
     {
      blocktime[i]++;
      if(pcblist[i].blocktime==blocktime[i])
       {
       pcblist[i].state=READY;
       blocktime[i]=0;
       }
      }
    }

   }


   showlist();
   getch();


  }

}


void main()
{


init();
schedle();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -