时间片轮转:
时间片轮转算法的基本思想是,系统将所有的就绪进程按先来先服务算法的原则,排成一个队列,每次调度时,系统把处理机分配给队列首进程,并让其执行一个时间片。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序根据这个请求停止该进程的运行,将它送到就绪队列的末尾,再把处理机分给就绪队列中新的队列首进程,同时让它也执行一个时间片。
多级反馈队列调度:
1、进程在进入待调度的队列等待时,首先进入优先级最高的Q1等待。
2、首先调度优先级高的队列中的进程。若高优先级中队列中已没有调度的进程,则调度次优先级队列中的进程。例如:Q1,Q2,Q3三个队列,当且仅当在Q1中没有进程等待时才去调度Q2,同理,只有Q1,Q2都为空时才会去调度Q3。
3、对于同一个队列中的各个进程,按照FCFS分配时间片调度。比如Q1队列的时间片为N,那么Q1中的作业在经历了N个时间片后若还没有完成,则进入Q2队列等待,若Q2的时间片用完后作业还不能完成,一直进入下一级队列,直至完成。
4、在最后一个队列QN中的各个进程,按照时间片轮转分配时间片调度。
5、在低优先级的队列中的进程在运行时,又有新到达的作业,此时须立即把正在运行的进程放回当前队列的队尾,然后把处理机分给高优先级进程。换而言之,任何时刻,只有当第1~i-1队列全部为空时,才会去执行第i队列的进程(抢占式)。特别说明,当再度运行到当前队列的该进程时,仅分配上次还未完成的时间片,不再分配该队列对应的完整时间片。
说明:在此我模拟了三级反馈队列,代码可以模拟多级,只需修改QueueNum即可,
而且,本代码为非抢占式的调度算法实现。
源代码:
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
struct PCB
{
int pid;
char pname;
double priority;
int arrive;
int service;
int service_time;
int start;
int end;
int turnover;
double author_turnover;
} pcb[5];
int time_rr;
double fcfs_author,fcfs_turnover,sjf_author,sjf_turnover,hrrn_author,hrrn_turnover,rr_author,rr_turnover,mfq_aythor,mfq;
vector<PCB> fcfs;
vector<PCB> sjf;
vector<PCB> hrrn;
vector<PCB> rr;
vector<PCB> result;
int cmp(PCB a,PCB b)
{
return a.arrive<b.arrive;
}
int cmp1(PCB a,PCB b)
{
return (a.service<b.service)||(a.service==b.service&&a.arrive<b.arrive);
}
int cmp2(PCB p1, PCB p2)
{
return (p1.priority > p2.priority) || (p1.priority==p2.priority && p1.arrive<p2.arrive);
}
void Compare()
{
cout<<"先来先服务调度算法!"<<endl;
cout<<"\t进程名\t\t"<<"到达时间\t"<<"服务时间\t"<<"完成时间\t"<<"周转时间\t"<<"带权周转"<<endl;
for(int i=0; i<fcfs.size(); i++)
{
cout<<"\t"<<fcfs[i].pname<<"\t\t"<<fcfs[i].arrive<<"\t\t"<<fcfs[i].service<<"\t\t"<<fcfs[i].end<<"\t\t"<<fcfs[i].turnover<<"\t\t";
printf("%.2lf\n",fcfs[i].author_turnover);
}
printf("\t平均周转时间:%.2lf\t",fcfs_turnover);
printf("\t平均带权周转时间:%.2lf\n",fcfs_author);
cout<<endl;
cout<<endl;
cout<<"短作业优先算法!"<<endl;
cout<<"\t进程名\t\t"<<"到达时间\t"<<"服务时间\t"<<"完成时间\t"<<"周转时间\t"<<"带权周转"<<endl;
for(int i=0; i<sjf.size(); i++)
{
cout<<"\t"<<sjf[i].pname<<"\t\t"<<sjf[i].arrive<<"\t\t"<<sjf[i].service<<"\t\t"<<sjf[i].end<<"\t\t"<<sjf[i].turnover<<"\t\t";
printf("%.2lf\n",sjf[i].author_turnover);
}
printf("\t平均周转时间:%.2lf\t",sjf_turnover);
printf("\t平均带权周转时间:%.2lf\n",sjf_author);
cout<<endl;
cout<<endl;
cout<<"高响应比优先算法!"<<endl;
cout<<"\t进程名\t\t"<<"到达时间\t"<<"服务时间\t"<<"完成时间\t"<<"周转时间\t"<<"带权周转"<<endl;
for(int i=0; i<hrrn.size(); i++)
{
cout<<"\t"<<hrrn[i].pname<<"\t\t"<<hrrn[i].arrive<<"\t\t"<<hrrn[i].service<<"\t\t"<<hrrn[i].end<<"\t\t"<<hrrn[i].turnover<<"\t\t";
printf("%.2lf\n",hrrn[i].author_turnover);
}
printf("\t平均周转时间:%.2lf\t",hrrn_turnover);
printf("\t平均带权周转时间:%.2lf\n",hrrn_author);
cout<<endl;
cout<<endl;
cout<<"时间片轮转调度算法!"<<endl;
cout<<"\t进程名\t\t"<<"到达时间\t"<<"服务时间\t"<<"完成时间\t"<<"周转时间\t"<<"带权周转"<<endl;
for(int i=0; i<rr.size(); i++)
{
cout<<"\t"<<rr[i].pname<<"\t\t"<<rr[i].arrive<<"\t\t"<<rr[i].service_time<<"\t\t"<<rr[i].end<<"\t\t"<<rr[i].turnover<<"\t\t";
printf("%.2lf\n",rr[i].author_turnover);
}
printf("\t平均周转时间:%.2lf\t",rr_turnover);
printf("\t平均带权周转时间:%.2lf\n",rr_author);
cout<<endl;
cout<<endl;
cout<<"多级反馈队列调度算法(使用了3级队列模拟)!"<<endl;
cout<<"\t进程名\t\t"<<"到达时间\t"<<"服务时间\t"<<"完成时间\t"<<"周转时间\t"<<"带权周转"<<endl;
for(int i=0; i<result.size(); i++)
{
cout<<"\t"<<result[i].pname<<"\t\t"<<result[i].arrive<<"\t\t"<<result[i].service_time<<"\t\t"<<result[i].end<<"\t\t"<<result[i].turnover<<"\t\t";
printf("%.2lf\n",result[i].author_turnover);
}
printf("\t平均周转时间:%.2lf\t",mfq);
printf("\t平均带权周转时间:%.2lf\n",mfq_aythor);
system("pause");
system("cls");
}
void print()
{
system("cls");
cout<<"\n\n";
cout<<"\t 进程名:";
for(int i=0; i<5; i++)
{
cout<<"\t"<<pcb[i].pname;
}
cout<<endl;
cout<<"\t到达时间:";
for(int i=0; i<5; i++)
{
cout<<"\t"<<pcb[i].arrive;
}
cout<<endl;
cout<<"\t服务时间:";
for(int i=0; i<5; i++)
{
cout<<"\t"<<pcb[i].service;
}
cout<<endl;
cout<<endl;
system("pause");
system("cls");
}
void RR()
{
system("cls");
cout<<"时间片轮转调度算法!"<<endl;
cout<<endl;
cout<<"请输入时间片长度:";
cin>>time_rr;
cout<<"\n\n";
cout<<"\t 进程名:";
for(int i=0; i<5; i++)
{
cout<<"\t"<<pcb[i].pname;
}
cout<<endl;
cout<<"\t到达时间:";
for(int i=0; i<5; i++)
{
cout<<"\t"<<pcb[i].arrive;
}
cout<<endl;
cout<<"\t服务时间:";
for(int i=0; i<5; i++)
{
cout<<"\t"<<pcb[i].service;
}
cout<<endl;
cout<<endl;
int j=0,finish=0;
sort(pcb,pcb+5,cmp);
queue<PCB> q;
int sum_turnover = 0;
double sum_author_turnover = 0.0;
while(!q.empty()||j<5)
{
if(q.empty())
{
finish=pcb[j].arrive;
q.push(pcb[j++]);
}
if(q.front().service<=time_rr)
{
finish+=q.front().service;
while(j<5&&pcb[j].arrive<=finish)
q.push(pcb[j++]);
q.front().end=finish;
q.front().turnover=q.front().end-q.front().arrive;
q.front().author_turnover = double(q.front().turnover)/q.front().service_time;
sum_turnover+=q.front().turnover;
sum_author_turnover+=q.front().author_turnover;
rr.push_back(q.front());
q.pop();
}
else
{
finish+=time_rr;
while(j<5&&pcb[j].arrive<=finish)
q.push(pcb[j++]);
q.front().service-=time_rr;
q.push(q.front());
q.pop();
}
}
double avg_turnover = (double)sum_turnover/5;
double avg_author_turnover = (double)sum_author_turnover/5;
cout<<"\t进程名\t\t"<<"到达时间\t"<<"服务时间\t"<<"完成时间\t"<<"周转时间\t"<<"带权周转"<<endl;
for(int i=0; i<5; i++)
{
cout<<"\t"<<rr[i].pname<<"\t\t"<<rr[i].arrive<<"\t\t"<<rr[i].service_time<<"\t\t"<<rr[i].end<<"\t\t"<<rr[i].turnover<<"\t\t";
printf("%.2lf\n",rr[i].author_turnover);
}
printf("\t平均周转时间:%.2lf\t",avg_turnover);
rr_turnover=avg_turnover;
printf("\t平均带权周转时间:%.2lf\n",avg_author_turnover);
rr_author=avg_author_turnover;
system("pause");
system("cls");
}
void FCFS()
{
system("cls");
cout<<"先来先服务调度算法!"<<endl;
cout<<"\n\n";
cout<<"\t 进程名:";
for(int i=0; i<5; i++)
{
cout<<"\t"<<pcb[i].pname;
}
cout<<endl;
cout<<"\t到达时间:";
for(int i=0; i<5; i++)
{
cout<<"\t"<<pcb[i].arrive;
}
cout<<endl;
cout<<"\t服务时间:";
for(int i=0; i<5; i++)
{
cout<<"\t"<<pcb[i].service;
}
cout<<endl;
cout<<endl;
int finish = 0;
sort(pcb,pcb+5,cmp);
int sum_turnover = 0;
double sum_author_turnover = 0.0;
for(int i=0; i<5; i++)
{
if(pcb[i].arrive>finish)
pcb[i].end = pcb[i].arrive+pcb[i].service;
else
pcb[i].end = pcb[i].service+finish;
finish = pcb[i].end;
pcb[i].turnover = pcb[i].end-pcb[i].arrive;
pcb[i].start = pcb[i].end-pcb[i].service;
pcb[i].author_turnover = double(pcb[i].turnover)/pcb[i].service;
sum_turnover+=pcb[i].turnover;
sum_author_turnover+=pcb[i].author_turnover;
fcfs.push_back(pcb[i]);
}
int cpu = 0;
int f[5] = {0};
while(1)
{
if(cpu==pcb[4].end)
{
cout<<"\t"<<pcb[4].end<<" "<<"进程"<<pcb[4].pname<<"结束\n"<<endl;
break;
}
for(int i=0; i<5; i++)
{
if(pcb[i].arrive==cpu)
{
cout<<"\t"<<cpu<<" "<<"进程"<<pcb[i].pname<<"到达内存\n"<<endl;
}
}
for(int i=0; i<5; i++)
{
if((pcb[i].start==cpu&&i==0)||(pcb[i].start==cpu&&f[i-1]==0))
{
f[i]=1;
cout<<"\t"<<cpu<<" "<<"进程"<<pcb[i].pname<<"开始执行\n"<<endl;
Sleep(pcb[i].service*100);
}
if(pcb[i].end==cpu)
{
cout<<"\t"<<cpu<<" "<<"进程"<<pcb[i].pname<<"结束\n"<<endl;
f[i]=0;
}
}
cpu++;
}
double avg_turnover = (double)sum_turnover/5;
double avg_author_turnover = (double)sum_author_turnover/5;
cout<<"\t进程名\t\t"<<"到达时间\t"<<"服务时间\t"<<"完成时间\t"<<"周转时间\t"<<"带权周转"<<endl;
for(int i=0; i<5; i++)
{
cout<<"\t"<<pcb[i].pname<<"\t\t"<<pcb[i].arrive<<"\t\t"<<pcb[i].service<<"\t\t"<<pcb[i].end<<"\t\t"<<pcb[i].turnover<<"\t\t";
printf("%.2lf\n",pcb[i].author_turnover);
}
printf("\t平均周转时间:%.2lf\t",avg_turnover);
fcfs_turnover=avg_turnover;
printf("\t平均带权周转时间:%.2lf\n",avg_author_turnover);
fcfs_author=avg_author_turnover;
system("pause");
system("cls");
}
void SJF()
{
system("cls");
cout<<"短作业优先调度算法!"<<endl;
cout<<"\n\n";
cout<<"\t 进程名:";
for(int i=0; i<5; i++)
{
cout<<"\t"<<pcb[i].pname;
}
cout<<endl;
cout<<"\t到达时间:";
for(int i=0; i<5; i++)
{
cout<<"\t"<<pcb[i].arrive;
}
cout<<endl;
cout<<"\t服务时间:";
for(int i=0; i<5; i++)
{
cout<<"\t"<<pcb[i].service;
}
cout<<endl;
cout<<endl;
int i,j=0,finish=0;
sort(pcb,pcb+5,cmp);
int sum_turnover = 0;
double sum_author_turnover = 0.0;
for(int i=0; i<5; i++)
{
while(j<5&&pcb[j].arrive<=finish)
j++;
sort(pcb+i,pcb+j,cmp1);
if(pcb[i].arrive>finish)
pcb[i].end = pcb[i].arrive+pcb[i].service;
else
pcb[i].end = pcb[i].service+finish;
finish = pcb[i].end;
pcb[i].turnover = pcb[i].end-pcb[i].arrive;
pcb[i].start = pcb[i].end-pcb[i].service;
pcb[i].author_turnover = double(pcb[i].turnover)/pcb[i].service;
sum_turnover+=pcb[i].turnover;
sum_author_turnover+=pcb[i].author_turnover;
sjf.push_back(pcb[i]);
}
int cpu = 0;
int f[5] = {0};
while(1)
{
if(cpu==pcb[4].end)
{
cout<<"\t"<<pcb[4].end<<" "<<"进程"<<pcb[4].pname<<"结束\n"<<endl;
break;
}
for(int i=0; i<5; i++)
{
if(pcb[i].arrive==cpu)
{
cout<<"\t"<<cpu<<" "<<"进程"<<pcb[i].pname<<"到达内存\n"<<endl;
}
}
for(int i=0; i<5; i++)
{
if((pcb[i].start==cpu&&i==0)||(pcb[i].start==cpu&&f[i-1]==0))
{
f[i]=1;
cout<<"\t"<<cpu<<" "<<"进程"<<pcb[i].pname<<"开始执行\n"<<endl;
Sleep(pcb[i].service*100);
}
if(pcb[i].end==cpu)
{
cout<<"\t"<<cpu<<" "<<"进程"<<pcb[i].pname<<"结束\n"<<endl;
f[i]=0;
}
}
cpu++;
}
double avg_turnover = (double)sum_turnover/5;
double avg_author_turnover = (double)sum_author_turnover/5;
cout<<"\t进程名\t\t"<<"到达时间\t"<<"服务时间\t"<<"完成时间\t"<<"周转时间\t"<<"带权周转"<<endl;
for(int i=0; i<5; i++)
{
cout<<"\t"<<pcb[i].pname<<"\t\t"<<pcb[i].arrive<<"\t\t"<<pcb[i].service<<"\t\t"<<pcb[i].end<<"\t\t"<<pcb[i].turnover<<"\t\t";
printf("%.2lf\n",pcb[i].author_turnover);
}
printf("\t平均周转时间:%.2lf\t",avg_turnover);
sjf_turnover=avg_turnover;
printf("\t平均带权周转时间:%.2lf\n",avg_author_turnover);
sjf_author=avg_author_turnover;
system("pause");
system("cls");
}
void init()
{
cout<<endl;
pcb[0].pname='A';
pcb[0].arrive=0;
pcb[0].service=3;
pcb[0].service_time=3;
pcb[1].pname='B';
pcb[1].arrive=2;
pcb[1].service=6;
pcb[1].service_time=6;
pcb[2].pname='C';
pcb[2].arrive=4;
pcb[2].service=4;
pcb[2].service_time=4;
pcb[3].pname='D';
pcb[3].arrive=6;
pcb[3].service=5;
pcb[3].service_time=5;
pcb[4].pname='E';
pcb[4].arrive=8;
pcb[4].service=2;
pcb[4].service_time=2;
system("cls");
}
void menu()
{
cout<<endl;
cout<<endl;
cout<<"\t 进程调度模拟程序"<<endl;
cout<<endl;
cout<<"\t1. 输入作业情况"<<endl;
cout<<endl;
cout<<"\t2. 显示作业情况"<<endl;
cout<<endl;
cout<<"\t3. 先来先服务算法"<<endl;
cout<<endl;
cout<<"\t4. 短作业优先算法"<<endl;
cout<<endl;
cout<<"\t5. 高响应比优先算法"<<endl;
cout<<endl;
cout<<"\t6. 时间片轮转算法"<<endl;
cout<<endl;
cout<<"\t7. 多级反馈队列调度"<<endl;
cout<<endl;
cout<<"\t8. 算法结果对比"<<endl;
cout<<endl;
cout<<"\t0. 退出"<<endl;
cout<<endl;
cout<<"请输入选择:";
}
void HRRN()
{
system("cls");
cout<<"高响应比调度算法!"<<endl;
cout<<"\n\n";
cout<<"\t 进程名:";
for(int i=0; i<5; i++)
{
cout<<"\t"<<pcb[i].pname;
}
cout<<endl;
cout<<"\t到达时间:";
for(int i=0; i<5; i++)
{
cout<<"\t"<<pcb[i].arrive;
}
cout<<endl;
cout<<"\t服务时间:";
for(int i=0; i<5; i++)
{
cout<<"\t"<<pcb[i].service;
}
cout<<endl;
cout<<endl;
int sum_turnover = 0;
double sum_author_turnover = 0.0;
int j=0;
int finish=0;
sort(pcb, pcb+5, cmp);
for(int i = 0; i < 5; i++)
{
while(j<5 && pcb[j].arrive <= finish)
j++;
for(int k = i; k < j; k++)
pcb[k].priority = (finish-pcb[k].arrive+pcb[k].service) / pcb[k].service;
sort(pcb+i, pcb+j, cmp2);
if(pcb[i].arrive > finish)
pcb[i].end = pcb[i].arrive + pcb[i].service;
else
pcb[i].end = finish + pcb[i].service;
pcb[i].turnover = pcb[i].end - pcb[i].arrive;
finish = pcb[i].end;
pcb[i].start = pcb[i].end-pcb[i].service;
pcb[i].author_turnover = double(pcb[i].turnover)/pcb[i].service;
sum_turnover+=pcb[i].turnover;
sum_author_turnover+=pcb[i].author_turnover;
hrrn.push_back(pcb[i]);
}
int cpu = 0;
int f[5] = {0};
while(1)
{
if(cpu==pcb[4].end)
{
cout<<"\t"<<pcb[4].end<<" "<<"进程"<<pcb[4].pname<<"结束\n"<<endl;
break;
}
for(int i=0; i<5; i++)
{
if(pcb[i].arrive==cpu)
{
cout<<"\t"<<cpu<<" "<<"进程"<<pcb[i].pname<<"到达内存\n"<<endl;
}
}
for(int i=0; i<5; i++)
{
if((pcb[i].start==cpu&&i==0)||(pcb[i].start==cpu&&f[i-1]==0))
{
f[i]=1;
cout<<"\t"<<cpu<<" "<<"进程"<<pcb[i].pname<<"开始执行\n"<<endl;
Sleep(pcb[i].service*100);
}
if(pcb[i].end==cpu)
{
cout<<"\t"<<cpu<<" "<<"进程"<<pcb[i].pname<<"结束\n"<<endl;
f[i]=0;
}
}
cpu++;
}
double avg_turnover = (double)sum_turnover/5;
double avg_author_turnover = (double)sum_author_turnover/5;
cout<<"\t进程名\t\t"<<"到达时间\t"<<"服务时间\t"<<"完成时间\t"<<"周转时间\t"<<"带权周转"<<endl;
for(int i=0; i<5; i++)
{
cout<<"\t"<<pcb[i].pname<<"\t\t"<<pcb[i].arrive<<"\t\t"<<pcb[i].service<<"\t\t"<<pcb[i].end<<"\t\t"<<pcb[i].turnover<<"\t\t";
printf("%.2lf\n",pcb[i].author_turnover);
}
printf("\t平均周转时间:%.2lf\t",avg_turnover);
hrrn_turnover=avg_turnover;
printf("\t平均带权周转时间:%.2lf\n",avg_author_turnover);
hrrn_author=avg_author_turnover;
system("pause");
system("cls");
}
int times[3]= {1,2,4};
void MFQ()
{
system("cls");
cout<<"多级反馈队列调度算法!"<<endl;
cout<<"\n\n";
cout<<"\t 进程名:";
for(int i=0; i<5; i++)
{
cout<<"\t"<<pcb[i].pname;
}
cout<<endl;
cout<<"\t到达时间:";
for(int i=0; i<5; i++)
{
cout<<"\t"<<pcb[i].arrive;
}
cout<<endl;
cout<<"\t服务时间:";
for(int i=0; i<5; i++)
{
cout<<"\t"<<pcb[i].service;
}
cout<<endl;
cout<<endl;
int sum_turnover = 0;
double sum_author_turnover = 0.0;
sort(pcb,pcb+5,cmp);
int finish=0,j=0;
finish = pcb[j].arrive;
const int QueueNum = 3;
queue<PCB> Ready[QueueNum];
Ready[0].push(pcb[j++]);
for(int i=0; i<5; i++)
{
pcb[i].end=0;
}
int cnt=0;
while (1)
{
bool flag = false;
for (int i = 0; i < QueueNum; ++i)
{
if (!Ready[i].empty())
{
flag = true;
break;
}
}
if(!flag)
{
Ready[0].push(pcb[j++]);
}
for (int i = 0; i < QueueNum; i++)
{
if (i == QueueNum - 1)
{
while (!Ready[i].empty())
{
if(j<5 &&pcb[j].arrive<=finish)
{
Ready[0].push(pcb[j++]);
i = 0;
break;
}
if (Ready[i].front().service>times[i]+Ready[i].front().end)
{
Ready[i].front().end += times[i];
Ready[i].push(Ready[i].front());
Ready[i].pop();
finish += times[i];
}
else
{
finish += Ready[i].front().service-Ready[i].front().end;
Ready[i].front().end = finish;
Ready[i].front().turnover = Ready[i].front().end - Ready[i].front().arrive;
Ready[i].front().author_turnover = (double)Ready[i].front().turnover / Ready[i].front().service_time;
sum_turnover+=Ready[i].front().turnover;
sum_author_turnover+=Ready[i].front().author_turnover;
result.push_back(Ready[i].front());
Ready[i].pop();
cnt++;
}
}
}
else
{
while (!Ready[i].empty())
{
if(j<5 && pcb[j].arrive<=finish)
{
Ready[0].push(pcb[j++]);
i = 0;
continue;
}
if (Ready[i].front().service>times[i]+Ready[i].front().end)
{
Ready[i].front().end += times[i];
Ready[i + 1].push(Ready[i].front());
Ready[i].pop();
finish += times[i];
}
else
{
finish += (Ready[i].front().service-Ready[i].front().end);
Ready[i].front().end = finish;
Ready[i].front().turnover = Ready[i].front().end - Ready[i].front().arrive;
Ready[i].front().author_turnover = (double)Ready[i].front().turnover / Ready[i].front().service_time;
sum_turnover+=Ready[i].front().turnover;
sum_author_turnover+=Ready[i].front().author_turnover;
result.push_back(Ready[i].front());
Ready[i].pop();
cnt++;
}
}
}
}
if(cnt==5)
break;
}
double avg_turnover = (double)sum_turnover/5;
double avg_author_turnover = (double)sum_author_turnover/5;
cout<<"\t进程名\t\t"<<"到达时间\t"<<"服务时间\t"<<"完成时间\t"<<"周转时间\t"<<"带权周转"<<endl;
for(int i=0; i<5; i++)
{
cout<<"\t"<<result[i].pname<<"\t\t"<<result[i].arrive<<"\t\t"<<result[i].service_time<<"\t\t"<<result[i].end<<"\t\t"<<result[i].turnover<<"\t\t";
printf("%.2lf\n",result[i].author_turnover);
}
printf("\t平均周转时间:%.2lf\t",avg_turnover);
mfq=avg_turnover;
printf("\t平均带权周转时间:%.2lf\n",avg_author_turnover);
mfq_aythor=avg_author_turnover;
system("pause");
system("cls");
}
int main()
{
int flag=1;
while(1)
{
menu();
int sel;
cin>>sel;
switch(sel)
{
case 1:
init();
break;
case 2:
print();
break;
case 3:
FCFS();
break;
case 4:
SJF();
break;
case 5:
HRRN();
break;
case 6:
RR();
break;
case 7:
MFQ();
break;
case 8:
Compare();
break;
case 0:
exit(0);
}
}
return 0;
}
运行效果:

