實驗二-主存空間的分配和回收_第1頁
實驗二-主存空間的分配和回收_第2頁
實驗二-主存空間的分配和回收_第3頁
實驗二-主存空間的分配和回收_第4頁
實驗二-主存空間的分配和回收_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗二 主存空間的分配和回收一、實驗內(nèi)容 主存儲器空間的分配和回收二、實驗?zāi)康?幫助了解在不同的存儲管理方式下,應(yīng)怎樣實現(xiàn)主存空間的分配和回收。三、實驗題目 在可變分區(qū)管理方式下,采用最先適應(yīng)算法實現(xiàn)主存空間的分配和回收。提示及要求 1、自行假設(shè)主存空間大小,預設(shè)操作系統(tǒng)所占大小并構(gòu)造未分分區(qū)表; 表目內(nèi)容:起址、長度、狀態(tài)(未分/空表目)2、結(jié)合實驗一,PCB增加為: PID,要求運行時間,優(yōu)先權(quán),狀態(tài),所需主存大小,主存起始位置,PCB指針3、采用最先適應(yīng)算法分配主存空間;4、進程完成后,回收主存,并與相鄰空閑分區(qū)合并。 源代碼:#include #include using namesp

2、ace std;typedef struct PARTITIONint iBegAddr;/分區(qū)起始地址int iSize;/分區(qū)大小bool bState;/分區(qū)狀態(tài)parti;#define ARRAY_SIZE 100parti parTableARRAY_SIZE+1;/分區(qū)表,包含未分配和已分配#define MINSIZE 2int MemAlloc(int allocSize);void InitParTable(int size);void InsertPar(int i,parti pElem);void MemRecycle(int p);/回收p指向地址的內(nèi)存void M

3、ergePar(int x,int y);/將分區(qū)y合并到分區(qū)x中void dispTable();/打印分區(qū)表信息int main()InitParTable(256);dispTable();int inSize;coutinSize;coutThe alloc addr:MemAlloc(inSize)endl;dispTable();coutinSize;coutThe alloc addr:MemAlloc(inSize)endl;dispTable();coutinSize;coutThe alloc addr:MemAlloc(inSize)endl;dispTable();co

4、utinSize;coutThe alloc addr:MemAlloc(inSize)endl;dispTable();coutinSize;MemRecycle(inSize);dispTable();coutinSize;coutThe alloc addr:MemAlloc(inSize)endl;dispTable();return 0;void InitParTable(int size)coutThe first 20 is reserved for osendl;parTable1.iBegAddr = 20;parTable1.iSize = size-20;parTable

5、1.bState = 0;parTable0.iSize = 1;int MemAlloc(int allocSize)for(int i=1;iallocSize)/分區(qū)i符合要求if(parTablei.iSize - allocSize)=i;-j)parTablej+1 = parTablej;parTablei = pElem;+parTable0.iSize;void MemRecycle(int p)/回收p指向地址的內(nèi)存int i;for(i=1;i=parTable0.iSize;+i)/找到待回收地址對應(yīng)的塊號if(parTablei.iBegAddr = p)break;

6、if(parTable0.iSize + 1) = i | parTablei.bState = 0)coutError!該地址不是一個有效的可回收地址1 & iparTable0.iSize)if(parTablei+1.bState = 0)/待回收分區(qū)的前一分區(qū)是空閑分區(qū)if(parTablei+1.iBegAddr=(parTablei.iBegAddr+parTablei.iSize)MergePar(i,i+1);/合并分區(qū)i和i-1if(parTablei-1.bState = 0)if(parTablei.iBegAddr=(parTablei-1.iBegAddr+parTa

7、blei-1.iSize)MergePar(i-1,i);else if(1 = i)if(parTablei+1.bState = 0)/待回收分區(qū)的前一分區(qū)是空閑分區(qū)if(parTablei+1.iBegAddr=(parTablei.iBegAddr+parTablei.iSize)MergePar(i,i+1);/合并分區(qū)i和i-1else if(parTable0.iSize = i)if(parTablei-1.bState = 0)if(parTablei.iBegAddr=(parTablei-1.iBegAddr+parTablei-1.iSize)MergePar(i-1,i);void MergePar(int x,int y)/將分區(qū)y合并到分區(qū)x中parTablex.iSize += parTabley.iSize;for(int i=y;iparTable0.iSize;+i)parTablei = parTablei+1;-parTable0.iSize;void dispTable()cout塊號 begAddr size stateendl;for(int i=1;i=parTable0.iSize;+i)

溫馨提示

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

評論

0/150

提交評論