1. 程式人生 > >作業優先排程演算法 先來先服務、短作業排程演算法(c語言描述)

作業優先排程演算法 先來先服務、短作業排程演算法(c語言描述)

/*先來先服務排程演算法*/
#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;

}

先來先服務,到達時間為標準!

短作業,執行時間為標準!

週轉時間:作業從提交給系統開始,到作業完成的這一段時間間隔。

帶權週轉時間:作業週轉時間與服務時間的比值。