作業系統 『動態(可變)分割槽分配』

零碎@流年絮語發表於2021-01-04

動態(可變)分割槽分配

動態建立分割槽:

  • 在裝入程式時按其初始要求分配;
  • 在其執行過程中通過系統呼叫進行分配或改變分割槽大小。
優點:沒有內碎片。
缺點:有外碎片;

“邏輯地址>限長暫存器值”時,形成一個“地址越界”的程式性中斷事件

地址轉換公式:絕對地址=基址暫存器值+邏輯地址

分割槽分配中的資料結構

空閒分割槽表:

記錄每個空閒分割槽的情況。每個空閒分割槽佔一個表目,表目中包括分割槽序號、分割槽始址及分割槽的大小等資料項。

空閒分割槽鏈:

在這裡插入圖片描述

分割槽分配演算法(基於順序搜尋)

首次適應演算法FF(First Fit):將地址最小的夠用的空間分配出去

(最先匹配法(first-fit))首址遞增排列

優點:優先利用記憶體低址部分。
缺點:低址部分不斷劃分,產生小碎片;每次查詢從低址部分開始,增加了查詢的開銷。

在這裡插入圖片描述

迴圈首次適應演算法NF(Next Fit):從上次分配位置開始搜尋,將地址最小的夠用的空間分配出去

(下次匹配法(next-fit))

為實現演算法,需要:
  • 設定一起始查尋指標
  • 採用迴圈查詢方式

優點:使記憶體空閒分割槽分佈均勻,減少查詢的開銷
缺點:缺乏大的空閒分割槽

最佳適應演算法BF(Best Fit):將夠用的長度最小的空間分配出去

空閒區按大小遞增排列!

缺點:產生許多難以利用的小空閒區(外碎片)

最壞適應演算法WF(Worst Fit):將夠用的長度最大的空間分配出去

空閒區按大小遞減排列!

  • 不會留下太多的小空閒分割槽;
  • 但較大的空閒分割槽不被保留。

分配演算法對比

在這裡插入圖片描述

分割槽分配操作

分配記憶體

設請求的分割槽大小為u.size,
表中每個空閒分割槽的大小表示為m.size,
若m.size- u.size <= size(最小閾值),
將整個分割槽分配給請求者,
否則從分割槽中按請求的大小劃出一塊記憶體空間分配,
餘下部分留在空閒鏈中,將分配區首址返回給呼叫者。

注:基於索引搜尋的分割槽分配演算法

快速適應演算法:

將空閒分割槽,按其容量大小,進行分類,對於每一類的所有空閒分割槽,單獨設立一個空閒分割槽連結串列

夥伴系統:

分割槽大小均為2的k次冪,將空閒分割槽按分割槽的大小進行分類,並單獨設立一個空閒分割槽雙向連結串列。

夥伴需滿足的條件:
  • 兩個塊大小相同;
  • 兩個塊地址連續;
  • 兩個塊必須是同一個大塊中分離出來的

在這裡插入圖片描述

雜湊演算法:

構造一張以空閒分割槽大小為關鍵字的雜湊表,該表的每一個表項記錄了一個對應的空閒分割槽連結串列表頭指標。

相關文章