您的当前位置:首页正文

进程调度算法模拟程序设计C++

2022-03-09 来源:年旅网
(1)用C语言(或其它语言,如Java)实现对N个进程采用某种进程调度算法(如动态优先权调度)的调度。

(2)每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段:  进程标识数ID。

 进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。  进程已占用CPU时间CPUTIME。

 进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为0。  进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间

片后,进程将进入阻塞状态。

 进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME

个时间片后,将转换成就绪状态。  进程状态STATE。

 队列指针NEXT,用来将PCB排成队列。 (3)优先数改变的原则:

 进程在就绪队列中呆一个时间片,优先数增加1。  进程每运行一个时间片,优先数减3。

(4)为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。

(5)分析程序运行的结果,谈一下自己的认识。

实验代码

#include \"iostream.h\" #include \"windows.h\" //#define N 3 typedef struct{

int ID; int PRIORITY; int CPUTIME;

int ALLTIME; int STARTBLOCK; int BLOCKTIME;

int STATE;//0-运行 1-阻塞 2-就绪 3-结束 4-未到达 int REACH; int TIME;

}PROCESS;

void textcolor (int color) {

SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), color ); }

void main(){

int i,time,max,l,l1,time1,flag=0,total=0,N,server[10],sum=0; PROCESS pro[10]; textcolor(13);

cout<<\"注意:本程序中状态代表如下\"<3-结束 4-未到达\"<textcolor(15);

cout<<\"请输入进程数:\"; cin>>N;

cout<<\"请设置时间片长度:\"; cin>>time;

cout<<\"请输入各进程初始状态:\"<cout<<\"ID PRIORITY REACH ALLTIME STARTBLOCK

BLOCKTIME\"<for(i=0;ipro[i].CPUTIME=0; pro[i].TIME=0;

cin>>pro[i].ID>>pro[i].PRIORITY>>pro[i].REACH;

} do{

cin>>pro[i].ALLTIME>>pro[i].STARTBLOCK>>pro[i].BLOCKTIME; server[i]=pro[i].ALLTIME;

if(pro[i].REACH==0) pro[i].STATE=0; else pro[i].STATE=4;

cout<cout<======================\"<textcolor(15);

cout<<\"ID PRIORITY CPUTIME ALLTIME STARTBLOCK

BLOCKTIME STATE\"<for(i=0;icout<\"<\"<cout<\"<total+=time; for(i=0;ifor(i=0;itime1=pro[i].ALLTIME;

if(pro[i].STATE==4&&pro[i].REACHpro[i].STATE=1;

}

cout<if(pro[i].STATE==0){ }

if(pro[i].STATE==1){ }

if(pro[i].STATE==2){

//pro[i].CPUTIME+=time; pro[i].PRIORITY++; pro[i].TIME=total; pro[i].BLOCKTIME--;

if(pro[i].BLOCKTIME==0) pro[i].STATE=2; pro[i].TIME=total; if(pro[i].ALLTIME<=time){ } else{ }

//pro[i].CPUTIME+=time; pro[i].ALLTIME-=time; pro[i].STARTBLOCK--; if(pro[i].STARTBLOCK==0){ }

pro[i].PRIORITY-=3; pro[i].TIME=total;

pro[i].STATE=1;

pro[i].BLOCKTIME=time1; pro[i].STARTBLOCK=time1; //pro[i].CPUTIME+=time1; pro[i].ALLTIME=0; pro[i].STATE=3;

pro[i].TIME=total-time+time1;

}

}

max=-100; l1=-1; l=-1;

for(i=0;iif(l!=-1&&l!=l1) pro[l].STATE=0; if(l1!=-1) pro[l1].STATE=2; flag=0;

for(i=0;iif(flag==0) break;

if(pro[i].STATE!=3){ }

flag=1; break;

if(pro[i].PRIORITY>max&&(pro[i].STATE==0||pro[i].STATE==2)){ }

if(pro[i].STATE==0) l1=i;

l=i;

max=pro[i].PRIORITY;

}while(1);

cout<cout<

======================\"<textcolor(15);

cout<<\"ID PRIORITY CPUTIME ALLTIME STARTBLOCK

BLOCKTIME STATE\"<for(i=0;icout<\"<\"<cout<\"<}

cout<cout<<\"进程号 到达时间 结束时间 周转时间 带权周转时间\"<cout<<\" \"<\"<cout<\"<\"<<(float)(pro[i].TIME-pro[i].REACH)/server[i]<}

cout<<\"平均周转时间为:\"<<(float)sum/N<sum+=pro[i].TIME-pro[i].REACH;

实验结果

注意:本程序中状态代表如下

0- 运行 1-阻塞 2-就绪 3-结束 4-未到达

请输入进程数:3 请设置时间片长度:2 请输入各进程初始状态:

ID PRIORITY REACH ALLTIME STARTBLOCK BLOCKTIME 1 4 5 7 8 3 2 6 0 7 2 8 7 3 2 6 2 6

当前时刻为:0

========================各进程状态为====================== ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE

1 4 0 7 8 3 4 2 6 0 7 2 8 0 7 3 0 6 2 6 4

当前时刻为:2

========================各进程状态为====================== ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE

1 4 0 7 8 3 4 2 3 0 5 1 8 2 7 3 0 6 2 6 4

当前时刻为:4

========================各进程状态为====================== ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE

1 4 0 7 8 3 4 2 4 0 5 1 8 0 7 3 0 6 2 5 1

当前时刻为:6

========================各进程状态为====================== ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE

1 4 0 7 8 2 1 2 1 0 3 5 4 1 7 3 0 6 2 4 1

当前时刻为:8

========================各进程状态为====================== ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE

1 4 0 7 8 1 1 2 1 0 3 5 3 1 7 3 0 6 2 3 1

当前时刻为:10

========================各进程状态为====================== ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE

1 5 0 7 8 0 0 2 1 0 3 5 2 1 7 3 0 6 2 2 1

当前时刻为:12

========================各进程状态为====================== ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE

1 2 0 5 7 0 2

2 1 0 3 5 1 1 7 3 0 6 2 1 1

当前时刻为:14

========================各进程状态为====================== ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE

1 3 0 5 7 0 2 2 2 0 3 5 0 2 7 4 0 6 2 0 0

当前时刻为:16

========================各进程状态为====================== ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE

1 4 0 5 7 0 0 2 3 0 3 5 0 2 7 1 0 4 1 0 2

当前时刻为:18

========================各进程状态为====================== ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE

1 1 0 3 6 0 2 2 4 0 3 5 0 0 7 2 0 4 1 0 2

当前时刻为:20

========================各进程状态为======================

ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE

1 2 0 3 6 0 2 2 1 0 1 4 0 2 7 3 0 4 1 0 0

当前时刻为:22

========================各进程状态为====================== ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE

1 3 0 3 6 0 0 2 2 0 1 4 0 2 7 0 0 2 4 3 1

当前时刻为:24

========================各进程状态为====================== ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE

1 0 0 1 5 0 2 2 3 0 1 4 0 0 7 0 0 2 4 2 1

当前时刻为:26

========================各进程状态为====================== ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE

1 1 0 1 5 0 0 2 3 0 0 4 0 3 7 0 0 2 4 1 1

当前时刻为:28

========================各进程状态为====================== ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE

1 1 0 0 5 0 3 2 3 0 0 4 0 3 7 1 0 2 4 0 0

当前时刻:30

========================各进程状态为====================== ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE

1 1 0 0 5 0 3 2 3 0 0 4 0 3 7 1 0 0 4 0 3

各进程运行结束!

进程号 到达时间 结束时间 周转时间 带权周转时间 1 5 27 22 3.14286 2 0 25 25 3.57143 7 2 30 28 4.66667 平均周转时间为:25 Press any key to continue

因篇幅问题不能全部显示,请点此查看更多更全内容