📄 1234.cpp
字号:
#include<iostream.h>
//int scheduling(int mode);
const int meml=3;//后备队列最大长度。
const int lnum=3;//就绪队列数量。
const int readyl=3;//就绪队列最大长度。
const int timepiece=20;//时间片大小,单位:指令周期。
//-------------------------------------------------------------------
//
// 主函数
//
void main(void)
{
int mode=1;//0:时间片轮转法,1:多级反馈队列调度算法。
int cpu=0;//服务时间计数器。
int memln=meml;//后备队列实际长度。
int readyln[lnum];//就绪队列实际长度。
int clock;//时钟。
int fl=0;//就绪队列序号。
int i,j,k;
int nm[meml],am[meml],bm[meml],cm[meml],dm[meml],em[meml];//后备队列。
float fm[meml];
int nr[lnum][readyl+1],br[lnum][readyl+1],hr[lnum][readyl+1];//就绪队列。
for(i=0;i<lnum;i++)//队列长度初始化。
readyln[i]=0;
for(i=0;i<readyl;i++)//就绪队列初始化。
for(j=0;j<lnum;j++)
{
br[j][i]=0;
nr[j][i]=0;
hr[j][i]=0;
}
for(i=0;i<meml;i++)//数据输入。
{
cin>>bm[i];
nm[i]=i;
cm[i]=-1;
}
//-------------------------------------------------------------------
for(clock=0;;clock++)//时钟循环。
{
if(memln&&readyln[0]<readyl)//进程由后备队列调入就绪队列。
{
nr[0][readyln[0]]=nm[meml-memln];
br[0][readyln[0]]=bm[meml-memln];
hr[0][readyln[0]]=br[0][readyln[0]];
am[meml-memln]=clock;
memln--;readyln[0]++;
}
if(!cpu)//由就绪队列中取进程。
{
k=1;
if(mode)
{
for(i=0;i<lnum;i++)
if(readyln[i])
{
fl=i;
break;
}
for(i=0;i<fl;i++)
k*=2;
}
cpu=timepiece*k;
if(!fl&&cm[nr[fl][0]]==-1)
cm[nr[fl][0]]=clock;
}
cpu--;
hr[fl][0]--;
if(!cpu&&hr[fl][0])
{
if(fl==lnum||!mode)
{
br[fl][readyln[fl]]=br[fl][0];
nr[fl][readyln[fl]]=nr[fl][0];
hr[fl][readyln[fl]]=hr[fl][0];
for(i=0;i<readyln[fl];i++)
{
br[fl][i]=br[fl][i+1];
nr[fl][i]=nr[fl][i+1];
hr[fl][i]=hr[fl][i+1];
}
}
else
{
br[fl+1][readyln[fl+1]]=br[fl][0];
nr[fl+1][readyln[fl+1]]=nr[fl][0];
hr[fl+1][readyln[fl+1]]=hr[fl][0];
readyln[fl+1]++;
for(i=0;i<readyln[fl];i++)
{
br[fl][i]=br[fl][i+1];
nr[fl][i]=nr[fl][i+1];
hr[fl][i]=hr[fl][i+1];
}
readyln[fl]--;
}
}
if(!hr[fl][0])
{
dm[nr[fl][0]]=clock+1;
for(i=0;i<readyln[fl]-1;i++)
{
br[fl][i]=br[fl][i+1];
nr[fl][i]=nr[fl][i+1];
hr[fl][i]=hr[fl][i+1];
}
readyln[fl]--;
cpu=0;
}
if(!memln)
{
k=0;
for(i=0;i<lnum;i++)
k+=readyln[i];
if(!k)
break;
}
}
for(i=0;i<meml;i++)
{
em[i]=dm[i]-am[i];
fm[i]=(float)em[i]/(float)bm[i];
cout<<"\n"<<am[i]<<" "<<bm[i]<<" "<<cm[i]<<" "<<dm[i]<<" "<<em[i]<<" "<<fm[i];
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -