- Segmentation
- 透過 base / limit (size) pair 來管理記憶體
- 額外增加 growth 1 bit 用來分辨記憶體增長的位置
- Size 可變動
- 各種不同的 Size fitting algorithm
- Best Fit
- Worst Fit
- First Fit
- Next Fit
- Buddy Algorithm
- Paging
- 劃分固定大小的 Page (Virtual Page) 對應到 Physical Memory 上
- 透過 Paging Table 管理當前 Paging 對應的狀況
- 每個 Process 都有各自的 Paging Table
- External / Internal fragmentation
- External Fragmentation
- 出現在多次 allocate / release 後,記憶體不連續導致即使有足夠的空間,也沒有辦法分配記憶體。
- 例如想要分配 15 Bytes 的記憶體空間,但是 Free Space 只剩下 10 / 5 / 10,雖然總共有 25 Bytes 的空間,卻沒有足夠的連續空間可以分配。
- 多出現在 Segmentation,可以透過不同的 Size fitting algorithm 減緩。
- Internal Fragmentation
- 指因為 Rounding 而產稱的記憶體浪費情況
- 舉例而言,Binary Buddy Algorithm 可能在分配 7 Bytes 空間時,因為只能夠提供 8 Bytes 的空間 (再切分下去只剩下 4 Bytes,不夠給 7 Bytes 使用),這時候就會產生 Internal Fragmentation 浪費 1 Byte 的空間。
- Paging 也會有相似的問題,當一次 allocate 只需要任何小於 Page Size 的空間,就會遇到這樣的問題。舉例而言,一個 Page 大小為 4 KBytes,而只 allocate 給 1 Byte 的物件使用的話,就會浪費掉 4095 Bytes。
- External Fragmentation
- TLB (Translation Lookaside Buffer)
- 用來加速 Paging Lookup 的 Buffer,當透過 Paging 要對應到 Physical Page 時,會先檢查 TLB 中是否有相對應的 Mapping,如果有,會在確認相關的條件 (Valid / PCID…etc),如果都符合,就可以拿來使用。如果不符合的話,就會需要存取 Paging Table 來取得相對應的 Mapping。
Leave a Reply