操作系統(tǒng)-課程設(shè)計(jì)報(bào)告-處理機(jī)調(diào)度程序_第1頁
操作系統(tǒng)-課程設(shè)計(jì)報(bào)告-處理機(jī)調(diào)度程序_第2頁
操作系統(tǒng)-課程設(shè)計(jì)報(bào)告-處理機(jī)調(diào)度程序_第3頁
操作系統(tǒng)-課程設(shè)計(jì)報(bào)告-處理機(jī)調(diào)度程序_第4頁
操作系統(tǒng)-課程設(shè)計(jì)報(bào)告-處理機(jī)調(diào)度程序_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、操作系統(tǒng)課程設(shè)計(jì)報(bào)告學(xué)校:廣州大學(xué)學(xué)院:計(jì)算機(jī)科學(xué)與教育軟件學(xué)院班級(jí):計(jì)算機(jī)127 班課題:處理機(jī)調(diào)度程序任課老師:陶文正、陳文彬姓名:黃俊鵬學(xué)號(hào):1200002111班內(nèi)序號(hào): 27成績:日期: 2015 年 1 月 6 日、設(shè)計(jì)目的在多道程序和多任務(wù)系統(tǒng)中, 系統(tǒng)內(nèi)同時(shí)處于就緒狀態(tài)的進(jìn)程可能有若干個(gè)。 也就是說能運(yùn)行的進(jìn)程數(shù)大于處理機(jī)個(gè)數(shù)。 為了使系統(tǒng)中的進(jìn)程能有條不紊地工作, 必須選用某種調(diào)度策略, 選擇一進(jìn)程占用處理機(jī)。 要求學(xué)生設(shè)計(jì)一個(gè)模擬處理機(jī)調(diào)度算法,以鞏固和加深處理機(jī)調(diào)度的概念。、設(shè)計(jì)要求1)進(jìn)程調(diào)度算法包括:時(shí)間片輪轉(zhuǎn)法,短作業(yè)優(yōu)先算法,動(dòng)態(tài)優(yōu)先級(jí)算法。2)可選擇進(jìn)程數(shù)量3)

2、本程序包括三種算法,用C語言實(shí)現(xiàn),執(zhí)行時(shí)在主界面選擇算法(可用函數(shù)實(shí)現(xiàn))(進(jìn)程數(shù),運(yùn)行時(shí)間,優(yōu)先數(shù)由隨機(jī)函數(shù)產(chǎn)生)執(zhí)行,顯示結(jié)果。三、設(shè)計(jì)思路及算法思想1. 界面菜單選項(xiàng)一級(jí)菜單提供 2 個(gè)選項(xiàng): 自動(dòng)生成進(jìn)程數(shù)量 手動(dòng)輸入所需進(jìn)程數(shù)量一級(jí)菜單選擇完畢后進(jìn)入二級(jí)菜單: 重新生成進(jìn)程 時(shí)間片輪轉(zhuǎn)法 短作業(yè)優(yōu)先算法 動(dòng)態(tài)優(yōu)先級(jí)算法 退出程序2. 調(diào)度算法typedef st ruct char name; mt priority;“遇程名 "優(yōu)先出 “達(dá)彳:時(shí)HimtrurinirtgTir e;intarriveTime;/智速時(shí)置1intbeginTire;“開嵯時(shí)蚓intfInis

3、hTime;/舞成時(shí)用intcyclingTlnej/祖轉(zhuǎn)時(shí)期double weigthCyclingTime: 可見班如:回.nt hadRunTinie;int finish:>PCB;/已建運(yùn)行時(shí)間/是苦完成程序所用PCB結(jié)構(gòu)體需要用到的進(jìn)程結(jié)構(gòu)體如上圖所示1)時(shí)間片輪轉(zhuǎn)法主要是設(shè)置一個(gè)當(dāng)前時(shí)間變量,curTime和時(shí)間片roundTime。遍歷進(jìn)程組的時(shí)候,每運(yùn)行一個(gè)進(jìn)程,就把 curTime += roundTime。進(jìn)程已運(yùn)行時(shí)間加 roundTime2)短作業(yè)優(yōu)先算法遍歷進(jìn)程組,找到未運(yùn)行完成并且運(yùn)行時(shí)間最短的進(jìn)程,讓它一次運(yùn)行完成,如此往復(fù),直到所有進(jìn)程都運(yùn)行完成為止。3

4、)動(dòng)態(tài)優(yōu)先級(jí)算法做法跟短作業(yè)優(yōu)先算法類似,此處主要是比較進(jìn)程的優(yōu)先數(shù),優(yōu)先級(jí)高者,先執(zhí)行。直到全部執(zhí)行完畢。當(dāng)一個(gè)進(jìn)程運(yùn)行完畢后, 適當(dāng)增減其余進(jìn)程的優(yōu)先數(shù), 以達(dá)到動(dòng)態(tài)調(diào)成優(yōu) 先級(jí)的效果。3. 程序流程圖四、運(yùn)行截圖1)啟動(dòng)后輸入5,生成5個(gè)進(jìn)程當(dāng)時(shí)歙認(rèn)進(jìn)理曲氫由2-2。S愉人白匕西機(jī)生成進(jìn)稅tt昌2,儲(chǔ)入279范的內(nèi)或宇回軍,可生成指定數(shù)目道相»»»52)輸入1,選擇時(shí)間片輪轉(zhuǎn)法。自動(dòng)輸出結(jié)果,分別是時(shí)間片為1和4的結(jié)果hmmh MMSMiMg 笳燈酎間拜始時(shí)間也書名副達(dá)時(shí)間鼻度時(shí)間平均網(wǎng)轉(zhuǎn)ft間'21.28二,均定如Q科克間3即隊(duì)重廝受成迸程I 1

5、,時(shí)間片輪莽詼I,施作業(yè)優(yōu)先算定I主動(dòng)盍優(yōu)先稅算磕I 5退出 »»»1周轉(zhuǎn)國向澳權(quán)脫軸時(shí)間 優(yōu)先微|4,BB34.00a2,9654.BB74,173城程各乳達(dá)時(shí)間運(yùn)行司閘開始時(shí)間完成時(shí)同周轉(zhuǎn)時(shí)間帝權(quán)需軸對(duì)同憂無量A&4Q44LJB3Ba3477Z.333C91«72929Z.905Da61125354.177E061527274.503平均周轉(zhuǎn)時(shí)間 18.40平均帶權(quán)比轉(zhuǎn)時(shí)間,,日3)輸入2,選擇短作業(yè)優(yōu)先算法 WBW««jjlij JlJf»明重新主成進(jìn)線| 工,時(shí)間舟輪鑄裱| Z,短作業(yè)優(yōu)先算法| 3 .牛奇就

6、先簟其法|小退出 >>»»2|皓程名到達(dá)時(shí)間我行時(shí)間開始療間完成時(shí)間周轉(zhuǎn)國閭幫根K第時(shí)間優(yōu)先轂1 Aaa3771.753Be39331.99»Ca10129292.9B5D06131。193.1771 Ea6713132.X73平均周轉(zhuǎn)時(shí)間:14.2。平均辭權(quán)底轉(zhuǎn)時(shí)間:2.”4)輸入3,選擇動(dòng)態(tài)優(yōu)先級(jí)算法HiM-BB-VHr WMVM W-Jijj 1H*鬧出九市薪生成迸理| 1 時(shí)間月輪轉(zhuǎn)法|,韓作曲優(yōu)晶算笳1 3幣蒼優(yōu)先統(tǒng)背就| 5電程名到達(dá)時(shí)間K燈時(shí)間開酋時(shí)間完成時(shí)回周韓時(shí)間帚機(jī)比轉(zhuǎn)時(shí)間1 A84913133.25Be3e33i.eeC&

7、1口13S373;.3fl口e62329294.831 E0平均市帛田閘;15.40639平均帶權(quán)慮轉(zhuǎn)時(shí)周行有日9L.50 "動(dòng)毒優(yōu)先級(jí)W法3 9 5 735)輸入0,重新生成進(jìn)程,再輸入3,生成3個(gè)進(jìn)程,選擇2.短作業(yè)優(yōu)先算法li-BM隊(duì)重用笠成進(jìn)程I i.時(shí)間片輪我造,姆作業(yè)優(yōu)先算去 m動(dòng)杰優(yōu)先an(法甲退附 »»»4鷲黨歌認(rèn)迸財(cái)做近用220口柏人B耳殖機(jī)生成進(jìn)程蚊口司輸人2-28范圉內(nèi)依字,回車,可生成指定敵口迸"+±>+»31” » >' ," 心重需生成道理| 1.時(shí)間片輪技

8、法1 2 .擔(dān)作業(yè)優(yōu)先算法|主功窸優(yōu)先跳算注| q,退出 »»»2 _ 1 J H H 11 1 Hm J j ;去1 1 1 111 11 1 T H M-M Q|送程名乳迷時(shí)間運(yùn)行的同開始酢間宛慮酢間周犯目間能權(quán)H期時(shí)間優(yōu)先雅|A014123131L.634|B010212121.2Q2C02022L.QQ9平均周凡對(duì)間.15. ae早均帚權(quán)周轉(zhuǎn)時(shí)間;1 jb6)輸入q,退出B.重新生成進(jìn)榨| 1,時(shí)間片輪錯(cuò)法|乙婦無業(yè)優(yōu)先算法|工就蠢比光雄真淺| q.國出 »»»qProgram ended with ex it cc-de:

9、fl|五、心得體會(huì)通過這次實(shí)驗(yàn),讓我對(duì)操作系統(tǒng)的進(jìn)程調(diào)度有了更進(jìn)一步的了解。這個(gè)實(shí)驗(yàn)的模擬程度跟真實(shí)系統(tǒng)相比只是冰山一角,由此可見操作系統(tǒng)是何其復(fù)雜的軟件 產(chǎn)品,僅進(jìn)程調(diào)度就有那么豐富和內(nèi)涵的知識(shí)需要掌握。但是再復(fù)雜的系統(tǒng),都是由小部件構(gòu)成的。古語云:不積陛步,無以至千里。不積小流,無以成江海。掌握這些基礎(chǔ)的知識(shí),可以為以后打下扎實(shí)的基礎(chǔ)。六、附錄(源代碼)/ main.c/ ProcessDispatch/ Created by Jeans on 1巧/15./ Copyright (c) 2015 Jeans. All rights reserved./#include <stdio

10、.h>#include <stdlib.h> /最小進(jìn)程數(shù)#define MIN_PROCESS2/最大進(jìn)程數(shù)#define MAX_PROCESS20 /最小優(yōu)先數(shù)#define MIN_PRIORITY0/最大優(yōu)先數(shù)#define MAX_PRIORITY10 /最小運(yùn)行時(shí)間#define MIN_RUNNING_TIME1/最大運(yùn)行時(shí)間#define MAX_RUNNING_TIME20 typedef struct PCBchar name;/進(jìn)程名int priority;/優(yōu)先數(shù)int runningTime;/運(yùn)行時(shí)間int arriveTime;/到達(dá)時(shí)間in

11、t beginTime;/開始時(shí)間int finishTime;/完成時(shí)間int cyclingTime;/周轉(zhuǎn)時(shí)間double weigthCyclingTime; /帶權(quán)周轉(zhuǎn)時(shí)間int hadRunTime; / 已經(jīng)運(yùn)行時(shí)間int finish;/是否完成PCB;/獲取隨機(jī)數(shù)int GetRandomNumber(int min, int max) return arc4random()%(max-min) + min;初始化PCB組void InitPCBGroup( PCB p, int num)char name = 'A'for (int i = 0;i <

12、 num;i+)pi. name = name;pi. priority = GetRandomNumber(MIN_PRIORITY , MAX_PRIORITY );pi. runningTimeGetRandomNumber(MIN_RUNNING_TIME ,MAX_RUNNING_TIME ); name+;void PrintResult( PCB p, int num)double avgCycTime = 0,avgWeiCycTime = 0;printf ("|進(jìn)程名 到達(dá)時(shí)間 運(yùn)行時(shí)間 開始時(shí)間 完成時(shí)間 周轉(zhuǎn)時(shí)間 帶權(quán)周轉(zhuǎn)時(shí)間 優(yōu)先數(shù) |n");fo

13、r (int i = 0;i < num;i+)printf("|%3c %-4d%-4d%-4d%-4d%-4d%-6.2f%-4d|n",pi. name,pi. arriveTime,pi. runningTime ,pi. beginTime,pi. finishTime ,pi. cyclingTime , pi. weigthCyclingTime ,pi. priority );avgCycTime += pi. cyclingTime ;avgWeiCycTime += pi. weigthCyclingTime ;/還原pi. arriveTime

14、= 0;pi. beginTime = 0;pi. finishTime = 0;pi. cyclingTime = 0;pi. weigthCyclingTime = 0;pi. hadRunTime = 0;pi. finish = 0;avgWeiCycTime /= num;avgCycTime /= num;printf (" 平 均 周 轉(zhuǎn) 時(shí) 間 :%.2f平 均 帶 權(quán) 周 轉(zhuǎn) 時(shí)間 :%.2fn" ,avgCycTime,avgWeiCycTime);/時(shí)間片輪轉(zhuǎn)法void RealRoundRobin(PCB p, int num,int roundTi

15、me)printf ("nn 時(shí)間片: %dn" ,roundTime);int finishNum = 0;int curTime = 0;while (finishNum != num) for (int i = 0;i < num;i+) if (pi. finish)continue;/開始時(shí)間if (pi. beginTime = 0 && i != 0)pi. beginTime = curTime;/已經(jīng)完成if (pi. hadRunTime + roundTime >= pi. runningTime )pi. finishTi

16、me = curTime + pi. runningTime - pi. hadRunTime;pi. cyclingTime = pi. finishTime - pi. arriveTime ;pi. weigthCyclingTime = pi. cyclingTime /(double)pi. runningTime ;pi. finish = 1;finishNum +;curTime += pi. runningTime - pi. hadRunTime; elsepi. hadRunTime += roundTime;curTime += roundTime;PrintResul

17、t(p, num);void RoundRobin( PCB p, int num)RealRoundRobin(p, num, 1); /時(shí)間片為1的結(jié)果RealRoundRobin(p, num, 4); / 時(shí)間片為4的結(jié)果/短作業(yè)優(yōu)先算法void ShortestJobFirst(PCB p, int num)printf ("nn 短作業(yè)優(yōu)先算法n" );int finishNum = 0;int curTime = 0;while (finishNum != num) int min = 0;/查找短作業(yè)下標(biāo)for (int i = 1;i < num;i

18、+)if (pi. finish = 0 && pmin. runningTime >= pi. runningTime) min = i;else if (pi. finish = 0 && pmin. finish = 1) min = i; pmin. beginTime = curTime;pmin. hadRunTime = pmin. runningTime;pmin. finishTime = pmin. beginTime + pmin. runningTime; pmin. cyclingTime = pmin. finishTime -

19、 pmin. arriveTime ;pmin. weigthCyclingTime = pmin. cyclingTime/(double)pmin. runningTime ;pmin. finish = 1;finishNum+;curTime = pmin. finishTime ;PrintResult(p, num);/動(dòng)態(tài)優(yōu)先級(jí)算法void DynamicPriorityFirst( PCB p, int num)printf ("nn 動(dòng)態(tài)優(yōu)先級(jí)算法n" );int finishNum = 0;int curTime = 0;while (finishNum

20、 != num) int min = 0;/查找優(yōu)先級(jí)最高下標(biāo)for (int i = 1;i < num;i+)if (pi. finish = 0 && pmin. priority >= pi. priority ) min = i;else if (pi. finish = 0 && pmin. finish = 1) min = i;pmin. beginTime = curTime;pmin. hadRunTime = pmin. runningTime;pmin. finishTime = pmin. beginTime + pmin.

21、 runningTime;pmin. cyclingTime = pmin. finishTime - pmin. arriveTime ;pmin. weigthCyclingTime = pmin. cyclingTime/(double)pmin. runningTime ;pmin. finish = 1;finishNum+;curTime = pmin. finishTime ;PrintResult(p, num);int main(int argc, const char * argv) PCB pcbGroup30; /pcb 數(shù)組int processNum = 0; /進(jìn)

22、程數(shù)while (1) /選擇進(jìn)程數(shù)量while (1) if (processNum != 0)break;printf ("nn");printf ("當(dāng)前默認(rèn)進(jìn)程數(shù)范圍 d-%dn" ,MIN_PROCESS ,MAX_PROCESS );printf("1)輸入0可隨機(jī)生成進(jìn)程數(shù)目n2)輸入d-%d范圍內(nèi)數(shù)字,回車,可生成指定數(shù)目進(jìn)程n>>>>>>" ,MIN_PROCESS ,MAX_PROCESS );int num = 0;scanf("%d" ,&num);if (num =

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論