動態分割槽分配演算法
目錄
一、引入
動態分割槽分配演算法:在動態 分配分割槽的方式中,當有很多的空閒分割槽都能滿足需求時,應該選擇哪個分割槽進行分配?
二、首次適應演算法(First Fit)
演算法思想:每次都從低地址開始查詢,找到第一個能滿足大小的分割槽。
演算法實現:空閒分割槽以地址遞增的次序排列。每次分配記憶體時順序查詢空閒分割槽鏈(或空閒分割槽表),找到大小能滿足要求的第一個空閒分割槽表。
三、最佳適應演算法(Best Fit)
演算法思想:由於動態分割槽分配是一種連續分配方式,為各程序分配的空間必須是連續的一整片區域。因此,為了保證當“大程序”來的時候能有連續的大片空間,可以儘可能多的留下大的空閒區,即優先使用小的空閒區。
演算法實現:空閒分割槽按照容量遞增次序排列。每次分配記憶體時順序查詢空閒分割槽表(或空閒分割槽鏈),找到大小能滿足要求的第一個空閒分割槽。
四、最壞適應演算法(Worst Fit)
又稱最大適應演算法(Largest Fit)
演算法思想:為了解決最佳適應演算法的問題——即留下太多難以利用的小碎片,可以在每次分配時優先使用最大的連續空閒區,這樣分配後剩餘的空閒區就不會太小,更方便使用。
演算法實現:空閒分割槽按照容量遞減次序排列。每次分配記憶體時順序查詢空閒分割槽表(或空閒分割槽鏈),找到大小能滿足要求的第一個空閒分割槽。
重新排序:空閒分割槽按容量遞減次序連結
五、鄰近適應演算法(Next Fit)
演算法思想:首次適應演算法每次都從鏈頭開始查詢的。這可能會導致低地址部分出現很多小的空閒分割槽,而每次分配查詢時,都要經過這些分割槽,因此也增加了查詢的開銷。如果每次都從上次查詢結束的位置開始檢索,就能解決上述問題。
演算法實現:空閒分割槽以地址遞增的順序排列(可排成一個迴圈連結串列)。每次分配記憶體時從上次查詢結束的位置開始查詢空閒分割槽鏈(或空閒分割槽表),找到大小能滿足要求的第一個空閒分割槽。
注意:
對於鄰近適應演算法和首次適應演算法,我們是按照地址順序遞增的次序來進行排列的。所以,即使記憶體空閒區的大小發生了比較大的變化,也不需要對整個連結串列進行重新排序。這也是這兩種演算法的演算法開銷小的原因。而最佳適應演算法和最壞適應演算法,在回收分割槽後可能經常需要對空閒分割槽佇列重新排序,因此演算法開銷大。