C语言模拟进程管理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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、在規定の時間片內進程是根據先來先服務の方式配列の,每個進程只運行時間片大小
の時間然後轉到下一個進程運行。直到所有進程運行完為止。
流程圖