FCFS和SJF调度算法1.docx
《FCFS和SJF调度算法1.docx》由会员分享,可在线阅读,更多相关《FCFS和SJF调度算法1.docx(8页珍藏版)》请在冰豆网上搜索。
![FCFS和SJF调度算法1.docx](https://file1.bdocx.com/fileroot1/2023-4/17/2d819279-e6ca-4015-8ba1-2620c38c2224/2d819279-e6ca-4015-8ba1-2620c38c22241.gif)
FCFS和SJF调度算法1
以下参考的别人的:
FCFS和SJF调度算法思想和实现算法
算法思想:
设计程序模拟进程的先来先服务FCFS和短作业优先SJF调度过程。
假设有n个进程分别在T1,…,Tn时刻到达系统,它们需要的服务时间分别为S1,…,Sn。
分别采用先来先服务FCFS和短作业优先SJF进程调度算法进行调度,计算每个进程的完成时间,周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。
源程序:
#include
#include
staticconstintN=100;
intarrivalTime[N];//到达时间
intserviceTime[N];//服务时间
intfinishTime[N];//完成时间
intWholeTime[N];//周转时间
doubleWeightWholeTime[N];//带权周转时间
doubleaverageWT,averageWWT;//平均周转时间
intserviceTime_SJF[N];
intn=0;
intnowTime=0;//记录当前时间
inti;
voidFCFS()
{
cout<<"\n=========================FCFS调度算法=========================\n";
for(i=0;i{
if(arrivalTime[i]>nowTime)
nowTime=arrivalTime[i];
nowTime+=serviceTime[i];
finishTime[i]=nowTime;
}
for(inti=0;iWholeTime[i]=finishTime[i]-arrivalTime[i];
for(inti=0;iWeightWholeTime[i]=(double)WholeTime[i]/(double)serviceTime[i];
for(inti=0;i{
averageWT+=(double)WholeTime[i]/n;
averageWWT+=(double)WeightWholeTime[i]/n;
}
}
voidSJF()
{
cout<<"\n==========================SJF调度算法=========================\n";
intmin=0;
nowTime=arrivalTime[0]+serviceTime[0];
finishTime[0]=nowTime;
serviceTime_SJF[0]=100;
intallin=0,j,k;
for(i=1;i{
k=1;
min=0;
if(allin==0)
{
j=0;
while(arrivalTime[j]<=nowTime&&j{
j++;
if(j>n)
allin=1;
}
}
else
j=n;
j=j-1;
while(k<=j)
{
if(serviceTime_SJF[k]==0)
k++;
else
{
if(serviceTime_SJF[min]>serviceTime_SJF[k])
min=k;
k++;
}
}
serviceTime_SJF[min]=0;
nowTime+=serviceTime[min];
finishTime[min]=nowTime;
}
for(inti=0;iWholeTime[i]=finishTime[i]-arrivalTime[i];
for(inti=0;iWeightWholeTime[i]=(double)WholeTime[i]/(double)serviceTime[i];
averageWT=0;
averageWWT=0;
for(inti=0;i{
averageWT+=(double)WholeTime[i]/n;
averageWWT+=(double)WeightWholeTime[i]/n;
}
}
voidsortOn()//进程按照到达或者服务时间进行排序
{
inttemp;
for(inti=0;ifor(intk=0;kif(arrivalTime[k+1]{
temp=arrivalTime[k+1];
arrivalTime[k+1]=arrivalTime[k];
arrivalTime[k]=temp;
temp=serviceTime[k+1];
serviceTime[k+1]=serviceTime[k];
serviceTime[k]=temp;
}
}
voidinput()
{
cout<<"请输入进程的个数:
";
cin>>n;
cout<while(n>100||n<=0)
{
cout<<"进程个数必须大于0且小于等于100!
请重新输入进程个数"<}
cout<<"请输入这"<\n\n";
for(inti=0;i{
intM;
cin>>M;
arrivalTime[i]=M;
}
cout<cout<<"请输入这"<\n\n";
for(inti=0;i{
intM;
cin>>M;
serviceTime[i]=M;
serviceTime_SJF[i]=M;
}
cout<cout<<"您输入的这"<\n\n";
sortOn();//进程按照到达时间进行排序
cout<<"进程名\t\t";
for(inti=0;i{
charc=i+65;
cout<}
cout<<"\n到达时间\t";
for(inti=0;icout<cout<<"\n服务时间\t";
for(inti=0;icout<cout<}
voidoutput()
{
cout<<"进程名\t\t";
for(inti=0;i{
charc=i+65;
cout<}
cout<<"平均\n到达时间\t";
for(inti=0;icout<cout<<"\n服务时间\t";
for(inti=0;icout<cout<<"\n完成时间\t";
for(inti=0;icout<cout<<"\n周转时间\t";
for(inti=0;icout<cout<for(inti=0;icout<cout<}
voidmain()
{
cout<<"\n\n========================FCFS和SJF调度算法======================\n\n";
input();
FCFS();
output();
//getchar();
SJF();
output();
charc;
cin>>c;
getchar();
}