




已閱讀5頁(yè),還剩6頁(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)介
_操作系統(tǒng)實(shí)驗(yàn)內(nèi)存的分配與回收 實(shí)驗(yàn)報(bào)告1、 實(shí)驗(yàn)題目:內(nèi)存的分配與回收2、 實(shí)驗(yàn)內(nèi)容:利用可變分區(qū)的首次適應(yīng)算法,模擬內(nèi)存的分配與回收。3、 實(shí)驗(yàn)?zāi)康模赫莆湛勺兎謪^(qū)首次適應(yīng)算法的原理以及其編程實(shí)現(xiàn)。4、 實(shí)驗(yàn)過(guò)程:1、基本思想:可變分區(qū)分配是根據(jù)進(jìn)程的實(shí)際需求,動(dòng)態(tài)地為之分配內(nèi)存空間。首次適應(yīng)算法要求空閑空間鏈以地址遞增的次序鏈接。進(jìn)行內(nèi)存分配時(shí),從鏈表頭部開始依次檢索,找到第一個(gè)不小于請(qǐng)求空間大小的空閑空間進(jìn)行分配。分配時(shí)需考慮碎片問(wèn)題,若分配會(huì)導(dǎo)致碎片產(chǎn)生則將整塊分區(qū)分配。內(nèi)存的回收需要考慮四種情況:回收分區(qū)前后兩個(gè)分區(qū)都空閑,則需要和前后兩個(gè)分區(qū)合并;(2)回收分區(qū)只有前一分區(qū)空閑,則與前一分區(qū)合并;(3)回收分區(qū)只有后一分區(qū)空閑,則和后一分區(qū)合并;(4)回收分區(qū)獨(dú)立,不考慮合并。2、主要數(shù)據(jù)結(jié)構(gòu):struct FreeArea 鏈結(jié)點(diǎn)包含的數(shù)據(jù):分區(qū)號(hào)、大小、起址、標(biāo)記 int ID;int size;long address;int sign;struct Node 雙鏈表結(jié)點(diǎn)結(jié)構(gòu)體:數(shù)據(jù)區(qū)、前向指針、后繼指針FreeArea data;struct Node *prior; struct Node *next; *DLinkList;3、輸入、輸出: 輸入: I.內(nèi)存分配時(shí)由鍵盤輸入分區(qū)ID和大?。?II.內(nèi)存回收時(shí)由鍵盤輸入需要回收的分區(qū)ID;輸出: 輸出內(nèi)存的分配情況(按照地址從低到高)4、 程序流程圖:結(jié)束合并后回收合并后回收該分區(qū)后一個(gè)分區(qū)空閑該分區(qū)前一個(gè)分區(qū)空閑合并后回收該分區(qū)前后都空閑回收分區(qū)獨(dú)立輸入分區(qū)號(hào)顯示分區(qū)情況結(jié)束開始退出Choice=0Choice=3Choice=2將分區(qū)從空閑鏈移出,并修改相應(yīng)數(shù)據(jù)結(jié)構(gòu)整塊分配判斷是否會(huì)有碎片內(nèi)存不足判斷剩余空間是否足夠輸入分區(qū)大小輸入分區(qū)號(hào)輸入有誤驗(yàn)證該分區(qū)是否已經(jīng)被占用Choice=1Choice3或choice0選擇操作choice輸出可選操作5、 實(shí)驗(yàn)結(jié)果截屏:6、 源程序代碼:#includeusing namespace std;#define Free 0 /空閑狀態(tài)#define Busy 1 /已用狀態(tài)#define PBusy 2 /碎片已用狀態(tài)#define FINISH 1 /完成#define FINISH2 1 /完成#define ERROR 0 /出錯(cuò)#define memory 512 /最大內(nèi)存空間為(單位:KB)#define min 10 /碎片最小值(單位:KB)typedef struct FreeArea/空閑鏈數(shù)據(jù)int ID;int size;long address;int sign;typedef struct Node /空閑連結(jié)構(gòu) FreeArea data;struct Node *prior; struct Node *next; *DLinkList;DLinkList head; /頭結(jié)點(diǎn)DLinkList tail; /尾結(jié)點(diǎn)int Create()/初始化head=(DLinkList)malloc(sizeof(Node);/分配內(nèi)存tail=(DLinkList)malloc(sizeof(Node);head-prior=NULL;head-next=tail;tail-prior=head;tail-next=NULL;tail-data.address=0;tail-data.size=memory;tail-data.ID=0;tail-data.sign=Free;return FINISH;int FirstFit(int ID,int request)/首次適應(yīng)算法DLinkList temp=(DLinkList)malloc(sizeof(Node);/新建作業(yè)的結(jié)點(diǎn)temp-data.ID=ID;temp-data.size=request;temp-data.sign=Busy;Node *p=head;/插入指針P while(p)if(p-data.sign=Free & p-data.size=request)/剩余大小恰好滿足p-data.sign=Busy;p-data.ID=ID;return FINISH;break;else if(p-data.sign=Free & p-data.sizerequest & (p-data.size-requestmin)/滿足需求且有剩余且不產(chǎn)生碎片temp-prior=p-prior;temp-next=p;temp-data.address=p-data.address;p-prior-next=temp;p-prior=temp;p-data.address=temp-data.address+temp-data.size;p-data.size=p-data.size-request;return FINISH;break;else if(p-data.sign=Free & p-data.sizerequest & p-data.size-requestdata.sign=PBusy;p-data.ID=ID;return FINISH;break;p=p-next;/若前面的分區(qū)都已分配,P指針后移return ERROR;int Allocate()/主存分配int ID,request;coutID;coutrequest;if(request0 |request=0)cout分配的主存必須是正整數(shù)!endl;return ERROR;if(FirstFit(ID,request)=FINISH)cout分配成功!endl;elsecout內(nèi)存不足,分配失??!data.ID=ID)p-data.sign=Free;/p-data.ID=Free;if(p-prior-data.sign=Free)&(p-next-data.sign=Free)/與前后的空閑塊相連p-prior-data.size=p-prior-data.size+p-data.size+p-next-data.size;p-prior-next=p-next-next;if(p-next-next=NULL)/若p-next是最后一個(gè)結(jié)點(diǎn)p-prior-data.ID=Free;p-next=NULL;elsep-next-next-prior=p-prior;break; if(p-prior-data.sign=Free)/與前面的空閑塊相連p-prior-data.size+=p-data.size;p-prior-next=p-next;p-next-prior=p-prior;break;if(p-next-data.sign=Free)/與后面的空閑塊相連p-data.size+=p-next-data.size;if(p-next-next=NULL)/若p-next是最后一個(gè)結(jié)點(diǎn)p-next=NULL;elsep-next-next-prior=p;p-next=p-next-next;break;break;p=p-next;cout分區(qū):ID回收成功endl;return FINISH;void show()/顯示coutnext;while(p)coutdata.ID=Free)coutFreeendl;elsecoutdata.IDendl;cout起始地址:data.address;cout 分區(qū)大?。篸ata.size KB;coutdata.sign=Free)cout空 閑data.sign=PBusy)cout碎片已分配endl;elsecout已分配next;coutendl;void main()Create();int choice;int i;for(i=0;i+) cout請(qǐng)輸入操作:;cout1.分配內(nèi)存 2.回收內(nèi)存 3.顯示主存 0.退出;coutchoice;if(choice=1)/ 分配內(nèi)存Allocate();
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 縫制設(shè)備遠(yuǎn)程診斷與維護(hù)服務(wù)考核試卷
- 旅行社團(tuán)隊(duì)建設(shè)與管理考核試卷
- 電氣機(jī)械的設(shè)計(jì)參數(shù)與選型指南考核試卷
- 自動(dòng)扶梯梯級(jí)防滑與防夾技術(shù)的智能化實(shí)現(xiàn)與案例分析考核試卷
- 疫苗接種在應(yīng)對(duì)全球抗生素耐藥性危機(jī)中的地位考核試卷
- 建筑物拆除工程監(jiān)理考核試卷
- 軌道維護(hù)與修復(fù)設(shè)備考核試卷
- 股權(quán)代持與公司財(cái)務(wù)狀況監(jiān)管協(xié)議
- 藥品安全消防管理
- 教育行業(yè)教學(xué)資源共享及培訓(xùn)合作框架協(xié)議
- 2024遼寧省各市農(nóng)村電力服務(wù)限公司聯(lián)合招聘220人重點(diǎn)基礎(chǔ)提升難、易點(diǎn)模擬試題(共500題)附帶答案詳解
- ISO15614-1 2017 金屬材料焊接工藝規(guī)程及評(píng)定(中文版)
- MOOC 一生的健康鍛煉-西南交通大學(xué) 中國(guó)大學(xué)慕課答案
- 《中國(guó)潰瘍性結(jié)腸炎診治指南(2023年)》解讀
- 宣傳費(fèi)用結(jié)算合同
- 護(hù)理文獻(xiàn)分享的課件
- 重慶十八中學(xué)2024屆八年級(jí)下冊(cè)數(shù)學(xué)期末教學(xué)質(zhì)量檢測(cè)試題含解析
- 企業(yè)周年慶蛋糕定制協(xié)議
- 量子計(jì)算芯片技術(shù)
- 電子元件考題及參考答案
- 國(guó)家開放大學(xué)(中央電大)報(bào)名登記表(附填寫說(shuō)明)
評(píng)論
0/150
提交評(píng)論