作业优先调度算法 先来先服务、短作业调度算法(c语言描述)

来源:互联网 发布:大麦户源码安装教程 编辑:程序博客网 时间:2024/05/21 09:45
/*先来先服务调度算法*/
#include<stdio.h>
#define N 10
int Arival[N]={0};
int Go[N]={0};
int Start[N]={0};
int End[N]={0};
int Timer[N]={0};
float DTimer[N]={0};
int Check[N]={0};
int Select(int a[],int n){
int i=0;
for(int k=0;k<n;k++){
if(Check[k]==0){
i=k;
break;
}
}
for(int j=0;j<n;j++){
if(a[i]>a[j]&&Check[j]==0){
i=j;
}
}
Check[i]=1;
return i;
}
int main(){
int n,k=0,l=0,Atimer=0,timer=0;
printf("进程的个数:");
scanf("%d",&n);
for(int i=0;i<n;i++){
printf("第%d个进程的到达时间:",i+1);
scanf("%d",Arival+i);
printf("第%d个进程的运行时间:",i+1);
scanf("%d",Go+i);
}
k=Select(Arival,n);
Start[k]=Arival[k];
End[k]=Start[k]+Go[k];
Timer[k]=End[k]-Arival[k];
DTimer[k]=(float)Timer[k]/Go[k];
printf("提交时间  运行时间  开始时间  结束时间  周转时间  带权周转时间\n");
for(int m=0;m<n;m++){
l=k;
k=Select(Arival,n);
Start[k]=End[l];
End[k]=Start[k]+Go[k];
Timer[k]=End[k]-Arival[k];
DTimer[k]=(float)Timer[k]/Go[k];
Atimer=Timer[l]+Atimer;
timer=timer+DTimer[l];
printf("  %2d        %2d         %2d        %2d        %2d         %.2f\n",Arival[l],Go[l],Start[l],End[l],Timer[l],DTimer[l]);
}
printf("平均周转时间:%.2f\n",(float)Atimer/n);
printf("平均带权周转时间:%.2f\n",(float)timer/n);
return 0;
}





/*短作业优先调度算法*/
#include<stdio.h>
#define N 10
int Arival[N]={0};
int Go[N]={0};
int Start[N]={0};
int End[N]={0};
int Timer[N]={0};
float DTimer[N]={0};
int Check[N]={0};
int Select(int a[],int n,int local){
int i=0;
for(int k=0;k<n;k++){
if(Check[k]==0){
i=k;
break;
}
}
for(int j=0;j<n;j++){
if(a[i]>a[j]&&Check[j]==0&&Arival[j]<=local){
i=j;
}
}
Check[i]=1;
return i;
}
int main(){
int n,k=0,l=0,Atimer=0,timer=0,localtime=0;
printf("进程的个数:");
scanf("%d",&n);
for(int i=0;i<n;i++){
printf("第%d个进程的到达时间:",i+1);
scanf("%d",Arival+i);
printf("第%d个进程的运行时间:",i+1);
scanf("%d",Go+i);
}
Start[k]=Arival[k];
End[k]=Start[k]+Go[k];
Timer[k]=End[k]-Arival[k];
DTimer[k]=(float)Timer[k]/Go[k];
localtime=End[k];
Check[k]=1;
printf("进程  提交时间  运行时间  开始时间  结束时间  周转时间  带权周转时间\n");
for(int m=0;m<n;m++){
l=k;
k=Select(Go,n,localtime);
Start[k]=End[l];
End[k]=Start[k]+Go[k];
Timer[k]=End[k]-Arival[k];
DTimer[k]=(float)Timer[k]/Go[k];
localtime=End[k];
Atimer=Timer[l]+Atimer;
timer=timer+DTimer[l];
printf(" %d     %2d        %2d         %2d        %2d        %2d         %.2f\n",l,Arival[l],Go[l],Start[l],End[l],Timer[l],DTimer[l]);
}
printf("平均周转时间:%.2f\n",(float)Atimer/n);
printf("平均带权周转时间:%.2f\n",(float)timer/n);
return 0;

}



先来先服务,到达时间为标准!

短作业,运行时间为标准!

周转时间:作业从提交给系统开始,到作业完成的这一段时间间隔。

带权周转时间:作业周转时间与服务时间的比值。


0 0