內存分配算法

(1)首次適應算法。使用該算法進行內存分配時,從空閒分區鏈首開始查找,直至找到一個能滿足其大小要求的空閒分區爲止。然後再按照作業的大小,從該分區中劃出一塊內存分配給請求者,餘下的空閒分區仍留在空閒分區鏈中。
  該算法傾向於使用內存中低地址部分的空閒分區,在高地址部分的空閒分區很少被利用,從而保留了高地址部分的大空閒區。顯然爲以後到達的大作業分配大的內存空間創造了條件。缺點在於低址部分不斷被劃分,留下許多難以利用、很小的空閒區,而每次查找又都從低址部分開始,這無疑會增加查找的開銷。
   
(2)循環首次適應算法。該算法是由首次適應算法演變而成的。在爲進程分配內存空間時,不再每次從鏈首開始查找,而是從上次找到的空閒分區開始查找,直至找到一個能滿足要求的空閒分區,並從中劃出一塊來分給作業。該算法能使空閒中的內存分區分佈得更加均勻,但將會缺乏大的空閒分區。

(3)最佳適應算法。該算法總是把既能滿足要求,又是最小的空閒分區分配給作業。
爲了加速查找,該算法要求將所有的空閒區按其大小排序後,以遞增順序形成一個空白鏈。這樣每次找到的第一個滿足要求的空閒區,必然是最優的。孤立地看,該算法似乎是最優的,但事實上並不一定。因爲每次分配後剩餘的空間一定是最小的,在存儲器中將留下許多難以利用的小空閒區。同時每次分配後必須重新排序,這也帶來了一定的開銷。

4)最差適應算法。最差適應算法中,該算法按大小遞減的順序形成空閒區鏈,分配時直接從空閒區鏈的第一個空閒分區中分配(不能滿足需要則不分配)。很顯然,如果第一個空閒分區不能滿足,那麼再沒有空閒分區能滿足需要。這種分配方法初看起來不太合理,但它也有很強的直觀吸引力:在大空閒區中放入程序後,剩下的空閒區常常也很大,於是還能裝下一個較大的新程序。

最壞適應算法與最佳適應算法的排序正好相反,它的隊列指針總是指向最大的空閒區,在進行分配時,總是從最大的空閒區開始查尋。
該算法克服了最佳適應算法留下的許多小的碎片的不足,但保留大的空閒區的可能性減小了,而且空閒區回收也和最佳適應算法一樣複雜。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章