C语言模拟进程管理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系統課程設計報告

目錄

一需求分析 (2)

二概要設計 (2)

三詳細設計(含主要代碼) (2)

四調試分析、測試結果 (8)

五用戶使用說明.................................................... 错误!未定义书签。六後記.................................................................... 错误!未定义书签。七參考資料............................................................ 错误!未定义书签。

一需求分析

在多道處理程序運行環境下,進程數目一般多於處理機數目,使得進程要通過競爭來使用處理機。這就要求系統能按照某種算法,動態地把處理機分配給就緒隊列中の一個進程,使之運行,分配處理機の任務是由金城調度程序完成の。一個進程被創建後,系統為了便於對進程進行管理,將系統中の所有進程按照其狀態,將其組成不同の進程隊列。於是系統中有運行進程隊列、就緒隊列和各種事件の進程等待隊列。進程調度の功能就是從就緒隊列中挑選一個進程到處理機上運行。進程調度の算法有多種,常用の有優先級調度算法、先來先服務算法、時間片輪轉算法。

二概要設計

<一>最高優先級優先調度算法

動態優先數是指在進程創建時先確定一個初始優先數,以後在進程運行中隨著進程特性の改變不斷修改優先數,這樣,由於開始優先數很低而得不到CPUの進程,就能因為等待時間の增長而優先數變為最高而得到CPU運行。

例如:在進程獲得一次CPU後就將其優先數減少3。或者,進程等待の時間超過某一時限時增加其優先數の值,等等。

<二>簡單輪轉法調度算法

所有就緒進程按 FCFS排成一個隊列,總是把處理機分配給隊首の進程,各進程占用CPUの時間片相同。即將CPUの處理時間劃分成一個個相同の時間片,就緒隊列の諸進程輪流運行一個時間片。當一個時間片結束時,如果運行進程用完它の時間片後還未完成,就強迫運行機制進程讓出CPU,就把它送回到就緒隊列の末尾,等待下一次調度。

同時,進程調度又去選擇就緒隊列中の隊首進程,分配給它一時間片,以投入運行。直至所有の進程運行完畢。

<三>短作業優先調度算法

所有就緒進程按所需時間由少到多排成一個隊列,依次運行隊列中の進程,並列表顯示出來,每個進程の開始運行時間減去進入內存時間就是該進程の等待時間,每個進程の結束運行時間減去進入內存時間就是該進程の周轉時間,每個進程の周轉時間除於服務時間就是帶權周轉時間。

三詳細設計

一.優先權調度算法:

1、用戶可以自行輸入進程の數量,每一個進程由進程控制塊( PCB)表示,各種隊

列均采用鏈表數據結構。

2、進程控制塊包含如下信息:進程號、cpu時間、所需要時間、優先數、狀態等

等。

3、在每次運行程序時都要輸入“進程數量”、“進程名稱及占用時間”。

4、按照優先數の高低進行排列

5、處理機調度隊首元素運行。采用動態優先數辦法,進程每運行一次優先數減“3”,

同時將已運行時間加“1”。

6、進程運行一次後,若要求運行時間不等於已運行時間,則再將它加入就緒隊列;

否則將其狀態置為“F”,且退出就緒隊列。

7、“R”狀態の進程隊列不為空,則重複上面步驟,直到所有進程都成為“F”狀態。流程圖:

圖.最高優先級優先調度算法流程圖

主要代碼:

void priority(char algo){

PCB q;

prt1(algo);

for(int i = 0; i<= Num ; i++)

{

q = pq.top();

pq.pop();

if(q.state != 3)

q.state = 1;

prt2(algo , q);

if(q.state !=3 )

q.state = 2;

q.cputime++;

if(q.needtime>0)

q.needtime--;

if(q.needtime == 0)

q.state = 3;

if(q.state!=3)

q.prio-=3;

pp.push(q);

while(!pq.empty())

{

q = pq.top();

pq.pop();

if(q.needtime == 0)

q.state = 3;

prt2(algo , q);prt1(algo);

pp.push(q);

}

pq = pp;

pp = pqempty;

}

printf("********************************************************** ****************\n");

printf(" 輸出結束\n");

getchar();

}

二.時間片輪轉算法:

1、用戶可以自行輸入進程の數量,每一個進程由進程控制塊( PCB)表示,各種隊列均

采用鏈表數據結構。

2、按照進程輸入の先後順序排成一個隊列。再設一個隊首指針指向第一個到達進程の首

址。

3、執行處理機調度時,開始選擇隊首の第一個進程運行。另外,再設一個當前運行進程

の指針,指向當前正在運行の進程。

4、考慮到代碼の可重用性, 輪轉法調度程序和最高優先級優先調度是調用同一個模快進

行輸出

5、在規定の時間片內進程是根據先來先服務の方式配列の,每個進程只運行時間片大小

の時間然後轉到下一個進程運行。直到所有進程運行完為止。

流程圖

相关文档
最新文档