先來先服務排程演算法:系統按照作業到達的先後次序來進行排程,或者說它優先考慮在系統中等待時間最長的作業,而不管該作業所需執行時間的長短,從後備作業佇列中選擇幾個最先進入該佇列的作業,將它們調入記憶體,為它們分配資源和建立程序。然後把它放入就緒佇列。
當程序排程中才有fcfs演算法時,每次排程是從就緒的程序佇列中選擇乙個最先進入該佇列的程序,為之分配處理機,使之投入執行。該程序一直執行到完成或發生某事件而阻塞後,程序排程程式才將處理機分配給其他程序。
短作業優先排程演算法:sjf演算法是以作業的長短來計算優先順序,作業越短,其優先順序越高。作業的長短是以作業所要求的執行時間來衡量的。sjf演算法可以分別用於作業排程和程序排程。在把短作業優先排程演算法用於作業排程時,它將從外存的作業後備佇列中選擇若干個估計執行時間最短的作業,優先將它們調入記憶體執行。
#include#include#include #define n 10 //允許最大程序個數
#define m 100 //程序名長度
int n; //程序個數
char name[n][m]; //程序名
int arival[n]=; //到達時間
int go[n]=; //執行時間
int start[n]=; //開始時間
int end[n]=; //結束時間
int timer[n]=; //周轉時間
float dtimer[n]=; //帶權周轉時間
int check[n]=; //判斷作業是否完成,完成值為1
/*輸入函式*/
void input()
} check[i]=1;
return i;
}/*先來先服務排程演算法*/
void fcfs()
} check[i]=1;
return i;
}/*短作業優先排程演算法*/
void sjf(){
int k=0; //每次選出即將服務的程序
int l=0; //本次服務的程序
int atimer=0; //周轉時間之和
float timer=0; //帶權周轉時間之和
int localtime=0; //當前時間
//每次開始之前check陣列要全部置0
memset(check,0,sizeof(check));
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為測試方便,採用輸入重定向的方法,每次讀取當前程式檔案目錄下的in.txt檔案,若檔案不存在則手動輸入。
in.txt檔案內容如下:
內容格式依次為:作業名、到達時間、服務時間
測試結果如下:
若檔案不存在,則手動輸入,結果如下:
程序排程 先來先服務和短程序優先排程演算法
系統中有5個程序p1,p2,p3,p4,p5如下。規定程序的優先數越小優先順序越高。試描述在採用先來先服務排程 短程序優先排程演算法時,各個程序的執行過程,並計算這5個程序的平均周轉時間。假設忽略程序的排程時間。答 先來先服務排程演算法執行過程如下 按到達先後p1,p2,p3,p4,p5依次執行 程...
7 1 作業排程演算法 先來先服務
輸入n n 0 個作業,輸入每個作業的名字,到達時間,服務時間,按照先來先服務演算法,計算每個作業的完成時間,周轉時間,帶權周轉時間 保留2位小數 輸入格式 第一行輸入作業數目,第二行輸入作業的名字,第三行輸入到達時間,第四行輸入服務時間。輸出格式 按照到達時間從小到大排序,第一行輸出作業的名字,第...
作業系統短作業優先排程演算法
短作業優先排程演算法 sjf 是以作業的長度來計算優先順序,作業越短,優先度越高。作業的長短是作業的執行時間來衡量的。源程式c 編寫,由老師提供的參考 網上查詢 同學之間討論之後完善,非誠勿擾!includeusing namespace std struct node job 10 按服務時間排序...