虚拟内存与物理内存

虚拟内存与物理内存的对应关系

  1. 虚拟内存 每个进程拥有独立的4GB 虚拟地址空间,地址范围:0x00000000 ~ 0xFFFFFFFF
    ⚠ 虚拟地址不是真实物理内存地址,只是一套进程内的逻辑地址
  2. 物理内存
    ● 真实硬件内存,程序数据最终保存在物理内存
    ● 不同进程相同虚拟地址,可以映射到完全不同的物理地址,进程之间内存隔离互不干扰
    ● OS 通过页表完成虚拟地址 ↔ 物理地址的转换

虚拟内存的大小与地址划分(32 位 Windows)

整个 4GB 地址空间对半划分:

区域 地址范围 特性
用户空间(低2GB) 0x00000000 ~ 0x7FFFFFFF 每个进程独立,用户程序可操作
内核空间(高2GB) 0x80000000 ~ 0xFFFFFFFF 所有进程共享同一份内核空间

用户空间内部细分

  1. 前 64KB 空指针赋值区:0x00000000 ~ 0x0000FFFF,禁止访问,捕获空指针错误
  2. 用户模式可用区:0x00010000 ~ 0x7FFEFFFF,程序使用的地址区域
  3. 后 64KB 禁入保护区:0x7FFF0000 ~ 0x7FFFFFFF,紧邻内核空间,防止用户代码越界访问内核
    管理粒度:4KB 一页,按需分配
    只有真正访问虚拟地址时,才分配物理内存
    VAD(虚拟地址描述符)
    ● WinDbg 命令:!vad,查看进程 VAD 树
    ● 一个 VAD 节点代表一段已经分配的虚拟地址区间,不在 VAD 树中的地址就是未分配
    ● 用途:排查内存泄漏、查看进程内存布局

物理内存

  1. 管理单位:4KB / 页,称为物理页
  2. 物理内存上限 = 机器实际内存条容量
    公式:
    物理页总数 = 物理内存总大小(KB) ÷ 4KB
    物理内存总量(KB)=MmNumberOfPhysicalPages * 4
  3. WinDbg 查看物理页总数命令:
cpp 复制代码
dd MmNumberOfPhysicalPages

取出数值为物理页数量,乘以 4 得到 KB 单位内存

32 位系统内存识别限制

● 硬件理论上限:32 位架构最多识别64GB 物理内存

● Windows 系统版本限制:

○ WinXP:最多识别 4GB(内核人为限制,可通过 Hook 补丁突破)

○ Windows2003 服务器版:可识别 4GB 以上内存

注意:架构本身不限制,是操作系统内核做的限制

页面交换文件 pagefile.sys

● 文件位置:C 盘根目录,默认隐藏系统文件

● 作用:物理内存不够时,把不活跃内存数据写入硬盘这个文件,腾出物理内存

● 程序可用内存 = 物理内存 + pagefile.sys 虚拟内存

● 设置入口:系统属性 → 高级 → 性能设置 → 高级 → 虚拟内存更改

✅区分:

● 进程 4GB:虚拟地址空间(逻辑地址)

● pagefile.sys:硬盘充当内存的交换文件,二者不是同一个东西

核心机制:按需分配 & 缺页异常

  1. 按需分配:申请虚拟地址,不会立刻分配物理页;只有访问的时候才分配物理内存
  2. 缺页异常触发:访问已经分配虚拟地址,但没有挂载物理页时触发缺页中断
  3. 缺页异常 OS 处理流程:
    a. 校验虚拟地址合法性
    b. 分配物理页,建立页表映射
    c. 如果数据在 pagefile,从硬盘交换文件读取数据载入物理页
    d. 返回用户程序继续执行,应用完全无感知
  4. 比喻:七个坛子八个盖 物理页数量少于虚拟内存对应的 "坛子",依靠局部性原理,不活跃页面换入磁盘,活跃页面放在物理内存,动态轮换

总结

  1. 每个进程独立 4GB 虚拟地址;内核空间所有进程共享
  2. 虚拟地址≠物理地址,页表负责映射,进程内存隔离
  3. 内存按 4KB 页管理,虚拟内存延迟按需分配物理页
  4. VAD 描述已分配虚拟地址,WinDbg !vad查看;MmNumberOfPhysicalPages查看物理页总数
  5. pagefile.sys 是硬盘交换文件,物理内存不足时换页,缺页异常对程序透明
  6. 32 位 CPU 理论可识别 64GB 内存;XP 系统内核限制仅识别 4GB
相关推荐
时代新威powertime5 小时前
时代新威·视角|云计算平台中数据隐私保护机制的研究
网络安全·云计算
爱吃火鸡面呀7 小时前
Spark RDD 行动算子(Action)详解
windows·ajax·spark
dlhto7 小时前
Windows 使用 Rufus 制作 AlmaLinux 10.2 启动 U 盘:从 ISO 下载到服务器安装
运维·服务器·windows
小矮强8 小时前
输入凭证也没用?Windows 共享文件夹“来宾访问被安全策略阻止”
windows·经验分享
AAASilverwolf8 小时前
OpenAI 新增 12 小时提示缓存:跨小时任务能省多少?
人工智能·gpt·缓存·api
dk_tjy8 小时前
迪康加密系统技术解析:驱动层透明加密的机制、策略与工程权衡
运维·安全·网络安全·终端安全管理·数据防泄漏
skywalk81638 小时前
Virtualbox 从7.2.20降级到7.2.18 @FreeBSD系统
windows·virtualbox·freebsd
DogDaoDao9 小时前
Windows 双 Shell 全面对比:CMD 与 PowerShell 的技术剖析
windows·shell·测试·powershell·cmd·程序员开发
长不大的杨瑞杰9 小时前
Windows 安装 OpenCode v2:原生、WSL、Desktop 怎么选?完整配置与避坑指南
人工智能·windows·ai agent·opencode
高频因子挖掘机9 小时前
A股量化第一步:如何利用 QuantDash 实现日K数据清洗、前复权校验与缺失值处理
后端·github·api