操作系統筆記(十)內存管理之分頁,分段和段頁式
阿新 • • 發佈:2018-03-13
分段式內存管理 筆記 關系 代碼 保護 系統 長度 段頁式內存管理 bit
- 基本內存管理:
- 進程占用空間必須連續,導致外部碎片以及附加的compaction
- 整個進程的swap in 和 swap out十分耗時。
- 解決:分頁 ->內存空間不必連續,無外部碎片,有內部碎片。可以部分swap in 和 out。
- 分頁式內存管理
- 重定位
- 物理內存:幀 <==> 邏輯內存:頁
- 頁表管理頁和幀的映射關系,每條記錄稱作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)緩沖。
- 內存保護
- 以頁為單位,保護信息存儲在PTE
- 另PTE包含valid/invalid位表明頁是否可以使用。
- 頁表結構
- 每個進程需要一個頁表,而全地址頁表過於大。需要動態調整進程頁表的大小
- 層次型頁表:樹形,如二級頁表(PD和PDE)【page directory number,page table number,page table offset】
- hash頁表
- inverted頁表
- 內存分配和回收
- 內存分配:分配frame,並創建頁表
- 內存回收:進程退出時,回收frame
- 空間frame的管理:free frame list
- 內存共享以頁面為單位。
- 分段式內存管理
- 概念:邏輯地址空間由段組成,每段的數據類型相同。如代碼段,數據段,棧。段在物理上不連續。
- 重定位
- 邏輯地址:segment number , offset
- segement table 保存邏輯地址到物理地址的映射。每條記錄包括base,limit(offset < limit),protection bits。
- 類似段表存儲在內存,segment table base register 和 segment table length register保存段表的位置和長度。
- 內存保護和共享
- 以段為單位
- 缺點:容易產生外部碎片。
- 段頁式內存管理(IA-32)
- 必須分段
- 最大段為4GB
- 全局段和本地段
- 可選分頁
- 先分段,後分頁
操作系統筆記(十)內存管理之分頁,分段和段頁式