内存管理
操作系统的核心功能之一,负责高效、安全地分配和使用计算机的物理内存及虚拟内存资源
地址抽象(逻辑地址 → 物理地址)
内存保护(隔离进程内存空间)
动态分配(按需分配/释放内存)
虚拟扩展(使用磁盘模拟更大内存)
符号地址
用易于理解的名称(符号)代替实际的物理地址(如内存地址、文件路径等)
源代码,编译器理解的地址,实际变量存储位置,你定义的任何常量,任何指令,都在这
例:你本名“张三”,外号“老张”,老张就是符号地址->“张三”
相对地址
编译器将每个符号地址转换为相对地址
程序编译执行之前都是相对地址
例:向前走100米
物理地址
计算机系统中硬件可直接访问的真实地址,它是数据或指令在存储设备(如内存、磁盘)上的实际位置
加载
静态加载:程序运行前,所有代码和数据被加载进内存
动态加载:程序运行时,按需加载所需要的代码和数据
链接
静态链接:在编译时将所有依赖的库代码直接嵌入到最终的可执行文件中,生成一个完全独立的二进制文件
动态链接:在运行时才加载依赖的库(如 .dll
、.so
),库文件与可执行文件分离。
交换
操作系统将暂时不用的进程或数据从内存(RAM)移到交换空间,以便为当前运行的进程提供更多内存。
例:进程1:python运行程序并且需要用户提供一个数据;进程2:QQ音乐
例:由于等待用户提交数据需要时间,所以将进程1交换出来,不占用主存空间,等接收到数据在换回主存
虚拟内存和分页
虚拟内存:一种内存管理技术,使得程序可以使用比物理内存(RAM)更大的地址空间。
分页:将虚拟内存和物理内存划分为固定大小的块(页/Page),便于管理。页大小通常 4KB(Linux/Windows),但也可配置(如 2MB 大页)
地址翻译
Pn(虚拟页号),Fn(物理页帧号)
逻辑地址 = 页号 + 页偏移量
物理地址 = 帧号 + 帧偏移量
页表:
一个数据结构,存储 虚拟页号(Pn)→ 物理页帧号(Fn) 的映射关系,通常由操作系统管理,并由 MMU 硬件加速查询。
例:CPU 发出虚拟地址(如 0x12345678
)
MMU 拆分地址:
Pn = 0x12345(虚拟页号)
Offset = 0x678(页内偏移)
查询页表,找到
Pn=0x12345
对应的Fn=0xABCD
。组合物理地址:
物理地址 =
(Fn << 12) | Offset
=0xABCD678
访问物理内存