動態(tài)分區(qū)管理實驗報告_第1頁
動態(tài)分區(qū)管理實驗報告_第2頁
動態(tài)分區(qū)管理實驗報告_第3頁
動態(tài)分區(qū)管理實驗報告_第4頁
動態(tài)分區(qū)管理實驗報告_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上實驗五 動態(tài)分區(qū)管理模擬實驗報告 關鍵問題:寫一動態(tài)分區(qū)管理程序,使其內存分配采用最優(yōu)適應分配算法。設計思路:在空閑分區(qū)鏈中找最適合的空閑塊,使內存碎片盡量的減少!根據(jù)最佳適應算法原理,在內存分配函數(shù)ffallocation()中,增加記錄適合空白塊的標記sp,然后拿當前空白塊fp減去后jl的后的大小和它后面的另一空白塊sp減去jl的大小相比較。如果前者大于后者,且后者的空白區(qū)大于jl的大小,則當前空白塊為sp,否則繼續(xù)往后比較,直到空閑分區(qū)鏈末尾!則當前空白塊為最適合的空白塊!然后就把當前空白塊分配給作業(yè)。其他部分的代碼與實例相同!實現(xiàn)的關鍵代碼:/-/有兩個鏈:空

2、白塊鏈及作業(yè)鏈.空白塊鏈描述空白塊,鏈首指針freep,初始為一大塊空白塊./作業(yè)鏈按從高址到低址的順序鏈接,鏈首指針jobp/為作業(yè)jn分配jl大小內存,起始地址為javoid ffallocation(int jl,char jn10,int* ja) mat* jp=NULL;/作業(yè)鏈當前節(jié)點 mat* jp2=NULL;/新的作業(yè)節(jié)點 mat* jp1=NULL;/ freearea* fp=NULL;/當前空白塊 /!修改部分 freearea* sp;/記錄適合的空白塊 int i; *ja=-1; if (totalfree<jl) /剩余空間大小不能滿足作業(yè)要求 retu

3、rn; *ja=0; fp=freep;/取空白塊鏈首塊,將順著鏈尋找第一塊滿足作業(yè)要求的塊。 sp=freep; while (fp!=NULL) if (fp->freesize<jl)fp=fp->next;/當前空白塊大小不滿足要求sp=sp->next;else /將當前空白塊分配給作業(yè)/*當當前空白塊fp與它的下一塊空白塊sp相比較,如果它減去jl后大于下一空白塊sp減去jl,且下一空白塊sp大于等于jl,則當前空白塊為sp;否則sp繼續(xù)往后查找,直到空閑塊查找完畢, 然后當前空閑塊為所要查找的適合空閑塊!*/ while(sp!=NULL) if(fp-&

4、gt;freesize-jl>sp->freesize-jl)&(sp->freesize>=jl) fp=sp; else sp=sp->next; /! jobnumber+; totalfree=totalfree-jl; jp2=new mat;/申請一塊作業(yè)節(jié)點空間 /在節(jié)點上登記為該作業(yè)分配的內存空間 / for (i=0;i<10;i+) (jp2->jobname)i=' ' i=-1; while(jn+i) (jp2->jobname)i=jni; (jp2->jobname)i='0&#

5、39; jp2->joblength=jl; jp2->jobaddress=fp->freeaddress;/登記該作業(yè)的起始地址 *ja=jp2->jobaddress; /將節(jié)點jp2插入作業(yè)鏈jobp,按高址到低址的順序。 if (jobp=NULL) /插入鏈首 jp2->next=NULL;jp2->back=NULL; jobp=jp2; else jp=jobp;/取鏈首指針 while(jp!=NULL) && (jp2->jobaddress<jp->jobaddress) jp1=jp;/jp1為jp的

6、前一個節(jié)點 jp=jp->next;/繼續(xù)搜索 /將jp2插入到jp1之后、jp之前 jp2->next=jp; if (jp=NULL) /插到鏈尾 jp2->back=jp1; jp1->next=jp2; else /插在鏈中間 jp2->back=jp->back; if (jp->back!=NULL)/jp不是首節(jié)點 jp1->next=jp2; else jobp=jp2;/jp是首節(jié)點 jp->back=jp2; /if (jobp=NULL) /剩余空白塊處理 if (fp->freesize-jl<min)/

7、剩余空間小于最小量,碎片 /拋棄碎片fp if (fp->next!=NULL) (fp->next)->back=fp->back;/fp非尾節(jié)點 if (fp->back!=NULL) (fp->back)->next=fp->next;/fp非首節(jié)點 else freep=fp->next;/fp為首節(jié)點 else /登記余下空白塊fp:節(jié)點鏈指針不變,調整塊的大小及地址 fp->freesize=fp->freesize-jl; fp->freeaddress=fp->freeaddress+jl;/分配空白塊前半部分 return; /else /將當前空白塊分配給作業(yè) / while (fp!=NULL)/-程序運行結果:總結及進一步

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論