程序排程之優先順序演算法分析 C 實現

2021-10-25 08:56:53 字數 2407 閱讀 7621

1.

優先權排程演算法

為了照顧緊迫型程序獲得優先處理,引入了優先權排程演算法。它從就緒佇列中選擇乙個優先權最高的程序,讓其獲得處理器並執行。這時,又進一步把該演算法分為兩種方式:

1)非搶占式優先權排程演算法 在這種方式下,系統一旦把處理器分配給就緒佇列中優先權最高的程序後,該程序就占有處理器一直執行下去,直到該程序完成或因發生事件而阻塞,才退出處理器。系統這時才能將處理器分配給另乙個優先權高的程序。這種方式實際上是每次將處理器分配給當前就緒佇列中優先權最高的程序。它常用於批處理系統中,也可用於某些對時間要求不嚴格的實時系統中。

2)搶占式優先權排程演算法 在這種方式下,系統同樣把處理器分配給當前就緒佇列中優先權最高的程序,使之執行。但在其執行期間,仍然會不斷有新的就緒程序進入就緒佇列,如果出現某個程序,其優先權比當前正在執行的程序的優先權還高時,程序排程程式就會立即暫停當前程序的執行,而將 處理器收回,並將處理器分配給新出現的優先權更高的程序,讓其執行。這種方式實際上永 遠都是系統中優先權最高的程序占用處理器執行。因此,它能更好地滿足緊迫程序的要求, 故常用於要求比較嚴格的實時系統中,以及對效能要求較高的批處理和分時系統中。

對於優先權排程演算法,其關鍵在於是採用靜態優先權,還是動態優先權,以及如何確定 程序的優先權。

1) 靜態優先權 靜態優先權是在建立程序時確定的,並且規定它在程序的整個執行期間保持不變。一般來說,優先權是利用某個範圍內的乙個整數來表示的,如 0~7,或 0~255 中的某個整數, 所以又稱為優先數。在使用時,有的系統用

「0」表示最高優先權,數值越大優先權越小,

而有的系統則恰恰相反。

2) 動態優先權 動態優先權要配合搶占排程方式使用,它是指在建立程序時所賦予的優先權,可以隨著程序的推進而發生改變,以便獲得更好的排程效能。在就緒佇列中等待排程的程序,可以隨 著其等待時間的增加,其優先權也以某個速率增加。因此,對於優先權初值很低的程序,在 等待足夠長的時間後,其優先權也可能公升為最高,從而獲得排程,占用處理器並執行。同樣 規定正在執行的程序,其優先權將隨著執行時間的增加而逐漸降低,使其優先權可能不再是 最高,從而暫停其執行,將處理器**並分配給其他優先權更高的程序。這種方式能防止一 個長程序長期占用處理器的現象。

程式示例:

1. 本程式用兩種演算法對五個程序進行排程,每個程序可有三種狀態,並假設初始狀態為就 緒狀態。

2. 為了便於處理,程式中的某程序執行時間以時間片為單位計算。各程序的優先數或輪轉 時間數以及程序需執行的時間片數的初始值均由使用者給定。

3. 在優先數演算法中,優先數可以先取值為 50,程序每執行一次,優先數減

3,cpu

時間片數加

1,程序還需要的時間片數減

1。

#include#include #include#include#includeusing namespace std;

#include#define p_num 5 //程序數

#define p_time 50 //優先數預先取值為50

enum state;//定義程序狀態

struct pcb; //定義程序 pcb

pcb * get_process()

else

i++;

} //while

return p;

} //輸入模擬測試的程序名和執行所需時間,初始設定可模擬 5 個程序的排程

void display(pcb *p)

} //顯示模擬結果,包含程序名、cpu 時間、執行所需時間以及優先順序

int process_finish(pcb *q)

return bl;

} //結束程序,即將佇列中各程序的所需時間設定為 0

void cpuexe(pcb *q)

} //迴圈選擇優先順序最高的程序

if(tp < q->priority && q->process != finish)

q=q->next;

}if(t->needtime!=0)

} //選擇某一程序,給它分配 cpu

//計算程序優先順序

void priority_cal(){

pcb * p;

system("cls");

//clrscr();

p=get_process();//獲取就緒程序佇列首位址

int cpu=0;

system("cls");

//clrscr();

while(!process_finish(p)){

cpu++;

cout<

程式執行流程如下:

優先順序排程演算法

include include includetypedef struct node pcb pcb ready null,run null,finish null 定義三個佇列,就緒佇列,執行佇列和完成佇列 int num void getfirst 從就緒佇列取得第乙個節點 void outpu...

程序排程之優先順序反轉問題

實時作業系統 real time operating system,rtos 是說,任務切換和中斷響應的時間必須保證在多少時間內 如5us內 完成。分為硬實時和軟實作業系統 硬實時是說必須在多少時間內完成切換 如vxworks,我們使用的ecos也是硬實時的 軟實時則是絕大多數情況可以在多少時間內完...

十五 優先順序排程演算法

演算法 將處理機分配給就緒佇列中優先順序最高的程序 優先順序 靜態優先順序 在程序建立時確立,確定後執行期間保持不變。確立依據有 程序的型別 程序對資源的需求 使用者申請的優先順序 優點 簡單 缺點 不能動態反映程序特點,系統排程效能差 動態優先順序 程序在開始建立時,根據某種原則確定乙個優先順序後...