操作系統(tǒng)動(dòng)態(tài)內(nèi)存分配_第1頁
操作系統(tǒng)動(dòng)態(tài)內(nèi)存分配_第2頁
操作系統(tǒng)動(dòng)態(tài)內(nèi)存分配_第3頁
操作系統(tǒng)動(dòng)態(tài)內(nèi)存分配_第4頁
操作系統(tǒng)動(dòng)態(tài)內(nèi)存分配_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、package com.gaojingdian.arithmetic;import java.io.ioexception;import java.util.arraylist;import java.util.linkedlist;import java.util.list;import com.gaojingdian.dataframe.pcb;import com.gaojingdian.dataframe.subarea;import com.gaojingdian.mainmemorysubarea.mainmemorysubarea;import com.gaojingdian.m

2、ainmemorysubarea.revokememory;/* * 最佳適應(yīng)算法 * */public class bestfit extends fcfsprivate list readylist=new arraylist(); /就緒隊(duì)列private list allocationlist=new linkedlist();/已分分配分區(qū)隊(duì)列private static mainmemorysubarea mms=null;private pcb lastpcb=null;private subarea revokesubarea=null;/當(dāng)前要釋放的分區(qū)private lis

3、t emptysubarea=null;/空閑隊(duì)列private list list=null;/中間容器staticmms=new mainmemorysubarea();/用fcfs調(diào)度算法從后備隊(duì)列中往內(nèi)存中調(diào)入滿足條件的作業(yè),并用最佳適應(yīng)算法為作業(yè)分配內(nèi)存空間private void enterreadylist() throws ioexceptionmms.initfreelist();if(emptysubarea=null)emptysubarea=mms.getsubarealist();for(int i=0;ilist.size();i+)int j=0;j=this.g

4、etindex(list.get(i);if(j!=-1)readylist.add(list.get(i);if(emptysubarea.get(j).getsize()-list.get(i).getprocesssize()=subarea.unalteredsize)subarea rsb=new subarea();rsb.setsize(emptysubarea.get(j).getsize();rsb.setbeginaddress(emptysubarea.get(j).getbeginaddress();rsb.setpcbid(list.get(i).getid();al

5、locationlist.add(rsb);emptysubarea.remove(emptysubarea.get(j);elsesubarea sa=emptysubarea.get(j);subarea rsb=new subarea();rsb.setsize(list.get(i).getprocesssize();rsb.setbeginaddress(sa.getbeginaddress();rsb.setpcbid(list.get(i).getid();allocationlist.add(rsb);sa.setbeginaddress(sa.getbeginaddress(

6、)+list.get(i).getprocesssize();sa.setsize(sa.getsize()-list.get(i).getprocesssize();list.get(i).setlogo2(1);break;if(j=-1)list.get(i).setlogo1(1);/執(zhí)行進(jìn)程,并回收內(nèi)存空間public void bestfit() throws ioexceptionpcb pcb=null;int temp=10000;int index=0;while(true)list=super.selectprocess(readylist, lastpcb);this.

7、enterreadylist();temp=10000;if(readylist.size()!=0)if(this.getcount()!=readylist.size()for(int i=0;ireadylist.size();i+)if(readylist.get(i).getarrivetime()temp&readylist.get(i).getlogo()=0&readylist.get(i).getlogo2()=1&readylist.get(i).getlogo1()=0)temp=readylist.get(i).getarrivetime();index=i;pcb=r

8、eadylist.get(index);if(lastpcb=null)pcb.setbegintime(pcb.getarrivetime();elsepcb.setbegintime(lastpcb.getendtime();pcb.setendtime(pcb.getbegintime()+pcb.getruntime();pcb.setlogo(1);lastpcb=pcb;revokesubarea=revokememory.selectrevoke(allocationlist,pcb);revokememory.revokememory(emptysubarea,revokesu

9、barea);elsebreak;/判斷就緒隊(duì)列中還有沒有為被執(zhí)行的進(jìn)程private int getcount()int count=0;for(int i=0;ireadylist.size();i+)if(readylist.get(i).getlogo()=1)count+;return count;/返回空閑分區(qū)中大小最合適的分區(qū)的下標(biāo)private int getindex(pcb pcb)int temp=10000;int index=-1;for(int i=0;iemptysubarea.size();i+)if(pcb.getprocesssize()=emptysuba

10、rea.get(i).getsize()&(emptysubarea.get(i).getsize()-pcb.getprocesssize()temp)temp=emptysubarea.get(i).getsize()-pcb.getprocesssize();index=i;return index;public list getallocationlist() return allocationlist;public void setallocationlist(list allocationlist) this.allocationlist = allocationlist;publ

11、ic list getemptysubarea() return emptysubarea;public void setemptysubarea(list emptysubarea) this.emptysubarea = emptysubarea;public list getreadylist() return readylist;public void setreadylist(list readylist) this.readylist = readylist;package com.gaojingdian.arithmetic;import java.io.ioexception;

12、import java.util.arraylist;import java.util.linkedlist;import java.util.list;import com.gaojingdian.dataframe.pcb;import com.gaojingdian.dataframe.subarea;import com.gaojingdian.mainmemorysubarea.mainmemorysubarea;import com.gaojingdian.mainmemorysubarea.revokememory;import com.gaojingdian.test.test

13、;import com.gaojingdian.worklist.worklists;/* * 首次適應(yīng)算法 * author gaojingdian * */public class firstfit extends fcfsprivate list readylist=new arraylist(); /就緒隊(duì)列private list allocationlist=new linkedlist();/已分分配分區(qū)隊(duì)列private static mainmemorysubarea mms=null;private pcb lastpcb=null;private subarea revo

14、kesubarea=null;/當(dāng)前要釋放的分區(qū)private list emptysubarea=null;/空閑隊(duì)列private list list=null;/中間容器staticmms=new mainmemorysubarea();/用fcfs調(diào)度算法從后備隊(duì)列中往內(nèi)存中調(diào)入滿足條件的作業(yè),并用首次適應(yīng)算法為作業(yè)分配內(nèi)存空間private void enterreadylist() throws ioexceptionmms.initfreelist();if(emptysubarea=null)emptysubarea=mms.getsubarealist();for(int i

15、=0;ilist.size();i+)int j=0;for(;jemptysubarea.size();j+)if(list.get(i).getprocesssize()=emptysubarea.get(j).getsize()readylist.add(list.get(i);if(emptysubarea.get(j).getsize()-list.get(i).getprocesssize()=subarea.unalteredsize)subarea rsb=new subarea();rsb.setsize(emptysubarea.get(j).getsize();rsb.s

16、etbeginaddress(emptysubarea.get(j).getbeginaddress();rsb.setpcbid(list.get(i).getid();allocationlist.add(rsb);emptysubarea.remove(emptysubarea.get(j);elsesubarea sa=emptysubarea.get(j);subarea rsb=new subarea();rsb.setsize(list.get(i).getprocesssize();rsb.setbeginaddress(sa.getbeginaddress();rsb.set

17、pcbid(list.get(i).getid();allocationlist.add(rsb);sa.setbeginaddress(sa.getbeginaddress()+list.get(i).getprocesssize();sa.setsize(sa.getsize()-list.get(i).getprocesssize();list.get(i).setlogo2(1);break;if(j=emptysubarea.size()list.get(i).setlogo1(1);/執(zhí)行進(jìn)程,并回收內(nèi)存空間public void firstfit() throws ioexcep

18、tionpcb pcb=null;int temp=10000;int index=0;while(true)list=super.selectprocess(readylist, lastpcb);this.enterreadylist();temp=10000;if(readylist.size()!=0)if(this.getcount()!=readylist.size()for(int i=0;ireadylist.size();i+)if(readylist.get(i).getarrivetime()temp&readylist.get(i).getlogo()=0&readylist.get(i).getlogo2()=1&readylist.get(i).getlogo1()=0)temp=readylist.get(i).getarrivetime();index=i;pcb=readylist.get(index);if(lastpcb=null)pcb.setbegintime(pcb.getarrivetime();elsepcb.setbegintime(lastpcb.getendtime();pcb.setendtime(pcb.getbegintime()+pcb.getruntime();pcb.setlogo(1);lastpcb

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論