進(jìn)程調(diào)度模擬優(yōu)先級(jí)和最高相應(yīng)比_第1頁(yè)
進(jìn)程調(diào)度模擬優(yōu)先級(jí)和最高相應(yīng)比_第2頁(yè)
進(jìn)程調(diào)度模擬優(yōu)先級(jí)和最高相應(yīng)比_第3頁(yè)
進(jìn)程調(diào)度模擬優(yōu)先級(jí)和最高相應(yīng)比_第4頁(yè)
進(jìn)程調(diào)度模擬優(yōu)先級(jí)和最高相應(yīng)比_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、學(xué) 號(hào): 課 程 設(shè) 計(jì)題 目進(jìn)程調(diào)度模擬設(shè)計(jì)優(yōu)先級(jí)法、最高響應(yīng)比優(yōu)先調(diào)度算法學(xué) 院計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān) 業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班 級(jí)計(jì)算機(jī) 班姓 名指導(dǎo)教師2012年1月12日目 錄1課程設(shè)計(jì)目的與功能描述31.1目的描述31.2功能描述32.需求分析42.1基本原理4優(yōu)先級(jí)調(diào)度算法4最高響應(yīng)比調(diào)度算法42.2基本需求設(shè)計(jì)53程序設(shè)計(jì)53.1數(shù)據(jù)結(jié)構(gòu)53.2模塊說(shuō)明6主要函數(shù)模塊及功能6模塊框圖63.2.4 程序流程圖74. 開(kāi)發(fā)平臺(tái)及源程序的主要部分104.1開(kāi)發(fā)平臺(tái)104.2源程序的主要部分105. 程序測(cè)試175.1測(cè)試用例175.2程運(yùn)行結(jié)果及分析18對(duì)測(cè)試用例的驗(yàn)證18對(duì)基本錯(cuò)誤處理20

2、其他功能226. 自我評(píng)價(jià)與總結(jié)256.1自我評(píng)價(jià)256.2經(jīng)驗(yàn)與收獲256.3對(duì)算法改進(jìn)的想法27本科生課程設(shè)計(jì)成績(jī)?cè)u(píng)定表28課程設(shè)計(jì)任務(wù)書(shū)學(xué)生姓名: 專(zhuān)業(yè)班級(jí): 指導(dǎo)教師: 工作單位: 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 題 目: 進(jìn)程調(diào)度模擬設(shè)計(jì)優(yōu)先級(jí)法、最高響應(yīng)比優(yōu)先調(diào)度算法 初始條件:1預(yù)備內(nèi)容:閱讀操作系統(tǒng)的處理機(jī)管理章節(jié)內(nèi)容,對(duì)進(jìn)程調(diào)度的功能以及進(jìn)程調(diào)度算法有深入的理解。2實(shí)踐準(zhǔn)備:掌握一種計(jì)算機(jī)高級(jí)語(yǔ)言的使用。要求完成的主要任務(wù): (包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說(shuō)明書(shū)撰寫(xiě)等具體要求)1模擬進(jìn)程調(diào)度,能夠處理以下的情形: 能夠選擇不同的調(diào)度算法(要求中給出的調(diào)度算法); 能夠輸入進(jìn)程的

3、基本信息,如進(jìn)程名、優(yōu)先級(jí)、到達(dá)時(shí)間和運(yùn)行時(shí)間等; 根據(jù)選擇的調(diào)度算法顯示進(jìn)程調(diào)度隊(duì)列; 根據(jù)選擇的調(diào)度算法計(jì)算平均周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間。2設(shè)計(jì)報(bào)告內(nèi)容應(yīng)說(shuō)明: 課程設(shè)計(jì)目的與功能; 需求分析,數(shù)據(jù)結(jié)構(gòu)或模塊說(shuō)明(功能與框圖); 源程序的主要部分; 測(cè)試用例,運(yùn)行結(jié)果與運(yùn)行情況分析; 自我評(píng)價(jià)與總結(jié):i)你認(rèn)為你完成的設(shè)計(jì)哪些地方做得比較好或比較出色;ii)什么地方做得不太好,以后如何改正;iii)從本設(shè)計(jì)得到的收獲(在編寫(xiě),調(diào)試,執(zhí)行過(guò)程中的經(jīng)驗(yàn)和教訓(xùn));iv)完成本題是否有其他方法(如果有,簡(jiǎn)要說(shuō)明該方法);v)對(duì)實(shí)驗(yàn)題的評(píng)價(jià)和改進(jìn)意見(jiàn),請(qǐng)你推薦設(shè)計(jì)題目。時(shí)間安排:設(shè)計(jì)安排一周:周1

4、、周2:完成程序分析及設(shè)計(jì)。周2、周3:完成程序調(diào)試及測(cè)試。周4、周5:驗(yàn)收、撰寫(xiě)課程設(shè)計(jì)報(bào)告。(注意事項(xiàng):嚴(yán)禁抄襲,一旦發(fā)現(xiàn),抄與被抄的一律按0分記)指導(dǎo)教師簽名: 年 月 日系主任(或責(zé)任教師)簽名: 年 月 日進(jìn)程調(diào)度模擬設(shè)計(jì)優(yōu)先級(jí)法、最高響應(yīng)比優(yōu)先調(diào)度算法1課程設(shè)計(jì)目的與功能描述1.1目的描述學(xué)習(xí)完計(jì)算機(jī)操作系統(tǒng)這門(mén)專(zhuān)業(yè)課后,對(duì)計(jì)算機(jī)操作系統(tǒng)的組成和功能有了一定的了解;基于此,在掌握操作系統(tǒng)實(shí)現(xiàn)進(jìn)程調(diào)度以及對(duì)進(jìn)程調(diào)度算法了解的基礎(chǔ)上,編寫(xiě)一個(gè)程序,來(lái)模擬計(jì)算機(jī)操作系統(tǒng)進(jìn)程的調(diào)度過(guò)程,從而加深對(duì)計(jì)算機(jī)操作系統(tǒng)進(jìn)程調(diào)度各算法的在認(rèn)識(shí)和理解;我抽到的題目為:進(jìn)程調(diào)度模擬設(shè)計(jì)優(yōu)先級(jí)法、最高響應(yīng)

5、比優(yōu)先調(diào)度算法。1.2功能描述此次我編寫(xiě)程序?yàn)镃+語(yǔ)言模擬進(jìn)程調(diào)度的程序,主要功能有:1 選擇不同的調(diào)度算法,主要為選擇優(yōu)先級(jí)法、最高響應(yīng)比優(yōu)先調(diào)度算法;2 輸入進(jìn)程的基本信息,如進(jìn)程名、優(yōu)先級(jí)、到達(dá)時(shí)間和運(yùn)行時(shí)間;3 根據(jù)選擇的調(diào)度算法顯示進(jìn)程調(diào)度隊(duì)列;4 根據(jù)選擇的調(diào)度算法計(jì)算平均周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間并顯示。5 對(duì)基本的輸入錯(cuò)誤進(jìn)行處理,如:輸入進(jìn)程信息時(shí)要求進(jìn)程名不能相同,到達(dá)時(shí)間、運(yùn)行時(shí)間和優(yōu)先級(jí)必須為正等輸入錯(cuò)誤。2.需求分析2.1基本原理2.1.1優(yōu)先級(jí)調(diào)度算法優(yōu)先級(jí)法可被用作作業(yè)或進(jìn)程的調(diào)度策略。首先,系統(tǒng)或用戶按某種原則為作業(yè)或進(jìn)程指定一個(gè)優(yōu)先級(jí)來(lái)表示該作業(yè)或進(jìn)程所享有的

6、調(diào)度優(yōu)先權(quán)。該算法的核心是確定進(jìn)程或作業(yè)的優(yōu)先級(jí),此次課程設(shè)計(jì)采用靜態(tài)優(yōu)先級(jí)。作業(yè)調(diào)度中的靜態(tài)優(yōu)先級(jí)大多按以下原則確定: 1 由用戶自己根據(jù)作業(yè)的緊急程度輸入一個(gè)適當(dāng)?shù)膬?yōu)先級(jí)。為防止各用戶都將自己的作業(yè)冠以高優(yōu)先級(jí),系統(tǒng)應(yīng)對(duì)高優(yōu)先級(jí)用戶收取較高的費(fèi)用。 2 由系統(tǒng)或操作員根據(jù)作業(yè)類(lèi)型指定優(yōu)先級(jí)。作業(yè)類(lèi)型一般由用戶約定或由操作員指定??蓪⒆鳂I(yè)分為: IO繁忙的作業(yè)、CPU繁忙的作業(yè)、IO與CPU均衡的作業(yè)、一般作業(yè)等,系統(tǒng)或操作員可以給每類(lèi)作業(yè)指定不同的優(yōu)先級(jí)。 3 系統(tǒng)根據(jù)作業(yè)要求資源情況確定優(yōu)先級(jí)。例如根據(jù)估計(jì)所需處理機(jī)時(shí)間、內(nèi)存量大小、IO設(shè)備類(lèi)型及數(shù)量等,確定作業(yè)的優(yōu)先級(jí)。 進(jìn)程的靜態(tài)優(yōu)

7、先級(jí)確定原則可以是: Ø 按進(jìn)程的類(lèi)型給予不同的優(yōu)先級(jí)。例如,在有些系統(tǒng)中,進(jìn)程被劃分為系統(tǒng)進(jìn)程和用戶進(jìn)程。系統(tǒng)進(jìn)程享有比用戶進(jìn)程高的優(yōu)先級(jí)。對(duì)于用戶進(jìn)程來(lái)說(shuō),則可以分為: IO繁忙的進(jìn)程、CPU繁忙的進(jìn)程、IO與CPU均衡的進(jìn)程、其他進(jìn)程。對(duì)系統(tǒng)進(jìn)程,也可以根據(jù)其所要完成的功能劃分為不同的類(lèi)型,例如,調(diào)度進(jìn)程、IO進(jìn)程、中斷處理進(jìn)程、存儲(chǔ)管理進(jìn)程等。Ø 將作業(yè)的靜態(tài)優(yōu)先級(jí)作為它所屬進(jìn)程的優(yōu)先級(jí)。2.2.2最高響應(yīng)比調(diào)度算法最高響應(yīng)比優(yōu)先法(HRN)是對(duì)FCFS方式和SJF 方式的一種綜合平衡。HRN調(diào)度策略同時(shí)考慮每個(gè)作業(yè)的等待時(shí)間長(zhǎng)短和估計(jì)需要的執(zhí)行時(shí)間長(zhǎng)短,從中選出響

8、應(yīng)比最高的作業(yè)投入執(zhí)行。 響應(yīng)比R定義: R=(W+T)/T=1+W/T其中T為該作業(yè)估計(jì)需要的執(zhí)行時(shí)間,W為作業(yè)在后備狀態(tài)隊(duì)列中的等待時(shí)間。 每當(dāng)要進(jìn)行作業(yè)調(diào)度時(shí),系統(tǒng)計(jì)算每個(gè)作業(yè)的響應(yīng)比,選擇其中R最大者投入執(zhí)行。這樣,即使是長(zhǎng)作業(yè),隨著它等待時(shí)間的增加,W/T也就隨著增加,也就有機(jī)會(huì)獲得調(diào)度執(zhí)行。2.2基本需求設(shè)計(jì)程序?qū)崿F(xiàn)模擬進(jìn)程調(diào)度的優(yōu)先級(jí)調(diào)度算法和最高響應(yīng)比調(diào)度算法;基本需求設(shè)計(jì)如下:進(jìn)程信息的輸入、輸出采用命令行界面;程序執(zhí)行過(guò)程如下:首先 輸入進(jìn)程信息,可連續(xù)添加;其次 選擇調(diào)度算法:優(yōu)先級(jí)和最高響應(yīng)比調(diào)度算法;然后 根據(jù)選擇的調(diào)度算法,執(zhí)行相關(guān)函數(shù),顯示進(jìn)程調(diào)度序列,輸出總進(jìn)程

9、周轉(zhuǎn)時(shí)間、總帶權(quán)周轉(zhuǎn)時(shí)間、平均周轉(zhuǎn)時(shí)間、平均帶權(quán)周轉(zhuǎn)時(shí)間;最后 可再次選擇調(diào)度算法、重新創(chuàng)建進(jìn)程鏈、銷(xiāo)毀進(jìn)程鏈,如果選擇銷(xiāo)毀進(jìn)程隊(duì)列,則退出程序。3程序設(shè)計(jì)3.1數(shù)據(jù)結(jié)構(gòu)此次課程設(shè)計(jì)的存儲(chǔ)結(jié)構(gòu)采用鏈表的數(shù)據(jù)結(jié)構(gòu),用鏈表的各個(gè)接點(diǎn)保存進(jìn)程的相關(guān)信息,可實(shí)現(xiàn)對(duì)進(jìn)程鏈的排序、刪除、比較查找等。存儲(chǔ)結(jié)構(gòu)如下:struct ProcessProcess *pNext; string name; /進(jìn)程名double readytime; /進(jìn)程提交時(shí)間double runtime; /運(yùn)行時(shí)間double priority; /進(jìn)程的優(yōu)先級(jí);3.2模塊說(shuō)明3.2.1主要函數(shù)模塊及功能主要函數(shù)模塊及功能如

10、下:Process * Add( Process * pHead)功能:主要完成要求用戶輸入進(jìn)程的相關(guān)信息:進(jìn)程名、進(jìn)程提交時(shí)間、進(jìn)程運(yùn)行時(shí)間、進(jìn)程優(yōu)先級(jí);按輸入的提交時(shí)間的先后順序組織進(jìn)程鏈,同時(shí)對(duì)用戶的一些簡(jiǎn)單的錯(cuò)誤輸入進(jìn)行處理。Process * Copy(Process * pHead) 功能:實(shí)現(xiàn)對(duì)用戶創(chuàng)建的進(jìn)程鏈的深復(fù)制,由于要進(jìn)行多次的進(jìn)程調(diào)度,而每次的調(diào)度均會(huì)刪除進(jìn)程鏈中的各個(gè)接點(diǎn),直至鏈表為空,因此要將原進(jìn)程鏈保存,每次只是對(duì)復(fù)制鏈進(jìn)行操作。Process* Destroy(Process *pHead) 功能:實(shí)現(xiàn)對(duì)進(jìn)程各個(gè)接點(diǎn)的銷(xiāo)毀回收。void Hrn(Process*

11、pHead,int n) 功能:最高響應(yīng)比調(diào)度算法執(zhí)行函數(shù),采用最高響應(yīng)比的調(diào)度算法,實(shí)現(xiàn)對(duì)進(jìn)程鏈的執(zhí)行,并輸出周轉(zhuǎn)時(shí)間、帶權(quán)周轉(zhuǎn)時(shí)間、平均周轉(zhuǎn)時(shí)間、平均帶權(quán)周轉(zhuǎn)時(shí)間。void Highpriority(Process*pHead,int n)功能:優(yōu)先級(jí)調(diào)度算法執(zhí)行函數(shù),采用高優(yōu)先級(jí)調(diào)度算法,實(shí)現(xiàn)對(duì)進(jìn)程鏈的執(zhí)行,并輸出周轉(zhuǎn)時(shí)間、帶權(quán)周轉(zhuǎn)時(shí)間、平均周轉(zhuǎn)時(shí)間、平均帶權(quán)周轉(zhuǎn)時(shí)間。int main()功能:程序的入口,提供人機(jī)交互函數(shù),提示用戶創(chuàng)建進(jìn)程序列,選擇調(diào)度算法。3.2.2模塊框圖主函數(shù)模塊銷(xiāo)毀進(jìn)程鏈模塊最高響應(yīng)比調(diào)度模塊優(yōu)先級(jí)調(diào)度模塊輸入進(jìn)程模塊圖 3 - 13.2.4 程序流程圖本次程序

12、流程圖如下其他輸入YN cpHead->pnext31優(yōu)先級(jí)調(diào)度算法24選擇操作:優(yōu)先級(jí)1、最高響應(yīng)比2、重新創(chuàng)建進(jìn)程鏈3、銷(xiāo)毀進(jìn)程鏈4開(kāi)始選擇 1、2、3、4最高響應(yīng)比優(yōu)先算法重新創(chuàng)建進(jìn)程鏈銷(xiāo)毀進(jìn)程鏈創(chuàng)建進(jìn)程鏈繼續(xù)?Y/N結(jié)束退出圖 3 - 2優(yōu)先級(jí)調(diào)度算法流程圖:否是否是否是開(kāi)始復(fù)制進(jìn)程鏈取cpHeadtime =頭接點(diǎn)提交時(shí)間從所有提交時(shí)間不大于time中選取一個(gè)優(yōu)先級(jí)最大進(jìn)程flagtime<flag->readytime ?cpHead是否為空?time = flag->readytime 輸出flag執(zhí)行信息刪除flagFlag = c pHead ?輸出周

13、轉(zhuǎn)時(shí)間和帶權(quán)周轉(zhuǎn)時(shí)間完畢返回cpHead = cpHead->pnext圖 3 - 3最高響應(yīng)比調(diào)度算法流程圖:否是否是否是開(kāi)始復(fù)制進(jìn)程鏈取cpHeadtime =頭接點(diǎn)提交時(shí)間從提交時(shí)間不大于time進(jìn)程中選取一個(gè)響應(yīng)比最大進(jìn)程flagtime<flag->readytime ?cpHead是否為空?time = flag->readytime 輸出flag執(zhí)行信息刪除flagFlag = c pHead ?輸出周轉(zhuǎn)時(shí)間和帶權(quán)周轉(zhuǎn)時(shí)間完畢返回cpHead = cpHead->pnext圖 3 - 44. 開(kāi)發(fā)平臺(tái)及源程序的主要部分4.1開(kāi)發(fā)平臺(tái)開(kāi)發(fā)環(huán)境:Wind

14、ows7平臺(tái)開(kāi)發(fā)平臺(tái):VC+6.04.2源程序的主要部分輸入進(jìn)程信息源程序:Process * Add( Process * pHead)int mksure=1,i=1; /用來(lái)判斷是否繼續(xù)輸入的標(biāo)志cout<<"*<請(qǐng)輸入進(jìn)程隊(duì)列!>*n"while(mksure=1) Process *p,*q;p=new Process;cout<<"請(qǐng)輸入第 "<<i<<" 個(gè)進(jìn)程的信息:"<<endl;cout<<" 進(jìn)程名: "cin

15、>>p->name;do cout<<"提交時(shí)間: "cin>>p->readytime;if(p->readytime<0)cout<<"輸入時(shí)間有誤,重新輸入!"while(p->readytime<0);do cout<<"運(yùn)行時(shí)間: "cin>>p->runtime;if(p->runtime<0)cout<<"輸入時(shí)間有誤,重新輸入!"while(p->runti

16、me<0);do cout<<" 優(yōu)先級(jí): "cin>>p->priority;if(p->priority<0)cout<<"輸入優(yōu)先級(jí)有誤,重新輸入!"while(p->priority<0);p->pNext=NULL;if(pHead = NULL) /假如鏈表為空,加到鏈表頭 pHead=p; else /其他情況 q=pHead;while(q) if(p->name = q->name) cout<<"你輸入的進(jìn)程名字與已創(chuàng)建進(jìn)程

17、重名,請(qǐng)重新輸入!"<<endl;break;else q=q->pNext;if(q) continue;i- else q=pHead;while( q ) if(q->pNext!=NULL) && (p->readytime >= q->pNext->readytime) /當(dāng)q節(jié)點(diǎn)的下一結(jié)點(diǎn)不為空,或提交時(shí)間小于要添加節(jié)點(diǎn)的提交時(shí)間q=q->pNext;else break; /如果要加入進(jìn)程提交時(shí)間早于頭結(jié)點(diǎn),將該節(jié)點(diǎn)作為頭結(jié)點(diǎn)if(q = pHead && q->readytim

18、e > p->readytime) pHead=p;p->pNext=q; /如果加入的進(jìn)程提交時(shí)間早于q節(jié)點(diǎn)進(jìn)程,則將其插入q之前else p->pNext=q->pNext;q->pNext=p; cout<<"繼續(xù)添加? 是 - 1,否 - 0 n"cout<<"你的選擇:"cin>>mksure;if(mksure=1) i+;cout<<"-n" cout<<"*<進(jìn)程隊(duì)列創(chuàng)建完畢!>*n"retu

19、rn pHead;優(yōu)先級(jí)調(diào)度算法源程序:void Highpriority(Process*pHead,int n)Process *p,*cpHead,*p1;Process *flag=NULL;Process *q=NULL;double time=0,j=0,runTime=0,drunTime=0;int xuhao=0;string pnameMAX_NUM;for(int ss=0;ss<MAX_NUM;ss+)pnamess=""cpHead=Copy(pHead);if(cpHead=NULL)return ;cout<<"*&

20、lt;優(yōu)先級(jí)調(diào)度算法,進(jìn)程調(diào)度結(jié)果如下:>*n"cout<<" 順序 進(jìn)程名 優(yōu)先級(jí) 開(kāi)始時(shí)間 結(jié)束時(shí)間 周轉(zhuǎn)時(shí)間 帶權(quán)周轉(zhuǎn)時(shí)間n"p=cpHead;while(cpHead) q=cpHead;if(time < p->readytime) /如果進(jìn)程提交時(shí)間早于要比較的進(jìn)程,則先執(zhí)行time=p->readytime; flag=cpHead;while( q && q->readytime <= time) if(q->priority > flag->priority) /比

21、較進(jìn)程的優(yōu)先級(jí)flag=q;q=q->pNext; if(time < flag->readytime)/如果上一次結(jié)束時(shí)間比當(dāng)前選中要執(zhí)行進(jìn)程的結(jié)束時(shí)間小time=flag->readytime; /則當(dāng)前進(jìn)程開(kāi)始時(shí)間為提交時(shí)間cout<<setw(4)<<xuhao+1;cout<<setw(8)<<flag->name;cout<<setw(8)<<flag->priority;cout<<setw(8)<<time;cout<<setw(10)

22、<<(time + flag->runtime);cout<<setw(10)<<(time - flag->readytime + flag->runtime);cout<<setw(11)<<(double)(time-flag->readytime + flag->runtime)/flag->runtime)<<endl;j=(time - flag->readytime + flag->runtime); /當(dāng)前執(zhí)行進(jìn)程的周轉(zhuǎn)時(shí)間runTime+=j; /記錄周轉(zhuǎn)時(shí)

23、間time += flag->runtime;drunTime=drunTime+j/flag->runtime; /帶權(quán)周轉(zhuǎn)時(shí)間pnamexuhao=flag->name;xuhao+; /將執(zhí)行過(guò)的進(jìn)程從鏈表中刪除if(flag=cpHead) /最先開(kāi)始執(zhí)行的進(jìn)程就在鏈表頭cpHead=cpHead->pNext;else /最先開(kāi)始執(zhí)行的進(jìn)程在鏈表中p1=cpHead;while(p1->pNext!=flag)p1=p1->pNext;p1->pNext=flag->pNext;delete flag; /刪除這個(gè)進(jìn)程所占的節(jié)點(diǎn) cou

24、t<<"進(jìn)程執(zhí)行順序?yàn)椋?quot;for(int ss=0;ss<n;ss+) cout<<pnamess;if(pnamess+1 !="")cout<<" -> " cout<<endl;cout<<" 總周轉(zhuǎn)時(shí)間為:"<<runTime<<endl;cout<<" 總帶權(quán)周轉(zhuǎn)時(shí)間為:"<<drunTime<<endl;cout<<" 平均周轉(zhuǎn)時(shí)間

25、為:"<<runTime/n<<endl; cout<<"平均帶權(quán)周轉(zhuǎn)時(shí)間為:"<<drunTime/n<<endl;cout<<"*<進(jìn)程執(zhí)行結(jié)束!>*n"最高響應(yīng)比調(diào)度算法源程序:void Hrn(Process*pHead,int n)Process *p,*cpHead,*p1;Process *flag=NULL;Process *q=NULL; double time=0,j=0,runTime=0, drunTime=0;int xuhao=0;s

26、tring pnameMAX_NUM;for(int ss=0;ss<MAX_NUM;ss+)pnamess=""cpHead=Copy(pHead);if(cpHead=NULL)return ;cout<<"*<最高響應(yīng)比優(yōu)先算法,進(jìn)程調(diào)度結(jié)果如下:>*n"cout<<" 順序 進(jìn)程名 優(yōu)先級(jí) 開(kāi)始時(shí)間 結(jié)束時(shí)間 周轉(zhuǎn)時(shí)間 帶權(quán)周轉(zhuǎn)時(shí)間n"p=cpHead;while(cpHead) q=cpHead;if(time < p->readytime) /如果該進(jìn)程提交時(shí)間早于其它

27、進(jìn)程,則先執(zhí)行該進(jìn)程time=p->readytime;flag=cpHead; /用于暫存將要執(zhí)行的進(jìn)程/計(jì)算當(dāng)前鏈表中進(jìn)程的響應(yīng)比while(q && q->readytime <= time)if(time - q->readytime)/(q->runtime) > (time - flag->readytime)/(flag->runtime)flag=q;q=q->pNext; if(time < flag->readytime) /如果上一次結(jié)束時(shí)間比當(dāng)前選中要執(zhí)行進(jìn)程的結(jié)束時(shí)間小time=flag

28、->readytime; /則當(dāng)前進(jìn)程開(kāi)始時(shí)間為提交時(shí)間 cout<<setw(4)<<xuhao+1;cout<<setw(8)<<flag->name;cout<<setw(8)<<flag->priority;cout<<setw(8)<<time;cout<<setw(10)<<(time + flag->runtime);cout<<setw(10)<<(time - flag->readytime + flag

29、->runtime);cout<<" "<<setw(11)<<(double)(time-flag->readytime + flag->runtime)/flag->runtime)<<endl; j=(time-flag->readytime+flag->runtime); /當(dāng)前執(zhí)行進(jìn)程的周轉(zhuǎn)時(shí)間runTime +=j; /記錄周轉(zhuǎn)時(shí)間time+=flag->runtime;drunTime+=j/flag->runtime; /帶權(quán)周轉(zhuǎn)時(shí)間pnamexuhao=flag

30、->name;xuhao+;/將執(zhí)行過(guò)的進(jìn)程從鏈表中刪除if(flag=cpHead) /在鏈表頭cpHead=cpHead->pNext; else /在鏈表中p1=cpHead;while(p1->pNext!=flag)p1=p1->pNext;p1->pNext=flag->pNext;delete flag; /刪除這個(gè)進(jìn)程所占的節(jié)點(diǎn) cout<<"進(jìn)程執(zhí)行順序?yàn)椋?quot;for(int ss=0;ss<n;ss+) out<<pnamess;if(pnamess+1 !="")cou

31、t<<" -> " cout<<endl;cout<<" 總周轉(zhuǎn)時(shí)間為:"<<runTime<<endl;cout<<" 總帶權(quán)周轉(zhuǎn)時(shí)間為:"<<drunTime<<endl;cout<<" 平均周轉(zhuǎn)時(shí)間為:"<<runTime/n<<endl; cout<<"平均帶權(quán)周轉(zhuǎn)時(shí)間為:"<<drunTime/n<<endl;co

32、ut<<"*<進(jìn)程執(zhí)行結(jié)束!>*n"主函數(shù)源程序如下:int main() cout<<"tt*"<<endl;cout<<"tt* 歡迎使用模擬進(jìn)程調(diào)度程序! *"<<endl;cout<<"tt* 當(dāng)前沒(méi)有可執(zhí)行進(jìn)程,進(jìn)程請(qǐng)先創(chuàng)建進(jìn)程! *"<<endl;cout<<"tt* 輸入的提交時(shí)間、運(yùn)行時(shí)間、優(yōu)先級(jí)均需大于零! *"<<endl;cout<<"

33、;tt*"<<endl;Process * pHead = NULL; pHead=Add(pHead);Output(pHead);char again;do cout<<"*n"/輸入選擇的算法int decision;cout<<"tt*"<<endl;cout<<"tt* 請(qǐng)選擇進(jìn)程調(diào)度算法! *"<<endl;cout<<"tt* 1.優(yōu)先級(jí)調(diào)度算法! *"<<endl;cout<<&qu

34、ot;tt* 2.最高響應(yīng)比優(yōu)先算法! *"<<endl;cout<<"tt* 3.重新創(chuàng)建進(jìn)程鏈! *"<<endl;cout<<"tt* 4.銷(xiāo)毀進(jìn)程隊(duì)列,退出程序! *"<<endl;cout<<"tt*"<<endl;do cout<<"你的選擇:"cin>>decision;if(decision=1) / 優(yōu)先級(jí)調(diào)度算法 Highpriority(pHead,count);if(deci

35、sion =2)/最高響應(yīng)比算法Hrn(pHead,count);if(decision =3) pHead=NULL;pHead=Add(pHead);Output(pHead); if(decision =4) pHead=Destroy(pHead);break; if(decision !=1 && decision!=2 && decision!=3 && decision!=4)cout<<"輸入有誤,請(qǐng)重新輸入!n"while(decision !=1 && decision!=2 &

36、amp;& decision!=3);if(decision = 4)break;cout<<"繼續(xù)選擇調(diào)度算法?是(Y)否(N)n"cout<<"你的選擇:"cin>>again;while(again='Y' | again='y' | (char)again=1);system("pause"); return 0;復(fù)制進(jìn)程鏈函數(shù)源程序如下:Process * Copy(Process * pHead)Process * p,*cpHead,*q,*te

37、mp;cpHead=NULL;q=pHead;p=new Process;int i=1;while(q)p->pNext=NULL;p->name=q->name;p->priority=q->priority;p->readytime=q->readytime;p->runtime=q->runtime;temp=p;if(cpHead=NULL)cpHead=p;q=q->pNext;if(q) p=new Process;if(i=1)cpHead->pNext=p;temp->pNext=p;i+; return

38、 cpHead;銷(xiāo)毀進(jìn)程鏈函數(shù)源代碼如下:Process* Destroy(Process *pHead)Process *dp,*dq;dp=pHead->pNext;pHead=NULL;while(dp) dq=dp;dp=dp->pNext;delete dq;cout<<"進(jìn)程隊(duì)列已經(jīng)銷(xiāo)毀!不能執(zhí)行再次進(jìn)程調(diào)度了!n"return pHead;輸出進(jìn)程鏈信息函數(shù)源代碼如下:void Output(Process * pHead)Process *s=pHead;cout<<"*生成的進(jìn)程鏈表如下:*n"cou

39、t<<"t進(jìn)程名 提交時(shí)間 運(yùn)行時(shí)間 優(yōu)先級(jí)"<<endl;while(s) cout<<"t"<<setw(4)<<s->name<<setw(8)<<s->readytime<<setw(10)<<s->runtime<<setw(9)<<s->priority<<"n"s=s->pNext; count+; 5. 程序測(cè)試5.1測(cè)試用例測(cè)試用例的輸入進(jìn)程信息

40、為:進(jìn)程名提交時(shí)間運(yùn)行時(shí)間優(yōu)先級(jí)PP11.021PP22.012PP32.523表 5 1采用優(yōu)先級(jí)調(diào)度算法1.0時(shí)刻 只有進(jìn)程PP1提交到達(dá)系統(tǒng),故執(zhí)行進(jìn)程PP13.0時(shí)刻 進(jìn)程PP2、PP3均已到達(dá)系統(tǒng),但由于PP3優(yōu)先級(jí)高于PP2優(yōu)先級(jí),故執(zhí)行進(jìn)程PP35.0時(shí)刻 進(jìn)程PP3執(zhí)行完畢,執(zhí)行進(jìn)程PP26.0時(shí)刻 進(jìn)程PP2執(zhí)行完畢進(jìn)程調(diào)度順序?yàn)椋篜P1 à PP3 àPP2執(zhí)行信息如表:進(jìn)程名提交時(shí)間運(yùn)行時(shí)間優(yōu)先級(jí)開(kāi)始時(shí)間結(jié)束時(shí)間周轉(zhuǎn)時(shí)間帶權(quán)周轉(zhuǎn)時(shí)間PP11.0211.03.02.01.0PP22.0125.06.04.04.0PP32.5233.05.02.51.25

41、表 5 2平均周轉(zhuǎn)時(shí)間:8.5/3=2.833平均帶權(quán)周轉(zhuǎn)時(shí)間:6.25/3=2.083采用最高響應(yīng)比優(yōu)先調(diào)度算法1.0時(shí)刻 只有進(jìn)程PP1提交到達(dá)系統(tǒng),故執(zhí)行進(jìn)程PP13.0時(shí)刻 進(jìn)程PP2、PP3均已到達(dá)系統(tǒng),響應(yīng)比:RPP2=1+1.0/1=2;RPP3=1+0.5/2=1.25,故執(zhí)行進(jìn)程PP24.0時(shí)刻 進(jìn)程PP2執(zhí)行完畢,執(zhí)行進(jìn)程PP36.0時(shí)刻 進(jìn)程PP3執(zhí)行完畢進(jìn)程調(diào)度順序?yàn)椋篜P1 à PP2 àPP3執(zhí)行信息如表:進(jìn)程名提交時(shí)間運(yùn)行時(shí)間優(yōu)先級(jí)開(kāi)始時(shí)間結(jié)束時(shí)間周轉(zhuǎn)時(shí)間帶權(quán)周轉(zhuǎn)時(shí)間PP11.0211.03.02.01.0PP22.0123.04.02.02.

42、0PP32.5234.06.03.51.75表 5 3平均周轉(zhuǎn)時(shí)間:7.5/3=2.5平均帶權(quán)周轉(zhuǎn)時(shí)間:4.75/3=1.5835.2程運(yùn)行結(jié)果及分析5.2.1對(duì)測(cè)試用例的驗(yàn)證輸入用例中的進(jìn)程信息,如圖:圖 5 1選擇優(yōu)先級(jí)調(diào)度算法,執(zhí)行結(jié)果如圖:圖 5 2分析 從程序運(yùn)行結(jié)果來(lái)看,結(jié)果與5.1理論分析一直,說(shuō)明程序運(yùn)行結(jié)果正確!采用最高響應(yīng)比優(yōu)先的調(diào)度算法,執(zhí)行結(jié)果如圖:圖 5 3分析 從程序運(yùn)行結(jié)果來(lái)看,結(jié)果與5.1理論分析一直,說(shuō)明程序運(yùn)行結(jié)果正確!5.2.2對(duì)基本錯(cuò)誤處理本程序考慮的基本輸入錯(cuò)誤信息有:進(jìn)程提交時(shí)間、運(yùn)行時(shí)間、優(yōu)先級(jí)小于零,選擇算法操作時(shí)未按要求輸入;其他異常情況為:進(jìn)

43、程同名,由于每個(gè)進(jìn)程有一個(gè)唯一的進(jìn)程控制塊(PCB),要求進(jìn)程控制號(hào)、進(jìn)程名字不一樣,因此模擬時(shí)應(yīng)考慮到輸入進(jìn)程同名的情況。Ø 當(dāng)輸入進(jìn)程的提交時(shí)間、運(yùn)行時(shí)間、優(yōu)先級(jí)小于零時(shí),程序提示輸入錯(cuò)誤,要求用戶重新輸入!程序執(zhí)行結(jié)果如圖:圖 5 4圖 5 5圖 5 6Ø 當(dāng)輸入進(jìn)程與已輸入的進(jìn)程同名時(shí),程序進(jìn)行檢測(cè),并提示用戶重新輸入該進(jìn)程信息,執(zhí)行結(jié)果如圖:圖 5 7Ø 當(dāng)進(jìn)程鏈創(chuàng)建完畢后,選擇相關(guān)操作,當(dāng)未按要求輸入時(shí),比如輸入非1、2、3的數(shù)字,提示輸入錯(cuò)誤,并要求用戶重新輸入,執(zhí)行結(jié)果如下:圖 5 85.2.3其他功能本程序還可以重新創(chuàng)建進(jìn)程鏈表,作為下一次調(diào)度算

44、法的檢測(cè),執(zhí)行如下圖:圖 5 9圖 5 10圖 5 116. 自我評(píng)價(jià)與總結(jié)6.1自我評(píng)價(jià)計(jì)算機(jī)操作系統(tǒng)這門(mén)課程是計(jì)算機(jī)專(zhuān)業(yè)一門(mén)基礎(chǔ)性學(xué)科,重要性可見(jiàn)一斑,學(xué)好這門(mén)課程對(duì)以后人生的發(fā)展具有深遠(yuǎn)的影響。而課程設(shè)計(jì)便是對(duì)學(xué)習(xí)效果的檢驗(yàn)。數(shù)課程設(shè)計(jì)不僅可以鍛煉我們獨(dú)立思考問(wèn)題、解決問(wèn)題的能力,而且可以培養(yǎng)我們的整體性思維的能力;通過(guò)課程設(shè)計(jì),使我加深了對(duì)操作系統(tǒng)進(jìn)程調(diào)度各個(gè)調(diào)度算法的再認(rèn)識(shí),特別是優(yōu)先級(jí)調(diào)度算法和最高響應(yīng)比優(yōu)先調(diào)度算法;鞏固了很多操作系統(tǒng)和C+編程基礎(chǔ)性知識(shí),比如:存儲(chǔ)結(jié)構(gòu)、信息查找比較、算法設(shè)計(jì)等。出色的地方本次課程設(shè)計(jì),剛開(kāi)始看到課程設(shè)計(jì)題目時(shí),感覺(jué)有些難度,通過(guò)對(duì)優(yōu)先級(jí)和最高響

45、應(yīng)比優(yōu)先調(diào)度算法的再次復(fù)習(xí),最終確定了其設(shè)計(jì)的算法。程序?qū)崿F(xiàn)了用優(yōu)先級(jí)和最高響應(yīng)比優(yōu)先調(diào)度算法模擬進(jìn)程調(diào)度,而且結(jié)果與理論分析完全一致,說(shuō)明程序正確,此外對(duì)于選中的滿足調(diào)度算法的進(jìn)程,如果提交時(shí)間比上一次進(jìn)程執(zhí)行完畢時(shí)的時(shí)間還大,則該進(jìn)程的開(kāi)始時(shí)間為自己的提交時(shí)間,而非上一次進(jìn)程執(zhí)行完成時(shí)的結(jié)束時(shí)間;同時(shí),考慮到了用戶的輸入錯(cuò)誤,對(duì)進(jìn)程提交時(shí)間、運(yùn)行時(shí)間、優(yōu)先級(jí)小于零、選擇操作未按要求等輸入錯(cuò)誤進(jìn)行了處理;對(duì)輸入進(jìn)程同名的情況進(jìn)行排除并要求用戶重新輸入。不好的地方程序總雖然考慮了一些用戶輸入錯(cuò)誤,并對(duì)其進(jìn)行處理,但是這種處理是不完善的,只能對(duì)如:進(jìn)程提交時(shí)間、運(yùn)行時(shí)間、優(yōu)先級(jí)小于零、選擇操作未

46、按要求等輸入錯(cuò)誤進(jìn)行了處理,而對(duì)進(jìn)程提交時(shí)間、運(yùn)行時(shí)間、優(yōu)先級(jí)、選擇操作不為數(shù)值等情況進(jìn)行了處理,這樣異常處理是片面的不完善的,對(duì)于此種情況,可以用JAVA語(yǔ)言來(lái)編寫(xiě)這次程序,利用其強(qiáng)大的系統(tǒng)異常和處理機(jī)制可以很好的解決上述問(wèn)題;兩種調(diào)度算法輸出各進(jìn)程執(zhí)行情況時(shí),直接將輸出語(yǔ)句放在調(diào)度算法之中,這樣由于兩種輸出基本上一樣,增加了程序的存儲(chǔ)開(kāi)銷(xiāo),可以將輸出單獨(dú)作為一個(gè)函數(shù)進(jìn)行輸出處理。6.2經(jīng)驗(yàn)與收獲這次課程設(shè)計(jì),我明白了對(duì)于編寫(xiě)程序,解題的思路尤為重要。在編寫(xiě)程序之前,如果沒(méi)有比較清晰的思路,根本不可能編出好的程序。就算馬馬虎虎的編出來(lái),程序的邏輯性、健壯性、完善性、合理性也不會(huì)很強(qiáng)。在編程之前,我們應(yīng)反復(fù)研究題目要求,對(duì)題目涉及的情況進(jìn)行比較充分的分析,以便編寫(xiě)出更加符合題意的程序;其次要充分考慮各種臨界情況,對(duì)一些錯(cuò)誤的輸入進(jìn)行處理。因此在我們編程序之前一定要做好充分的準(zhǔn)備,首先要理清自己的思路,然后再將思路分劃成幾個(gè)模塊,逐塊的寫(xiě)好算法,最后再將所有的模塊有機(jī)的聯(lián)系起來(lái),組成一個(gè)完整的程

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論