#include<iostream.h>
#include<string>
int WaitTime[10],RunTime[10],ReachTime[10],lvl[10],Finish[10],zhou[10],zhoudai[10],RunCount,copyReachTime[10],NeedTime[10];
char Name[10];
int j,NowTime,a[10],i,TimePieces;//时间片
int lvlmax,count; //最大权值
int masterlvl(int WaitTime,int RunTime) //求权
{
return (WaitTime + RunTime)/RunTime;
}
int maxlvl(int b[10]) //得到最大权值
{
int max = 0;
for(int j=1;j<RunCount;j++)
{
if(b[j]>b[max]) max = j;
}
NowTime += RunTime[max];
return max;
}
void printResult() //打印结果
{
cout<<"进程名"<<" ";
for(j=0;j<RunCount;j++)
{
cout<<Name[j]<<" ";
}
cout<<endl;
cout<<"到达时间"<<" ";
for(j=0;j<RunCount;j++)
{
cout<<copyReachTime[j]<<" ";
}
cout<<endl;
cout<<"服务时间"<<" ";
for(j=0;j<RunCount;j++)
{
cout<<RunTime[j]<<" ";
}
cout<<endl;
cout<<"完成时间"<<" ";
for(j=0;j<RunCount;j++)
{
cout<<Finish[j]<<" ";
}
cout<<endl;
cout<<"周转时间"<<" ";
for(j=0;j<RunCount;j++)
{
cout<<zhou[j]<<" ";
}
cout<<endl;
cout<<"带权周转时间"<<" ";
for(j=0;j<RunCount;j++)
{
cout<<zhoudai[j]<<" ";
}
cout<<endl;
}
void HighFirst() /////高响应比优先调度算法
{
while(count<RunCount)
{
for(i=0;i<9;i++)
{
a[i] = 0;
}
while(j<RunCount)
{
if(ReachTime[j] <= NowTime)
{
lvl[j] = masterlvl(NowTime-ReachTime[j],RunTime[j]);
a[j] = lvl[j];
}
j++;
}
lvlmax=maxlvl(a);
Finish[lvlmax] = NowTime;
zhou[lvlmax] = Finish[lvlmax] - ReachTime[lvlmax];
zhoudai[lvlmax] = zhou[lvlmax]/RunTime[lvlmax];
j=0;
ReachTime[lvlmax] = 100;
count++;
}
}
void TurnTime() //时间片轮转法
{
int count2;
count2 =0;
NowTime = 0;
cout<<"请输入您认为适合的时间片大小 ms。"<<endl;
cin>>TimePieces;//时间片
for(i=0;i<RunCount;i++)
{
ReachTime[i] = copyReachTime[i];
}
while(count2<RunCount)
{
for(i=0;i<RunCount;i++)
{
if(ReachTime[i] <= NowTime && NeedTime[i] <= TimePieces)
{
Finish[i] = NowTime+NeedTime[i];
zhou[i] = Finish[i] - ReachTime[i];
zhoudai[i] = zhou[i]/RunTime[i];
NowTime += NeedTime[i];
count2 ++;
ReachTime[i] = 100;
}
else if(ReachTime[i] <= NowTime && NeedTime[i] > TimePieces)
{
NeedTime[i] -= TimePieces;
NowTime += TimePieces;
}
}
}
}
int main()
{
j = 1;
cin>>RunCount;
for(int i=0;i<RunCount;i++) //初始化
{
cin>>Name[i];
cin>>ReachTime[i];
cin>>RunTime[i];
}
for(i=0;i<RunCount;i++)
{
copyReachTime[i] = ReachTime[i];
}
for(i=0;i<RunCount;i++)
{
NeedTime[i] = RunTime[i];
}
j = 0;
NowTime = 0;
count = 0;
cout<<"**************最高优先权优先算法-----动态(高响应比优先调度算法)****************"<<endl;
HighFirst();
printResult();
cout<<"***********************时间片轮转调度算法*****************************************"<<endl;
TurnTime();
printResult();
cout<<endl;
return 0;
}
timesuper.rar_调度算法
版权申诉
132 浏览量
2022-09-22
20:13:44
上传
评论
收藏 1KB RAR 举报
alvarocfc
- 粉丝: 109
- 资源: 1万+