




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、操作系統(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)過程:1、基本思想:可變分區(qū)分配是根據(jù)進(jìn)程的實(shí)際需求,動態(tài)地為之分配內(nèi)存空間。首次適應(yīng)算法要求空閑空間鏈以地址遞增的次序鏈接。進(jìn)行內(nèi)存分配時(shí),從鏈表頭部開始依次檢索,找到第一個不小于請求空間大小的空閑空間進(jìn)行分配。分配時(shí)需考慮碎片問題,若分配會導(dǎo)致碎片產(chǎn)生則將整塊分區(qū)分配。內(nèi)存的回收需要考慮四種情況:回收分區(qū)前后兩個分區(qū)都空閑,則需要和前后兩個分區(qū)合并;(2)回收分區(qū)只有前一分區(qū)空閑,則與
2、前一分區(qū)合并;(3)回收分區(qū)只有后一分區(qū)空閑,則和后一分區(qū)合并;(4)回收分區(qū)獨(dú)立,不考慮合并。2、主要數(shù)據(jù)結(jié)構(gòu):struct FreeArea 鏈結(jié)點(diǎn)包含的數(shù)據(jù):分區(qū)號、大小、起址、標(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)存的分配情
3、況(按照地址從低到高)4、 程序流程圖:結(jié)束合并后回收合并后回收該分區(qū)后一個分區(qū)空閑該分區(qū)前一個分區(qū)空閑合并后回收該分區(qū)前后都空閑回收分區(qū)獨(dú)立輸入分區(qū)號顯示分區(qū)情況結(jié)束開始退出Choice=0Choice=3Choice=2將分區(qū)從空閑鏈移出,并修改相應(yīng)數(shù)據(jù)結(jié)構(gòu)整塊分配判斷是否會有碎片內(nèi)存不足判斷剩余空間是否足夠輸入分區(qū)大小輸入分區(qū)號輸入有誤驗(yàn)證該分區(qū)是否已經(jīng)被占用Choice=1Choice>3或choice<0選擇操作choice輸出可選操作5、 實(shí)驗(yàn)結(jié)果截屏:6、 源程序代碼:#include<iostream>using namespace std;#defin
4、e Free 0 /空閑狀態(tài)#define Busy 1 /已用狀態(tài)#define PBusy 2 /碎片已用狀態(tài)#define FINISH 1 /完成#define FINISH2 1 /完成#define ERROR 0 /出錯#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 *
5、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;ta
6、il->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=re
7、quest)/剩余大小恰好滿足p->data.sign=Busy;p->data.ID=ID;return FINISH;break;else if(p->data.sign=Free && p->data.size>request && (p->data.size-request>min)/滿足需求且有剩余且不產(chǎn)生碎片temp->prior=p->prior;temp->next=p;temp->data.address=p->data.address;p->prior->ne
8、xt=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.size>request && p->data.size-request<=min)/產(chǎn)生碎片時(shí)p->data.sign=PBusy;p->data.ID=ID;
9、return FINISH;break;p=p->next;/若前面的分區(qū)都已分配,P指針后移return ERROR;int Allocate()/主存分配int ID,request;cout<<"請輸入作業(yè)所在分區(qū)號:"cin>>ID;cout<<"請輸入分配的主存(單位:KB):"cin>>request;if(request<0 |request=0)cout<<"分配的主存必須是正整數(shù)!"<<endl;return ERROR;if(Fir
10、stFit(ID,request)=FINISH)cout<<"分配成功!"<<endl;elsecout<<"內(nèi)存不足,分配失?。?quot;<<endl;int Recycle(int ID)/回收Node *p=head;while(p)if(p->data.ID=ID)p->data.sign=Free;/p->data.ID=Free;if(p->prior->data.sign=Free)&&(p->next->data.sign=Free)/與前
11、后的空閑塊相連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是最后一個結(jié)點(diǎn)p->prior->data.ID=Free;p->next=NULL;elsep->next->next->prior=p->prior;break; if(p->prior
12、->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是最后一個結(jié)點(diǎn)p->next=NULL;elsep-&g
13、t;next->next->prior=p;p->next=p->next->next;break;break;p=p->next;cout<<"分區(qū):"<<ID<<"回收成功"<<endl;return FINISH;void show()/顯示cout<<" 主存分配情況 n"Node *p=head->next;while(p)cout<<"分區(qū)號:"if(p->data.ID=Free)c
14、out<<"Free"<<endl;elsecout<<p->data.ID<<endl;cout<<"起始地址:"<<p->data.address;cout<<" 分區(qū)大?。?quot;<<p->data.size<<" KB"cout<<" 狀 態(tài):"if(p->data.sign=Free)cout<<"空 閑"<&l
15、t;endl;else if(p->data.sign=PBusy)cout<<"碎片已分配"<<endl;elsecout<<"已分配"<<endl;p=p->next;cout<<endl;void main()Create();int choice;int i;for(i=0;i+) cout<<"請輸入操作:"cout<<"1.分配內(nèi)存 2.回收內(nèi)存 3.顯示主存 0.退出"cout<<endl;cin>>choice;
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 河源市連平縣事業(yè)單位招聘筆試真題2024
- 2024年廣東社會科學(xué)大學(xué)輔導(dǎo)員考試真題
- 元旦的歡慶插畫中的美好
- 氣候變化對施工的影響及應(yīng)對
- 營養(yǎng)支持護(hù)理
- 房地產(chǎn)營銷中的故事化傳播技巧
- 2025至2030中國尼莫地平片行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報(bào)告
- 2025至2030中國女式?jīng)鲂袠I(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報(bào)告
- 彩妝教學(xué) 全面系統(tǒng)的彩妝教學(xué)幫助你掌握化妝技巧
- 冠心病護(hù)理 心血管疾病護(hù)理要點(diǎn)
- 負(fù)責(zé)人安全生產(chǎn)責(zé)任清單
- 廠房保安合同范本
- 跟著音樂游中國智慧樹知到期末考試答案章節(jié)答案2024年廣州大學(xué)
- 預(yù)應(yīng)力混凝土管樁嚙合式機(jī)械連接技術(shù)規(guī)程DBJ-T 15-63-2019
- 重慶市南岸區(qū)2023-2024學(xué)年五年級下學(xué)期期末質(zhì)量抽測數(shù)學(xué)試題
- 2023~2024學(xué)年四年級下冊語文期末模考試卷·創(chuàng)意情境 統(tǒng)編版
- 2023-2024全國初中物理競賽試題-杠桿(解析版)
- MOOC 鐵路站場及樞紐-華東交通大學(xué) 中國大學(xué)慕課答案
- (正式版)SHT 3551-2024 石油化工儀表工程施工及驗(yàn)收規(guī)范
- 汽車式起重機(jī)檢修保養(yǎng)記錄表
- 國家開放大學(xué)《Python語言基礎(chǔ)》形考任務(wù)4參考答案
評論
0/150
提交評論