![試驗(yàn)四-存儲(chǔ)管理-可變分區(qū)_第1頁](http://file4.renrendoc.com/view/7915f54f4801a17e5e4d74bd939bb706/7915f54f4801a17e5e4d74bd939bb7061.gif)
![試驗(yàn)四-存儲(chǔ)管理-可變分區(qū)_第2頁](http://file4.renrendoc.com/view/7915f54f4801a17e5e4d74bd939bb706/7915f54f4801a17e5e4d74bd939bb7062.gif)
![試驗(yàn)四-存儲(chǔ)管理-可變分區(qū)_第3頁](http://file4.renrendoc.com/view/7915f54f4801a17e5e4d74bd939bb706/7915f54f4801a17e5e4d74bd939bb7063.gif)
![試驗(yàn)四-存儲(chǔ)管理-可變分區(qū)_第4頁](http://file4.renrendoc.com/view/7915f54f4801a17e5e4d74bd939bb706/7915f54f4801a17e5e4d74bd939bb7064.gif)
![試驗(yàn)四-存儲(chǔ)管理-可變分區(qū)_第5頁](http://file4.renrendoc.com/view/7915f54f4801a17e5e4d74bd939bb706/7915f54f4801a17e5e4d74bd939bb7065.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)存儲(chǔ)管理實(shí)驗(yàn)-可變分區(qū)管理實(shí)驗(yàn)?zāi)康模?通過分區(qū)存儲(chǔ)管理模擬算法.了解可變分區(qū)的內(nèi)存分配和回收過程.熟悉內(nèi)存分配之最先、最佳、最差適應(yīng)算法。實(shí)驗(yàn)內(nèi)容:閱讀參考程序 ,寫出該程序的內(nèi)存分配算法是哪種?完善內(nèi)存回收算法 。設(shè)計(jì)最先內(nèi)存分配算法.分配從小地址開始 ;參考程序#include #include #define n 10 /*假定系統(tǒng)允許的最大作業(yè)數(shù)為n.假定模擬實(shí)驗(yàn)中n值為10*/#define m 10 /*假定系統(tǒng)允許的空閑區(qū)表最大為m.假定模擬實(shí)驗(yàn)中m值為1
2、0*/#define minisize 100 /*空閑分區(qū)被分配時(shí).如果分配后剩余的空間小于minisize.則將該空閑分區(qū)全部分配.若大于minisize.則切割分配,即不留小碎片*/structfloat address; /*已分配分區(qū)起始地址*/float length; /*已分配分區(qū)長度.單位為字節(jié)*/int flag; /*已分配區(qū)表登記欄標(biāo)志.用0表示空欄目*/used_tablen; /*已分配區(qū)表。即存放已經(jīng)分配的分區(qū)*/ structfloat address; /*空閑區(qū)起始地址*/float length; /*空閑區(qū)長度.單位為字節(jié)*/int flag; /*空閑
3、區(qū)表登記欄標(biāo)志.用0表示空欄目.可用來登記空閑區(qū).用1表示該空閑區(qū)未分配*/free_tablem; /*空閑區(qū)表.即存放空閑分區(qū)*/*主存分配函數(shù)*/void allocate(char J,float xk) /*給J作業(yè).采用最佳分配算法分配xk大小的空間*/ int i,k; float ad; k=-1; for(i=0;i=xk & free_tablei.flag=1) if(k=-1|free_tablei.lengthfree_ta69blek.length) k=i; if(k=-1)/*未找到可用空閑區(qū).返回*/ printf(無可用空閑區(qū)n); return; /*找到
4、可用空閑區(qū).開始分配:若空閑區(qū)大小與要求分配的空間差小于minisize大小.則空閑區(qū)全部分配;若空閑區(qū)大小與要求分配的空間差大于minisize大小.則從空閑區(qū)劃出一部分分配*/ if(free_tablek.length-xk=minisize) free_tablek.flag=0; ad=free_tablek.address; xk=free_tablek.length; else free_tablek.length=free_tablek.length-xk; ad=free_tablek.address+free_tablek.length; /*修改已分配分區(qū)表*/ i=0;
5、 while(used_tablei.flag!=0&i=n) /*無表目可填寫已分配分區(qū)*/ printf(無表目填寫已分分區(qū).錯(cuò)誤n); /*修正空閑區(qū)表*/ if(free_tablek.flag=0) /*前面找到的是整個(gè)空閑分區(qū)*/ free_tablek.flag=1; else /*前面找到的是某個(gè)空閑分區(qū)的一部分*/ free_tablek.length=free_tablek.length+xk; return; else /*修改已分配表*/ used_tablei.address=ad; used_tablei.length=xk; used_tablei.flag=J;
6、 return;/*主存分配函數(shù)結(jié)束*/*主存回收函數(shù)*/void reclaim(char J)/*回收作業(yè)名為J的作業(yè)所占主存空間*/ int i,k,j,s,t; float S,L; /*尋找已分配表中對應(yīng)登記項(xiàng)*/ s=0; while(used_tables.flag!=J|used_tables.flag=0)&s=n)/*在已分配表中找不到名字為J的作業(yè)*/ printf(找不到該作業(yè)n); return; /*修改已分配表*/ used_tables.flag=0; /*取得歸還分區(qū)的起始地址S和長度L*/ S=used_tables.address; L=used_tabl
7、es.length; j=-1;k=-1;i=0; /*尋找回收分區(qū)的空閑上下鄰.上鄰表目k.下鄰表目j*/ while(im&(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) if(j!=-1) /* 上鄰空閑區(qū).下鄰空閑區(qū).三項(xiàng)合并*/ 。 else /*上鄰空閑區(qū).下鄰非空閑區(qū).與上鄰合并*/ 。 else if(j!=-1) /*上鄰非空閑區(qū).
8、下鄰為空閑區(qū).與下鄰合并*/ 。 else /*上下鄰均為非空閑區(qū).回收區(qū)域直接填入*/ /*在空閑區(qū)表中尋找空欄目*/ t=0; while(free_tablet.flag=1&t=m)/*空閑區(qū)表滿,回收空間失敗,將已分配表復(fù)原*/ printf(主存空閑表沒有空間,回收空間失敗n); used_tables.flag=J; return; free_tablet.address=S; free_tablet.length=L; free_tablet.flag=1; return;/*主存回收函數(shù)結(jié)束*/int main( ) int i,a; float xk; char J; /*
9、空閑分區(qū)表初始化:*/ free_table0.address=10000; /*起始地址假定為10000*/ free_table0.length=10240; /*長度假定為10240.即10k*/ free_table0.flag=1; /*初始空閑區(qū)為一個(gè)整體空閑區(qū)*/ for(i=1;im;i+) free_tablei.flag=0; /*其余空閑分區(qū)表項(xiàng)未被使用*/ /*已分配表初始化:*/ for(i=0;i=a&J=A&J=a&J=A&J=Z); reclaim(J); /*回收主存空間*/ break; case 3: /*a=3顯示主存情況*/ /*輸出空閑區(qū)表和已分配表
10、的內(nèi)容*/ printf(輸出空閑區(qū)表:n起始地址t分區(qū)長度t標(biāo)志n); for(i=0;im;i+) printf(%.0ft%.0ft%6dn,free_tablei.address,free_tablei.length, free_tablei.flag); printf( 按任意鍵,輸出已分配區(qū)表n); getchar(); printf( 輸出已分配區(qū)表:n起始地址 分區(qū)長度 標(biāo)志n); for(i=0;in;i+) if(used_tablei.flag!=0) printf(%.0ft%.0ft%6cn,used_tablei.address,used_tablei.length
11、, used_tablei.flag); else printf(%.0ft%.0ft%6dn,used_tablei.address,used_tablei.length, used_tablei.flag); break; default:printf(沒有該選項(xiàng)n); /*case*/ /*While*/ 代碼:#pragma once#includeusing namespace std;#define n 10 /*假定系統(tǒng)允許的最大作業(yè)數(shù)為n.假定模擬實(shí)驗(yàn)中n值為10*/#define m 10 /*假定系統(tǒng)允許的空閑區(qū)表最大為m.假定模擬實(shí)驗(yàn)中m值為10*/#define min
12、isize 100 /*空閑分區(qū)被分配時(shí).如果分配后剩余的空間小于minisize.則將該空閑分區(qū)全部分配.若大于minisize.則切割分配,即不留小碎片*/class Memorypublic:/已分配表區(qū).存放已經(jīng)分配的分區(qū)structfloat address; /*已分配分區(qū)起始地址*/float length; /*已分配分區(qū)長度.單位為字節(jié)*/int flag; /*已分配區(qū)表登記欄標(biāo)志.用0表示空欄目*/used_tablen; /*已分配區(qū)表。即存放已經(jīng)分配的分區(qū)*/ /空閑表區(qū).存放空閑分區(qū)structfloat address; /*空閑區(qū)起始地址*/float leng
13、th; /*空閑區(qū)長度.單位為字節(jié)*/int flag; /*空閑區(qū)表登記欄標(biāo)志.用0表示空欄目.可用來登記空閑區(qū).用1表示該空閑區(qū)未分配*/free_tablem; /*空閑區(qū)表.即存放空閑分區(qū)*/public:Memory();Memory();/*主存分配函數(shù)參數(shù)char J:作業(yè)id參數(shù)float xk:作業(yè)所需要的內(nèi)存大小*/void allocate(char J, float xk);/*給J作業(yè).采用最佳分配算法分配xk大小的空間*/void reclaim(char J);/主存回收函數(shù)void fistfit(char J, float xk);/首次適應(yīng)算法;#inclu
14、de Memory.hMemory:Memory()Memory:Memory()/內(nèi)存分配函數(shù)void Memory:allocate(char J, float xk)int k = -1;float ad;/作業(yè)J的起始地址for (int i = 0; i = xk&free_tablei.flag = 1)if (k = -1 | free_tablei.length free_tablek.length)k = i;if (k = -1)cout 無可用分區(qū) endl;return;/未找到可用的空閑分區(qū).函數(shù)調(diào)用結(jié)束.返回/*若找到可用空閑分區(qū):if(可用空閑分區(qū)與所需空閑分區(qū)的
15、差小于minisize).該空閑分區(qū)全部分配否則的話.從空閑分區(qū)中劃出一部分來給作業(yè)分配內(nèi)存*/if (free_tablek.length - xk = minisize)free_tablek.flag = 0;/將此分區(qū)置為不可分配ad = free_tablek.address;/將作業(yè)的起始地址寫為該分區(qū)的起始地址xk = free_tablek.length;/將作業(yè)所需要的空間長度修改為該分區(qū)的長度else/所需分區(qū)大小與可用空閑分區(qū)的大小差值大于minisizefree_tablek.length = free_tablek.length - xk;/空閑分區(qū)的大小修改為原大小
16、減去所需空間大?。縜d = free_tablek.address + free_tablek.length; /使作業(yè)的結(jié)束地址剛好位于該分區(qū)的末尾/*修改已分配的分區(qū)表*/int i = 0;while(used_tablei.flag != 0 & i= n) /*無表目可填寫已分配分區(qū)*/cout 無表目填寫已分分區(qū).錯(cuò)誤n;/*修正空閑區(qū)表*/if (free_tablek.flag = 0)/如果整個(gè)分區(qū)都分配給J作業(yè)free_tablek.flag = 1;/將該分區(qū)置為可用狀態(tài)else/*前面找到的是某個(gè)空閑分區(qū)的一部分*/free_tablek.length = free_t
17、ablek.length + xk;/更新空閑分區(qū)的大小return;else/*修改已分配表*/used_tablei.address = ad;used_tablei.length = xk;used_tablei.flag = J;return;/*主存回收函數(shù)*/void Memory:reclaim(char J)int i, k, j, s, t;float S, L;/*尋找已分配表中對應(yīng)登記項(xiàng)*/s = 0;while (used_tables.flag != J | used_tables.flag = 0) & s= n)/*在已分配表中找不到名字為J的作業(yè)*/cout 找
18、不到該作業(yè)! endl;return;/*修改已分配表*/used_tables.flag = 0;/*取得歸還分區(qū)的起始地址S和長度L*/S = used_tables.address;L = used_tables.length;j = -1; k = -1; i = 0;/*尋找回收分區(qū)的空閑上下鄰.上鄰表目k.下鄰表目j*/while (im & (j = -1 | k = -1)if (free_tablei.flag = 1)/如果該分區(qū)未分配if (free_tablei.address + free_tablei.length = S) k = i;/*找到上鄰*/if (fr
19、ee_tablei.address = S + L) j = i;/*找到下鄰*/i+;if (k != -1)if (j != -1)/* 上鄰空閑區(qū).下鄰空閑區(qū).三項(xiàng)合并*/free_tablek.length = free_tablek.length + S + free_tablej.length;free_tablej.flag = 0;else/*上鄰空閑區(qū).下鄰非空閑區(qū).與上鄰合并*/free_tablek.length = free_tablek.length + S;elseif (j != -1)/*上鄰非空閑區(qū).下鄰為空閑區(qū).與下鄰合并*/free_tables.leng
20、th += free_tablej.length;free_tablej.flag = 0;else/*上下鄰均為非空閑區(qū).回收區(qū)域直接填入*/*在空閑區(qū)表中尋找空欄目*/t = 0;while (free_tablet.flag = 1 & t= m)/*空閑區(qū)表滿,回收空間失敗,將已分配表復(fù)原*/printf(主存空閑表沒有空間,回收空間失敗n);used_tables.flag = J;return;free_tablet.address = S;free_tablet.length = L;free_tablet.flag = 1;return;/首次適應(yīng)算法void Memory:f
21、istfit(char J, float xk)for (int i = 0; i m; i+)/給空閑表區(qū)排序for (int j = i + 1; j free_tablej.length)int temp = free_tablei.length;free_tablei.length = free_tablej.length;free_tablej.length = temp;temp = free_tablei.address;free_tablei.address = free_tablej.address;free_tablej.address = temp;temp = free
22、_tablei.flag;free_tablei.flag = free_tablej.flag;free_tablej.flag = temp;int k = -1;float ad;/作業(yè)J的起始地址for (int i = 0; i m; i+)if (xk = free_tablei.length)&(free_tablei.flag=1)k = i;if (k = -1)cout 無可用分區(qū) endl;return;/未找到可用的空閑分區(qū).函數(shù)調(diào)用結(jié)束.返回/*若找到可用空閑分區(qū):if(可用空閑分區(qū)與所需空閑分區(qū)的差小于minisize).該空閑分區(qū)全部分配否則的話.從空閑分區(qū)中劃出
23、一部分來給作業(yè)分配內(nèi)存*/if (free_tablek.length - xk = minisize)free_tablek.flag = 0;/將此分區(qū)置為不可分配ad = free_tablek.address;/將作業(yè)的起始地址寫為該分區(qū)的起始地址xk = free_tablek.length;/將作業(yè)所需要的空間長度修改為該分區(qū)的長度else/所需分區(qū)大小與可用空閑分區(qū)的大小差值大于minisizefree_tablek.length = free_tablek.length - xk;/空閑分區(qū)的大小修改為原大小減去所需空間大???ad = free_tablek.address +
24、 free_tablek.length; /使作業(yè)的結(jié)束地址剛好位于該分區(qū)的末尾/*修改已分配的分區(qū)表*/int i = 0;while (used_tablei.flag != 0 & i= n) /*無表目可填寫已分配分區(qū)*/cout 無表目填寫已分分區(qū).錯(cuò)誤n;/*修正空閑區(qū)表*/if (free_tablek.flag = 0)/如果整個(gè)分區(qū)都分配給J作業(yè)free_tablek.flag = 1;/將該分區(qū)置為可用狀態(tài)else/*前面找到的是某個(gè)空閑分區(qū)的一部分*/free_tablek.length = free_tablek.length + xk;/更新空閑分區(qū)的大小return
25、;else/*修改已分配表*/used_tablei.address = ad;used_tablei.length = xk;used_tablei.flag = J;return;#include #includeMemory.husing namespace std;int main()Memory M;char J;/*空閑分區(qū)表初始化:*/M.free_table0.address = 10000; /*起始地址假定為10000*/M.free_table0.length = 10240; /*長度假定為10240.即10k*/M.free_table0.flag = 1; /*初始空閑區(qū)為一個(gè)整體空閑區(qū)*/for (int i = 1; im; i+)M.free_tablei.f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年焦化行業(yè)競爭格局分析及投資戰(zhàn)略咨詢報(bào)告
- 電力工程項(xiàng)目的勞務(wù)組織與質(zhì)量控制
- 北京信息職業(yè)技術(shù)學(xué)院《分子生物學(xué)與植保生物技術(shù)實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 現(xiàn)代別墅空間布局與綠色科技結(jié)合案例
- 南華大學(xué)《開發(fā)應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 哈爾濱鐵道職業(yè)技術(shù)學(xué)院《兒童簡筆畫》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西航空職業(yè)技術(shù)學(xué)院《茶樹病蟲防治學(xué)實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 電商平臺(tái)移動(dòng)端用戶畫像分析
- 河南工業(yè)職業(yè)技術(shù)學(xué)院《粉體材料工廠工藝設(shè)計(jì)概論》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京信息工程大學(xué)《外國文學(xué)B(I)》2023-2024學(xué)年第二學(xué)期期末試卷
- 干部人事檔案專項(xiàng)審核認(rèn)定表
- GB/T 32722-2016土壤質(zhì)量土壤樣品長期和短期保存指南
- 北京故宮作文600字
- 2009數(shù)據(jù)結(jié)構(gòu)英文試卷A及答案
- FZ/T 51010-2014纖維級(jí)聚對苯二甲酸1,3-丙二醇酯切片(PTT)
- 羊水栓塞的應(yīng)急預(yù)案演練腳本
- 餐飲服務(wù)保障措施、食品衛(wèi)生安全保障方案
- 鋼筋工工藝與實(shí)習(xí)(第二版)課件匯總?cè)珪娮咏贪竿暾嬲n件最全幻燈片(最新)課件電子教案幻燈片
- 物業(yè)保潔及餐飲服務(wù)項(xiàng)目方案
- (新版教材)粵教粵科版六年級(jí)下冊科學(xué)全冊課時(shí)練(同步練習(xí))
- TCETA 001-2021 演藝燈具型號(hào)命名規(guī)則
評論
0/150
提交評論