From What I Know of Virtual Memory

  • 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。
  • TLB (Translation Lookaside Buffer)
    • 用來加速 Paging Lookup 的 Buffer,當透過 Paging 要對應到 Physical Page 時,會先檢查 TLB 中是否有相對應的 Mapping,如果有,會在確認相關的條件 (Valid / PCID…etc),如果都符合,就可以拿來使用。如果不符合的話,就會需要存取 Paging Table 來取得相對應的 Mapping。



如果你覺得這篇文章不錯,歡迎打賞 IOTA:RFHEIVXVIZWJFXTZORZZRCMHZF9PSGFUFWAAKXTFNZE9JQUY9HFQREJYYSPSXDRLECKXCAQQDOMSMYJYDKPCKWXBKD

或是點選下方圖片贊助我一杯咖啡:

Leave a reply:

Your email address will not be published.

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料