操作系統(tǒng)一個小型操作系統(tǒng)地設(shè)計與實現(xiàn)課程設(shè)計_第1頁
操作系統(tǒng)一個小型操作系統(tǒng)地設(shè)計與實現(xiàn)課程設(shè)計_第2頁
操作系統(tǒng)一個小型操作系統(tǒng)地設(shè)計與實現(xiàn)課程設(shè)計_第3頁
操作系統(tǒng)一個小型操作系統(tǒng)地設(shè)計與實現(xiàn)課程設(shè)計_第4頁
操作系統(tǒng)一個小型操作系統(tǒng)地設(shè)計與實現(xiàn)課程設(shè)計_第5頁
免費預(yù)覽已結(jié)束,剩余45頁可下載查看

下載本文檔

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

文檔簡介

1、實用文檔南通大學(xué)計算機科學(xué)與技術(shù)學(xué)院操作系統(tǒng)課程設(shè)計報告專業(yè):學(xué)生姓名:學(xué)號:時間:文案大全實用文檔操作系統(tǒng)模擬算法課程設(shè)計報告設(shè)計要求將本學(xué)期三次的實驗集成實現(xiàn):A.處理機管理;B.存儲器管理;C.虛擬存儲器的缺頁調(diào)度。設(shè)計流程圖主流程圖文案大全實用文檔A.處理機調(diào)度1)先來先服務(wù)FCFS先來先服務(wù)算法流程文案大全實用文檔2)時間片輪轉(zhuǎn)法開始文案大全輸入進(jìn)程總數(shù)輸入各邊程信息'輸出為就緒狀態(tài)的進(jìn)程的信息指針?biāo)傅倪M(jìn)程是否結(jié)束跳過已結(jié)束的程序更改正在運-N.行的進(jìn)程的已運行時間輸出此時為就緒狀態(tài)的進(jìn)程的信息*如果存在下一個進(jìn)程的話指向下一個進(jìn)程N+時間片輪轉(zhuǎn)算法流程圖結(jié)束實用文檔B.存

2、儲器管理(可變式分區(qū)管理)1)首次適應(yīng)法分配流程圖文案大全實用文檔首次適應(yīng)算法回收流程圖文案大全實用文檔開始輸入完成進(jìn)程的標(biāo)號在分配區(qū)表中查找釋放區(qū)p下鄰分區(qū)空釋放區(qū)p上鄰分區(qū)空前一個空閑區(qū)的后向指針指向p的后一個分區(qū),p的后一個分區(qū)的前向指針指向p的前一個分區(qū),且p的前一個分區(qū)大小更改為加上p的大小,釋放p前一個分區(qū)的后向指針指向p的后一個空閑分區(qū),p的后一個空閑分區(qū)的前向指針指向p的前一個分區(qū),且p的后一個分區(qū)大小更改為加上p的大小前一個空閑區(qū)的后向指針指向p的后一個空閑分區(qū),p的后一個空閑分區(qū)的前向指針指向p的前一個空閑分區(qū),且p的前一個空閑分區(qū)大小更改為加上釋放區(qū)p上下均鄰空閑區(qū)釋放區(qū)

3、p上下均不鄰空閑區(qū)p的大小再加上p的后一個空閑分區(qū)的大小,合并后的這個空閑區(qū)的后向指針指向p的下下個分區(qū),如果p的下下個分區(qū)不為空,則其前向指針指向合并后的這個空I區(qū),釋放p和p的下一個分區(qū)將p放在鏈?zhǔn)祝⑿薷钠錉顟B(tài)位為空閑2)最佳適應(yīng)法文案大全實用文檔回收內(nèi)存流程C.虛擬存儲器的缺頁調(diào)度文案大全實用文檔1)先進(jìn)先出FIFO分配一塊FIFO淘汰算法流程2)LRU文案大全實用文檔LRU淘汰算法流程實現(xiàn)原理文案大全實用文檔主界面=回設(shè)計一個框架分別去鏈接處理機管理、存儲器管理和缺頁調(diào)度相關(guān)的程序*C:ProgramFilesXMicrosoftVisualStudioMyProjectscxlDe

4、btigcxl.exeh操作系統(tǒng)課程設(shè)計一1.處理機管理W.存儲器管理3.缺頁調(diào)度A.處理機調(diào)度1)先來先服務(wù)FCFS(一)任務(wù)先來先服務(wù)的調(diào)度算法實現(xiàn)處理機調(diào)度。(二)要求1 .實現(xiàn)對FCFSB法的模擬實現(xiàn)2 .計算出該算法的平均作業(yè)周轉(zhuǎn)時間、平均帶權(quán)作業(yè)周轉(zhuǎn)時間(三)原理按作業(yè)到達(dá)CPU時間先后順序進(jìn)行非剝奪式調(diào)度,先到達(dá)CPU的作業(yè)先被執(zhí)行(四)數(shù)據(jù)結(jié)構(gòu)structtask_struct(.進(jìn)程名稱*/進(jìn)程編號*/到達(dá)時間*/開始運行時間*/運行時間*/運行結(jié)束時間*/優(yōu)先級*/運行次序*/調(diào)度標(biāo)志*/charname;/*intnumber;/*floatcome_time;/*flo

5、atrun_begin_time;/*floatrun_time;/*floatrun_end_time;/*intpriority;/*intorder;/*intrun_flag;/*tasksMAX;intfcfs()/*先來先服務(wù)算法*/進(jìn)程名一鏈接指針一到達(dá)時間估計運行時間一進(jìn)程狀態(tài)進(jìn)程控制塊結(jié)構(gòu)(五)實現(xiàn)方法建立一個鏈表按照到達(dá)CPUfi勺時間從小到大排列,只需從第一個作業(yè)(頭結(jié)點)依次調(diào)度到最后一個作業(yè)(尾結(jié)點)。文案大全實用文檔(六)運行界面測試數(shù)據(jù):作業(yè)名到達(dá)時間運行時間A028B09C03執(zhí)行FCF就法如下:口且ikeFiltJtr'Mic口:口ftViu-afiS

6、tudioMyProfectlDe?bug'ScxI.fxfh課作系統(tǒng)通社設(shè)計工-處理機管5理2一存楠器管理三一缺頁調(diào)度1.先率先服務(wù)篝法2.時間片轉(zhuǎn)轉(zhuǎn)算法”返回開始菜單卜5,末先月員密算法限業(yè)名到達(dá)口寸間運行口寸間開始口寸間停止口寸間運行次序周幢時間nS28533128n79KI42N715C834245337筆均囿楂時間:33.3333|F.土耳常校周轉(zhuǎn)時間,&-74Hs1-處理機管理士-存儲器管理-缺頁調(diào)度2)時間片輪轉(zhuǎn)法(一)任務(wù)只對進(jìn)程的運行模擬,將其運行時間加一,判斷要求運行時間與已運行時間是否相等,若相等則表示進(jìn)程結(jié)束,進(jìn)程退出調(diào)度,釋放資源。(二)要求1 .實現(xiàn)

7、對RR算法的模擬實現(xiàn)2 .顯示執(zhí)行完一個時間片的結(jié)果。(三)原理時間片輪轉(zhuǎn)算法中,系統(tǒng)將所有的就程序按先來先服務(wù)的原則排成一個隊歹|,每次調(diào)度時,把CPS配給隊首進(jìn)程,并令其執(zhí)行一個時間片。當(dāng)執(zhí)行的時間片用完時,調(diào)度程序停止該進(jìn)程的執(zhí)行,并將它送往就緒隊列的末尾;然后,再把處理機分配給就緒隊列中新的隊首進(jìn)程,同時也讓它執(zhí)行一個時問片。(四)數(shù)據(jù)結(jié)構(gòu)temp->state='R'/初始狀態(tài)每個進(jìn)程均為運行態(tài)temp->allocation=0;/初始時進(jìn)程均不占用cpunum+=temp->need_time;/用num#限制循環(huán)的次數(shù)(五)實現(xiàn)方法處理器調(diào)度總

8、是選擇標(biāo)志單元指示的進(jìn)程運行。執(zhí)行:已運行時間+1來模擬進(jìn)程的一次運行,表示進(jìn)程已經(jīng)運行過一個單位的時間。當(dāng)一個進(jìn)程被選中運行時,必須設(shè)置該進(jìn)程可以運行的時間片值,以及恢復(fù)進(jìn)程的現(xiàn)場,讓它占有處理器運行,直到出現(xiàn)等待事件或運行滿一個時間片進(jìn)程運行一次后,應(yīng)把該進(jìn)程的進(jìn)程控制塊中的指針值送到標(biāo)志單元,以指示下一個輪到運行的進(jìn)程。同時,應(yīng)判斷該進(jìn)程的要求運行時間與已運行時間,文案大全實用文檔若該進(jìn)程的要求運行時間"已運行時間,則表示它尚未執(zhí)行結(jié)束,應(yīng)待到下一輪時再運行。若該進(jìn)程的要求運行時間=已運行時間,則表示它已經(jīng)執(zhí)行結(jié)束,應(yīng)指導(dǎo)它的狀態(tài)修改成“結(jié)束”且退出隊列。此時,應(yīng)把該進(jìn)程的進(jìn)程

9、控制塊中的指針值送到前面一個進(jìn)程的指針位置。進(jìn)程名鏈接指針到達(dá)時間估計運行時間進(jìn)程狀態(tài)進(jìn)程控制塊結(jié)構(gòu)(六)運行界面測試數(shù)據(jù):作業(yè)號執(zhí)行時間/sA1B2C1執(zhí)行時間片輪轉(zhuǎn)算法RW口下:耀N秒厚J余時間AM加u迂3秒后:挑槨朔余時間A0B1C音罌髀余時間占用CX時間Bs030S占用RU時間03Ptsle占用cpu時間占用時間1B1S1S3.返回開始菜單工處理機管理馥在儲器管理3.缺頁調(diào)度1.先來先服務(wù)算法2.時間片輪轉(zhuǎn)算法MWMMMMMMUXMMMHXMKM日寸司片車色車去調(diào)JMXMMMMMMMyMMMMIMC:PragramFilesXMicrosoftVisualStudioMyProject

10、sXcxrDebugXcxI,exe"0ABG占用cpu時閭1一處理機管理2一存哺器管理就缺頁調(diào)度B.存儲器管理(可變式分區(qū)管理)文案大全實用文檔1)首次適應(yīng)法(一)任務(wù)通過采用首次適應(yīng)算法實現(xiàn)內(nèi)存的分配與回收,并可以查看和顯示當(dāng)前內(nèi)存現(xiàn)狀。(二)要求1 .實現(xiàn)對FF算法的模擬實現(xiàn)2 .輸入要進(jìn)行分配內(nèi)存的進(jìn)程ID和相應(yīng)所需內(nèi)存大小,回收內(nèi)存時輸入已運行的進(jìn)程ID。(三)原理FF算法要求空閑鏈已地址遞增的次序連接。分配內(nèi)存時,從鏈?zhǔn)组_始順序查找,直到找到第一個滿足要求的空間并分配給進(jìn)程,把分配后余下的空間仍然留在鏈表中。若從鏈?zhǔn)字伶溛捕疾粷M足要求,則分配失敗。該算法傾向于優(yōu)先使用低地

11、址的空間。(四)數(shù)據(jù)結(jié)構(gòu)intconstMEMO=256;/初始化常類型MEMQ用MEM法示內(nèi)存大?。ǔn愋偷淖兞炕?qū)ο蟮闹凳遣荒鼙桓碌模﹕tructFreeMemory(intID;intStartAdd;intSize;boolState;/定義state為布爾型變量,其值只有真(TRUE)和假(FALSE)FreeMemory*Next;FreeMemory*AllocTable=newFreeMemory;/建立全局管理表用于內(nèi)與回收FreeMemory*PtrforCycleFit=AllocTable;/為循環(huán)首次適應(yīng)定義的指針,止匕指針用于指向當(dāng)前查找的起始地址;/初始化內(nèi)存函

12、數(shù)voidMemoryInit(FreeMemory*&tempAdd)(tempAdd->ID=0;/初始化當(dāng)前進(jìn)程為空tempAdd->Size=MEMO;/初始化可分配空間為內(nèi)存大小tempAdd->StartAdd=0;/初始化起始地址為0tempAdd->State=false;/初始化狀態(tài)為未分配tempAdd->Next=NULL;/初始化下一個進(jìn)程也為空/反饋內(nèi)存現(xiàn)態(tài)voidDispMemory()(FreeMemory*temp=AllocTable;/全局管理表反映內(nèi)存狀態(tài)cout<<”系統(tǒng)總內(nèi)存:"<<

13、;MEMO<<endl;for(;temp;temp=temp->Next)cout<<"進(jìn)程ID:"<<temp->ID<<""<<"大?。?quot;<<temp->Size<<""<<"起始文案大全實用文檔地址:"<<temp->StartAdd<<""<<"是否已分配:"<<temp->

14、State<<endl;/輸出內(nèi)存的各個變量(五)實現(xiàn)方法可變式分區(qū)管理是指在處理作業(yè)過程中建立分區(qū),使分區(qū)大小正好適合作業(yè)的需要,并且分區(qū)的個數(shù)是可以調(diào)整的。當(dāng)需要裝入一個作業(yè)時,根據(jù)作業(yè)需要的貯存量,查看是否有足夠的空閑空間,若有,則按需求量分割一部分給作業(yè);若無,則作業(yè)等待。隨著作業(yè)的裝入、完成,主存空間被分割成許多大大小小的分區(qū)。有的分區(qū)被分配作業(yè)占用,有的分區(qū)空閑。在空閑區(qū)表中,按空閑區(qū)首地址從低到高進(jìn)行登記。當(dāng)一個作業(yè)執(zhí)行完成時,作業(yè)所占用的分區(qū)應(yīng)歸還給系統(tǒng)。在歸還時,要考慮相鄰空間區(qū)合并問題。作業(yè)的釋放區(qū)與空閑區(qū)的鄰接分以下4種情況考慮:A、釋放區(qū)下鄰空閑區(qū);B、釋放

15、區(qū)上鄰空閑區(qū);C、釋放區(qū)上下都與空閑區(qū)鄰接;D釋放區(qū)上鄰空閑區(qū)不鄰接。(六)運行界面系統(tǒng)總內(nèi)存為256時,分別為進(jìn)程1、2、3分配大小為64、128、64的內(nèi)存。執(zhí)行首次適應(yīng)算法分配內(nèi)存如下:系統(tǒng)總內(nèi)存;256進(jìn)程m1左小I64用卷抖.0是百旦目修大小128起始強址二64是查京分配二1大小;64起始訕址:192稟否已務(wù)首己門作選擇:8123Exit分配內(nèi)存回收內(nèi)存顯不內(nèi)存現(xiàn)狀若回收進(jìn)程2的內(nèi)存,執(zhí)行結(jié)果如下:統(tǒng)總內(nèi)存二2S6程皿3大小祚選擇,0Exit1分配內(nèi)存2向收內(nèi)存3顯示內(nèi)存現(xiàn)狀64±28649直工:猿:址城址也d也土4.口±-4口史-4口1己已:酉酉配八Cr已否否杳

16、香TE是422)最佳適應(yīng)法(一)任務(wù)通過采用最佳適應(yīng)算法實現(xiàn)內(nèi)存的分配與回收,并可以查看和顯示當(dāng)前內(nèi)存現(xiàn)狀。文案大全實用文檔(二)要求1 .實現(xiàn)對BF算法的模擬實現(xiàn)2 .輸入要進(jìn)行分配內(nèi)存的進(jìn)程ID和相應(yīng)所需內(nèi)存大小,回收內(nèi)存時輸入需要回收的內(nèi)存塊。(三)原理最佳適應(yīng)算法掃描整個未分配表或鏈表,從空閑區(qū)中挑選一個能滿足用戶進(jìn)程要求的最小分區(qū)進(jìn)行分配。此算法保證不會分割一個更大的區(qū)域,使得裝入大作業(yè)的要求容易得到滿足,同時,通常把空閑區(qū)按長度遞增順序排列,查找時總是從最小的一個空閑區(qū)開始,直至找到滿足要求的分區(qū)為止,這時,最佳適應(yīng)分配算法等同于首次適應(yīng)算法。此算法的主存利用率好,所找出的分區(qū)如果

17、最好滿足要求則是最合適的。(四)數(shù)據(jù)結(jié)構(gòu)intconstMEMO=256;/初始化常類型MEMO,用MEMO表示內(nèi)存大?。ǔn愋偷淖兞炕?qū)ο蟮闹凳遣荒鼙桓碌模﹕tructFreeMemory(intID;intStartAdd;intSize;boolState;/定義state為布爾型變量,其值只有真(TRUE)和假(FALSE)FreeMemory*Next;boolAlloc_BestFit(intid,intTrySize)查找滿足此條件的x1<=TrySize<=x2的分區(qū),然后將其放置在x2中,并將x2拆分成兩個分區(qū)SortPartition(true);/使用快速排

18、序算法,升序排序for(;temp;temp=temp->Next)/*回收操作,回收過程中,要用到三個指針,上一個Last,當(dāng)前temp,下一個temp->next當(dāng)temp指向表頭或表尾時需要特殊考慮*/當(dāng)要退出工作時,就要回收此退出的工作由執(zhí)行函數(shù)調(diào)用voidEndJob(intid)Free_Memory(id);(五)實現(xiàn)方法空閑區(qū)設(shè)置為雙向鏈表,其雙向鏈的分區(qū)格式為:0(狀態(tài)位)分區(qū)大?。∟+2)大小為N的已分配區(qū)或空閑區(qū)0(狀態(tài)位)分區(qū)大小(N+2)向后指針(六)運行界面測試數(shù)據(jù)如下:進(jìn)程23456文案大全02址如址如此虬蜒地地地地地地M-4口-4口-4口A口-J口-

19、4口力fine己-eTC己-g走一|IIIa-I,IBIII-H-4AHRAt五二R三A0111*11:五Tro1:己己已tD:i&0S0TTilJffk.hsnJzypkTVT4ZA74zz足754S23012341111.一大大大大大大大it配收示1234560套Exls酮艮田»:氏挑D:D:D;0:530123filIllSISIlIlIM實用文檔所需內(nèi)存253445121310執(zhí)行最佳適應(yīng)算法為其分配內(nèi)存如下:若回收進(jìn)程4,執(zhí)行結(jié)果如下:一總IDID1DIDIDID1D選利士2S*:大大大大大大大存£230560起始地址二的是否已分配式起始地址:25提蕃已抬

20、諭:1起始姬岳59是杳已分配二1起始地樂=14葦杏已分配=0起始施拉:116是否已分會工起始地匹12y等已分配:i起始地址:139維善已分配:0存存存內(nèi)內(nèi)內(nèi)it配收示串EX分回£14JC.虛擬存儲器的缺頁調(diào)度1)先進(jìn)先出FIFO(一)任務(wù)采用先進(jìn)先出FIFO算法實現(xiàn)分頁管理的缺頁調(diào)度,并輸出每次調(diào)入調(diào)出的頁號和運行結(jié)果。(二)要求1 .實現(xiàn)對FIFO算法的模擬實現(xiàn)2 .輸出每次執(zhí)行的結(jié)果。(三)原理基于程序總是按線性順序來訪問物理空間這一假設(shè),總是淘汰最先調(diào)入主存的貢面,即淘汰在主存中駐留時間最長的頁面,認(rèn)為駐留時間最長的頁不再使用的可能性較大。(四)數(shù)據(jù)結(jié)構(gòu)voidFIFO()文案

21、大全實用文檔intlength;intfifo100=0;intpageLength;intfifoPage100=0;inti,j;cout<<"*先進(jìn)先出算法*"<<endl;pageLength=3;length=9;for(i=1;i<=length;i+)intflag=0;for(j=1;j<=pageLength;j+)if(fifoi=fifoPagej)flag=1;j=pageLength+1;elseif(fifoPagej=0)fifoPagej=fifoi;j=pageLength+1;flag=1;if(fla

22、g=1)elsecout<<"<淘汰"<<fifoPage1<<endl;for(j=1;j<=pageLength;j+)fifoPagej=fifoPagej+1;fifoPagepageLength=fifoi;(五)實現(xiàn)方法當(dāng)采用先進(jìn)先出算法時,用一個數(shù)組構(gòu)成先進(jìn)先出隊列,數(shù)組中各個元素為進(jìn)程已在主存的頁號,其隊列頭指針初始化為0.假設(shè)分配給每個進(jìn)程的內(nèi)存塊數(shù)周定。當(dāng)隊列滿需淘汰時,淘汰最先進(jìn)入主存的一頁。若該頁修改過,還有存入磁盤。然后要把當(dāng)前訪問的頁裝入該塊,并修改頁表和存儲分塊表的對應(yīng)標(biāo)志。(六)運行界面測試數(shù)據(jù)

23、:頁表長度:9;頁框長度:3;頁面請求數(shù)列:4,4,3,5,1,1,2,3,2執(zhí)行先進(jìn)先出FIFO算法結(jié)果如下:文案大全實用文檔2)LRU(一)任務(wù)采用先進(jìn)先出LRU算法實現(xiàn)分頁管理的缺頁調(diào)度,并輸出每次調(diào)入調(diào)出的頁號和運行結(jié)果。(二)要求1 .實現(xiàn)對LRU算法的模擬實現(xiàn)2 .輸出每次執(zhí)行的結(jié)果。(三)原理文案大全實用文檔最近最少使用頁面替換算法淘汰的頁面是在最近一段時間內(nèi)最久未被訪問的那一頁,它是基于程序局部性原理來考慮的,認(rèn)為那些剛被使用過的頁面可能還有立即被使用,而那些在較長時間內(nèi)未被使用的頁面可能不會立即使用。在分頁虛擬存儲系統(tǒng)中,當(dāng)硬件發(fā)出缺頁中斷后轉(zhuǎn)操作系統(tǒng)處理缺頁中斷。如果主存中

24、已無空閑塊,可采用LRU算法進(jìn)行缺頁處理。(四)數(shù)據(jù)結(jié)構(gòu)voidLRU()(intlength;intlru100=0;intpageLength;intlruPage100=0;inti,j;cout<<"*最近最少使用LRU算法*"<<endl;pageLength=3;length=9;for(i=1;i<=length;i+)intflag=0;for(j=1;j<=pageLength;j+)if(lrui=lruPagej)for(intcc=j;cc>0;cc-)lruPagecc=lruPagecc-1;lruPag

25、e1=lrui;flag=1;j=pageLength+1;elseif(lruPagej=0)for(intvv=j;vv>0;vv-)lruPagevv=lruPagevv-1;lruPage1=lrui;j=pageLength+1;flag=1;if(flag=1)elsecout<<"淘汰"<<lruPagepageLength<<endl;for(j=pageLength;j>0;j-)lruPagej=lruPagej-1;文案大全實用文檔)lruPage1=lrui;)(五)實現(xiàn)方法當(dāng)采用LRU算法時,用一個數(shù)

26、組構(gòu)成堆棧,堆棧中各個元素為進(jìn)程已在主存的貢號,為了進(jìn)行頁面置換,可設(shè)置一個棧指針,初始化為0.假定分配給每個進(jìn)程的內(nèi)存塊數(shù)固定不變。當(dāng)隊列滿需淘汰時,操作系統(tǒng)選擇棧底元素淘汰,其他元素向下移一個位置,將新調(diào)入頁放棧指針指示的棧頂。當(dāng)訪問的頁在棧中時,還應(yīng)調(diào)整頁從當(dāng)前位置到棧頂。(六)運行界面測試數(shù)據(jù):頁表長度:9;頁框長度:3;頁面請求數(shù)列:2,3,5,1,5,5,4,4,3執(zhí)行最近最少使用LRU算法結(jié)果如下:'C:'-PregramFillesXMicrosoftVisualStudioMyProjectscxlDebugocLexeH-5L先進(jìn)先出算法2.LRU算法3,返

27、回開始菜單2*最近最少使用LRU算法hhmhhuxxxhhhk.M馨林時刻t修1234567S弓1用串235155443卜=0時PtP2P32目0(=1時PlP2P332t=2時Pl?2P3G32一淘汰2時PlP2P31531=4時Pl5P21P33"s時PlI-P2*P31口f淘汰3(=6時PlP2P3451尸?時PlP2P341f陶汰1產(chǎn)=8時PlpaP334S1.處理機管理*,存儲器管理3,缺頁調(diào)度文案大全實用文檔總結(jié)與體會通過本次課程設(shè)計讓我對于圖形界面設(shè)計有了一定的思路和看法,同時我對先來先服務(wù)、時間片輪轉(zhuǎn)、首次適應(yīng)算法、最佳適應(yīng)算法、先進(jìn)先出和最近最少使用算法有了更詳盡的

28、認(rèn)識。在編程的過程中發(fā)現(xiàn)會用到大量的指針,用指針來操作大量的數(shù)據(jù)比較方便,但最后應(yīng)該記得釋放資源。從這次實驗中我發(fā)現(xiàn)我對于C+掌握也有所不足,程序經(jīng)過了多次修改才得以完善,在以后應(yīng)該注重編程方面的訓(xùn)練。此外我還更深入的理解了各個進(jìn)程調(diào)度算法,及實現(xiàn)過程。在編寫程序時查詢了很多資料,間接提高了我的搜索能力。在此次課程設(shè)計過程中,對進(jìn)程的相關(guān)知識有了一定的加深。特別是對進(jìn)程的進(jìn)程控制塊的存在和價值有了更進(jìn)一步的認(rèn)識。在編寫程序的過程之中,對進(jìn)程自身信息的設(shè)計和管理以及調(diào)度的算法都有助于對書本知識的理解和掌握。特別是設(shè)計先來先服務(wù)調(diào)度算法和時間片輪轉(zhuǎn)調(diào)度算法的時候,對進(jìn)程的調(diào)度算法有了更好的深入理解

29、。對進(jìn)程管理中的等待隊列,就緒隊列,時間片等概念有了更深刻的印象。在設(shè)計此模擬操作系統(tǒng)的課設(shè)中,也加深了對C+知識的把握。解決了一些以往在編程中遇到了困難。通過此次的課程設(shè)計,不僅提高了對操作系統(tǒng)的認(rèn)知,也在同時提高了編程的能力,加強了實踐。另外,我覺得此次課程設(shè)計雖然主要問題是在編程上,但是經(jīng)過不斷的去調(diào)試,還是成功的調(diào)試了出來。但是這幾個程序用了多天的時間進(jìn)行分析和修改,雖然出現(xiàn)了不少問題,但收獲頗多!文案大全實用文檔源代碼:#include<iostream>#include<cstring>#include<cstddef>usingnamespac

30、estd;intfcfsoutput();/*調(diào)度結(jié)果輸出*/intfcfsinput();/進(jìn)程參數(shù)的初始化voidkaishi();#defineMAX10structnode建立鏈表來存放進(jìn)程數(shù)據(jù)charname5;/進(jìn)程名稱intneed_time;/所需要的時間intallocation;占用cpu的情況charstate;目前的狀態(tài)R為運行,E為運行完畢node*next;/鏈表的尾結(jié)點;structtask_structcharname;intnumber;floatcome_time;/*進(jìn)程名稱*/*進(jìn)程編號*/*到達(dá)時間*/floatrun_begin_time;/*開始運

31、行時間*/floatrun_time;floatrun_end_time;intpriority;intorder;intrun_flag;/*運行時間*/*運行結(jié)束時間*/*優(yōu)先級*/*運行次序*/*調(diào)度標(biāo)志*/tasksMAX;intcounter;/*實際進(jìn)程個數(shù)*/intfcfs()/*先來先服務(wù)算法*/fcfsinput();floattime_temp=0;inti;intnumber_schedul;time_temp=e_time;for(i=0;i<counter;i+)tasksi.run_begin_time=time_temp;tasksi.r

32、un_end_time=tasksi.run_begin_time+tasksi.run_time;文案大全實用文檔tasksi.run_flag=1;time_temp=tasksi.run_end_time;number_schedul=i;tasksnumber_schedul.order=i+1;fcfsoutput();return0;intfcfsinput()task_structtt;inti,j;初始化進(jìn)程數(shù)counter=3;初始化每個到達(dá)系統(tǒng)的時間為5、7、8e_time=rand()%9;e_time=rand()%9;tasks

33、2.come_time=rand()%9;for(i=1;i<3;i+)for(j=0;j<3-i;j+)if(e_time>tasksj+1.come_time)tt=tasksj;tasksj=tasksj+1;tasksj+1=tt;/初始化每個進(jìn)程估計運行的時間tasks0.run_time=28;tasks1.run_time=9;tasks2.run_time=3;初始化每個進(jìn)程的名字='A'='B'='C'文案大全實用文檔cout

34、<<"Q*先來先服務(wù)算法*'<<endl<<endl;for(i=0;i<counter;i+)tasksi.run_begin_time=0;tasksi.run_end_time=0;tasksi.order=0;tasksi.run_flag=0;return0;intfcfsoutput()/*調(diào)度結(jié)果輸出*/(inti;floatturn_round_time=0,f1,w=0;cout<<"作業(yè)名到達(dá)時間運行時間開始時間停止時間運行次序周轉(zhuǎn)時間"<<endl;for(i=0;i&

35、lt;counter;i+)(f1=tasksi.run_end_e_time;turn_round_time+=f1;w+=(f1/tasksi.run_time);cout<<""<<<<'t'<<""<<e_time<<'t'<<"<<tasksi.run_time<<'t'<<""

36、<<tasksi.run_begin_time<<'t'<<"<<tasksi.run_end_time<<'t'<<tasksi.order<<'t'<<f1<<'t'<<endl;cout<<"平均周轉(zhuǎn)時間:"<<turn_round_time/counter<<endl;cout<<"平均帶權(quán)周轉(zhuǎn)時間:"<

37、;<w/counter<<endl;cout<<""return0;/*/intrr()(intn=3,num=0;node*head=NULL;node*tail=NULL;cout<<"*時間片輪轉(zhuǎn)調(diào)度*'<<endl<<endl;for(inti=0;i<n;i+)(文案大全實用文檔node*temp=newnode;if(i=O)strcpy(temp->name,"A");if(i=1)strcpy(temp->name,"B&quo

38、t;);if(i=2)strcpy(temp->name,"C");temp->need_time=rand()%4+1;temp->state='R'初始狀態(tài)每個進(jìn)程均為運行態(tài)temp->allocation=0;初始時進(jìn)程均不占用cpunum+=temp->need_time;用num來限制循環(huán)的次數(shù)if(!head)(tail=head=temp;)else(tail->next=temp;tail=temp;tail->next=head;)node*p;p=head;cout«endl«

39、"初始時刻:"<<endl;cout<<"進(jìn)程"<<箕<<"剩余時間"«'t'«"占用cpu時間"<<endl;while(p!=tail)(cout«""«p->name«'t'<<""«p->need_time«'t'«'t'«p->

40、;allocation«'s'«endl;p=p->next;)cout«""«tail->name«'t'<<""«tail->need_time«'t'«'t'«p->allocation«'s'«endl;node*q;intlabel=1;intm=1;while(label=1&&m<=num)(co

41、ut«endl;label=0;while(!p->need_time)(p=p->next;)文案大全實用文檔if(p->need_time)(p->need_time-;p->allocation+;if(p->need_time=0)(p->state='E')label=1;p=p->next;)cout<<"執(zhí)行"<<m<<"秒后:"<<endl;q=head;cout<<"進(jìn)程"<&l

42、t;'t'<<"剩余時間"<<'t'<<"占用cpu時間"<<endl;while(q!=tail)(cout<<""<<q->name<<'t'<<""<<q->need_time<<'t'<<'t'<<q->allocation<<'s'<

43、<endl;q=q->next;)cout<<""<<tail->name<<'t'<<""<<tail->need_time<<'t'<<'t'<<q->allocation<<'s'<<endl;m+;)cout<<endl<<""return0;)/*/intconstMEMO=256;初始化常

44、類型MEMO,用MEMO表示內(nèi)存大小(常類型的變量或?qū)ο蟮闹凳遣荒鼙桓碌?structFreeMemory(intID;intStartAdd;intSize;boolState;定義state為布爾型變量,其值只有真(TRUE)和假(FALSE)FreeMemory*Next;);文案大全實用文檔FreeMemory*AllocTable=newFreeMemory;/建立全局管理表用于內(nèi)存分配與回收FreeMemory*PtrforCycleFit=AllocTable;/為循環(huán)首次適應(yīng)定義的指針,此指針用于指向當(dāng)前查找的起始地址;初始化內(nèi)存函數(shù)voidMemoryInit(FreeMe

45、mory*&tempAdd)tempAdd->ID=0;初始化當(dāng)前進(jìn)程為空tempAdd->Size=MEMO;/初始化可分配空間為內(nèi)存大小tempAdd->StartAdd=0;/初始化起始地址為0tempAdd->State=false;/初始化狀態(tài)為未分配tempAdd->Next=NULL;/初始化下一個進(jìn)程也為空/反饋內(nèi)存現(xiàn)態(tài)voidDispMemory()FreeMemory*temp=AllocTable;/全局管理表反映內(nèi)存狀態(tài)cout<<”系統(tǒng)總內(nèi)存:"<<MEMO<<endl;for(;te

46、mp;temp=temp->Next)cout<<"進(jìn)程ID:"<<temp->ID<<""<<"大?。?quot;<<temp->Size<<""<<"起始地址:"<<temp->StartAdd<<""<<"是否已分配:"<<temp->State<<endl;/輸出內(nèi)存的各個變量/分區(qū)排序

47、voidSortPartition(boolorder)/在此使用的是快速排序算法FreeMemory*temp1=AllocTable;FreeMemory*temp2=AllocTable;FreeMemory*Last1=temp1;FreeMemory*Last2=temp2;if(temp2->Next)temp2=temp2->Next;switch(order)case1:/升序部分for(;temp1;temp1=temp1->Next)for(;temp2;temp2=temp2->Next)if(temp1->Size>temp2->

48、;Size)&&!temp1->State&&!temp2->State)找到符合條件的,則交換文案大全實用文檔(Last1->Next=temp2;Last2->Next=temp1;FreeMemory*temp=temp2->Next;temp2->Next=temp1->Next;temp1->Next=temp->Next;)Last2=temp2;)Last1=temp1;)break;case0:/降序部分(for(;temp1;temp1=temp1->Next)(for(;temp2;

49、temp2=temp2->Next)(if(temp1->Size<temp2->Size)&&!temp1->State&&!temp2->State)找到符合條件的,則交換(Last1->Next=temp2;Last2->Next=temp1;FreeMemory*temp=temp2->Next;temp2->Next=temp1->Next;temp1->Next=temp->Next;)Last2=temp2;)Last1=temp1;)/*內(nèi)存分配*/boolAlloc_

50、FirstFit(intid,intTrySize)/定義布爾型函數(shù)Alloc_FirstFit()(/查找一個可用第一個滿足分配請求的分區(qū),如果滿足將其寫入內(nèi)存分配表文案大全實用文檔否則分配失敗,返回FreeMemory*temp=AllocTable;for(;temp;temp=temp->Next)(if(TrySize<=temp->Size&&!temp->State)第一個滿足條件的分區(qū)已找到(if(TrySize=temp->Size)/剛好和申請的大小一致(temp->ID=id;保持不變temp->Next,Size

51、,StartAdd都不用變temp->State=true;/值為真表示已分配else/比所找到的要小,則需要將其拆分(FreeMemory*NewItem=newFreeMemory;NewItem->Next=temp->Next;NewItem->ID=0;NewItem->Size=temp->Size-TrySize;NewItem->StartAdd=temp->StartAdd+TrySize;NewItem->State=false;temp->ID=id;temp->Size=TrySize;temp->

52、State=true;temp->Next=NewItem;returntrue;/endforreturnfalse;boolAlloc_BestFit(intid,intTrySize)查找滿足此條件的x1<=TrySize<=x2的分區(qū),然后將其放置在x2中,并將x2拆分成兩個分區(qū)SortPartition(true);/使用快速排序算法,升序排序FreeMemory*temp=AllocTable;if(temp->Next)temp=temp->Next;for(;temp;temp=temp->Next)if(TrySize<=temp-&

53、gt;Size&&!temp->State)/第一個滿足條件的分區(qū)已找到if(TrySize=temp->Size)/剛好和申請的大小一致文案大全實用文檔temp->ID=id;保持不變temp->Next,Size,StartAdd都不用變temp->State=true;/值為真表示已分配)else/比所找到的要小,則需要將其拆分(FreeMemory*NewItem=newFreeMemory;NewItem->Next=temp->Next;NewItem->ID=0;NewItem->Size=temp->S

54、ize-TrySize;NewItem->StartAdd=temp->StartAdd+TrySize;NewItem->State=false;temp->ID=id;temp->Size=TrySize;temp->State=true;temp->Next=NewItem;)returntrue;)/endforreturnfalse;boolAlloc_Memory(intid,intAlgorithm,intTrySize)/對算法進(jìn)行選擇(switch(Algorithm)(case 1: :returnAlloc_FirstFit(id,TrySize);break;case 2:returnAlloc_BestFit(id,TrySize);break;default:cout<<"你沒有指定算法,系統(tǒng)將默認(rèn)為首次適應(yīng)算法!"<<endl;returnAlloc_FirstFit(id,TrySize);/*EndMemoryAlloc內(nèi)存分配區(qū)操作定義完成*/文案大全實用文檔/*RecycleMemory回收內(nèi)存*/bo

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論