作業系統 實驗三 程序排程模擬程式

2022-05-26 04:06:10 字數 4201 閱讀 6340

實驗三程序排程模擬程式

專業:商業軟體工程一班   姓名:吳燦龍  學號:201406114151

1.1.實驗目的

用高階語言完成乙個程序排程程式,以加深對程序的概念及程序排程演算法的理解。

1.2.實驗要求

1.2.1例題:設計乙個有 n個程序併發執行的程序排程模擬程式。

程序排程演算法:採用最高優先順序優先的排程演算法(即把處理機分配給優先順序最高的程序)和先來先服務(若優先順序相同)演算法。

(1).  每個程序有乙個程序控制塊(pcb)表示。程序控制塊包含如下資訊:程序名、優先順序、到達時間、需要執行時間、已用cpu時間、程序狀態等等。

(2).  程序的優先順序及需要的執行時間可以事先人為地指定,程序的執行時間以時間片為單位進行計算。

(3).  每個程序的狀態可以是就緒 r(ready)、執行r(running)、或完成f(finished)三種狀態之一。

(4).  就緒程序獲得 cpu後都只能執行乙個時間片。用已占用cpu時間加1來表示。

(5).  如果執行乙個時間片後,程序的已占用 cpu時間已達到所需要的執行時間,則撤消該程序,如果執行乙個時間片後程序的已占用cpu時間還未達所需要的執行時間,也就是程序還需要繼續執行,此時應將程序的優先數減1(即降低一級),然後把它插入就緒佇列等待排程。

(6).  每進行一次排程程式都列印一次執行程序、就緒佇列中各個程序的 pcb,以便進行檢查。   

(7).  重複以上過程,直到所要程序都完成為止。

思考:作業排程與程序排程的不同?

1.2.2實驗題a:編寫並除錯乙個模擬的程序排程程式,採用「最高優先數優先」排程演算法對n(n不小於5)個程序進行排程。

「最高優先順序優先」排程演算法的基本思想是把cpu分配給就緒佇列中優先數最高的程序。

(1). 靜態優先數是在建立程序時確定的,並在整個程序執行期間不再改變。

(2). 動態優先數是指程序的優先數在建立程序時可以給定乙個初始值,並且可以按一定規則修改優先數。例如:在程序獲得一次cpu後就將其優先數減少1,並且程序等待的時間超過某一時限(2個時間片時間)時增加其優先數等。

(3). (**)程序的優先數及需要的執行時間可以事先人為地指定,(也可以由隨機數產生)。

(4). (**)在進行模擬排程過程可以建立(增加)程序,其到達時間為程序輸入的時間。

0.1.2.3實驗題b:編寫並除錯乙個模擬的程序排程程式,採用「基於時間片輪轉法」排程演算法對n(n不小於5)個程序進行排程。 「輪轉法」有簡單輪轉法、多級反饋佇列排程演算法。

(1). 簡單輪轉法的基本思想是:所有就緒程序按 fcfs排成乙個佇列,總是把處理機分配給隊首的程序,各程序占用cpu的時間片長度相同。如果執行程序用完它的時間片後還未完成,就把它送回到就緒佇列的末尾,把處理機重新分配給隊首的程序。直至所有的程序執行完畢。(此排程演算法是否有優先順序?)

(2). 多級反饋佇列排程演算法的基本思想是:

將就緒佇列分為n級(n=3~5),每個就緒佇列優先數不同並且分配給不同的時間片:佇列級別越高,優先數越低,時間片越長;級別越小,優先數越高,時間片越短。

系統從第一級排程,當第一級為空時,系統轉向第二級佇列,.....當處於執行態的程序用完乙個時間片,若未完成則放棄cpu,進入下一級佇列。

當程序第一次就緒時,進入第一級佇列。

(3). (**)考慮程序的阻塞狀態b(blocked)增加阻塞佇列。程序的是否阻塞和阻塞的時間由產生的「隨機數」確定(阻塞的頻率和時間長度要較為合理)。注意程序只有處於執行狀態才可能轉換成阻塞狀態,程序只有處於就緒狀態才可以轉換成執行狀態。

根據指定的實驗課題:a(1),a(2),b(1)和b(2)

完成設計、編碼和除錯工作,完成實驗報告。

注:帶**號的條目表示選做內容。

1.源程式名:壓縮包檔案(rarzip)中源程式名yy.c

可執行程式名:yy.exe

2.原理分析及流程圖

主要總體設計問題。

(包括儲存結構,主要演算法,關鍵函式的實現等)

儲存結構:

struct pcb *ready=null,*p;

3.主要程式段及其解釋:

實現主要功能的程式段,重要的是程式的注釋解釋。

源程式:

/*

name: procnque.c 程序排程模擬實驗原始碼 儲存結構鍊錶

description:

實現乙個有 n級佇列的多級反饋佇列排程演算法。

*/#include #include #include #include #include #define getpch(type) (type*)malloc(sizeof(type))

#define n 3

struct pcb *ready=null,*p;

typedef struct pcb pcb;

sort() /* 程序進行優先順序排列函式*/

else /* 程序比較優先順序,插入適當的位置中*/

else /* 插入程序優先數最低,則插入到隊尾*/

} if(insert==0) first->link=p;

} }

input() /* 建立程序控制塊函式*/

} void readfile()

//讀取命令

else

p->name[j]='\0';

//讀執行時間

k++;

j=0;

p->ntime=0;

m=0;

while(s[k]!='\0')

k=k-m;

while(s[k]!='\0')

}p->prio=n;

p->rtime=0;

p->status='r';

p->link=null;

sort(); /* 呼叫sort函式*/

i++;

} printf("讀取成功!\n");

printf("按任意鍵繼續......");

getch();

printf("\n\n"); }}

int space()

return(l);

} disp(pcb * pr) /*單個程序顯示函式*/

void printbyprio(int prio) }

check() /* 顯示所有程序狀態函式 */

*/} destroy() /*程序撤消函式(程序執行結束,撤消程序)*/

running() /* 執行函式。判斷是否完成,完成則撤銷,否則置就緒狀態並插入就緒佇列*/

if(p->rtime==p->ntime)

destroy(); /* 呼叫destroy函式*/

else

} void cteatpdisp()

/*顯示(執行過程中)增加新程序後,所有就緒佇列中的程序*/

void creatp()

}

main() /*主函式*/

else

len=space();

while((len!=0)&&(ready!=null))

printf("\n\n 程序已經完成.\n");

ch=getchar();

ch=getchar();

}

執行結果:

經過這次實驗,了解到程序排程的過程,以及程序排程的過程。

作業系統 實驗三 程序排程模擬程式

1.1.實驗目的 用高階語言完成乙個程序排程程式,以加深對程序的概念及程序排程演算法的理解。1.2.實驗要求 1.2.1例題 設計乙個有 n個程序併發執行的程序排程模擬程式。程序排程演算法 採用最高優先順序優先的排程演算法 即把處理機分配給優先順序最高的程序 和先來先服務 若優先順序相同 演算法。1...

作業系統 實驗三 程序排程模擬程式

實驗三程序排程模擬程式 專業 商軟二班 姓名 江志彬 學號 201406114225 1.1.實驗目的 用高階語言完成乙個程序排程程式,以加深對程序的概念及程序排程演算法的理解。1.2.實驗要求 1.2.1例題 設計乙個有 n個程序併發執行的程序排程模擬程式。程序排程演算法 採用最高優先順序優先的排...

實驗三 程序排程模擬程式 作業系統

實驗三 程序排程模擬程式 作業系統 一.目的和要求 1.1.實驗目的 用高階語言完成乙個程序排程程式,以加深對程序的概念及程序排程演算法的理解。1.2.實驗要求 1.2.1例題 設計乙個有 n個程序併發執行的程序排程模擬程式。程序排程演算法 採用最高優先順序優先的排程演算法 即把處理機分配給優先順序...