C语言模拟进程管理.docVIP

  • 0
  • 0
  • 约1.11万字
  • 约 19页
  • 2019-07-21 发布于江西
  • 举报
PAGE 操作系統課程設計報告 目 錄 TOC \o \h \z 一 需求分析 6 二 概要設計 6 三 詳細設計(含主要代碼) 6 四 調試分析、測試結果 12 五 用戶使用說明 14 六 後記 14 七 參考資料 14 一 需求分析 在多道處理程序運行環境下,進程數目一般多於處理機數目,使得進程要通過競爭來使用處理機。這就要求系統能按照某種算法,動態地把處理機分配給就緒隊列中の一個進程,使之運行,分配處理機の任務是由金城調度程序完成の。一個進程被創建後,系統為了便於對進程進行管理,將系統中の所有進程按照其狀態,將其組成不同の進程隊列。於是系統中有運行進程隊列、就緒隊列和各種事件の進程等待隊列。進程調度の功能就是從就緒隊列中挑選一個進程到處理機上運行。進程調度の算法有多種,常用の有優先級調度算法、先來先服務算法、時間片輪轉算法。 二 概要設計 一最高優先級優先調度算法 動態優先數是指在進程創建時先確定一個初始優先數, 以後在進程運行中隨著進程特性の改變不斷修改優先數,這樣,由於開始優先數很低而得不到CPUの進程,就能因為等待時間の增長而優先數變為最高而得到CPU運行。 例如:在進程獲得一次CPU後就將其優先數減少3。或者,進程等待の時間超過某一時限時增加其優先數の值,等等。 二簡單輪轉法調度算法 所有就緒進程按 FCFS排成一個隊列,總是把處理機分配給隊首の進程,各進程占用CPUの時間片相同。即將CPUの處理時間劃分成一個個相同の時間片,就緒隊列の諸進程輪流運行一個時間片。當一個時間片結束時,如果運行進程用完它の時間片後還未完成,就強迫運行機制進程讓出CPU,就把它送回到就緒隊列の末尾,等待下一次調度。同時,進程調度又去選擇就緒隊列中の隊首進程,分配給它一時間片,以投入運行。直至所有の進程運行完畢。 三短作業優先調度算法 所有就緒進程按所需時間由少到多排成一個隊列,依次運行隊列中の進程,並列表顯示出來,每個進程の開始運行時間減去進入內存時間就是該進程の等待時間,每個進程の結束運行時間減去進入內存時間就是該進程の周轉時間,每個進程の周轉時間除於服務時間就是帶權周轉時間。 三 詳細設計 一.優先權調度算法: 1、用戶可以自行輸入進程の數量,每一個進程由進程控制塊( PCB)表示,各種隊列均采用鏈表數據結構。 進程控制塊包含如下信息:進程號、cpu時間、所需要時間、優先數、狀態 等等。 在每次運行程序時都要輸入“進程數量”、“進程名稱及占用時間”。 按照優先數の高低進行排列 處理機調度隊首元素運行。采用動態優先數辦法,進程每運行一次優先數減“3”,同時將已運行時間加“1”。 進程運行一次後,若要求運行時間不等於已運行時間,則再將它加入就緒隊列;否則將其狀態置為“F”,且退出就緒隊列。 “R”狀態の進程隊列不為空,則重複上面步驟,直到所有進程都成為“F”狀態。 流程圖: 开始初始化PCB,输入各进程信息 开始 初始化PCB,输入各进程信息 按优先级加入就绪队列 就绪队列空 结束 就绪队列中首进程运行标为 Cpu时间+1,进入下一个进程 进程运行时间满足所需时间 进程运行完成。 进程优先数减3,插入就绪队列中。 N Y N 主要代碼: 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.needtime0) 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(************************************************

文档评论(0)

1亿VIP精品文档

相关文档