1. 程式人生 > >萬樹IT:作業系統——程序排程之短程序優先

萬樹IT:作業系統——程序排程之短程序優先

1、什麼是程序排程  無論是在批處理系統還是分時系統中,使用者程序數一般都多於處理機數、這將導致它們互相爭奪處理機。另外,系統程序也同樣需要使用處理機。這就要求程序排程程式按一定的策略,動態地把處理機分配給處於就緒佇列中的某一個程序,以使之執行。   

 

       2、處理機排程分類

高階、中級和低階排程作業從提交開始直到完成,往往要經歷下述三級排程:

高階排程:(High-Level Scheduling)又稱為作業排程,它決定把後備程序調入記憶體執行;

低階排程:(Low-Level Scheduling)又稱為程序排程,它決定把就緒佇列的某程序獲得CPU;

中級排程:(Intermediate-Level Scheduling)又稱為在虛擬儲存器中引入,在內、外存對換區進行程序對換。

3、短程序優先最短CPU執行期優先排程演算法

 (SCBF--Shortest CPU Burst First)

該演算法從就緒佇列中選出下一個“CPU執行期最短”的程序,為之分配處理機。

例如,在就緒佇列中有四個程序P1、P2、P3和P4,它們的下一個執行

期分別是16、12、4和3個單位時間,執行情況如下圖:

P1、P2、P3和P4的週轉時間分別為35、19、7、3,平均週轉時間為16。

該演算法雖可獲得較好的排程效能,但難以準確地知道下一個CPU執行期,而只能根據每一個程序的執行歷史來預測。

 

    4、C語言模式實現

  1》、常量宣告和資料結構定義

#include "stdio.h"

#include <stdlib.h>

#include "string.h"

#define NULL 0

 

typedef struct pcb

{

    char name[10]; //程序名稱

    int ArrivalTime; //到達時間 

    int StartTime;   //開始執行時間

    int FinishTime;  //結束執行時間

    int WholeTime;   //執行所需時間

 

    struct pcb *link; //下一個指標 

}pcb; 

int N;  //執行的程序數量 

void input();

pcb *ready=NULL,*p=NULL,*finish = NULL;  

//ready 是初始時的狀態,finish 是結束時狀態 

int M;