動態分區管理實驗報告_第1頁
動態分區管理實驗報告_第2頁
動態分區管理實驗報告_第3頁
動態分區管理實驗報告_第4頁
動態分區管理實驗報告_第5頁
全文預覽已結束

下載本文檔

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

文檔簡介

實驗五動態分區管理模擬實驗報告關鍵問題:寫一動態分區管理程序,使其內存分配采用最優適應分配算法。設計思路:在空閑分區鏈中找最適合的空閑塊,使內存碎片盡量的減少!根據最佳適應算法原理,在內存分配函數ffallocation()中,增加記錄適合空白塊的標記sp,然后拿當前空白塊fp減去后jl的后的大小和它后面的另一空白塊sp減去jl的大小相比較。如果前者大于后者,且后者的空白區大于jl的大小,則當前空白塊為sp,否則繼續往后比較,直到空閑分區鏈末尾!則當前空白塊為最適合的空白塊!然后就把當前空白塊分配給作業。其他部分的代碼與實例相同!實現的關鍵代碼:// 〃有兩個鏈:空白塊鏈及作業鏈.空白塊鏈描述空白塊,鏈首指針freep,初始為一大塊空白塊.//作業鏈按從高址到低址的順序鏈接,鏈首指針jobp//為作業jn分配jl大小內存,起始地址為javoidffallocation(intjl,charjn[10],int*ja)(mat*jp二NULL;//作業鏈當前節點mat*jp2=NULL;//新的作業節點mat*jp1=NULL;//freearea*fp=NULL;//當前空白塊// 修改部分freearea*sp;//記錄適合的空白塊inti;*ja=-1;if(totalfree<jl)//剩余空間大小不能滿足作業要求return;*ja=0;fp二freep;//取空白塊鏈首塊,將順著鏈尋找第一塊滿足作業要求的塊。sp二freep;while(fp!=NULL)(if(fp->freesize<jl)(fp=fp->next;//當前空白塊大小不滿足要求sp=sp->next;}else〃將當前空白塊分配給作業(/*當當前空白塊fp與它的下一塊空白塊sp相比較,如果它減去jl后大于下一空白塊sp減去jl,且下一空白塊sp大于等于jl,則當前空白塊為sp;否則sp繼續往后查找,直到空閑塊查找完畢,然后當前空閑塊為所要查找的適合空閑塊!*/while(sp!=NULL)(if((fp->freesize-jl>sp->freesize-jl)&(sp->freesize>=jl))(fp=sp;}else(sp=sp->next;}}//jobnumber++;totalfree二totalfree-jl;jp2=newmat;//申請一塊作業節點空間〃在節點上登記為該作業分配的內存空間//for(i=0;i<10;i++)(jp2->jobname)[i]=’’;i=-1;while(jn[++i])(jp2->jobname)[i]=jn[i];(jp2->jobname)[i]='\0';jp2->joblength=jl;jp2->jobaddress=fp->freeaddress;//登記該作業的起始地址*ja=jp2->jobaddress;//將節點jp2插入作業鏈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的前一個節點jp=jp->next;//繼續搜索}〃將jp2插入到[?1之后、jp之前jp2->next=jp;if(jp==NULL)(〃插到鏈尾jp2->back=jp1;jp1->next=jp2;}else(//插在鏈中間jp2->back=jp->back;if(jp->back!=NULL)//jp不是首節點jp1->next=jp2;elsejobp=jp2;//jp是首節點jp->back=jp2;}}//if(jobp==NULL)〃剩余空白塊處理if(fp->freesize-jl<min)//剩余空間小于最小量,碎片(//拋棄碎片fpif(fp->next!二NULL)(fp->next)->back=fp->back;//fp非尾節點if(fp->back!=NULL)(fp->back)->next=fp->next;//fp非首節點elsefreep=fp->next;//fp為首節點}else(〃登記余下空白塊fp:節點鏈指針不變,調整塊的大小及地址fp->freesize=fp->freesize-jl;fp->freeaddress=fp->freeaddress+jl;//分配空白塊前半部分}return;}//else//將當前空白塊分配給作業

}//while(fp!=NULL)}// 程序運行結果:a"C;\W:6.0-十十+\DeLuy\實墊5上耳£作業名長度起始址址8 370 409SA 24R 拓4可4 朋口 抽麗2 4?^1 232^剩合總空'可=辨弱選擇功能;1分配2回收卜內存分配狀況』退出鬲輸入乍業名字:88請輸入作業人小:380SI"C:\VC6.0-+++\Debug\宴會5.已職"選擇動能:分配2-回收3-內存分配狀況請輸入乍業名字:884-退出請輸入乍業大小:SI"C:\VC6.0-+++\Debug\宴會5.已職"選擇動能:分配2-回收3-內存分配狀況請輸入乍業名字:884-退出請輸入乍業大小:300作業名長度8 3708B剩會430

空'司=349?起始址址409S37803546303S232Q迷擇功能,1一分配帛輸入作業名字:請輸入作業大小:作業名88B64892W一回檢科內存今配片況4-退出89250長度37030024S2962弱49Q起始弛址409@3780354Q30362720232S剩會總空'司=32鄰4-退出選擇動能,分配2-回收34-退出TOC\o"1-5"\h\z8 370 409S8B 3Q0 37806 246 35464 29S 303SR9 WEM 2720

溫馨提示

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

評論

0/150

提交評論