課設 模擬實現動態記憶體分配 首次適應演算法

2021-07-13 01:51:19 字數 2432 閱讀 3641

一、實驗內容

編寫乙個記憶體動態分割槽分配模擬程式,模擬記憶體的分配和**的完整過程。

二、實驗目的

主存的分配和**的實現與主儲存器的管理方式有關的,通過本實驗幫助學生理解在可變分割槽管理方式下應怎樣實現主存空間的分配和**。

三、實驗原理

模擬在可變分割槽管理方式下採用最先適應演算法實現主存分配和**。

(1)可變分割槽方式是按作業需要的主存空間大小來分割分割槽的。當要裝入乙個作業時,根據作業需要的主存量檢視是否有足夠的空閒空間,若有,則按需要量分割乙個分割槽分配給該作業;若無,則作業不能裝入。隨著作業的裝入、撤離,主存空間被分成許多個分割槽,有的分割槽被作業占用,而有的分割槽是空閒的。例如:05k

10k14k

26k32k

512k  

作業系統

作業1作業3

空閒區作業2

空閒區為了說明哪些區是空閒的,可以用來裝入新作業,必須要有一張空閒區說明表,格式如下:

起    址

長    度

狀      態

第一欄14 k

12 k

未 分 配

第二欄32 k

96 k

未 分 配mm

mm其中,起址——指出乙個空閒區的主存起始位址。

長度——指出從起始位址開始的乙個連續空閒的長度。

狀態——有兩種狀態,一種是「未分配」狀態,指出對應的由起址指出的某個長度的區域是空閒區。

(2) 當有乙個新作業要求裝入主存時,必須查空閒區說明表,從中找出乙個足夠大的空閒區。有時找到的空閒區可能大於作業需要量,這時應把原來的空閒區變成兩部分:一部分分給作業占用;另一部分又成為乙個較小的空閒區。為了儘量減少由於分割造成的空閒區,而盡量儲存高位址部分有較大的連續空閒區域,以利於大型作業的裝入。為此,在空閒區說明表中,把每個空閒區按其位址順序登記,即每個後繼的空閒區其起始位址總是比前者大。

(3) 採用最先適應演算法(順序分配演算法)分配主存空間。

按照作業的需要量,查空閒區說明表,順序檢視登記欄,找到第乙個能滿足要求的空閒區。當空閒區大於需要量時,一部分用來裝入作業,另一部分仍為空閒區登記在空閒區說明表中。

由於本實驗是模擬主存的分配,所以把主存區分配給作業後並不實際啟動裝入程式裝入作業,而用輸出「分配情況」來代替。

(4) 當乙個作業執行結束撤離時,作業所佔的區域應該歸還,歸還的區域如果與其它空閒區相鄰,則應合成乙個較大的空閒區,登記在空閒區說明表中。

(5) 請按最先適應演算法設計主存分配和**的程式。假設初始時主存中沒有作業,現按下面序列進行記憶體的申請與釋放:

作業1申請300k,作業2申請100k,作業1釋放300k,作業3申請150k,

作業4申請30k, 作業5申請40k, 作業6申請60k, 作業4釋放30k。    

動態記憶體分配

有四種分配方式,本次實驗採用首次適應演算法

①列印分割槽表的時候,只需遍歷一遍二叉樹,然後輸出度為0的節點(沒有孩子的節點)

②作業完成後,釋放空間時,通過插入時候給的作業名稱來遍歷、尋找到該節點,將其狀態修改為free即可

注意:

還有就是釋放後,空閒區的合併問題。由於本次實驗所插入、釋放作業後,無需合併,這點在本次實驗忽略(雖然題目有要求。。

//動態記憶體分配 

#includeint temp=0;//定義乙個全域性變數!這個變數起很大作用

typedef struct _bitnode//定義 表 的結構體

bitnode,*pbitree;

void init_bitree(pbitree l)

int print(pbitree p)

//先序遍歷

void preorder(pbitree p)

} void insert_preorder(pbitree p,int length,int homework)//插入新作業

else

} } void delect_preorder(pbitree p,int homework) //遍歷修改,將狀態修改為0。即為空閒區

delect_preorder(p->lchild,homework); //遍歷左子樹

delect_preorder(p->rchild,homework); //遍歷右子樹

動態記憶體管理 模擬實現memcpy,memmove

memcpy 和memmove 都是c語言中的庫函式,在標頭檔案string.h中,作用是拷貝一定長度的記憶體的內容,原型分別如下 void memcpy void dst,const void src,size t count void memmove void dst,const void sr...

MFC 動態建立機制 模擬實現

mfc 動態建立機制 模擬實現 動態建立的難點在於,你不能夠根據從檔案中或者使用者的輸入中根據類名稱來建立乙個物件。mfc實現動態建立的方法還是在於cruntimeclass 及其建立起來的型別網路。它在cruntimeclass中加入了新的成分 cruntimeclass createobject...

模擬實現通訊錄 動態

通訊錄 靜態版 題目描述 實現乙個通訊錄 通訊錄可以用於儲存1000個人的資訊 每個人的資訊包括 姓名,性別,年齡,住址 提供的方法 1.新增聯絡人資訊 2.刪除指定聯絡人資訊 3.查詢指定聯絡人資訊 4.修改指定聯絡人資訊 5.顯示所有聯絡人資訊 6.清空聯絡人資訊 7.以名字排序所有聯絡人 模擬...