版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、文案大全南通大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院操作系統(tǒng)課程設(shè)計(jì)報(bào)告專業(yè):學(xué)生姓名:學(xué)號:時間:操作系統(tǒng)模擬算法課程設(shè)計(jì)報(bào)告設(shè)計(jì)要求將本學(xué)期三次的實(shí)驗(yàn)集成實(shí)現(xiàn):處理機(jī)管理;存儲器管理;虛擬存儲器的缺頁調(diào)度。設(shè)計(jì)流程圖主流程圖A.處理機(jī)調(diào)度1)先來先服務(wù)FCFS先來先服務(wù)算法流程2)時間片輪轉(zhuǎn)法開始輸入進(jìn)程總數(shù)輸入各進(jìn)程信息輸出為就緒狀態(tài)的進(jìn)程的信息指針?biāo)傅倪M(jìn)程是-.否結(jié)束更改正在運(yùn)行的進(jìn)程的已運(yùn)行時間跳過已結(jié)束的程序輸出此時為就緒狀態(tài)的進(jìn)程的信息-如果存在下一個進(jìn)程的話N結(jié)束指向下一個進(jìn)程時間片輪轉(zhuǎn)算法流程圖B.存儲器管理(可變式分區(qū)管理)1)首次適應(yīng)法分配流程圖首次適應(yīng)算法回收流程圖輸入完成進(jìn)程的標(biāo)號
2、前一個空閑區(qū)的后向指針指向p的后一個空閑分區(qū),p的后一個空閑分區(qū)的前向指針指向p的前一個空閑分區(qū),且p的前一個空閑分區(qū)大小更改為加上p的大小再加上p的后一個空閑分區(qū)的大小,合并后的這個空閑區(qū)的后向指針指向p的下下個分區(qū),如果p的下下個分區(qū)不為空,則其前向指針指向合并后的這個空閑區(qū),釋放p和p的下一個分區(qū)2)最佳適應(yīng)法回收內(nèi)存流程C.虛擬存儲器的缺頁調(diào)度1)先進(jìn)先出FIFOFIFO淘汰算法流程2)LRU實(shí)現(xiàn)原理LRU淘汰算法流程主界面設(shè)計(jì)一個框架分別去鏈接處理機(jī)管理、存儲器管理和缺頁調(diào)度相關(guān)的程序。處理機(jī)調(diào)度1)先來先服務(wù)FCFS(一)任務(wù)先來先服務(wù)的調(diào)度算法實(shí)現(xiàn)處理機(jī)調(diào)度。(二)要求實(shí)現(xiàn)對FC
3、FS算法的模擬實(shí)現(xiàn)計(jì)算出該算法的平均作業(yè)周轉(zhuǎn)時間、平均帶權(quán)作業(yè)周轉(zhuǎn)時間。(三)原理按作業(yè)到達(dá)CPU時間先后順序進(jìn)行非剝奪式調(diào)度,先到達(dá)CPU的作業(yè)先被執(zhí)行(四)數(shù)據(jù)結(jié)構(gòu)structtaskstructcharname;/*進(jìn)程名稱*/intnumber;/*進(jìn)程編號*/floatcome_time;/*到達(dá)時間*/floatrun_begin_time;/*開始運(yùn)行時間*/floatrun_time;/*運(yùn)行時間*/floatrun_end_time;/*運(yùn)行結(jié)束時間*/intpriority;/*優(yōu)先級*/intorder;/*運(yùn)行次序*/intrun_flag;/*調(diào)度標(biāo)志*/tasksM
4、AX;intfcfs()/*先來先服務(wù)算法*/進(jìn)程名鏈接指針到達(dá)時間估計(jì)運(yùn)行時間進(jìn)程狀態(tài)進(jìn)程控制塊結(jié)構(gòu)(五)實(shí)現(xiàn)方法建立一個鏈表按照到達(dá)CPU的時間從小到大排列,只需從第一個作業(yè)(頭結(jié)點(diǎn))依次調(diào)度到最后一個作業(yè)(尾結(jié)點(diǎn))。(六)運(yùn)行界面測試數(shù)據(jù):作業(yè)名到達(dá)時間運(yùn)行時間A028B09C03執(zhí)行FCFS算法如下:C:ProgramFilesMicrosoftVisualStudioMyPrqjectscxiDebugcxl.exe操布系統(tǒng)課程設(shè)訐1處理機(jī)管理2存儲器管理3.缺頁調(diào)度先來先服務(wù)算法2.時間片輪轉(zhuǎn)算法囂返回開始菜單A528533128B79334223SC834245337恒業(yè)名到達(dá)時
5、間運(yùn)行時間開始時間停止時間運(yùn)行次序周轉(zhuǎn)時間5.74074靈時間片輪轉(zhuǎn)法儲器管理3.缺頁調(diào)度片間是否相等,若相等則表示進(jìn)程結(jié)束,進(jìn)程退出調(diào)度,釋放資源。(二)要求實(shí)現(xiàn)對RR算法的模擬實(shí)現(xiàn)顯示執(zhí)行完一個時間片的結(jié)果。(三)原理時間片輪轉(zhuǎn)算法中,系統(tǒng)將所有的就程序按先來先服務(wù)的原則排成一個隊(duì)列,每次調(diào)度時,把CPU分配給隊(duì)首進(jìn)程,并令其執(zhí)行一個時間片。當(dāng)執(zhí)行的時間片用完時,調(diào)度程序停止該進(jìn)程的執(zhí)行,并將它送往就緒隊(duì)列的末尾;然后,再把處理機(jī)分配給就緒隊(duì)列中新的隊(duì)首進(jìn)程,同時也讓它執(zhí)行一個時間片。(四)數(shù)據(jù)結(jié)構(gòu)/初始狀態(tài)每個進(jìn)程均為運(yùn)行態(tài)/初始時進(jìn)程均不占用cpu/用num來限制循環(huán)的次數(shù)temp-s
6、tate=R;tempallocation=0;num+二tempneed_time;(五)實(shí)現(xiàn)方法-處理器調(diào)度總是選擇標(biāo)志單元指示的進(jìn)程運(yùn)行。執(zhí)行:已運(yùn)行時間+1來模擬進(jìn)程的一次運(yùn)行,表示進(jìn)程已經(jīng)運(yùn)行過一個單位的時間。當(dāng)一個進(jìn)程被選中運(yùn)行時,必須設(shè)置該進(jìn)程可以運(yùn)行的時間片值,以及恢復(fù)進(jìn)程的現(xiàn)場,讓它占有處理器運(yùn)行,直到出現(xiàn)等待事件或運(yùn)行滿一個時間片進(jìn)程運(yùn)行一次后,應(yīng)把該進(jìn)程的進(jìn)程控制塊中的指針值送到標(biāo)志單元,以指示下一個輪到運(yùn)行的進(jìn)程。同時,應(yīng)判斷該進(jìn)程的要求運(yùn)行時間與已運(yùn)行時間,實(shí)用文檔實(shí)用文檔文案大全處理機(jī)管理2-存儲器管聶缺頁調(diào)度若該進(jìn)程的要求運(yùn)行時間已運(yùn)行時間,則表示它尚未執(zhí)行結(jié)束,
7、應(yīng)待到下一輪時再運(yùn)行。若該進(jìn)程的要求運(yùn)行時間二已運(yùn)行時間,則表示它已經(jīng)執(zhí)行結(jié)束,應(yīng)指導(dǎo)它的狀態(tài)修改成“結(jié)束”且退出隊(duì)列。此時,應(yīng)把該進(jìn)程的進(jìn)程控制塊中的指針值送到前面一個進(jìn)程的指針位置。進(jìn)程名鏈接指針到達(dá)時間估計(jì)運(yùn)行時間進(jìn)程狀態(tài)進(jìn)程控制塊結(jié)構(gòu)(六)運(yùn)行界面測試數(shù)據(jù):作業(yè)號執(zhí)行時間/sA1B2C1執(zhí)行時間片輪轉(zhuǎn)算法RR如下:C1B2占用cpu時間7A占用cpu時間is2s區(qū)M余時間Q0理ABC占用CJH1時間isisIsM余時間Q1遠(yuǎn)ABC占用cpu時間is0sIsm余時間Q2趕個王ABC占用cpu時間0S0SIs菊除時間12趕1-處理機(jī)管理2-存儲器管理M缺頁調(diào)度先來先服務(wù)算法2-時間片輪轉(zhuǎn)算
8、法3.返回開始菜單禺C:Program1、炎時-4口昱交禾fl1)首次適應(yīng)法(一)任務(wù)通過采用首次適應(yīng)算法實(shí)現(xiàn)內(nèi)存的分配與回收,并可以查看和顯示當(dāng)前內(nèi)存現(xiàn)狀。(二)要求實(shí)現(xiàn)對FF算法的模擬實(shí)現(xiàn)輸入要進(jìn)行分配內(nèi)存的進(jìn)程ID和相應(yīng)所需內(nèi)存大小,回收內(nèi)存時輸入已運(yùn)行的進(jìn)程ID。(三)原理FF算法要求空閑鏈已地址遞增的次序連接。分配內(nèi)存時,從鏈?zhǔn)组_始順序查找,直到找到第一個滿足要求的空間并分配給進(jìn)程,把分配后余下的空間仍然留在鏈表中。若從鏈?zhǔn)字伶溛捕疾粷M足要求,則分配失敗。該算法傾向于優(yōu)先使用低地址的空間。(四)數(shù)據(jù)結(jié)構(gòu)intconstMEMO=256;/初始化常類型MEMO,用MEMO表示內(nèi)存大?。?/p>
9、常類型的變量或?qū)ο蟮闹凳遣荒鼙桓碌模﹕tructFreeMemoryintID;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(FreeMemory*&tempAdd)tempAdd-ID=O;/初始化
10、當(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)存:MEMONext)cout進(jìn)程ID:ID大小:Size起始地址:StartAdd是否已分配:StateNext)/*回收操作,回收過程中,要用到三個指針,上一個Last,當(dāng)前temp,下一個temp-n
11、ext當(dāng)temp指向表頭或表尾時需要特殊考慮*/當(dāng)要退出工作時,就要回收此退出的工作由執(zhí)行函數(shù)調(diào)用voidEndJob(intid)Free_Memory(id);(五)實(shí)現(xiàn)方法空閑區(qū)設(shè)置為雙向鏈表,其雙向鏈的分區(qū)格式為:0(狀態(tài)位)分區(qū)大小(N+2)向前指針大小為N的已分配區(qū)或空閑區(qū)0(狀態(tài)位)分區(qū)大?。∟+2)向后指針(六)運(yùn)行界面測試數(shù)據(jù)如下:進(jìn)程123456所需內(nèi)存2534451213100111-nJ1:己己己tEH:己己fEnfEnfEnl丁乎已已噩SE否59021025111:.IL=i:匕ik=i=.J.-!T地地地地地地舒厶口厶口厶口厶口厶口A口女鷲蠢席起:大大大大大大大12
12、34560圣.忌ID:ID:ID:ID:ID:ID:ID:迤0丄2呈呈呈呈呈呈呈忖:壬|壬|壬|壬|壬|壬|禾-若回收進(jìn)程4,執(zhí)行結(jié)果如下:0011nJ1:THUnr-JuffiH:-Ju-Ju比已已託託託否鑫590121025111:起始地址主起始地址主起始地址主起始地址主起始地址主起始地址2起始地址754523012341111652LP、存內(nèi)擇H心IDIDIDIDIDIDID選0丄2E亠亠口王口王口王口王口王口王-乍執(zhí)行最佳適應(yīng)算法為其分配內(nèi)存如下:C.虛擬存儲器的缺頁調(diào)度1)先進(jìn)先出FIFO(一)任務(wù)采用先進(jìn)先出FIFO算法實(shí)現(xiàn)分頁管理的缺頁調(diào)度,并輸出每次調(diào)入調(diào)出的頁號和運(yùn)行結(jié)果。(
13、二)要求1.實(shí)現(xiàn)對FIFO算法的模擬實(shí)現(xiàn)2輸出每次執(zhí)行的結(jié)果。(三)原理基于程序總是按線性順序來訪問物理空間這一假設(shè),總是淘汰最先調(diào)入主存的頁面,即淘汰在主存中駐留時間最長的頁面,認(rèn)為駐留時間最長的頁不再使用的可能性較大。(四)數(shù)據(jù)結(jié)構(gòu)voidFIFO()intlength;intfifo100=0;intpageLength;TxTxTxTxTxTxTxTxTxTxTxTxTx出算法intfifoPage100=0;inti,j;coutvv11TT平平平平平平平平平平平平平平平平平平平平平平平平平平八*an/IpageLength=3;length=9;for(i=1;iv=length;
14、i+)intflag=0;for(j=1;jv=pageLength;j+)if(fifoi=fifoPagej)flag=1;j=pageLength+1;elseif(fifoPagej=0)fifoPagej=fifoi;j=pageLength+1;flag=1;if(flag=1)elsecoutvvf淘汰vvfifoPage1vvendl;for(j=1;j0;cc-)lruPagecc=lruPagecc-1;lruPage1=lrui;flag=1;j=pageLength+1;elseif(lruPagej=0)for(intvv=j;vv0;vv-)lruPagevv=lr
15、uPagevv-1;lruPage1=lrui;j=pageLength+1;flag=1;if(flag=1)elsecoutvvfor(j=pageLength;j0;j_)lruPagej=lruPagej-1;lruPagel=lrui;(五)實(shí)現(xiàn)方法當(dāng)采用LRU算法時,用一個數(shù)組構(gòu)成堆棧,堆棧中各個元素為進(jìn)程已在主存的頁號,為了進(jìn)行頁面置換,可設(shè)置一個棧指針,初始化為0.假定分配給每個進(jìn)程的內(nèi)存塊數(shù)固定不變。當(dāng)隊(duì)列滿需淘汰時,操作系統(tǒng)選擇棧底元素淘汰,其他元素向下移一個位置,將新調(diào)入頁放棧指針指示的棧頂。當(dāng)訪問的頁在棧中時,還應(yīng)調(diào)整頁從當(dāng)前位置到棧頂。(六)運(yùn)行界面測試數(shù)據(jù):頁表長度
16、:9;頁框長度:3;頁面請求數(shù)列:2,3,5,1,5,5,4,4,3執(zhí)行最近最少使用LRU算法結(jié)果如下:總結(jié)與體會通過本次課程設(shè)計(jì)讓我對于圖形界面設(shè)計(jì)有了一定的思路和看法,同時我對先來先服務(wù)、時間片輪轉(zhuǎn)、首次適應(yīng)算法、最佳適應(yīng)算法、先進(jìn)先出和最近最少使用算法有了更詳盡的認(rèn)識。在編程的過程中發(fā)現(xiàn)會用到大量的指針,用指針來操作大量的數(shù)據(jù)比較方便,但最后應(yīng)該記得釋放資源。從這次實(shí)驗(yàn)中我發(fā)現(xiàn)我對于C+掌握也有所不足,程序經(jīng)過了多次修改才得以完善,在以后應(yīng)該注重編程方面的訓(xùn)練。此外我還更深入的理解了各個進(jìn)程調(diào)度算法,及實(shí)現(xiàn)過程。在編寫程序時查詢了很多資料,間接提高了我的搜索能力。在此次課程設(shè)計(jì)過程中,對
17、進(jìn)程的相關(guān)知識有了一定的加深。特別是對進(jìn)程的進(jìn)程控制塊的存在和價值有了更進(jìn)一步的認(rèn)識。在編寫程序的過程之中,對進(jìn)程自身信息的設(shè)計(jì)和管理以及調(diào)度的算法都有助于對書本知識的理解和掌握。特別是設(shè)計(jì)先來先服務(wù)調(diào)度算法和時間片輪轉(zhuǎn)調(diào)度算法的時候,對進(jìn)程的調(diào)度算法有了更好的深入理解。對進(jìn)程管理中的等待隊(duì)列,就緒隊(duì)列,時間片等概念有了更深刻的印象。在設(shè)計(jì)此模擬操作系統(tǒng)的課設(shè)中,也加深了對C+知識的把握。解決了一些以往在編程中遇到了困難。通過此次的課程設(shè)計(jì),不僅提高了對操作系統(tǒng)的認(rèn)知,也在同時提高了編程的能力,加強(qiáng)了實(shí)踐。另外,我覺得此次課程設(shè)計(jì)雖然主要問題是在編程上,但是經(jīng)過不斷的去調(diào)試,還是成功的調(diào)試了出
18、來。但是這幾個程序用了多天的時間進(jìn)行分析和修改,雖然出現(xiàn)了不少問題,但收獲頗多!源代碼:#includeviostream#includevcstring#includeusingnamespacestd;intfcfsoutput();/*調(diào)度結(jié)果輸出*/intfcfsinput();進(jìn)程參數(shù)的初始化voidkaishi();#defineMAX10建立鏈表來存放進(jìn)程數(shù)據(jù)進(jìn)程名稱所需要的時間占用cpu的情況目前的狀態(tài)R為運(yùn)行,E為運(yùn)行完畢鏈表的尾結(jié)點(diǎn)structnodecharname5;intneed_time;intallocation;charstate;node*next;struc
19、ttask_struct/*進(jìn)程名稱*/*進(jìn)程編號*/*到達(dá)時間*/*開始運(yùn)行時間*/*運(yùn)行時間*/*運(yùn)行結(jié)束時間*/*優(yōu)先級*/*運(yùn)行次序*/*調(diào)度標(biāo)志*/charname;intnumber;floatcome_time;floatrun_begin_time;floatrun_time;floatrun_end_time;intpriority;intorder;intrun_flag;tasksMAX;intcounter;/*實(shí)際進(jìn)程個數(shù)*/intfcfs()/*先來先服務(wù)算法*/fcfsinput();floattime_temp=O;inti;intnumber_schedul;
20、time_temp=tasksO.come_time;for(i=O;ivcounter;i+)tasksi.run_begin_time=time_temp;tasksi.run_end_time=tasksi.run_begin_time+tasksi.run_time;tasksi.run_flag=l;time_temp=tasksi.run_end_time;number_schedul=i;tasksnumber_schedul.order=i+1;fcfsoutput();return0;intfcfsinput()task_structtt;inti,j;初始化進(jìn)程數(shù)count
21、er=3;初始化每個到達(dá)系統(tǒng)的時間為5、7、e_time=rand()%9;e_time=rand()%9;e_time=rand()%9;for(i=1;iv3;i+)for(j=0;jv3-i;j+)if(e_timetasksj+e_time)tt=tasksj;tasksj=tasksj+1;tasksj+1=tt;初始化每個進(jìn)程估計(jì)運(yùn)行的時間tasks0.run_time=28;tasks1.run_time=9;tasks2.run_time=3;初始化每個進(jìn)程的名字tasksO.name=A;=B;=C;J.-ft1*1*1*1*1*1
22、*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*coutname,A);if(i=l)strcpy(temp-name,B);if(i=2)strcpy(temp-name,C);temp-need_time=rand()%4+1;temp-state=R;初始狀態(tài)每個進(jìn)程均為運(yùn)行態(tài)temp-allocation=0;/初始時進(jìn)程均不占用cpunum+=temp-need_time;用num來限制循環(huán)的次數(shù)if(!head)tail=head=temp;elsetail-next=temp;tail=temp;tail-next=head;node*p;p=head;
23、coutvvendlvv初始時刻:vvendl;coutvv進(jìn)程vvtvv剩余時間vvtvv占用cpu時間vvendl;while(p!=tail)coutvvvvp-namevvtvvvvp-need_timevvtvvtvvp-allocationvvsvvendl;p=p-next;coutvvvvtail-namevvtvvvvtail-need_timevvtvvtvvp-allocationvvsvvendl;node*q;intlabel=1;intm=1;while(label=1&mv=num)coutvvendl;label=0;while(!p-need_time)p=p
24、-next;if(p-need_time)p-need_time-;p-allocation+;if(p-need_time=O)p-state=E;label=l;p=p-next;coutvv執(zhí)行vvmvv秒后:vvendl;q=head;coutvv進(jìn)程垃剩余時間北namevvtvvvvq-need_timevvtvvtvvq-allocationvvsvvendl;q=q-next;coutvvvvtail-namevvtvvvvtail-need_timevvtvvtvvq-allocationvvsvvendl;m+;coutvvendlvv;return0;intconstMEM
25、O=256;/初始化常類型MEMO,用MEMO表示內(nèi)存大?。ǔn愋偷淖兞炕?qū)ο蟮闹凳遣荒鼙桓碌模﹕tructFreeMemoryintID;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(FreeM
26、emory*&tempAdd)tempAdd-ID=O;/初始化當(dāng)前進(jìn)程為空tempAdd-Size=MEMO;初始化可分配空間為內(nèi)存大小tempAdd-StartAdd=O;/初始化起始地址為0tempAdd-State=false;初始化狀態(tài)為未分配tempAdd-Next=NULL;/初始化下一個進(jìn)程也為空反饋內(nèi)存現(xiàn)態(tài)voidDispMemory()FreeMemory*temp=AllocTable;/全局管理表反映內(nèi)存狀態(tài)coutvv系統(tǒng)總內(nèi)存:vvMEMOvvendl;for(;temp;temp=temp-Next)coutvv進(jìn)程ID:ID大?。篠izeStartAddvvvv
27、是否已分配:vvtemp-Statevvendl;/輸出內(nèi)存的各個變量分區(qū)排序voidSortPartition(boolorder)/在此使用的是快速排序算法FreeMemory*templ=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(temp
28、1-Sizetemp2-Size)&!temp1-State&!temp2-State)/找到符合條件的,則交換Lastl-Next=temp2;Last2-Next=templ;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;temp2=temp2-Next)if(temp1-SizeSize)&!temp1-State&!temp2-Stat
29、e)找到符合條件的,則交換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_FirstFit(intid,intTrySize)/定義布爾型函數(shù)Alloc_FirstFit()查找一個可用第一個滿足分配請求的分區(qū),如果滿足將其寫入內(nèi)存分配表否則分配失敗,返回FreeMemory*temp=AllocTable;for(;temp;temp=temp-Nex
30、t)if(TrySizeSize&!temp-State)第一個滿足條件的分區(qū)已找到if(TrySize=temp-Size)/剛好和申請的大小一致temp-ID=id;保持不變temp-Next,Size,StartAdd都不用變temp-State=true;值為真表示已分配else/比所找到的要小,貝懦要將其拆分FreeMemory*Newltem=newFreeMemory;NewItem-Next=temp-Next;Newltem-ID=O;NewItem-Size=temp-Size-TrySize;NewItem-StartAdd=temp-StartAdd+TrySize;N
31、ewItem-State=false;temp-ID=id;temp-Size=TrySize;temp-State=true;temp-Next=NewItem;returntrue;/endforreturnfalse;boolAlloc_BestFit(intid,intTrySize)/查找滿足此條件的xl=TrySizeNext)temp=temp-Next;for(;temp;temp=temp-Next)if(TrySizeSize&!temp-State)第一個滿足條件的分區(qū)已找到if(TrySize=temp-Size)/剛好和申請的大小一致temp-ID=id;保持不變te
32、mp-Next,Size,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-State=true;temp-Next=NewItem;returntru
33、e;/endforreturnfalse;boolAlloc_Memory(intid,intAlgorithm,intTrySize)/對算法進(jìn)行選擇switch(Algorithm)case1:returnAlloc_FirstFit(id,TrySize);break;case2:returnAlloc_BestFit(id,TrySize);break;default:coutvv你沒有指定算法,系統(tǒng)將默認(rèn)為首次適應(yīng)算法!vvendl;returnAlloc_FirstFit(id,TrySize);/*EndMemoryAlloc內(nèi)存分配區(qū)操作定義完成*/*RecycleMemory
34、回收內(nèi)存*/boolFree_Memory(intid)FreeMemory*temp=AllocTable;FreeMemory*Last=temp;if(temp-ID=id)考慮第一條記錄的特殊情況if(temp-Next&!temp-Next-State)下一分區(qū)沒有被占用,將與本條合并temp-ID=0;temp-Size=temp-Size+temp-Next-Size;temp-State=O;回收Last=temp-Next;temp-Next=temp-Next-Next;deleteLast;else/只有第一分區(qū)為空,則清除相關(guān)表項(xiàng)的數(shù)據(jù)temp-ID=0;temp-St
35、ate=false;改為沒有使用狀態(tài)returntrue;特殊情況第一條if(temp-Next)temp=temp-Next;for(;temp;temp=temp-Next)/*回收操作,回收過程中,要用到三個指針,上一個Last,當(dāng)前temp,下一個temp-next當(dāng)temp指向表頭或表尾時需要特殊考慮*/if(temp-ID=id)/begin找到該ID表項(xiàng)if(temp-Next)沒有到最后一條if(!Last-State&!temp-Next-State)/回收區(qū)與插入點(diǎn)的前、后兩個分區(qū)鄰接優(yōu)先級為1Last-Next=temp-Next-Next;Last-Size=Last-
36、Size+temp-Size+temp-Next-Size;deletetemp-Next;deletetemp;elseif(!Last-State)回收區(qū)與插入點(diǎn)的前一個分區(qū)相鄰接優(yōu)先級為2Last-Next=temp-Next;Last-Size=Last-Size+temp-Size;deletetemp;elseif(!(temp-Next-State)回收區(qū)與插入點(diǎn)的后一個分區(qū)相鄰接優(yōu)先級為3/if(temp-Next-Next)Last=temp-Next-Next;/else/Last=NULL;temp-Size=temp-Size+temp-Next-Size;temp-S
37、tate=false;temp-ID=O;FreeMemory*tempfor=temp-Next;temp-Next=Last;deletetempfor;else/回收區(qū)為獨(dú)立單位.優(yōu)先級為4temp-ID=0;temp-State=false;/最后一條elseif(!Last-State)最后一條的前一條為空Last-Size=Last-Size+temp-Size;Last-Next=NULL;deletetemp;else/最后一條的前一條不為空temp-ID=0;temp-State=O;returntrue;/end找到該ID表項(xiàng)此類情況處理完畢Last=temp;/endfo
38、rreturnfalse;/*MemoryRecycled內(nèi)存分配完畢Alldone,thejobreferedwillleavesystem*/當(dāng)進(jìn)程開始時,就應(yīng)該為之分配內(nèi)存voidBeginJob(intid,intAlgorithm,intTrySize)Alloc_Memory(id,Algorithm,TrySize);當(dāng)要退出工作時,就要回收此退出的工作由執(zhí)行函數(shù)調(diào)用voidEndJob(intid)Free_Memory(id);voidFIFO()intlength;intfifo100=0;intpageLength;intfifoPage100=0;inti,j;cout
39、vvpageLength=3;length=9;coutvv時刻tvvt;for(i=O;ivlength;i+)coutvvivvt;coutvvendlvv引用串vvt;for(i=1;iv=length;i+)fifoi=rand()%5+1;coutvvfifoivvt;for(i=1;iv=length;i+)intflag=0;for(j=l;jv=pageLength;j+)if(fifoi=fifoPagej)flag=1;j=pageLength+1;elseif(fifoPagej=0)fifoPagej=fifoi;j=pageLength+1;flag=1;if(flag=1)elsecoutvvf淘汰vvfifoPage1vvendl;for(j=1;j=pageLength;j+)fifoPagej=fifoPagej+1;fifoPagepageLength=fifoi;coutvvendlvvt=vvi-1vv時vvt;for(intjk=1;jkv=pageLength;jk+)coutvvPvvjkvvt;coutvvendlvvt;for(ints=1
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度生物醫(yī)藥領(lǐng)域基因編輯技術(shù)研發(fā)合同3篇
- 2025年度物業(yè)服務(wù)合同管理與維護(hù)條款研究6篇
- 二零二五年度戶外廣告牌安全檢測與維護(hù)合同3篇
- 二零二五年度弱電工程環(huán)境保護(hù)合同2篇
- 2025年度旅行社旅游紀(jì)念品開發(fā)承包合同3篇
- 二零二五年度有限合伙基金代持協(xié)議書3篇
- 二零二五年度學(xué)生宿舍租賃協(xié)議范文2篇
- 海南醫(yī)學(xué)院《中醫(yī)文獻(xiàn)檢索》2023-2024學(xué)年第一學(xué)期期末試卷
- 軸套編程課程設(shè)計(jì)
- 軸流式葉輪課程設(shè)計(jì)
- 2024年海南發(fā)展控股有限公司招聘筆試參考題庫含答案解析
- 內(nèi)科常見疾病中醫(yī)診療規(guī)范診療指南2023版
- 《動物營養(yǎng)與飼料》課件
- 附表四計(jì)劃開、竣工日期和施工進(jìn)度網(wǎng)絡(luò)圖
- 2023服裝跟單工作總結(jié)
- 兒童哮喘控制測試(C-ACT)
- 福建泉州惠安縣2023-2024學(xué)年數(shù)學(xué)四年級第一學(xué)期期末質(zhì)量跟蹤監(jiān)視試題含答案
- DL5168-2023年110KV-750KV架空輸電線路施工質(zhì)量檢驗(yàn)及評定規(guī)程
- 門診發(fā)生火災(zāi)應(yīng)急預(yù)案演練建議5篇,門診發(fā)生火災(zāi)的應(yīng)急預(yù)案
- 醫(yī)療廢物轉(zhuǎn)運(yùn)工作制度
- 新編建筑施工扣件式鋼管腳手架安全技術(shù)規(guī)范
評論
0/150
提交評論