![計(jì)算機(jī)操作系統(tǒng)動(dòng)態(tài)分區(qū)存儲(chǔ)管理方式下的內(nèi)存空間的分配與回收實(shí)驗(yàn)報(bào)告_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/18/d501b5e1-7a89-462b-b95d-0d856e86ea45/d501b5e1-7a89-462b-b95d-0d856e86ea451.gif)
![計(jì)算機(jī)操作系統(tǒng)動(dòng)態(tài)分區(qū)存儲(chǔ)管理方式下的內(nèi)存空間的分配與回收實(shí)驗(yàn)報(bào)告_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/18/d501b5e1-7a89-462b-b95d-0d856e86ea45/d501b5e1-7a89-462b-b95d-0d856e86ea452.gif)
![計(jì)算機(jī)操作系統(tǒng)動(dòng)態(tài)分區(qū)存儲(chǔ)管理方式下的內(nèi)存空間的分配與回收實(shí)驗(yàn)報(bào)告_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/18/d501b5e1-7a89-462b-b95d-0d856e86ea45/d501b5e1-7a89-462b-b95d-0d856e86ea453.gif)
![計(jì)算機(jī)操作系統(tǒng)動(dòng)態(tài)分區(qū)存儲(chǔ)管理方式下的內(nèi)存空間的分配與回收實(shí)驗(yàn)報(bào)告_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/18/d501b5e1-7a89-462b-b95d-0d856e86ea45/d501b5e1-7a89-462b-b95d-0d856e86ea454.gif)
![計(jì)算機(jī)操作系統(tǒng)動(dòng)態(tài)分區(qū)存儲(chǔ)管理方式下的內(nèi)存空間的分配與回收實(shí)驗(yàn)報(bào)告_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/18/d501b5e1-7a89-462b-b95d-0d856e86ea45/d501b5e1-7a89-462b-b95d-0d856e86ea455.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)二實(shí)驗(yàn)題目:存儲(chǔ)器管理 系別:計(jì)算機(jī)科學(xué)與技術(shù)系 班級(jí): 姓名: 學(xué)號(hào):2一、實(shí)驗(yàn)?zāi)康纳钊肜斫鈩?dòng)態(tài)分區(qū)存儲(chǔ)管理方式下的內(nèi)存空間的分配與回收。二、實(shí)驗(yàn)內(nèi)容編寫程序完成動(dòng)態(tài)分區(qū)存儲(chǔ)管理方式下的內(nèi)存分配和回收的實(shí)現(xiàn)。具體內(nèi)容包括:確定用來(lái)管理內(nèi)存當(dāng)前使用情況的數(shù)據(jù)結(jié)構(gòu);采用首次適應(yīng)算法完成內(nèi)存空間的分配;分情況對(duì)作業(yè)進(jìn)行回收;編寫主函數(shù)對(duì)所做工作進(jìn)行測(cè)試。三、實(shí)驗(yàn)原理分配:動(dòng)態(tài)分區(qū)存儲(chǔ)管理方式把內(nèi)存除OS占用區(qū)域外的空間看作一個(gè)大的空閑區(qū)。當(dāng)作業(yè)要求裝入內(nèi)存時(shí),根據(jù)作業(yè)需要內(nèi)存空間的大小查詢內(nèi)存中各個(gè)空閑區(qū),當(dāng)從內(nèi)存中找到一個(gè)大于或等于該作業(yè)大小的內(nèi)存空閑區(qū)時(shí),選擇其中一個(gè)
2、空閑區(qū),按作業(yè)要求劃出一個(gè)分區(qū)裝入該作業(yè)?;厥眨鹤鳂I(yè)執(zhí)行完后,它所占用的內(nèi)存空間被收回,成為一個(gè)空閑區(qū)。如果該空閑區(qū)的相鄰分區(qū)也是空閑區(qū),則需要將相鄰空閑區(qū)合并成一個(gè)空閑區(qū)。四、實(shí)驗(yàn)方法實(shí)現(xiàn)動(dòng)態(tài)分區(qū)的分配與回收,主要考慮三個(gè)問(wèn)題:第一、設(shè)計(jì)記錄內(nèi)存使用情況的數(shù)據(jù)表格,用來(lái)記錄空閑區(qū)和作業(yè)占用的區(qū)域(利用結(jié)構(gòu)體類型數(shù)組來(lái)保存數(shù)據(jù));第二、在設(shè)計(jì)的數(shù)據(jù)表格基礎(chǔ)上設(shè)計(jì)內(nèi)存分配算法(采用首次適應(yīng)算法找合適的分區(qū)(對(duì)空閑分區(qū)表進(jìn)行排序),分配時(shí)要考慮碎片問(wèn)題);第三、在設(shè)計(jì)的數(shù)據(jù)表格基礎(chǔ)上設(shè)計(jì)內(nèi)存回收算法(分四種情況進(jìn)行回收(上鄰、下鄰、上下鄰和無(wú)相鄰分區(qū))。五、實(shí)驗(yàn)步驟第一,設(shè)計(jì)記錄內(nèi)存使用情況的數(shù)據(jù)
3、表格l 已分配分區(qū)表:起始地址、長(zhǎng)度、標(biāo)志(0表示“空表項(xiàng)”,1表示“已分配”)l 空閑分區(qū)表: 起始地址、長(zhǎng)度、標(biāo)志(0表示“空表項(xiàng)”,1表示“未分配”)struct used_table float address; /已分分區(qū)起始地址float length; /已分分區(qū)長(zhǎng)度,單位為字節(jié)int flag; /已分配表區(qū)登記欄標(biāo)志,用0表示空欄目,char zuoyename; /已分配區(qū)表Struct free_table float address; /空閑分區(qū)起始地址float length; /空閑分區(qū)長(zhǎng)度,單位為字節(jié)int flag; /空閑分區(qū)表登記欄目用0表示空欄目,1表示未
4、配; /空閑分區(qū)表第二,在設(shè)計(jì)的表格上進(jìn)行內(nèi)存分配l 首次適應(yīng)算法:為作業(yè)分配內(nèi)存,要求每次找到一個(gè)起始地址最小的適合作業(yè)的分區(qū)(按起始地址遞增排序)。l 最大碎片size:要求當(dāng)找到的空閑分區(qū)作業(yè)的大小的值小于或等于size時(shí),將該分區(qū)全部分配給作業(yè)(數(shù)組后面元素向前移);l 否則,給作業(yè)分割出一部分空間時(shí),其余部分仍作為新的空閑分區(qū)登記(空閑分區(qū)長(zhǎng)度=空閑分區(qū)長(zhǎng)度-作業(yè)長(zhǎng)度,l 空閑分區(qū)起始地址=空閑分區(qū)起始地址+作業(yè)長(zhǎng)度第三,在設(shè)計(jì)的表格上進(jìn)行內(nèi)存回收。1、上鄰:條件:回收作業(yè)的始址=某個(gè)空閑區(qū)的始址+長(zhǎng)度 操作:空閑區(qū)的長(zhǎng)度=空閑區(qū)的長(zhǎng)度+作業(yè)的大小2、下鄰:條件:回收作業(yè)的始址+作業(yè)
5、的長(zhǎng)度=某個(gè)空閑區(qū)的始址 操作: 空閑區(qū)的始址=回收作業(yè)的始址 空閑區(qū)的長(zhǎng)度=空閑區(qū)的長(zhǎng)度+作業(yè)的長(zhǎng)度3、上下鄰:條件:1,2條件同時(shí)成立 操作:空閑區(qū)的始址=上鄰的始址 空閑區(qū)的長(zhǎng)度=上鄰的長(zhǎng)度+作業(yè)的長(zhǎng)度+下鄰的長(zhǎng)度 刪除下鄰4、無(wú)上下鄰: 操作:找flag=0的行 空閑區(qū)的始址=回收作業(yè)的始址 空閑區(qū)的長(zhǎng)度=作業(yè)的長(zhǎng)度六、實(shí)驗(yàn)代碼# include<iostream.h># include<iomanip.h>#define M 10 /允許的空閑區(qū)表長(zhǎng)最大為m#define N 10 /允許的最大作業(yè)數(shù)量為n#define MIN 1 /碎片的最大值#defin
6、e SADDRESS 200 /空閑分區(qū)初始的起始地址#define SLENGTH 150000 /空閑分區(qū)的初始長(zhǎng)度struct used_tfloat address; /已分分區(qū)起始地址float length; /已分分區(qū)長(zhǎng)度int flag; /已分配表區(qū)登記欄標(biāo)志,用0表示空欄目used_tableN;struct free_tfloat address; /空閑分區(qū)起始地址float length; /空閑分區(qū)長(zhǎng)度int flag; /空閑分區(qū)表登記欄目用0表示空欄目,1表示未分配free_tableM; /空閑分區(qū)表void allocate(char,float); /分配
7、算法子程序void reclaim(char); /回收算法子程序void main()int i,a;float zyl; char zyn;/空閑分區(qū)表初始化free_table0.address=SADDRESS; /空閑分區(qū)表的起始地址free_table0.length=SLENGTH; /空閑分區(qū)表的長(zhǎng)度 free_table0.flag=1; /標(biāo)志位置1表示未分配for(i=1;i<M;i+)free_tablei.address=0;free_tablei.length=0;free_tablei.flag=0; /0表示空欄目/已分分區(qū)表初始化 for(i=0;i&l
8、t;N;i+)used_tablei.address=0;used_tablei.length=0;used_tablei.flag=0;while(1)cout<<"請(qǐng)選擇功能項(xiàng):"<<endl<<"1-分配主存"<<endl<<"2-回收主存"<<endl<<"3-顯示主存"<<endl<<"0-退出"<<endl<<"選擇功能項(xiàng)(0-3):"
9、;cin>>a;switch(a)case 0: /當(dāng)選擇0時(shí)退出程序return;case 1: /a=1 分配主存空間cout<<"n請(qǐng)輸入作業(yè)名zyn和作業(yè)所需長(zhǎng)度zyl(作業(yè)名為一個(gè)字符,長(zhǎng)度zyl要小于"<<SLENGTH<<"):"<<endl;cin>>zyn>>zyl;allocate(zyn,zyl); /為作業(yè)zyn分配主存空間break;case 2: / a=2 回收主存空間cout<<"n請(qǐng)輸入要回收分區(qū)的作業(yè)名:"
10、;cin>>zyn;reclaim(zyn); /回收作業(yè)zyn的主存空間break; case 3: /a=3 顯示主存情況,輸出空閑區(qū)表和已分配區(qū)表 cout<<"n輸出空閑區(qū)表:"<<endl<<" 起始地址 分區(qū)長(zhǎng)度 標(biāo)志"<<endl;for(i=0;i<M;i+) if(free_tablei.flag!=0)cout<<setw(10)<<free_tablei.address<<setw(10)<<free_tablei.le
11、ngth<<setw(10)<<free_tablei.flag<<endl; cout<<"n按任意鍵,輸出已分配區(qū)表"cin.get();cout<<"n輸出已分配區(qū)表:"<<endl<<" 起始地址 分區(qū)長(zhǎng)度 標(biāo)志"<<endl;for(i=0;i<N;i+)if(used_tablei.flag!=0)/輸出已分配給作業(yè)的表目 cout<<setw(10)<<used_tablei.address<
12、;<setw(10)<<used_tablei.length <<setw(10)<<(char)used_tablei.flag<<endl; break;default: cout<<"n沒(méi)有該選項(xiàng)!"<<endl;break; cin.get()/分配算法子程序void allocate(char zyn,float zyl) float ad;int k=-1;int i=0;while(i<M&&k=-1) /找空間大于zyl的最小空閑區(qū)登記項(xiàng)kif(free_ta
13、blei.length>=zyl&&free_tablei.flag=1) k=i; i+;if(k=-1) /未找到可用空閑區(qū),返回cout<<"無(wú)可用空閑區(qū)!"<<endl;return;/*找到可用空閑區(qū),開(kāi)始分配:若空閑區(qū)大小與作業(yè)要求分配的空間差小于MIN,則將找到的空閑區(qū)全部分配給該作業(yè);若空閑區(qū)大小與要求分配的空間的差大于minisize,則從空閑區(qū)劃出一部分分配給作業(yè)。*/ if(free_tablek.length-zyl<=MIN) free_tablek.flag=0; ad=free_tablek.
14、address; zyl=free_tablek.length; for(i=k;i<M;i+)free_tablei=free_tablei+1; else free_tablek.length=free_tablek.length-zyl; ad=free_tablek.address; free_tablek.address=free_tablek.address+zyl; /*修改已分配區(qū)表*/ i=0; while(used_tablei.flag!=0&&i<N) i+; /找空表目i used_tablei.address=ad; used_table
15、i.length=zyl; used_tablei.flag=zyn; return;/allocate/回收作業(yè)名為J的作業(yè)所占主存空間void reclaim(char zyn)int i,k,j,s,t;float S,L;s=0;while(used_tables.flag!=zyn|used_tables.flag=0)&&s<N)s+; /找到作業(yè)zyn在以分配表中的表目sif(s>=N) cout<<"找不到該作業(yè)!"<<endl;return;used_tables.flag=0; /修改以分配表表目s標(biāo)志
16、為為空表目S=used_tables.address; /取作業(yè)zyn在內(nèi)存中的首地址L=used_tables.length; /取作業(yè)zyn所分配到的內(nèi)存的長(zhǎng)度j=-1;k=-1;i=0;/尋找回收分區(qū)的上下鄰空閑區(qū),上鄰表目k,下鄰表目jwhile(i<M&&(j=-1|k=-1) if(free_tablei.flag=1)if(free_tablei.address+free_tablei.length=S) k=i; if(free_tablei.address=S+L) j=i;i+; if(k!=-1) /有上鄰空閑區(qū)if(j!=-1) /有下鄰空閑區(qū) 即
17、有上下鄰空閑區(qū),三項(xiàng)合并 free_tablek.length=free_tablek.length+free_tablej.length+L; free_tablej.flag=0;else /上鄰空閑區(qū),下鄰非空閑區(qū),與上鄰合并free_tablek.length=free_tablek.length+L;/ifelse /k=-1 無(wú)上鄰空閑區(qū)if(j!=-1) /無(wú)上鄰空閑區(qū),有下鄰空閑區(qū),與下鄰合并 free_tablej.address=S;free_tablej.length=free_tablej.length+L; else /j=-1 上下鄰均為非空閑區(qū),回收區(qū)域直接填入 t=0; /在空閑區(qū)表中尋找空欄目while(free_tablet.flag=1&&t<M) t+;if(t>=M) /空閑區(qū)表滿,回收空間失敗,將已分配區(qū)表復(fù)原cout<<"主存空閑表沒(méi)有空間,回收失?。?quot;<<endl; used_tables.flag=zyn; return;free_tablet.address=S;free_tablet.length=L;free_tablet.flag=1; for(i=0;i<=M
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年商業(yè)流通倉(cāng)儲(chǔ)服務(wù)項(xiàng)目申請(qǐng)報(bào)告模稿
- 2025年公益贈(zèng)與合同范本協(xié)議書(shū)
- 2025年上海住宅銷售合同樣本
- 2025年企業(yè)資本注入?yún)f(xié)議書(shū)樣本
- 2025年供需平衡合同藍(lán)寶石
- 2025年公立幼兒園轉(zhuǎn)讓合同樣本
- 2025年式樣店面租賃合同協(xié)議
- 2025年企業(yè)市場(chǎng)拓展合作戰(zhàn)略協(xié)議文本
- 2025年二手房買賣雙方贈(zèng)送學(xué)位房補(bǔ)充協(xié)議
- 2025年企業(yè)促銷品量身定制合同
- 2023年心理咨詢師之心理咨詢師基礎(chǔ)知識(shí)考試題庫(kù)附完整答案【有一套】
- 路緣石安裝一級(jí)安全交底
- 一級(jí)建造師繼續(xù)教育最全題庫(kù)及答案(新)
- LS/T 1226-2022糧庫(kù)智能通風(fēng)控制系統(tǒng)
- 肺隔離癥醫(yī)學(xué)課件
- 直線加速器專項(xiàng)施工方案
- 聯(lián)苯二氯芐生產(chǎn)工藝及產(chǎn)排污分析
- 儲(chǔ)能設(shè)備項(xiàng)目采購(gòu)供應(yīng)質(zhì)量管理方案
- 美國(guó)房地產(chǎn)市場(chǎng)特征、框架與周期演變
- 光伏發(fā)電工程施工組織設(shè)計(jì)施工工程光伏發(fā)電工程光伏發(fā)電施工組織設(shè)計(jì)
- 民政局離婚協(xié)議書(shū)模板(4篇)
評(píng)論
0/150
提交評(píng)論