(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<<\"注意:本程序中状态代表如下\"< cout<<\"请输入进程数:\"; cin>>N; cout<<\"请设置时间片长度:\"; cin>>time; cout<<\"请输入各进程初始状态:\"< BLOCKTIME\"< 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<<\"ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE\"< if(pro[i].STATE==4&&pro[i].REACH } cout< 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;i for(i=0;i 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<<\"ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE\"< cout< cout<<\"平均周转时间为:\"<<(float)sum/N< 实验结果 注意:本程序中状态代表如下 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 因篇幅问题不能全部显示,请点此查看更多更全内容