版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
內(nèi)存的動(dòng)態(tài)存儲(chǔ)管理一、 實(shí)驗(yàn)內(nèi)容編寫程序?qū)崿F(xiàn)動(dòng)態(tài)分區(qū)存儲(chǔ)管理方式的主存分配與回收。具體內(nèi)容包括:首先確定主存空間分配表;然后采用最先適應(yīng)算法完成主存空間的分配與回收;最后編寫主函數(shù)對(duì)所做工作進(jìn)行測(cè)試二、 實(shí)驗(yàn)原理模擬存儲(chǔ)管理中內(nèi)存空間的管理和分配內(nèi)存空間的管理分為固定分區(qū)管理方式,可變分區(qū)管理方式,頁(yè)式存儲(chǔ)管理,段式存儲(chǔ)管理。題目:模擬內(nèi)存分配與回收struct{floataddress;/*已分分區(qū)起始地址*/floatlength;/*已分分區(qū)長(zhǎng)度,單位為字節(jié)*/intflag;/*已分配區(qū)表登記欄標(biāo)志,用〃0〃表示空欄目*/}used_table[n];/*已分配區(qū)表*/struct{floataddress;/*空閑區(qū)起始地址*/floatlength;/*空閑區(qū)長(zhǎng)度,單位為字節(jié)*/intflag;/*空閑區(qū)表登記欄標(biāo)志,用〃0〃表示空欄目,用〃1〃表示未分配*/}free_table[m];/*空閑區(qū)表*/三、 實(shí)驗(yàn)步驟(或過(guò)程)在MicrosoftVisualC++6.0環(huán)境下運(yùn)行設(shè)計(jì)一個(gè)空閑分區(qū)表,空閑分區(qū)表通過(guò)空閑分區(qū)鏈表來(lái)管理,在進(jìn)行內(nèi)存分配時(shí),系統(tǒng)優(yōu)先使用空閑分區(qū)低端的空間。設(shè)計(jì)一個(gè)內(nèi)存分區(qū)表,可用鏈表管理,用以表示當(dāng)前以內(nèi)存使用情況。設(shè)計(jì)一個(gè)進(jìn)程申請(qǐng)隊(duì)列以及進(jìn)程完成后的釋放順序,實(shí)現(xiàn)主存的分配和回收。要求每次分配和回收后把空閑分區(qū)的變化情況以及各進(jìn)程的申請(qǐng)、釋放情況以及各進(jìn)程的申請(qǐng)、釋放情況以圖形方式顯示、打印出來(lái)。最佳適應(yīng)算法:該算法總是把滿足要求、又是最小的空閑區(qū)分配給作業(yè)。檢查空閑區(qū)說(shuō)明表是否有滿足作業(yè)要求的空閑區(qū),也分為三種情況:大于,等于,小于。若檢查到有“等于”的情況,就可以直接分配,若沒(méi)有,則繼續(xù)檢查是否有“大于”的情況運(yùn)行代碼如下:#definen10/*假定系統(tǒng)允許的最大作業(yè)為,假定模擬實(shí)驗(yàn)中n值為10*/#definem10/*假定系統(tǒng)允許的空閑區(qū)表最大為m,假定模擬實(shí)驗(yàn)中m值為10*/#defineminisize100struct{floataddress;/*已分分區(qū)起始地址*/floatlength;/*已分分區(qū)長(zhǎng)度,單位為字節(jié)*/intflag;/*已分配區(qū)表登記欄標(biāo)志,用”0”表示空欄目*/}used_table[n];/*已分配區(qū)表*/struct{floataddress;/*空閑區(qū)起始地址*/floatlength;/*空閑區(qū)長(zhǎng)度,單位為字節(jié)*/intflag;/*空閑區(qū)表登記欄標(biāo)志,用”0”表示空欄目,用”1”表示未分配*/}free_table[m];/*空閑區(qū)表*/allocate(J,xk)charJ;floatxk;/*采用最優(yōu)分配算法分配xk大小的空間*/{inti,k;floatad;k=-1;for(i=0;i<m;i++)/*尋找空間大于xk的最小空閑區(qū)登記項(xiàng)k*/if(free_table[i].length>=xk&&free_table[i].flag==1)if(k==-1||free_table[i].length<free_table[k].length)k=i;if(k==-1)/*未找到可用空閑區(qū),返回*/{printf(”無(wú)可用空閑區(qū)\n”);return;}/*找到可用空閑區(qū),開始分配:若空閑區(qū)大小與要求分配的空間差小于msize大小,則空閑區(qū)全部分配;若空閑區(qū)大小與要求分配的空間差大于minisize大小,則從空閑區(qū)劃出一部分分配*/if(free_table[k].length-xk<=minisize){free_table[k].flag=0;ad=free_table[k].address;xk=free_table[k].length;}else{free_table[k].length=free_table[k].length-xk;ad=free_table[k].address+free_table[k].length;}/*修改已分配區(qū)表*/i=0;while(used_table[i].flag!=0&&i<n)/*尋找空表目*/i++;if(i>=n)/*無(wú)表目填寫已分分區(qū)*/{printf("無(wú)表目填寫已分分區(qū),錯(cuò)誤\n");/*修正空閑區(qū)表*/if(free_table[k].flag==0)/*前面找到的是整個(gè)空閑分區(qū)*/free_table[k].flag=1;else{/*前面找到的是某個(gè)空閑分區(qū)的一部分*/free_table[k].length=free_table[k].length+xk;return;}}else{/*修改已分配表*/used_table[i].address=ad;used_table[i].length=xk;used_table[i].flag=J;}return;}/*主存分配函數(shù)結(jié)束*/reclaim(J)charJ;/*回收作業(yè)名為J的作業(yè)所占主存空間*/{inti,k,j,s,t;floatS,L;/*尋找已分配表中對(duì)應(yīng)登記項(xiàng)*/s=0;while((used_table[s].flag!=J||used_table[s].flag==0)&&s<n)s++;if(s>=n)/*在已分配表中找不到名字為J的作業(yè)*/{printf("找不到該作業(yè)\n");return;}/*修改已分配表*/used_table[s].flag=0;/*取得歸還分區(qū)的起始地址S和長(zhǎng)度L*/S=used_table[s].address;L=used_table[s].length;j=-1;k=-1;i=0;/*尋找回收分區(qū)的空閑上下鄰,上鄰表目k,下鄰表目j*/while(i<m&&(j==-1||k==-1)){if(free_table[i].flag==1){if(free_table[i].address+free_table[i].length==S)k=i;/*找到上鄰*/if(free_table[i].address==S+L)j=i;/*找到下鄰*/}i++;}if(k!=-1)if(j!=-1)/*上鄰空閑區(qū),下鄰空閑區(qū),三項(xiàng)合并*/{free_table[k].length=free_table[j].length+free_table[k].length+L;free_table[j].flag=0;}else/*上鄰空閑區(qū),下鄰非空閑區(qū),與上鄰合并*/free_table[k].length=free_table[k].length+L;elseif(j!=-1)/*上鄰非空閑區(qū),下鄰為空閑區(qū),與下鄰合并*/{free_table[j].address=S;free_table[j].length=free_table[j].length+L;}else/*上下鄰均為非空閑區(qū),回收區(qū)域直接填入*/{/*在空閑區(qū)表中尋找空欄目*/t=0;while(free_table[t].flag==1&&t<m)t++;if(t>=m)/*空閑區(qū)表滿,回收空間失敗,將已分配表復(fù)原*/{printf("主存空閑表沒(méi)有空間,回收空間失敗\n");used_table[s].flag=J;return;}free_table[t].address=S;free_table[t].length=L;free_table[t].flag=1;}return;}/*主存回收函數(shù)結(jié)束*/main(){inti,a;floatxk;charJ;/*空閑分區(qū)表初始化:*/free_table[0].address=10240;free_table[0].length=102400;free_table[0].flag=1;for(i=1;i<m;i++)free_table[i].flag=0;/*已分配表初始化:*/for(i=0;i<n;i++)used_table[i].flag=0;while(1){printf("選擇功能項(xiàng)(0-退出,1-分配主存,2-回收主存,3-顯示主存)\n");printf("選擇功項(xiàng)(0~3):");scanf("%d”,&a);switch(a){case0:exit(0);/*a=0程序結(jié)束*/case1:/*a=1分配主存空間*/printf("輸入作業(yè)名J和作業(yè)所需長(zhǎng)度xk:");scanf("%*c%c%f”,&J,&xk);allocate(J,xk);/*分配主存空間*/break;case2:/*a=2回收主存空間*/printf("輸入要回收分區(qū)的作業(yè)名");scanf("%*c%c",&J);reclaim(J);/*回收主存空間*/break;case3:/*a=3顯示主存情況*//*輸出空閑區(qū)表和已分配表的內(nèi)容*/printf("輸出空閑區(qū)表:\n起始地址分區(qū)長(zhǎng)度標(biāo)志\n");for(i=0;i<m;i++)printf("%6.0f%9.0f%6d\n”,free_table[i].address,free_table[i].length,free_table[i].flag);printf("按任意鍵,輸出已分配區(qū)表\n");getch();printf(-輸出已分配區(qū)表:\n起始地址分區(qū)長(zhǎng)度標(biāo)志\n〃);for(i=0;i<n;i++)if(used_table[i].flag!=0)printf(〃%6.0f%9.0f%6c\n〃,used_table[i].address,used_table[i].length,used_table[i].flag);elseprintf(〃%6.0f%9.0f%6d\n〃,used_table[i].address,used_table[i].length,used_table[i].flag);break;default:printf("沒(méi)有該選項(xiàng)\n〃);}/*case*/}/*while*/}/*主函數(shù)結(jié)束*/四、實(shí)驗(yàn)結(jié)論1、實(shí)驗(yàn)結(jié)果〈CHOICE〉til請(qǐng)輸入進(jìn)程規(guī)泰入進(jìn)彳呈編號(hào)t青魏輸入需要分配內(nèi)存的3個(gè)作業(yè)內(nèi)存長(zhǎng)度;203080Process Fdddress1 0Len20Eaddi'ess20State10201030003&2Q005B006056S02653095109S3012S0312580205102055025S0輸入進(jìn)程數(shù)目:3,輸入3個(gè)進(jìn)程的編號(hào):1,2,3;輸入3個(gè)進(jìn)程所需內(nèi)存的長(zhǎng)度:20、30、80。程序運(yùn)行結(jié)果如上圖所示:1號(hào)進(jìn)程申請(qǐng)長(zhǎng)度為20的空閑塊,則搜索鏈表發(fā)現(xiàn)第一個(gè)空閑塊30滿足要求,則把該空閑快分配給進(jìn)程1;由于空閑塊長(zhǎng)度大于進(jìn)程所需值,則此快一分
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 九年級(jí)政治尊重他人是我的需要課件
- 液壓與氣動(dòng)技術(shù) 課件 模塊四 課題14
- 單位管理制度集合大合集職工管理篇
- 單位管理制度集粹匯編員工管理
- 議論文結(jié)構(gòu)的六種模式
- 單位管理制度匯編大合集人員管理
- 單位管理制度分享大全【人力資源管理】十篇
- 單位管理制度范例合集員工管理篇十篇
- 單位管理制度呈現(xiàn)合集【人力資源管理篇】十篇
- 萬(wàn)有引力定律復(fù)習(xí)課件
- 水泥行業(yè)數(shù)字化轉(zhuǎn)型服務(wù)方案
- 2024版房屋市政工程生產(chǎn)安全重大事故隱患判定標(biāo)準(zhǔn)內(nèi)容解讀
- 江蘇省鎮(zhèn)江市實(shí)驗(yàn)學(xué)校2023-2024學(xué)年九年級(jí)上學(xué)期期末考試化學(xué)試卷
- 期末 (試題) -2024-2025學(xué)年人教PEP版(2024)英語(yǔ)三年級(jí)上冊(cè)
- GB/T 32066-2024煤基費(fèi)托合成液體石蠟
- 飛機(jī)起落架緩沖器的設(shè)計(jì)航空專業(yè)
- 江蘇衛(wèi)視跨年演唱會(huì)電視轉(zhuǎn)播技術(shù)方案-209年精選文檔
- 水電工程施工機(jī)械臺(tái)時(shí)費(fèi)定額(2004年版)
- 鋼鐵企業(yè)安全生產(chǎn)事故案例匯編
- 安慶市農(nóng)業(yè)雪災(zāi)恢復(fù)重建和救災(zāi)資金使用情況總結(jié)
- 食品工程原理課程設(shè)計(jì)攪拌器的設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論