📄 sy.cpp
字号:
a=Q1.front->next;
b=Q2.front->next;
for(i=1;i<=Q1num;i++)
{ cout<<i<<". "<<a->name;
a=a->next;
cout<<endl;}
cout<<endl;
cout<<"经过执行,当前就绪队列里的PCB是:"<<endl;
for(i=1;i<=Q2num;i++)
{ cout<<i<<". "<<b->name;
b=b->next;
cout<<endl;
}
cout<<endl;
}//if((Q2num!=0)&&(Q1num!=0))
if((Q2num!=0)&&(Q1num==0)){
//等待队列为空
h2=Q2.front->next;
minprior=h2->prior;
min=Q2.front->next;//h2;
for(i=1;i<=Q2num;i++){
if((minprior>=(h2->prior))&&((h2->exe)!=1))
{
minprior=h2->prior;
min=h2;
}//if
h2=h2->next;
}//for
h2=Q2.front;
while((h2->next)!=min){
h2=h2->next;
}//while
min->exe=1;
cout<<"第"<<n<<"轮执行"<<endl;
cout<<"正在执行的是:"<<min->name<<endl;
cout<<"其执行时间是:"<<min->exetime<<endl;
cout<<"其优先级是:"<<min->prior<<endl<<endl;
if(min!=Q2.rear)
h2->next=min->next;
else if((min->next)==NULL)
{ Q2.rear=h2;
Q2.rear->next=NULL;}
Enteam(Q1,min); //min执行完毕后进入等待队列
Deteam(Q1,e); //等待队列第一个PCB出队
Enteam(Q2,e);
cout<<"经过执行,当前等待队列为空!"<<endl<<endl;
cout<<"经过执行,当前就绪队列里的PCB是:"<<endl;
PCB b=Q2.front->next;;
for(i=1;i<=Q2num;i++)
{ cout<<i<<". "<<b->name;
b=b->next;
cout<<endl;
}
cout<<endl;
}//if((Q2num!=0)&&(Q1num==0))
if((Q1num!=0)&&(Q2num==0)){
//就绪队列为空
h1=Q1.front->next;
minprior=h1->prior;
min=Q1.front->next;//h2;
for(i=1;i<=Q1num;i++){
if((minprior>=(h1->prior))&&((h1->exe)!=1))
{
minprior=h1->prior;
min=h1;
}//if
h1=h1->next;
}//for
h1=Q1.front;
while((h1->next)!=min){
h1=h1->next;
}//while
min->exe=1;
cout<<"第"<<n<<"轮执行"<<endl;
cout<<"正在执行的是:"<<min->name<<endl;
cout<<"其执行时间是:"<<min->exetime<<endl;
cout<<"其优先级是:"<<min->prior<<endl<<endl;
if(min!=Q1.rear)//->next)!=NULL)
h1->next=min->next;
else if((min->next)==NULL)
{ Q1.rear=h1;
Q1.rear->next=NULL;}
Enteam(Q2,min); //min执行完毕后进入就绪待队列
Deteam(Q2,e); //等待队列第一个PCB出队
Enteam(Q1,e);
cout<<"当前就绪队列为空,所以执行等待队列的PCB"<<endl;
cout<<"经过执行,当前等待队列里的PCB是:"<<endl;
PCB b=Q1.front->next;;
for(i=1;i<=Q1num;i++)
{ cout<<i<<". "<<b->name;
b=b->next;
cout<<endl;
}
cout<<endl;
}//if((Q1num!=0)&&(Q2num==0))
}//for
}//Prior
void Time(team Q1,team Q2){
//最短执行时间的算法 每次执行就绪队列里时间短的PCB
//Q1为等待态队列,Q2为就绪态队列
PCB h1=Q1.front->next;
PCB h2=Q2.front->next;
PCB e=(PCB)malloc(sizeof(pcb)); //接收Q1中出队的PCB
PCB min;//=(PCB)malloc(sizeof(pcb)); //记下优先级最高的PCB
int mintime; //记下最高的那个优先级数
int i,n;
for(int Q1num=0;h1!=NULL; Q1num++)
{h1=h1->next;}//记下等待态中PCB数目
for(int Q2num=0;h2!=NULL; Q2num++)
{h2=h2->next;}//记下就绪态中PCB数目
cout<<"最短执行时间算法:"<<endl;
for(n=1;n<=NUM;n++){
if((Q2num!=0)&&(Q1num!=0)){
h2=Q2.front->next;
mintime=h2->exetime;
min=Q2.front->next;//h2;
for(i=1;i<=Q2num;i++){
if((mintime>=(h2->exetime))&&((h2->exe)!=1))
{
mintime=h2->prior;
min=h2;
}//if
h2=h2->next;
}//for
h2=Q2.front;
while((h2->next)!=min){
h2=h2->next;
}//while
min->exe=1;
cout<<"第"<<n<<"轮执行"<<endl;
cout<<"正在执行的是:"<<min->name<<endl;
cout<<"其优先级是:"<<min->prior<<endl;
cout<<"其执行时间是:"<<min->exetime<<endl<<endl;
if(min!=Q2.rear)//->next)!=NULL)
h2->next=min->next;
else if((min->next)==NULL)
{ Q2.rear=h2;
Q2.rear->next=NULL;}
Enteam(Q1,min); //min执行完毕后进入等待队列
Deteam(Q1,e); //等待队列第一个PCB出队
Enteam(Q2,e);
cout<<"经过执行,当前等待队列里的PCB是:"<<endl;
PCB a,b;
a=Q1.front->next;
b=Q2.front->next;
for(i=1;i<=Q1num;i++)
{ cout<<i<<". "<<a->name;
a=a->next;
cout<<endl;}
cout<<endl;
cout<<"经过执行,当前就绪队列里的PCB是:"<<endl;
for(i=1;i<=Q2num;i++)
{ cout<<i<<". "<<b->name;
b=b->next;
cout<<endl;
}
cout<<endl;
}//if((Q2num!=0)&&(Q1num!=0))
if((Q2num!=0)&&(Q1num==0)){
//等待队列为空
h2=Q2.front->next;
mintime=h2->exetime;
min=Q2.front->next;//h2;
for(i=1;i<=Q2num;i++){
if((mintime>=(h2->exetime))&&((h2->exe)!=1))
{
mintime=h2->exetime;
min=h2;
}//if
h2=h2->next;
}//for
h2=Q2.front;
while((h2->next)!=min){
h2=h2->next;
}//while
min->exe=1;
cout<<"第"<<n<<"轮执行"<<endl;
cout<<"正在执行的是:"<<min->name<<endl;
cout<<"其优先级是:"<<min->prior<<endl;
cout<<"其执行时间是:"<<min->exetime<<endl<<endl;
if(min!=Q2.rear)
h2->next=min->next;
else if((min->next)==NULL)
{ Q2.rear=h2;
Q2.rear->next=NULL;}
Enteam(Q1,min); //min执行完毕后进入等待队列
Deteam(Q1,e); //等待队列第一个PCB出队
Enteam(Q2,e);
cout<<"经过执行,当前等待队列为空!"<<endl<<endl;
cout<<"经过执行,当前就绪队列里的PCB是:"<<endl;
PCB b=Q2.front->next;;
for(i=1;i<=Q2num;i++)
{ cout<<i<<". "<<b->name;
b=b->next;
cout<<endl;
}
cout<<endl;
}//if((Q2num!=0)&&(Q1num==0))
if((Q1num!=0)&&(Q2num==0)){
//就绪队列为空
h1=Q1.front->next;
mintime=h1->exetime;
min=Q1.front->next;//h2;
for(i=1;i<=Q1num;i++){
if((mintime>=(h1->exetime))&&((h1->exe)!=1))
{
mintime=h1->exetime;
min=h1;
}//if
h1=h1->next;
}//for
h1=Q1.front;
while((h1->next)!=min){
h1=h1->next;
}//while
min->exe=1;
cout<<"第"<<n<<"轮执行"<<endl;
cout<<"正在执行的是:"<<min->name<<endl;
cout<<"其优先级是:"<<min->prior<<endl;
cout<<"其执行时间是:"<<min->exetime<<endl<<endl;
if(min!=Q1.rear)//->next)!=NULL)
h1->next=min->next;
else if((min->next)==NULL)
{ Q1.rear=h1;
Q1.rear->next=NULL;}
Enteam(Q2,min); //min执行完毕后进入就绪待队列
Deteam(Q2,e); //等待队列第一个PCB出队
Enteam(Q1,e);
cout<<"当前就绪队列为空,所以执行等待队列的PCB"<<endl;
cout<<"经过执行,当前等待队列里的PCB是:"<<endl;
PCB b=Q1.front->next;;
for(i=1;i<=Q1num;i++)
{ cout<<i<<". "<<b->name;
b=b->next;
cout<<endl;
}
cout<<endl;
}//if((Q1num!=0)&&(Q2num==0))
}//for
}//Prior
void main() {
team Q1,Q2,Q3,Q4,Q5,Q6;
char a,b;
cout<<"你将依次执行以下三种算法:"<<endl;
cout<<"1.先来先服务算法"<<endl;
cout<<"2.基于优先数的调度算法"<<endl;
cout<<"3.最短执行时间调度算法"<<endl;
cout<<endl;
cout<<"执行先来先服务算法"<<endl<<endl;
Initteam(Q1);
Initteam(Q2); //初始化队列
Inti(Q1,Q2); //随机产生0,1,状态为1的放在等待态,0的放在就绪态
FIFO(Q1,Q2); //先来先出调度算法
FIFOtime(Q1,Q2); //计算FIFO平均周转时间和平均带权周转时间
cout<<"继续执行基于优先数的调度算法吗?(y/n)"<<endl;
cin>>a;
cout<<endl;
if(a=='y'||a=='Y'){
cout<<"执行基于优先数的调度算法"<<endl<<endl;
Initteam(Q3);
Initteam(Q4); //初始化队列
Inti(Q3,Q4); //随机产生0,1,状态为1的放在等待态,0的放在就绪态
Prior(Q3,Q4);} //基于优先级算法
cout<<"继续执行最短执行时间调度算法吗?(y/n)"<<endl;
cin>>b;
cout<<endl;
if(b=='y'||b=='Y'){
cout<<"执行最短执行时间调度算法"<<endl<<endl;
Initteam(Q5);
Initteam(Q6); //初始化队列
Inti(Q5,Q6); //随机产生0,1,状态为1的放在等待态,0的放在就绪态
Time(Q5,Q6);} //最短执行时间算法
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -