先來先服務和短作業優先排程演算法

2021-08-21 01:29:31 字數 1952 閱讀 9310

先來先服務排程演算法:系統按照作業到達的先後次序來進行排程,或者說它優先考慮在系統中等待時間最長的作業,而不管該作業所需執行時間的長短,從後備作業佇列中選擇幾個最先進入該佇列的作業,將它們調入記憶體,為它們分配資源和建立程序。然後把它放入就緒佇列。

當程序排程中才有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 按服務時間排序...