上節講述了連續分割槽分配方式中有動態分割槽分配的方式,如果在動態分割槽分配演算法中有許多空閒分割槽都滿足需求的時候,那該如何分配空間呢,今天來介紹四種分配方法解決這個問題。
目錄
3.5 動態分割槽分配演算法
3.5.1 首次適應演算法
3.5.2 最佳適應演算法
3.5.3 最壞適應演算法
3.5.4 鄰近適應演算法
3.5.5 四種方法比較
演算法思想:每次都從低位址開始查詢,找到第乙個能滿足大小的空閒分割槽,優先使用低位址空間。
如何實現:空閒分割槽以位址遞增的次序排列。每次分配記憶體時順序查詢空閒分割槽鏈(或空閒分割槽表),找到大小能滿足要求的第乙個空閒分割槽。
演算法思想:由於動態分割槽分配是一種連續分配方式,為各程序分配的空間必須是連續的一整片區域。因此為了保證當「大程序」到來時能有連續的大片空間,可以盡可能多地留下大片的空閒區,即,優先使用更小的空閒區。
缺點:每次都選最小的分割槽進行分配,會留下越來越多的、很小的、難以利用的記憶體塊。因此這種方法會產生很多的外部碎片。
最壞適應演算法又稱最大適應演算法。
演算法思想:為了解決最佳適應演算法的問題---即留下太多難以利用的小碎片,可以在每次分配時優先使用最大的連續空閒區,這樣分配後剩餘的空閒區就不會太小,更方便使用。
如何實現:空閒分割槽按容量遞減次序鏈結。每次分配記憶體時順序查詢空閒分割槽鏈(或空閒分割槽表),找到大小能滿足要求的第乙個空閒分割槽。
缺點:每次都使用最大的連續空閒區會導致大空閒區被很快用光,後續再有大程序到來時就不會再有可用的大分割槽了。
演算法思想:首次適應演算法每次都從鏈頭開始查詢的。這可能會導致低位址部分出現很多小的空閒分割槽,而每次分配查詢時,都要經過這些分割槽,因此也增加了查詢的開銷。如果每次都從上次查詢結束的位置開始檢索,就能解決上述問題。
如何實現:空閒分割槽以位址遞增的順序排列(可排成乙個迴圈鍊錶)。每次分配記憶體時從上次查詢結束的位置開始查詢空閒分割槽鏈(或空閒分割槽表),找到大小能滿足要求的第乙個空閒分割槽。
演算法演算法思想
分割槽排列順序
優點缺點
首次適應
從頭到尾找到乙個合適的分割槽
位址遞增排列
綜合看效能最好。演算法開銷小,**分割槽後一般不需要對空閒分割槽佇列重新排序
最佳適應
優先使用更小的分割槽,以保留更多大分割槽
容量遞增排列
會有更多的大分割槽被保留下來,更能滿足大程序需求
會產生很多太小的、難以利用的碎片;演算法開銷大,**分割槽後可能需要對空閒分割槽佇列重新排序
最壞適應
優先使用更大的分割槽,以防止產生太小的不可用的碎片
容量遞減排列
可以減少難以利用的小碎片
大分割槽容易被用完,不利於大程序;演算法開銷大
臨近適應
由首次適應演變而來,每次從上次查詢結束位置開始查詢
位址遞增排成迴圈鍊錶
不用每次都從低位址的小分割槽開始檢索。
演算法開銷小
會使高位址的大分割槽也被用完
作業系統 動態分割槽分配演算法
空閒分割槽以位址遞增的次序排列,1 2 3。假設要分配為5大小的記憶體,首先從鏈頭開始查詢,第乙個滿足,分配,修改相應的記憶體,再分配乙個為9大小的記憶體,從鏈頭開始查詢,第二個滿足,分配。則 演算法思想 由於動態分割槽分配是一種連續分配方式,為各程序分配的空間必須是連續的一整片區域。因此為了保證當...
作業系統實驗之動態分割槽分配演算法
設計程式模擬四種動態分割槽分配演算法 首次適應演算法 迴圈首次適應演算法 最佳適應演算法和最壞適應演算法的工作過程。假設記憶體中空閒分割槽個數為n,空閒分割槽大小分別為p1,pn,在動態分割槽分配過程中需要分配的程序個數為m m n 它們需要的分割槽大小分別為s1,sm,分別利用四種動態分割槽分配演...
作業系統 動態分割槽分配演算法的模擬
1.初始化功能 記憶體狀態設定為初始狀態。2.分配功能 要求至少使用兩種演算法,使用者可以選擇使用。3.功能 4.空閒塊的合併 即緊湊功能,用以消除碎片。當做碎片整理時,需要跟蹤分配的空間,修改其引用以保證引用的正確性。5.顯示當前記憶體的使用狀態,可以使用 或圖形。實現分配功能的4種演算法 1.最...