




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
動(dòng)態(tài)分區(qū)存儲(chǔ)管理方式的主存分配回收一、實(shí)驗(yàn)?zāi)康纳钊肓私鈩?dòng)態(tài)分區(qū)存儲(chǔ)管理方式主存分配回收的實(shí)現(xiàn)。二、實(shí)驗(yàn)要求編寫程序完成動(dòng)態(tài)分區(qū)存儲(chǔ)管理方式的主存分配回收的實(shí)現(xiàn)。實(shí)驗(yàn)具體包括:首先確定主存空間分配表;然后采用最優(yōu)適應(yīng)算法完成主存空間的分配和回收;最后編寫主函數(shù)對所做工作進(jìn)行測試。三、實(shí)驗(yàn)步驟實(shí)現(xiàn)動(dòng)態(tài)分區(qū)的分配和回收,主要考慮的問題有三個(gè):第一,設(shè)計(jì)記錄主存使用情況的數(shù)據(jù)表格,用來記錄空閑區(qū)和作業(yè)占用的區(qū)域;第二,在設(shè)計(jì)的數(shù)據(jù)表格基礎(chǔ)上設(shè)計(jì)主存分配算法:第三,在設(shè)計(jì)的數(shù)據(jù)表格基礎(chǔ)上設(shè)計(jì)主存回收算法。首先,考慮第—個(gè)問題:設(shè)計(jì)記錄主存使用情況的數(shù)據(jù)表格,用來記錄空閑區(qū)和作業(yè)占用的區(qū)域。由于動(dòng)態(tài)分區(qū)的大小是由作業(yè)需求量決定的,故分區(qū)的長度是預(yù)先不固定的,且分區(qū)的個(gè)數(shù)也隨主存分配和回收變動(dòng)??傊蟹謪^(qū)情況隨時(shí)可能發(fā)生變化,數(shù)據(jù)表格的設(shè)計(jì)必須和這個(gè)特點(diǎn)相適應(yīng)。由于分區(qū)長度不同,因此設(shè)計(jì)的表格應(yīng)該包括分區(qū)在主存中的起始地址和長度。由于分配時(shí)空閑區(qū)有時(shí)會(huì)變成兩個(gè)分區(qū):空閑區(qū)和已分分區(qū),回收主存分區(qū)時(shí),可能會(huì)合并空閑分區(qū),這樣如果整個(gè)主存采用一張表格記錄已分分區(qū)和空閑區(qū),就會(huì)使表格操作繁瑣。主存分配時(shí)查找空閑區(qū)進(jìn)行分配,然后填寫已分配區(qū)表,主要操作在空閑區(qū);某個(gè)作業(yè)執(zhí)行完后,將該分區(qū)變成空閑區(qū),并將其與相鄰的空閑區(qū)合并,主要操作也在空閑區(qū)。由此可見,主存的分配和回收主要是對空閑區(qū)的操作。這樣為了便于對主存空間的分配和回收,就建立兩張分區(qū)表記錄主存使用情況.一張表格記錄作業(yè)占用分區(qū)的“已分配區(qū)表”一張是記錄空閑區(qū)的“空閑區(qū)表”。這兩張表的實(shí)現(xiàn)方法一般有兩種,一種是鏈表形式,一種是順序表形式。在試驗(yàn)中,采用順序表形式,用數(shù)組模擬。由于順序表的長度必須是提前固定,所以無論是“已分配區(qū)表”還是“空閑區(qū)表”都必須事先確定長度。他們的長度必須是系統(tǒng)可能的最大項(xiàng)數(shù),系統(tǒng)運(yùn)行過程中才不會(huì)出錯(cuò),因而在多數(shù)情況下,無論是“已分配區(qū)表”還是“空閑區(qū)表”都有空閑欄目。已分配區(qū)表中除了分區(qū)起始地址、長度外,也至少還有一項(xiàng)“標(biāo)志”,如果是空閑欄目,內(nèi)容為“空”,如果為某個(gè)作業(yè)占用分區(qū)的登記項(xiàng),內(nèi)容為該作業(yè)的作業(yè)名;空閑區(qū)表中除了分區(qū)起始地址、長度外,也要有一項(xiàng)“標(biāo)志”,如果是空閑欄目,內(nèi)容為“空”,如果為某個(gè)空閑區(qū)的登記項(xiàng),內(nèi)容為“未分配”。在實(shí)際系統(tǒng)中,這兩表格的內(nèi)容可能還要多,實(shí)驗(yàn)中僅僅使用上述必須的數(shù)據(jù)。為此,“已分配區(qū)表”和“空閑區(qū)表”可變分區(qū)管理方式將內(nèi)存除操作系統(tǒng)占用區(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è)空閑區(qū),按作業(yè)需求量劃出一個(gè)分區(qū)裝人該作業(yè),作業(yè)執(zhí)行完后,其所占的內(nèi)存分區(qū)被收回,成為一個(gè)空閑區(qū)。如果該空閑區(qū)的相鄰分區(qū)也是空閑區(qū),則需要將相鄰空閑區(qū)合并成一個(gè)空閑區(qū)。四、實(shí)驗(yàn)結(jié)果程序代碼:#include<iostream.h>#include<iomanip.h>floatminsize=5;intcount1=0;intcount2=0;#definem10#definen10struct{floataddress;floatlength;intflag;}used_table[n];struct{floataddress;floatlength;intflag;}free_table[m];voidinitialize(void);intdistribute(int,float);intrecycle(int);voidshow();voidinitialize(void){inta;for(a=0;a<=n-1;a++)used_table[a].flag=0;free_table[0].address=1000;free_table[0].length=1024;free_table[0].flag=1;}intdistribute(intprocess_name,floatneed_length){inti,k=-1;floatads,len;intcount=0;i=0;while(i<=m-1){if(free_table[i].flag==1&&need_length<=free_table[i].length){count++;if(count==1||free_table[i].length<free_table[k].length)k=i;}i=i+1;}if(k!=-1){if((free_table[k].length-need_length)<=minsize){free_table[k].flag=0;ads=free_table[k].address;len=free_table[k].length;}else{ads=free_table[k].address;len=need_length;free_table[k].address+=need_length;free_table[k].length-=need_length;}i=0;while(used_table[i].flag!=0){i=i+1;}if(i<=n-1){used_table[i].address=ads;used_table[i].length=len;used_table[i].flag=process_name;count1++;}else{if(free_table[k].flag==0){free_table[k].flag=1;free_table[k].address=ads;free_table[k].length=len;}else{free_table[k].address=ads;free_table[k].length+=len;}cout<<"內(nèi)存分配區(qū)已滿,分配失??!\n";return0;}else{cout<<"無法為該作業(yè)找到合適分區(qū)!\n";return0;}returnprocess_name;}intrecycle(intprocess_name){inty=0;floatrecycle_address,recycle_length;inti,j,k;intx;while(y<=n-1&&used_table[y].flag!=process_name){ y=y+1;}if(y<=n-1){recycle_address=used_table[y].address;recycle_length=used_table[y].length;used_table[y].flag=0;count2++;}else{cout<<"該作業(yè)不存在!\n";return0;j=k=-1;i=0;while(!(i>=m||(k!=-1&&j!=-1))){if(free_table[i].flag==1){ if((free_table[i].address+free_table[i].length)==recycle_address)k=i;if((recycle_address+recycle_length)==free_table[i].address)j=i;}i=i+1;}if(k!=-1){if(j!=-1){free_table[k].length+=free_table[j].length+recycle_length;free_table[j].flag=0;}elsefree_table[k].length+=recycle_length;}elseif(j!=-1){free_table[j].length+=recycle_length;free_table[j].address=recycle_address;}else{x=0;while(free_table[x].flag!=0)x=x+1;if(x<=m-1)free_table[x].length=recycle_length;free_table[x].flag=1;}else{used_table[y].flag=process_name;8a<<"空閑區(qū)已滿,回收失敗!\n";return0;}}returnprocess_name;}voidshow(){cout<<"空閑區(qū)由";for(inti=0;i<=count2;i++)cout<<"地址:"<<free_table[i].address<<""<<"作業(yè)長度:"<<free_table[i].length<<""<<"狀態(tài):"<<free_table[i].flag<<endl;cout<<"E分配區(qū)由”;for(intj=0;j<count1;j++)cout<<"地址:"<<used_table[j].address<<""<<"作業(yè)長度:"<<used_table[j].length<<" "<<"作業(yè)名:"<<used_table[j].flag<<endl;}voidmain(){intchoice;intjob_name;floatneed_memory;boolexitFlag=false;
cout<<動(dòng)態(tài)分區(qū)分配方式的模擬\n";cout<<動(dòng)態(tài)分區(qū)分配方式的模擬\n";initialize();while(!exitFlag){cout<<"1:分配內(nèi)存 2:回收內(nèi)存\n";cout<<"3:查看分配 0:退出\n";cin>>choice;switch(choice){case0:exitFlag=true;break;cout<<”請輸入作業(yè)名和所需內(nèi)存:”;cin>>job_name>>need_memory;distribute(job_name,need_memory);break;intID;cout<<"請輸入您要釋放的分區(qū)號:”;cin>>ID;recycle(ID);break;show();break;}}}內(nèi)存分配回收實(shí)現(xiàn)截圖(1)、假定系統(tǒng)內(nèi)存分配表允許的最大作業(yè)項(xiàng)為10,當(dāng)分配超過10時(shí),示“內(nèi)存分配區(qū)已滿,分配失敗”。:XDocuaentsandSettiiLgs\Ad>inistrat012345t789l名名名名名名名名名名Q92QS054B7
1211221122M=M=M=M=M=M=M=M=M:M:012345t789l名名名名名名名名名名Q92QS054B7
1211221122M=M=M=M=M=M=M=M=M:M:1000101010391051106110811101111611301158■■■■■■■■■■■■■■■■■■■■址址址址此此此此此此1=分配內(nèi)存2:回收內(nèi)存**3:*看分配 且:退出**S::二:::二:::二:::二:::二:::二:=*=*=*****=*=情輸入您的操作;1請嶄入餐業(yè)名和防需內(nèi)存:1125內(nèi)存分配區(qū)已滿,分配失炊I(2)、回收作業(yè)所占內(nèi)存時(shí),當(dāng)輸入的作業(yè)名不存在,回收失敗,提示“該作業(yè)不存在”。G*:\DocuieiLtsandSettingsVAdainistrator\^?+H-+H-+H-+H-+++++++++++++++++H--H--H--H--H--H--H-H-十十十十十十十 空 用i]區(qū) 十十十十十十十++++++++++++++++++++++++++-H--H--H--H--H--H-+-地址:1185 作業(yè)長度:839狀態(tài):1++llllllJAiii■+413此此此此此址址址址址■+++llllllJAiii■+413此此此此此址址址址址■+4也也也也也也也也也也*+K+0920005487E+1211221122+酉HM=M=M=M=M=M=?=M=M=M=分HJKJKJKJKJKJKJK1K1K1K已一業(yè)業(yè)業(yè)業(yè)業(yè)業(yè)業(yè)業(yè)業(yè)業(yè)"名名名名名名名名名名m i;分配內(nèi)存 2;回收內(nèi)存昌 3:香看分配 擊退出(3)、當(dāng)要釋放某個(gè)作業(yè)時(shí),將已分配表中此作業(yè)的標(biāo)志置為‘0’,并在空閑區(qū)做相應(yīng)登記??臻e區(qū) 十十十十1■十地址:1082 作業(yè)長度:942狀態(tài):【4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-++++++++ 己分酉己區(qū) +++++4-4-4-4-4-4-4--I-4--I-4--I-4--I-4--I-4--I-4--I-4--I-4--I-4--I-4--I-4--I-4--I-4--I-4--I-4-4-也也也也:1808;1818;1038也也也也:1808;1818;1038:1班5度度度度上士0s771212名名名名
業(yè)業(yè)業(yè)業(yè)12241:分配內(nèi)存 2:回收內(nèi)存P** 3:查看分配 即退由書輸入您要釋放的分區(qū)號;2k 1:分配內(nèi)存 2:回收內(nèi)存占 3:查看分配 加退出同輸入您的操作;3+++++++++++++++++++++<+++++++ I利+++++++++++++++++++++<地址:1082作業(yè)艮度:施癥:1010柞業(yè)%度:+++止止止止
+++旬旬旬旬
+++也也也也
+++北北北出PUS*+■*+■*+■*+++止止止止
+++旬旬旬旬
+++也也也也
+++北北北出PUS*+■*+■*+■*+■*+■************1SBSISIS1S3S1055業(yè)業(yè)業(yè)業(yè)長長長長度度度度08771212名名名名
業(yè)業(yè)業(yè)業(yè)1034五、總結(jié)核心算法:〃最優(yōu)分配算法實(shí)現(xiàn)的動(dòng)態(tài)分區(qū)intdistribute(intprocess_name,floatneed_length){inti,k=-1;//k用于定位在空閑表中選擇的未分配欄floatads,len;intcount=0;i=0;〃核心的查找條件,找到最優(yōu)空閑區(qū)while(i<=m-1)//循環(huán)找到最佳的空閑分區(qū){if(free_table[i].flag==1&&need_length<=free_table[i].length){count++;if(count==1||free_table[i].length<free_table[k].length)k=i;}i=i+1;}if(k!=-1){if((free_table[k].length-need_length)<=minsize)//整個(gè)分配{free_table[k].flag=0;ads=free_table[k].address;len=free_table[k].length;}else{//切割空閑區(qū)ads=free_table[k].address;len=need_length;free_table[k].address+=need_length;free_table[k].length-=need_length;}i=0;//循環(huán)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度餐廳承包及特色菜品研發(fā)合作協(xié)議
- 二零二五年度房屋繼承糾紛調(diào)解與產(chǎn)權(quán)過戶合同
- 2025年度破產(chǎn)重整退場企業(yè)債務(wù)重組與股權(quán)結(jié)構(gòu)調(diào)整合同
- 二零二五年度住宅小區(qū)車位使用權(quán)轉(zhuǎn)租合同
- 二零二五年度農(nóng)民工工資支付專戶資金托管與結(jié)算服務(wù)協(xié)議
- 二零二五年度城市公園停車場停車管理協(xié)議
- 二零二五年度自建房安全風(fēng)險(xiǎn)評估報(bào)告編制協(xié)議
- 2025年度洗車工薪資福利調(diào)整合同
- 二零二五年度智能鋼管及扣件租賃平臺(tái)服務(wù)協(xié)議
- 二零二五年度美甲店技師專業(yè)成長聘用協(xié)議
- 二年級下冊科學(xué)教案-2.3科技產(chǎn)品體驗(yàn)會(huì) 大象版
- 退役軍人優(yōu)待證申領(lǐng)表
- Q∕SY 19001-2017 風(fēng)險(xiǎn)分類分級規(guī)范
- 勞務(wù)分包項(xiàng)目經(jīng)理崗位職責(zé)
- 幼兒繪本故事:奇怪的雨傘店
- 鋼琴基礎(chǔ)教程教案
- 糖基轉(zhuǎn)移酶和糖苷酶課件(PPT 111頁)
- 屋面網(wǎng)架結(jié)構(gòu)液壓提升施工方案(50頁)
- (語文A版)四年級語文下冊課件跳水 (2)
- 第6章向量空間ppt課件
- 醫(yī)療機(jī)構(gòu)聘用(返聘)證明
評論
0/150
提交評論