操作系統實驗報告可變分區存儲管理方式的內存分配回收_第1頁
操作系統實驗報告可變分區存儲管理方式的內存分配回收_第2頁
操作系統實驗報告可變分區存儲管理方式的內存分配回收_第3頁
操作系統實驗報告可變分區存儲管理方式的內存分配回收_第4頁
操作系統實驗報告可變分區存儲管理方式的內存分配回收_第5頁
已閱讀5頁,還剩1頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

1、word實驗三可變分區存儲管理方式的內存分配回收一實驗目的1深入了解可變分區存儲管理方式的內存分配回收的實現。二實驗內容編寫程序完成可變分區存儲管理方式的內存分配回收,要求有內存空間分配表,并采用最優適應算法完成內存的分配與回收。三實驗原理在可變分區模式下,在系統初啟且用戶作業尚未裝入主存儲器之前,整個用戶區是一個大空閑分區,隨著作業的裝入和撤離,主存空間被分成許多分區,有的分區被占用,而有的分區時空閑的。為了方便主存空間的分配和去配,用于管理的數據結構可由兩張表組成:“已分配區表和“未分配區表。在“未分配表中將空閑區按長度遞增順序排列,當裝入新作業時,從未分配區表中挑選一個能滿足用戶進程要求

2、的最小分區進行分配。這時從已分配表中找出一個空欄目登記新作業的起始地址和占用長度,同時修改未分配區表中空閑區的長度和起始地址。當作業撤離時已分配區表中的相應狀態變為“空,而將收回的分區登記到未分配區表中,假設有相鄰空閑區再將其連接后登記。可變分區的回收算法較為復雜,當一個作業撤離時,可分為4種情況:其臨近都有作業A和B,其一邊有作業A或B,其兩邊均為空閑區。尤其重要的是,在程序中利用“new類型T初值列表申請分配用于存放T類型數據的內存空間,利用“delete指針名釋放指針所指向的內存空間。四實驗局部源程序#include<iostream>usingnamespacestd;ty

3、pedefstructSNode/SpaceNodeintstart,end;/起始,結束intlength;/長度大小structSNode*next;/指向下一結點的指針*SP;SPHead=(SP)malloc(sizeof(SNode);/全局變量,內存空間頭結voidDispSpace()/顯示內存空間分配情況SPp=Head->next;cout<<"n空閑區說明表n"<<"-地址-長度-n"while(p)cout<<""<<p->start<<&q

4、uot;"<<p->length<<endl;p=p->next;cout<<"-n"voidInitial()/初始化說明表SPp,q;p=(SP)malloc(sizeof(SNode);q=(SP)malloc(sizeof(SNode);p->start=14;p->length=12;p->end=26;q->start=32;q->length=96;q->end=128;/指導書上的作業分配Head->next=p;/與頭結點連接p->next=q;q-&

5、gt;next=NULL;DispSpace();voidAllocation(intlen)/分配內存給新作業SPp=Head->next,q;while(p)if(p->length<len)p=p->next;elseif(p->length>len)p->start=p->start+len;p->length=p->length-len;cout<<"分配成功!n"DispSpace();return;else/當兩者長度相等q=p->next;p->next=q->next

6、;cout<<"分配成功!n"DispSpace();return;cout<<"分配失敗!n"DispSpace();return;voidCallBack(intsta,intlen)/回收內存SPp=Head,q=p->next,r;/開始地址和長度p->end=0;inten=sta+len;while(q)if(sta=0)/初始地址為0if(en=q->start)/正好回收q->start=0;q->length=q->end;return;elser=(SP)malloc(siz

7、eof(SNode);r->start=sta;r->length=len;r->end=en;p->next=r;r->next=q;return;elseif(p->end<sta)&&(q->start>en)/上鄰區r=(SP)malloc(sizeof(SNode);r->start=sta;r->length=len;r->end=en;p->next=r;r->next=q;return;elseif(p->end<sta)&&(q->start=

8、en)/鄰區相接q->start=sta;q->length=q->end-sta;return;elseif(p->end=sta)&&(q->start<en)/下鄰區p->end=en;p->length=en-p->start;return;elseif(p->end=sta&&q->start=en)/鄰區相接p->end=q->end;p->length=p->end-p->start;p->next=q->next;return;elsep=p->next;q=q->next;voidmain()Initial();cout<<"現在分配大小為6K的作業4申請裝入主存:"Allocation(6);/分配時參數只有長度/-指導書測試數據演示-cout<<"現回收作業3(起址10,長度4)n"CallBac

溫馨提示

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

評論

0/150

提交評論