1. 程式人生 > >萬樹IT:操作系統——進程調度之短進程優先

萬樹IT:操作系統——進程調度之短進程優先

name truct short alt 一個 eve 模式 指針 爭奪

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;

萬樹IT:操作系統——進程調度之短進程優先