当前位置:首页 > 进程调度算法模拟带答案版
break; case 4:
printf(\对进程按响应比高优先调度。\\n\\n\ hrrn();
poutput();
break;
case 5:
printf(\进行时间片轮转调度。\\n\ rr();
poutput(); break; } }
int rr() /*轮转*/ {
float rr_time; /* */ int i,temp_counter=0; int run_begin_flag[MAX]={0};
/*循环变量、已经全部完成的进程数量、进程是否第一次运行用于计算进程的开始运行时间*/ float time_temp,rest_time[MAX]={0};
/*当前时间、被调度的进程还剩下多少时间没被执行*/
printf(\请输入时间片包含的单位时间个数:\\n\ scanf(\
time_temp=tasks[0]e_time; un_time; }
/*轮转调度*/
while (temp_counter for(i=0;i if(rest_time[i]<=rr_time) un_end_time=time_temp; } else un_begin_time=time_temp; rest_time[i]=0; temp_counter++; tasks[i].order=temp_counter; tasks[i].run_flag=1; if(tasks[i].run_flag==0) un_begin_time=time_temp; run_begin_flag[i]=1; /*如果开始第一次运行标志为0,记录开始运行时间、改变标记*/ } tasks[i].run_end_time=tasks[i].run_begin_time+tasks[i].run_time; tasks[i].run_flag=1; time_temp=tasks[i].run_end_time; number_schedul=i; tasks[number_schedul].order=i+1; } return 0; } /*非抢占式优先级调度,默认tasks[0]是最早到达的进程,进程已按到达先后顺序排成了队列。*/ int ps() { float temp_time=0; int i=0,j; int number_schedul,temp_counter; /*正在被调度执行的进程编号和已经调度完成的进程个数*/ int max_priority; max_priority=tasks[i].priority; j=1; /* 从从到达时间最早且相同的进程中遍历,查找第一个被调度的进程*/ while ((j if (tasks[j].priority>tasks[i].priority) { max_priority=tasks[j].priority; i=j; } j++; } /*对第一个被调度的进程求相应的参数*/ number_schedul=i; tasks[number_schedul].run_begin_time=tasks[number_schedul]e_time; tasks[number_schedul].run_end_time=tasks[number_schedul].run_begin_time+tasks[number_schedul].run_time; tasks[number_schedul].run_flag=1; temp_time=tasks[number_schedul].run_end_time; tasks[number_schedul].order=1; temp_counter=1; /*循环查找下一个被调度的进程,直到所有的tasks[j].run_flag ==1*/ while (temp_counter max_priority=0; for(j=0;j { if((tasks[j]e_time<=temp_time)&&(!tasks[j].run_flag)) if (tasks[j].priority>max_priority) { max_priority=tasks[j].priority; number_schedul=j; } } /*对找到的下一个被调度的进程求相应的参数*/ tasks[number_schedul].run_begin_time=temp_time; tasks[number_schedul].run_end_time=tasks[number_schedul].run_begin_time+tasks[number_schedul].run_time; tasks[number_schedul].run_flag=1; temp_time=tasks[number_schedul].run_end_time; temp_counter++; tasks[number_schedul].order=temp_counter; } return 0; } int sjf() /*非抢占式短作业优先,默认tasks[0]是最早到达的进程,进程已按到达先后顺序排成了队列 。*/ { float temp_time=0; int i=0,j;
共分享92篇相关文档