内存取证:内存管理

outman
6
2025-07-16

内存管理

操作系统的核心功能之一,负责高效、安全地分配和使用计算机的物理内存及虚拟内存资源

  1. 地址抽象(逻辑地址 → 物理地址)

  2. 内存保护(隔离进程内存空间)

  3. 动态分配(按需分配/释放内存)

  4. 虚拟扩展(使用磁盘模拟更大内存)

符号地址

用易于理解的名称(符号)代替实际的物理地址(如内存地址、文件路径等)

源代码,编译器理解的地址,实际变量存储位置,你定义的任何常量,任何指令,都在这

例:你本名“张三”,外号“老张”,老张就是符号地址->“张三”

相对地址

编译器将每个符号地址转换为相对地址

程序编译执行之前都是相对地址

例:向前走100米

物理地址

计算机系统中硬件可直接访问的真实地址,它是数据或指令在存储设备(如内存、磁盘)上的实际位置

加载

静态加载:程序运行前,所有代码和数据被加载进内存

动态加载:程序运行时,按需加载所需要的代码和数据

链接

静态链接:在编译时将所有依赖的库代码直接嵌入到最终的可执行文件中,生成一个完全独立的二进制文件

动态链接:在运行时才加载依赖的库(如 .dll.so),库文件与可执行文件分离。

交换

操作系统将暂时不用的进程或数据从内存(RAM)移到交换空间,以便为当前运行的进程提供更多内存。

例:进程1:python运行程序并且需要用户提供一个数据;进程2:QQ音乐

例:由于等待用户提交数据需要时间,所以将进程1交换出来,不占用主存空间,等接收到数据在换回主存

虚拟内存和分页

虚拟内存:一种内存管理技术,使得程序可以使用比物理内存(RAM)更大的地址空间

分页:将虚拟内存和物理内存划分为固定大小的块(页/Page),便于管理。页大小通常 4KB(Linux/Windows),但也可配置(如 2MB 大页)

地址翻译

Pn(虚拟页号),Fn(物理页帧号)

逻辑地址 = 页号 + 页偏移量

物理地址 = 帧号 + 帧偏移量

页表:

一个数据结构,存储 虚拟页号(Pn)→ 物理页帧号(Fn) 的映射关系,通常由操作系统管理,并由 MMU 硬件加速查询。

例:CPU 发出虚拟地址(如 0x12345678

  1. MMU 拆分地址

    • Pn = 0x12345(虚拟页号)

    • Offset = 0x678(页内偏移)

  2. 查询页表,找到 Pn=0x12345 对应的 Fn=0xABCD

  3. 组合物理地址

    • 物理地址 = (Fn << 12) | Offset = 0xABCD678

  4. 访问物理内存