(1)加深對做業調度算法的理解;算法
(2)進行程序設計的訓練。數據結構
用高級語言編寫一個或多個做業調度的模擬程序。oop
單道批處理系統的做業調度程序。做業一投入運行,它就佔有計算機的一切資源直到做業完成爲止,所以調度做業時沒必要考慮它所須要的資源是否獲得知足,它所運行的時間等因素。this
做業調度算法:spa
1)採用先來先服務(FCFS)調度算法,即按做業到達的前後次序進行調度。老是首先調度在系統中等待時間最長的做業。操作系統
2)短做業優先 (SJF) 調度算法,優先調度要求運行時間最短的做業。設計
3)響應比高者優先(HRRN)調度算法,爲每一個做業設置一個優先權(響應比),調度以前先計算各做業的優先權,優先數高者優先調度。RP (響應比)= 做業週轉時間 / 做業運行時間=1+做業等待時間/做業運行時間每一個做業由一個做業控制塊JCB表示,JCB能夠包含如下信息:做業名、提交(到達)時間、所需的運行時間、所需的資源、做業狀態、鏈指針等等。做業的狀態能夠是等待W(Wait)、運行R(Run)和完成F(Finish)三種之一。每一個做業的最初狀態都是等待W。指針
1.容許用戶指定做業的個數(2-24),默認值爲5。code
2.容許用戶選擇輸入每一個做業的到達時間和所需運行時間。blog
3.(**)從文件中讀入以上數據。
4.(**)也容許用戶選擇經過僞隨機數指定每一個做業的到達時間(0-30)和所需運行時間(1-8)。
(1)採用先來先服務(FCFS)調度算法
#include <stdio.h> #include <stdlib.h> #define N 24 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char *argv[]) { int i,n; int arrtime[N],reqtime[N],starttime[N],endtime[N],zztime[N]; float zzxs[N]; char name[N]; printf("\n Please enter the number of operations:"); scanf("%d",&n); for(i=0;i<n;i++){ printf("\n name:"); scanf("%s",&name[i]); printf("\n arrtime:"); scanf("%d",&arrtime[i]); printf("\n reqtime:"); scanf("%d",&reqtime[i]); if(i==0){ starttime[i]=arrtime[i]; } endtime[i]=starttime[i]+reqtime[i]; zztime[i]=endtime[i]-arrtime[i]; zzxs[i]=zztime[i]*1.0/reqtime[i]; starttime[i+1]=endtime[i]; } printf("\n\tname arrtime reqtime startime endtime zztime zzxs "); for(i=0;i<n;i++){ printf("\n\t%c\t%d\t%d\t %d\t %d\t %d\t %.2f",name[i],arrtime[i],reqtime[i],starttime[i],endtime[i],zztime[i],zzxs[i]); } return 0; }
#include <stdio.h> #include <stdlib.h> #define N 24 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ // 短做業優先 (SJF) 調度算法,優先調度要求運行時間最短的做業。 int main(int argc, char *argv[]) { int i,j,n,temp; int arrtime[N],reqtime[N],starttime[N],endtime[N],zztime[N]; float zzxs[N]; char name[N],ctemp; printf("\n Please enter the number of operations:"); scanf("%d",&n); for(i=0;i<n;i++){ printf("\n name:"); scanf("%s",&name[i]); printf("\n arrtime:"); scanf("%d",&arrtime[i]); printf("\n reqtime:"); scanf("%d",&reqtime[i]); } for(i=0;i<n;i++){ for(j=1;j<n-1-i;j++){ if(reqtime[j] > reqtime[j+1]){ temp = reqtime[j+1]; reqtime[j+1] = reqtime[j]; reqtime[j] = temp; ctemp=name[j+1]; name[j+1]=name[j]; name[j]=ctemp; temp=arrtime[j+1]; arrtime[j+1]=arrtime[j]; arrtime[j]=temp; } else if(reqtime[j]==reqtime[j+1]&&arrtime[j]>arrtime[j+1]){ temp = reqtime[j+1]; reqtime[j+1] = reqtime[j]; reqtime[j] = temp; ctemp=name[j+1]; name[j+1]=name[j]; name[j]=ctemp; temp=arrtime[j+1]; arrtime[j+1]=arrtime[j]; arrtime[j]=temp; } } } for(i=0;i<n;i++){ if(i==0){ starttime[i]=arrtime[i]; } endtime[i]=starttime[i]+reqtime[i]; zztime[i]=endtime[i]-arrtime[i]; zzxs[i]=zztime[i]*1.0/reqtime[i]; starttime[i+1]=endtime[i]; } printf("\n\tname arrtime reqtime startime endtime zztime zzxs "); for(i=0;i<n;i++){ printf("\n\t%c\t%d\t%d\t %d\t %d\t %d\t %.2f",name[i],arrtime[i],reqtime[i],starttime[i],endtime[i],zztime[i],zzxs[i]); } return 0; }
運行結果:
#include <stdio.h> #include <stdlib.h> #define N 24 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ //HRRN爲每一個做業設置一個優先權(響應比),調度以前先計算各做業的優先權 int main(int argc, char *argv[]) { int i,j,n,temp,num; int arrtime[N],reqtime[N],starttime[N],endtime[N],zztime[N]; float zzxs[N],hrrn[N],ftemp; char name[N],ctemp; printf("\n Please enter the number of operations:"); scanf("%d",&n); num=1; for(i=0;i<n;i++){ printf("\n name:"); scanf("%s",&name[i]); printf("\n arrtime:"); scanf("%d",&arrtime[i]); printf("\n reqtime:"); scanf("%d",&reqtime[i]); } for(i=0;i<n;i++){ if(i==0){ starttime[i]=arrtime[i]; } endtime[i]=starttime[i]+reqtime[i]; zztime[i]=endtime[i]-arrtime[i]; zzxs[i]=zztime[i]*1.0/reqtime[i]; starttime[i+1]=endtime[i]; for(j=num;j<n;j++){ hrrn[j]=(endtime[i]-arrtime[j])/reqtime[j]*1.0+1; //printf("%f ",&hrrn[i]); } for(j=num;j<n;j++){ if(hrrn[j]<hrrn[j+1]){ ftemp=hrrn[j+1]; hrrn[j+1]=hrrn[j]; hrrn[j]=ftemp; temp = reqtime[j+1]; reqtime[j+1] = reqtime[j]; reqtime[j] = temp; ctemp=name[j+1]; name[j+1]=name[j]; name[j]=ctemp; temp=arrtime[j+1]; arrtime[j+1]=arrtime[j]; arrtime[j]=temp; } } num++; } printf("\n\tname arrtime reqtime startime endtime zztime zzxs "); for(i=0;i<n;i++){ printf("\n\t%c\t%d\t%d\t %d\t %d\t %d\t %.2f",name[i],arrtime[i],reqtime[i],starttime[i],endtime[i],zztime[i],zzxs[i]); } return 0; }
實驗總結:
此次實驗作得比較倉促,最後兩節課纔開始編寫程序。因此,此次程序也沒用到數據結構來寫。總的來講,要對操做系統這門課程更加上心,沒事在宿舍多編寫程序。