




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
./《操作系統(tǒng)》課程設(shè)計報告專業(yè):計算機(jī)科學(xué)與技術(shù)__09計本班學(xué)號姓名成績200981010118X利剛題目名稱:進(jìn)程調(diào)度模擬程序完成日期:20xx6月20日XX政法學(xué)院計算機(jī)科學(xué)學(xué)院目錄TOC\o"1-3"\h\u12636第一章課程設(shè)計目的315618第二章課程設(shè)計要求332255第三章設(shè)計思想4216103.1基本概念4300693.2進(jìn)程控制塊551523.3算法思想59899第四章詳細(xì)設(shè)計619434.1程序設(shè)計流程圖6119284.2程序各模塊功能介紹625078第五章運(yùn)行結(jié)果與分析14321745.1程序調(diào)試14154215.2運(yùn)行結(jié)果15291475.3結(jié)果分析1718895第六章總結(jié)1712666參考文獻(xiàn)18進(jìn)程調(diào)度模擬程序第一章課程設(shè)計目的深入掌握進(jìn)程調(diào)度的概念原理和實(shí)現(xiàn)方法,理解操作系統(tǒng)進(jìn)程管理中進(jìn)行進(jìn)程調(diào)度的過程和編程方法,掌握先來先服務(wù)調(diào)度算法和最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法,創(chuàng)建進(jìn)程控制塊PCB。理解進(jìn)程的狀態(tài)與變化,動態(tài)顯示每個進(jìn)程的當(dāng)前狀態(tài)與進(jìn)程的調(diào)度情況。進(jìn)程調(diào)度是處理機(jī)管理的核心內(nèi)容。本次課程設(shè)計用C語言編寫模擬進(jìn)程調(diào)度程序,以便加深理解有關(guān)進(jìn)程控制快、進(jìn)程隊(duì)列等概念,并體會最高優(yōu)先數(shù)優(yōu)先與按時間片輪轉(zhuǎn)調(diào)度結(jié)合算法的優(yōu)缺點(diǎn)。第二章課程設(shè)計要求編寫一個進(jìn)程調(diào)度程序,允許多個進(jìn)程并行執(zhí)行。1、進(jìn)程調(diào)度算法:采用最高優(yōu)先數(shù)優(yōu)先與按時間片輪轉(zhuǎn)調(diào)度結(jié)合算法。2、每個進(jìn)程有一個進(jìn)程控制塊〔PCB〕表示。進(jìn)程控制塊可以包含如下信息:進(jìn)程名、優(yōu)先數(shù)、到達(dá)時間、需要運(yùn)行時間、已用CPU時間、進(jìn)程狀態(tài)等等。3、進(jìn)程的優(yōu)先數(shù)與需要的運(yùn)行時間可在運(yùn)行時輸入,進(jìn)程的到達(dá)時間為輸入進(jìn)程的時間。4、進(jìn)程的運(yùn)行時間以時間片為單位進(jìn)行計算。5、每個進(jìn)程的狀態(tài)可以是就緒W〔Wait〕、運(yùn)行R〔Run〕、或完成F〔Finish〕三種狀態(tài)之一。6、就緒進(jìn)程獲得CPU后都只能運(yùn)行一個時間片。7、如果運(yùn)行一個時間片后,進(jìn)程的已占用CPU時間已達(dá)到所需要的運(yùn)行時間,則撤消該進(jìn)程,如果運(yùn)行一個時間片后進(jìn)程的已占用CPU時間還未達(dá)所需要的運(yùn)行時間,也就是進(jìn)程還需要繼續(xù)運(yùn)行,此時應(yīng)將進(jìn)程的優(yōu)先數(shù)減1〔即降低一級〕,然后把它插入就緒隊(duì)列等待CPU。8、每進(jìn)行一次調(diào)度程序都打印一次運(yùn)行進(jìn)程、就緒隊(duì)列、以與各個進(jìn)程的PCB,以便進(jìn)行檢查。重復(fù)以上過程,直到所要進(jìn)程都完成為止。第三章設(shè)計思想3.1基本概念優(yōu)先級調(diào)度算法:按照進(jìn)程的優(yōu)先級大小來調(diào)度。使高優(yōu)先級進(jìn)程或線程得到優(yōu)先的處理的調(diào)度策略稱為優(yōu)先級調(diào)度算法。進(jìn)程的優(yōu)先級可以由系統(tǒng)自動地按一定原則賦給它,也可由系統(tǒng)外部來進(jìn)行安排。本次課程設(shè)計是自己給定進(jìn)程的優(yōu)先級。但在許多采用優(yōu)先級調(diào)度的系統(tǒng)中,通常采用動態(tài)優(yōu)先數(shù)策略。即一個進(jìn)程的優(yōu)先級不是固定的,往往是隨許多因素的變化而變化。尤其隨作業(yè)〔進(jìn)程〕的等待時間,已使用的處理器時間或其他系統(tǒng)資源的使用情況而定,以防止低優(yōu)先級進(jìn)程或線程長期饑餓現(xiàn)象發(fā)生時間片輪轉(zhuǎn)算法:時間片輪轉(zhuǎn)調(diào)度是一種最古老,最簡單,最公平且使用最廣的算法。每個進(jìn)程被分配一個時間段,稱作它的時間片,即該進(jìn)程允許運(yùn)行的時間。如果在時間片結(jié)束時進(jìn)程還在運(yùn)行,則CPU將被剝奪并分配給另一個進(jìn)程。如果進(jìn)程在時間片結(jié)束前阻塞或結(jié)束,則CPU當(dāng)即進(jìn)行切換。調(diào)度程序所要做的就是維護(hù)一X就緒進(jìn)程列表,當(dāng)進(jìn)程用完它的時間片后,它被移到隊(duì)列的末尾。時間片輪轉(zhuǎn)算法主要用于處理器調(diào)度。采用此算法的系統(tǒng),其進(jìn)程就緒隊(duì)列往往按進(jìn)程到達(dá)的時間來排序。進(jìn)程調(diào)度程序總是選擇就緒隊(duì)列中的第一個進(jìn)程,也就是說按照先進(jìn)先出原則調(diào)度,但一旦進(jìn)程占有處理器僅使用一個時間片,在使用完一個時間片后,進(jìn)程還沒有完成其運(yùn)行,它也必須釋放出〔被搶占〕處理器給下一個就緒的進(jìn)程。而被搶占的進(jìn)程返回到就緒隊(duì)列的末尾重新排隊(duì)等候再次運(yùn)行。進(jìn)程調(diào)度程序選擇一個就緒狀態(tài)的進(jìn)程,使之在處理器上運(yùn)行,每個進(jìn)程的狀態(tài)信息用數(shù)據(jù)結(jié)構(gòu)〔進(jìn)程控制塊PCB〕表示,進(jìn)程的調(diào)度采用最高優(yōu)先數(shù)優(yōu)先和按時間片輪轉(zhuǎn)相結(jié)合的調(diào)度算法,并且采用動態(tài)優(yōu)先數(shù)策略,選擇進(jìn)程占用處理器后該進(jìn)程僅能使用一個時間片,運(yùn)行完后優(yōu)先數(shù)減1。進(jìn)程的狀態(tài):運(yùn)行狀態(tài)R〔Run〕:進(jìn)程正在處理器上運(yùn)行。就緒狀態(tài)W〔Wait〕:一個進(jìn)程獲得了除處理器外的一切所需資源,一旦得到處理器即可運(yùn)行。完成狀態(tài)F〔Finish〕:一個進(jìn)程一旦完成,就停止運(yùn)行。3.2進(jìn)程控制塊描述進(jìn)程的狀態(tài)信息,用結(jié)構(gòu)體定義typedefstructprocess{charname[10];//進(jìn)程名intpriority;//優(yōu)先數(shù)TimeReachTime;//到達(dá)時間TimeNeedTime;//需要運(yùn)行時間TimeUsedTime;//已用時間charstate;//進(jìn)程狀態(tài)}PCB;//進(jìn)程控制塊進(jìn)程調(diào)度模擬程序進(jìn)程調(diào)度模擬程序進(jìn)程調(diào)入AddProcess<>函數(shù)打印進(jìn)程print<>函數(shù)進(jìn)程調(diào)度attemper<>函數(shù)選擇操作face<>函數(shù)進(jìn)程優(yōu)先級排序sort<>函數(shù)圖1進(jìn)程調(diào)度模擬程序模塊圖3.3算法思想定義結(jié)構(gòu)體PCB描述進(jìn)程的進(jìn)程控制塊,定義數(shù)組PCBpcb[Max]存放進(jìn)程進(jìn)程調(diào)度程序調(diào)用face<>函數(shù)選擇所要進(jìn)行的操作。輸入1則增加進(jìn)程并調(diào)度進(jìn)程;輸入2則打印進(jìn)程,輸入0則任務(wù)結(jié)束;增加進(jìn)程,調(diào)用AddProcess<>函數(shù),將輸入的進(jìn)程存放在數(shù)組pcb[Max]中;打印進(jìn)程,調(diào)用print<>函數(shù),在該函數(shù)中首先調(diào)用sort<>函數(shù)對進(jìn)程按優(yōu)先級和先來先服務(wù)排序,然后顯示輸出排序后的進(jìn)程。進(jìn)程調(diào)度,調(diào)用attemper<>函數(shù),調(diào)度優(yōu)先級最高的進(jìn)程分配給CPU使之運(yùn)行一個時間片,進(jìn)程優(yōu)先級排序,調(diào)用sort<>函數(shù),按照先來先服務(wù)和優(yōu)先級排序,使排序完最優(yōu)先運(yùn)行的進(jìn)程存放在pcb[0]中。第四章詳細(xì)設(shè)計4.1程序設(shè)計流程圖設(shè)置時間片設(shè)置時間片選擇是結(jié)束進(jìn)程增加進(jìn)程打印進(jìn)程繼續(xù)增加否結(jié)束打印進(jìn)程優(yōu)先級排序進(jìn)程調(diào)度完成真開始圖2程序設(shè)計流程圖4.2程序各模塊功能介紹<1>進(jìn)程優(yōu)先級排序sort<>函數(shù):函數(shù)用冒泡法排序,首先按到達(dá)時間排序,使到達(dá)時間最早〔即pcb[n].ReachTime最小〕的進(jìn)程被交換到pcb[0]中,再按優(yōu)先級排序,使具有最高優(yōu)先級〔即pcb[n].priority最大〕的進(jìn)程被交換到pcb[0]中。相同優(yōu)先級的進(jìn)程只按到達(dá)時間排序。主要代碼如下:for<i=0;i<n-1;i++>//先按到達(dá)時間排序{for<j=n-2;j>=i;j-->{if<pcb[j+1].ReachTime<pcb[j].ReachTime>{temp=pcb[j];pcb[j]=pcb[j+1];pcb[j+1]=temp;}}}for<i=0;i<n-1;i++>//再按優(yōu)先級進(jìn)行排序{for<j=n-2;j>=i;j-->{if<pcb[j+1].priority>pcb[j].priority>{temp=pcb[j];pcb[j]=pcb[j+1];pcb[j+1]=temp;}}}進(jìn)程優(yōu)先級排序Sort<>函數(shù)的流程圖如圖3所示。開始開始i=0j=n-2i=0pcb[j+1].priority>pcb[j].priorityj=n-2pcb[j+1].ReachTime<pcb[j].ReachTimetemp=pcb[j];pcb[j]=pcb[j+1];pcb[j+1]=temp;temp=pcb[j];pcb[j]=pcb[j+1];pcb[j+1]=temp;j=j-1Yj>=ij=j-1j>=iNYi=i+1Ni=i+1i<n-1NYi<n-1NY結(jié)束圖3sort<>函數(shù)流程圖<2>打印進(jìn)程print<>函數(shù):先調(diào)用sort〔〕排序函數(shù)對進(jìn)程進(jìn)行排序,排序完再打印輸出進(jìn)程主要代碼如下:sort<>;printf<"\n進(jìn)程名優(yōu)先級到達(dá)時間需要時間已用時間進(jìn)程狀態(tài)\n">;for<i=0;i<n;i++>{printf<"%8s%8d%8d%10d%10d%10c\n",pcb[i].name,pcb[i].priority,pcb[i].ReachTime,pcb[i].NeedTime,pcb[i].UsedTime,pcb[i].state>;}<3>進(jìn)程調(diào)入AddProcess<>函數(shù):增加進(jìn)程函數(shù),輸入要添加的進(jìn)程的進(jìn)程控制塊的信息,并依次存放在數(shù)組PCBpcb[Max]中,每加入一個進(jìn)程后判斷是否還要繼續(xù)增加進(jìn)程,若是則繼續(xù)循環(huán)的執(zhí)行操作主要代碼如下:do{printf<"\n請輸入進(jìn)程名">;scanf<"%s",pcb[n].name>;printf<"請輸入進(jìn)程的優(yōu)先級">;scanf<"%d",&pcb[n].priority>;printf<"請輸入進(jìn)程需要的時間">;scanf<"%d",&pcb[n].NeedTime>;pcb[n].ReachTime=n;pcb[n].UsedTime=0;pcb[n].state='W';n++;printf<"還要繼續(xù)增加進(jìn)程嗎,是<Y>,否<N>">;do{ch=getchar<>;}while<ch!='Y'&&ch!='N'&&ch!='y'&&ch!='n'>;}while<ch=='Y'||ch=='y'>;打印進(jìn)程print<>函數(shù)和進(jìn)程調(diào)入函數(shù)AddProcess<>函數(shù)的流程圖如圖4和圖5所示。開始開始開始輸入pcb[n]進(jìn)程信息sort〔〕排序n=n+1i=0繼續(xù)增加進(jìn)程輸出pcb[i]進(jìn)程信息ch=getchar<>i=i+1YYch!='Y'&&ch!='N'&&ch!='y'&&ch!='n'i<nNN結(jié)束ch=='Y'||ch=='y'YN結(jié)束圖4print<>函數(shù)流程圖圖5AddProcess<>函數(shù)流程圖<4>進(jìn)程調(diào)入attemper<>函數(shù):調(diào)度排完序后存放在pcb[0]中的進(jìn)程,分配給該進(jìn)程CPU,使之運(yùn)行一個時間片,然后比較進(jìn)程的剩余時間<pcb[0].NeedTime-pcb[0].UsedTime>是否小于時間片的大小pTime,若是,則該進(jìn)程調(diào)度完成,進(jìn)程處于完成狀態(tài),若非,則已用時間加上一個時間片,進(jìn)程處于就緒狀態(tài)繼續(xù)等待運(yùn)行,然后調(diào)用print<>函數(shù)打印輸出當(dāng)前進(jìn)程的狀態(tài)并排序,直至所有進(jìn)程處于完成狀態(tài)后結(jié)束運(yùn)行。主要代碼如下:do{if<<pcb[0].NeedTime-pcb[0].UsedTime>>pTime>{pcb[0].UsedTime+=pTime;//已用時間加時間片pcb[0].priority--;//優(yōu)先級減一pcb[0].state='W';}else{pcb[0].UsedTime=pcb[0].NeedTime;//已用時間等于需要時間pcb[0].priority=-1000;//優(yōu)先級置為零pcb[0].state='F';//完成進(jìn)程,將狀態(tài)置為完成}print<>;}while<pcb[0].state!='F'>;進(jìn)程調(diào)入attemper<>函數(shù)流程圖如圖6所示。開始開始<pcb[0].NeedTime-pcb[0].UsedTime>>pTimeNYpcb[0].UsedTime=pcb[0].NeedTimepcb[0].priority=-1000pcb[0].state='F'pcb[0].UsedTime+=pTimepcb[0].priority—pcb[0].state='W'print<>打印pcb[0].state!='F'NY結(jié)束圖6attemper<>函數(shù)流程圖<5>選擇操作face<>函數(shù):函數(shù)打印所能進(jìn)行的操作以供選擇。輸入1則是增加進(jìn)程后調(diào)度進(jìn)程,輸入2則是打印進(jìn)程,輸入0則是任務(wù)結(jié)束。主要代碼如下:charchoose;printf<"\n增加進(jìn)程并調(diào)度進(jìn)程,請按1">;printf<"\n打印進(jìn)程,請按2">;printf<"\n任務(wù)結(jié)束,請按0">;printf<"\n請選擇:">;do{choose=getchar<>;}while<choose!='1'&&choose!='2'&&choose!='0'>;returnchoose;}選擇操作face<>函數(shù)流程圖如圖7所示。開始開始增加進(jìn)程并調(diào)度進(jìn)程,請按1打印進(jìn)程,請按2任務(wù)結(jié)束,請按0請選擇:choose=getchar<>choose!='1'&&choose!='2'&&choose!='0'YNreturnchoose結(jié)束圖7face<>函數(shù)流程圖<6>main<>函數(shù):首先設(shè)置時間片的大小pTime,然后調(diào)用face<>函數(shù)選擇要進(jìn)行的操作,choose='1'則增加進(jìn)程并調(diào)度,choose='2'則打印進(jìn)程,choose='0'則任務(wù)結(jié)束。主要代碼如下:charchoose;n=0;//初始化進(jìn)程數(shù)為0printf<"設(shè)置時間片的大小:">;scanf<"%d",&pTime>;choose=face<>;do{if<choose=='1'>{AddProcess<>;print<>;attemper<>;}if<choose=='2'>{print<>;}if<choose=='0'>{return;}choose=face<>;}while<1>;函數(shù)間的關(guān)系:1〕sort<>函數(shù)嵌套在print<>函數(shù)中調(diào)用2〕調(diào)用AddProcess<>函數(shù)前必須先調(diào)用print<>函數(shù)對進(jìn)程進(jìn)行排序并打印。Main<>函數(shù)的流程圖如圖8所示。開始開始n=0;設(shè)置時間片的大小pTimechoose=face<>choose=='1'YNNYAddProcess<>;print<>;attemper<>;choose=='2'returnprint<>;真圖8main<>函數(shù)流程圖第五章運(yùn)行結(jié)果與分析5.1程序調(diào)試此次課程設(shè)計進(jìn)程調(diào)度模擬程序是用C編寫的程序,運(yùn)行環(huán)境是MicrosoftVisualC++6.0。在VC++6.0中的編寫的程序如圖9所示。圖9vc++6.0中調(diào)試程序5.2運(yùn)行結(jié)果首先設(shè)置時間片大小,然后根據(jù)提示,選擇1創(chuàng)建進(jìn)程,輸入進(jìn)程的名稱,該進(jìn)程的優(yōu)先級,該進(jìn)程需要的運(yùn)行時間。然后依次創(chuàng)建三個進(jìn)程,詳細(xì)信息如圖10所示。圖10創(chuàng)建三個進(jìn)程的詳細(xì)信息點(diǎn)擊回車鍵,運(yùn)行創(chuàng)建的三個進(jìn)程,運(yùn)行過程如圖11所示。圖11三個進(jìn)程的運(yùn)行過程上述創(chuàng)建的三個進(jìn)程運(yùn)行完以后,還可以繼續(xù)創(chuàng)建新的進(jìn)程繼續(xù)運(yùn)行。如圖12所示。圖12新創(chuàng)建進(jìn)程的運(yùn)行過程5.3結(jié)果分析運(yùn)行程序后,首先根據(jù)提示設(shè)置時間片大小為10,然后順序創(chuàng)建三個進(jìn)程llg,lly,llt,它們的優(yōu)先級依次為5,8,4,需要運(yùn)行的時間為20,10,16,程序默認(rèn)三個進(jìn)程到達(dá)的時間依次為0,1,2。運(yùn)行進(jìn)程,首先比較優(yōu)先級大小,選擇進(jìn)程lly運(yùn)行,其進(jìn)程狀態(tài)為R〔運(yùn)行〕,其運(yùn)行一個時間片時間以后,該進(jìn)程運(yùn)行完成,優(yōu)先級減變?yōu)?100〔程序默認(rèn)〕,然后其進(jìn)程狀態(tài)變?yōu)镕〔完成〕;再選擇llg進(jìn)程運(yùn)行,首先其進(jìn)程狀態(tài)從W〔等待〕變?yōu)镽〔運(yùn)行〕,然后運(yùn)行一個時間片時間以后,該進(jìn)程還沒運(yùn)行完成,其優(yōu)先級減1變?yōu)?,相比llt進(jìn)程,他們具有相同的優(yōu)先級,所以繼續(xù)運(yùn)行l(wèi)lg進(jìn)程,再運(yùn)行一個時間片以后,該
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞動合同違約責(zé)任及典型案例分析
- 家庭用工合同模板參考范本
- 篇二:購房合同范本規(guī)范
- 室內(nèi)防水改造合同范本
- 定制旅行服務(wù)協(xié)議合同
- 房地產(chǎn)開發(fā)施工合同樣本
- 金融市場中銀行承兌質(zhì)押合同的法律效力
- 兼職市場拓展合同樣本
- 發(fā)射設(shè)備在極端環(huán)境下的穩(wěn)定性檢測考核試卷
- 塑膠跑道材料的生產(chǎn)工藝與質(zhì)量控制考核試卷
- GB/Z 44047-2024漂浮式海上風(fēng)力發(fā)電機(jī)組設(shè)計要求
- (完整)2019年風(fēng)廉政建設(shè)主體責(zé)任落實(shí)情況監(jiān)督檢查記錄表
- 絕句遲日江山麗說課稿
- 物業(yè)員工安全知識教育培訓(xùn)
- 課堂教學(xué)質(zhì)量評價表
- 人工智能通識-課件全套 黃君羨 01-12 初識人工智能 -AIGC安全與倫理
- 時薪制員工合同范本
- 《智慧旅游認(rèn)知與實(shí)踐》課件-第九章 智慧旅行社
- 執(zhí)業(yè)藥師藥學(xué)考試題庫及答案(完整版)
- 浙江紹興市勘察測繪院下屬國有企業(yè)紹興市勘察測繪有限公司招聘筆試題庫2024
- 第1課《鄧稼先》課件語文七年級下冊2
評論
0/150
提交評論