一、實驗目的:
用高階語言編寫和除錯乙個程序排程程式,以加深對程序的概念及程序排程演算法的理解。
二、實驗要求:
用c++語言實驗對n個程序採用非搶占式的動態優先權優先演算法的程序排程
三、實驗內容:
(1) 設計乙個有n個程序併發的程序排程程式。程序排程演算法:採用最高優先數優先的排程演算法(即把處理機分配給優先數最高的程序)演算法。
(2) 每個程序有乙個程序控制塊(pcb)表示。pcb用結構來描述,包括以下字段:
l 程序標識id、
l 優先數,為初始設定的模擬條件
l 到達時間,為初始設定的模擬條件
l 需要執行時間,為初始設定的模擬條件
l 已用cpu時間,為初始設定的模擬條件
l 程序阻塞時間startblock(表示程序在執行startblock個時間片後,程序將進入阻塞狀態),為初始設定的模擬條件
l 程序被阻塞的時間blocktime(表示程序等待blocktime個時間片後,將轉換成就緒狀態),為初始設定的模擬條件,模擬執行i/o操作需要的時間
l 程序狀態state,就緒w(wait)、執行r(run)、或完成f(finish)三種狀態
l 佇列指標next等等。
(3) 優先數改變的規則
程序在就緒佇列中呆乙個時間片,優先數增加1;
程序每執行乙個時間片,優先數減3;
(4) 執行過程描述
首先按照初始化輸入,按照各程序優先順序高低排列就緒佇列中程序順序,優先順序最高的程序最先獲得cpu控制權執行。如果執行乙個時間片後,程序的已占用cpu時間已達到所需要的執行時間,則撤消該程序,如果執行乙個時間片後程序的已占用cpu時間還未達所需要的執行時間,此時應將程序的優先數減3(即降低一級),如果到了程序需被阻塞的時間點,阻塞程序,然後把它插入阻塞佇列,等待經過blocktime後,再喚醒程序,把它按照優先順序高低,插入就緒佇列相應位置等待cpu。
每進行一次排程程式都列印一次執行程序、就緒佇列、以及各個程序的pcb,以便進行檢查。
重複以上過程,直到所要程序都完成為止。
備註:程序的優先數及需要的執行時間可以事先人為地指定(也可以由隨機數產生)。
程序的到達時間為程序輸入的時間或順序。
參考**:
#include
#include
#include
#define getpch(type) (type*)malloc(sizeof(type))
#define null 0
#define time 2//時間片長度
typedef struct pcbpcb;
pcb *ready=null,*pinsert=null,*pfend=null,*p=null;//就緒佇列,程序插入位置的變//量
int geti() //使使用者僅能輸入整數
char ch;
int i = 0;
fflush(stdin);
ch = getchar();
while(ch == '\n')else }
void insert()//插入程序
if(!ready )else if(ready ->queue == 1)else elseelse if(ready ->etime == 0){
int time = 2;
(ready -> queue)++;
for(int i = 2; i != ready->queue; ++i)
time *= 2;
ready->etime = time;
ready -> state='w';
sort();/*呼叫sort函式*/
void main()
char ch;
input();
while(ready != null) {
printf("\nthe execute name:%s\n",ready ->name);
ready ->state = 'r';
check();
running();
printf("\n按i鍵新增新程序....按其他任意鍵繼續執行...");
fflush(stdin);
ch = getchar();
if (ch == 'i'|| ch=='i')
addnew();
printf("\n\n 程序已經完成\n");
getchar();
處理機排程
如果沒有處理機排程,則意味著必須等待當前程序執行完畢後下一程序才能執行,而程序常需等待外設的輸入,i o的速度相比處理機是非常慢的,因此這會對處理機資源造成嚴重浪費。引入排程後,可在執行程序等待輸入時把處理機排程給其他程序,從而提高處理機的利用率。作業排程 高階 在外存的作業中挑選乙個或多個作業,給...
處理機排程
多道程式系統中,程序的數量往往多於處理機的個數,程序爭用處理機的情況在所難免。處理機排程是對處理機進行分配,即從就緒佇列中按照一定的演算法選擇乙個程序並將處理機分配給它執行,以實現程序併發執行。乙個作業從提交到完成,經歷以下 排程 作業排程 從外存中選擇乙個或多個作業,分配記憶體 輸入 輸出等必要資...
處理機排程
又稱高階排程,其主要任務是按一定的原則從外存上處於後備狀態的作業中挑選乙個或多個作業,給它分配記憶體 輸入 輸出裝置等必要的資源,並建立相應的程序,以使它獲得競爭處理機的權利。記憶體與輔存之間的排程。每個作業只調入一次 調出一次。提高記憶體利用率和系統吞吐量。使暫時不能執行的程序,調至外存等待,把此...