1. 程式人生 > >動態分割槽分配演算法

動態分割槽分配演算法

基於順序搜尋的動態分割槽分配演算法

1.首次適應演算法(FF):

所謂的首次的意思以地址遞增連結。因此在分配記憶體的時候,從鏈首開始查詢,直到找到一個大小能滿足要求的空閒分割槽為之。

2.迴圈首次適應演算法(NF):

和首次適應演算法的區別就是,在為程序分配記憶體空間的時候,不再是都從鏈首開始查詢, 而是從上次找到的空閒的分割槽的下一個空閒分割槽開始查詢,直到找到一個能滿足要求的空閒分割槽。

3.最佳適應演算法(BF):

將所有的空閒空間按其容量從小到大的順序形成一空閒分割槽鏈,然後進行分配。

4.最壞適應演算法(WF):

將所有的空閒空間按其容量從大到小的順序形成一空閒分割槽鏈,然後進行分配。 當系統很大的時候,基於順序搜尋的動態分割槽分配演算法可能會很慢,所以有:

基於索引搜尋的動態分割槽分配演算法

1.快速適應演算法:

將空閒分割槽根據其容量大小進行分類,對於每一類具有相同容量的所有分割槽,單獨設立一個空閒分割槽連結串列,這樣系統中存在多個空閒分割槽連結串列。同時,在記憶體中設立一張管理索引表,其中的每一個索引表項對應了一種空閒分割槽型別。 在搜尋可分配空閒分割槽時,第一步根據程序的長度,從索引表中去尋找能容納它的最小空閒區連結串列;第二步是從連結串列中取下第一塊進行分配即可。 優先是查詢效率高,缺點是,該演算法在分配空閒分割槽時,是以程序為單位的,一個分割槽只屬於一個程序,因此在為程序所分配的一個分割槽中,或多或少存在一定的浪費。

2.夥伴系統:

夥伴系統方式是動態分割槽分配和固定分割槽分配的一種折衷方案。 夥伴系統規定,分配的分割槽和空閒分割槽大小都是2^k,k為整數,l≤k ≤m。2^1表示分配的最小分割槽大小,2^m表示分配的最大分割槽大小。2^m是整個可分配的記憶體大小。系統中也要建立一種管理索引表,指明每個連結串列表頭。

分割槽分配方法: 開始時,整個分割槽是2^m,在系統執行過程中,由於不斷劃分,可能會形成若干不連續的空閒分割槽,將它們分類,每一類具有相同大小,且每類建立一個空閒分割槽雙向連結串列,系統中有若干個雙向連結串列。 當需要為程序分配大小為n的區塊時,首先計算一個i,使2^(i-1)≤n ≤2^i,然後在大小為2i的空閒分割槽連結串列中查詢。 分割槽回收: 若回收大小為2^i的分割槽,若有夥伴分割槽,則合併為2^(i+1)的分割槽,進而可能需要合併為2^(i+2)的分割槽…… 演算法效能取決於查詢空閒分割槽的位置和分割、回收空閒分割槽所花費的時間。