1. 程式人生 > >操作系統筆記(十)內存管理之分頁,分段和段頁式

操作系統筆記(十)內存管理之分頁,分段和段頁式

分段式內存管理 筆記 關系 代碼 保護 系統 長度 段頁式內存管理 bit

  • 基本內存管理:
  1. 進程占用空間必須連續,導致外部碎片以及附加的compaction
  2. 整個進程的swap in 和 swap out十分耗時。
  3. 解決:分頁 ->內存空間不必連續,無外部碎片,有內部碎片。可以部分swap in 和 out。
  • 分頁式內存管理
  1. 重定位
    • 物理內存:幀 <==> 邏輯內存:頁
    • 頁表管理頁和幀的映射關系,每條記錄稱作PTE。即輸入page number,輸出frame number。
    • 邏輯地址:page number和page offset。
    • 物理地址:frame number和frame offset。技術分享圖片
    • 實現:MMU查詢頁表負責地址映射,OS維護頁表,屏蔽了映射細節。
    • 頁表存儲在內存,Page table base register(PTBR)和 page table length register(PTLR)分別保存頁表的位置和長度。
    • 缺點:每次內存訪問包括(2次)訪問PT和訪問內存數據。 解決方案:MMU中包含TLB(Translation Look-aside Buffers)緩沖。技術分享圖片
  2. 內存保護
    • 以頁為單位,保護信息存儲在PTE
    • 另PTE包含valid/invalid位表明頁是否可以使用。
  3. 頁表結構
    • 每個進程需要一個頁表,而全地址頁表過於大。需要動態調整進程頁表的大小
    • 層次型頁表:樹形,如二級頁表(PD和PDE)【page directory number,page table number,page table offset】
    • hash頁表
    • inverted頁表
  4. 內存分配和回收
    • 內存分配:分配frame,並創建頁表
    • 內存回收:進程退出時,回收frame
    • 空間frame的管理:free frame list
    • 內存共享以頁面為單位。
  • 分段式內存管理
  1. 概念:邏輯地址空間由段組成,每段的數據類型相同。如代碼段,數據段,棧。段在物理上不連續
  2. 重定位
    • 邏輯地址:segment number , offset
    • segement table 保存邏輯地址到物理地址的映射。每條記錄包括base,limit(offset < limit),protection bits。
    • 類似段表存儲在內存,segment table base register 和 segment table length register保存段表的位置和長度。
  3. 內存保護和共享
    • 以段為單位
  4. 缺點:容易產生外部碎片。
  • 段頁式內存管理(IA-32)
  1. 必須分段
    • 最大段為4GB
    • 全局段和本地段
  2. 可選分頁
  3. 先分段,後分頁技術分享圖片

操作系統筆記(十)內存管理之分頁,分段和段頁式