Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux 系統虛擬內存空間佈局與高低端內存劃分詳解

編輯:Linux 系統常見問題解答

4GB 線性地址空間劃分

虛擬內存空間佈局

  • 用戶空間 (0x00000000 ~ 0xBFFFFFFF, 3GB):每進程獨立,內核線程無用戶空間。fork 子進程複製頁表(COW),非共享物理頁。
  • 內核空間 (0xC0000000 ~ 0xFFFFFFFF, 1GB):全局共享,僅內核態可訪問。用戶態通過系統調用/中斷切換訪問。

內核空間細分

  1. 內核邏輯地址區 (PAGE_OFFSET ~ high_memory):直接映射物理內存(低端內存),偏移固定 PAGE_OFFSET (0xC0000000)。__pa(x) = x - PAGE_OFFSET,__va(x) = x + PAGE_OFFSET。
  2. 高端線性地址區 (high_memory ~ 0xFFFFFFFF, 128MB):
    • VMALLOC_START ~ VMALLOC_END:vmalloc/vmap/ioremap 映射物理不連續頁或 IO 空間。
    • PKMAP_BASE 起 LAST_PKMAP 頁:kmap 永久映射高端頁。
    • FIXADDR_START 起 KM_TYPE_NR*NR_CPUS 頁:kmap_atomic 臨時映射。
    • 其餘:啟動階段固定映射 IO 空間。

進程地址空間

物理內存:低端 vs 高端

  • 低端內存 (ZONE_NORMAL, < 896MB):啟動時建立永久內核映射,__pa/__va 直接轉換。
  • 高端內存 (ZONE_HIGHMEM, > 896MB):無固定內核映射。使用時通過 kmap/kmap_atomic/vmalloc 動態建立映射。產生原因:32 位內核空間僅 1GB,扣除 128MB IO 映射區,剩餘 896MB 直接映射物理內存;超出部分即為高端內存。嵌入式平台(如 MIPS)可調整閾值(如 512MB)。

內存區劃分

頁區與分配策略

內核按 ZONE_DMA/ZONE_NORMAL/ZONE_HIGHMEM 管理頁框。分配優先低端,GFP_HIGHMEM 允許使用高端頁。用戶進程缺頁時由內核決定映射哪類物理頁,用戶空間無感知。

Copyright © Windows教程網 All Rights Reserved