📄
字号:
#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 + -