FCFS和SJF调度算法1.docx

上传人:b****4 文档编号:12146277 上传时间:2023-04-17 格式:DOCX 页数:8 大小:15.22KB
下载 相关 举报
FCFS和SJF调度算法1.docx_第1页
第1页 / 共8页
FCFS和SJF调度算法1.docx_第2页
第2页 / 共8页
FCFS和SJF调度算法1.docx_第3页
第3页 / 共8页
FCFS和SJF调度算法1.docx_第4页
第4页 / 共8页
FCFS和SJF调度算法1.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

FCFS和SJF调度算法1.docx

《FCFS和SJF调度算法1.docx》由会员分享,可在线阅读,更多相关《FCFS和SJF调度算法1.docx(8页珍藏版)》请在冰豆网上搜索。

FCFS和SJF调度算法1.docx

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;i

WholeTime[i]=finishTime[i]-arrivalTime[i];

for(inti=0;i

WeightWholeTime[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;i

WholeTime[i]=finishTime[i]-arrivalTime[i];

for(inti=0;i

WeightWholeTime[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;i

for(intk=0;k

if(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;i

cout<

cout<<"\n服务时间\t";

for(inti=0;i

cout<

cout<

}

voidoutput()

{

cout<<"进程名\t\t";

for(inti=0;i

{

charc=i+65;

cout<

}

cout<<"平均\n到达时间\t";

for(inti=0;i

cout<

cout<<"\n服务时间\t";

for(inti=0;i

cout<

cout<<"\n完成时间\t";

for(inti=0;i

cout<

cout<<"\n周转时间\t";

for(inti=0;i

cout<

cout<

for(inti=0;i

cout<

cout<

}

voidmain()

{

cout<<"\n\n========================FCFS和SJF调度算法======================\n\n";

input();

FCFS();

output();

//getchar();

SJF();

output();

charc;

cin>>c;

getchar();

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1