marp: true theme: default paginate: true _paginate: false header: '' footer: '' backgroundColor: white
第五讲 物理内存管理
第一节 地址空间
向勇 陈渝 李国良 任炬
2025年秋季
问题
- 为什么要建立存储层次结构?
- 如何描述访问的存储单元?
- 编译器、CPU和系统总线使用的存储单元地址有什么异同?
- 如何描述访问的存储单元?
提纲
1. 计算机的存储层次
- 地址和地址空间
- 虚拟存储的作用
物理地址、逻辑地址、虚拟地址
- 物理地址(PA, Physical Address) :用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。
- 逻辑地址(LA, Logical Address) :在程序的编译和链接阶段生成,表示程序中的地址偏移,它在载入内存之前使用。
- 虚拟地址(VA,Virtual Address):操作系统在程序加载过程中,将逻辑地址调整或映射到适当的虚拟地址空间
虚拟地址转换为物理地址
-
段式管理:
- 虚拟地址通过分段转换为物理地址
- 虚拟地址也称为线性地址(LA,Linear Address)
-
页式管理:
- 虚拟地址通过分页转换为物理地址
-
段页式管理:
- 虚拟地址先通过分段,再通过分页转换为物理地址
计算机的存储层次结构
计算机的存储多层结构
比较新的各种存储介质的访问速度参数:
- 金字塔层次结构:越靠近CPU速度越快,容量越小,价格越贵
操作系统对内存资源的抽象
回顾:操作系统内核的特征(并发、共享、虚拟、异步)
内存管理
- 操作系统中的内存管理方式
- 重定位(relocation)
- 分段(segmentation)
- 分页(paging)
- 虚拟存储(virtual memory/storage)
- 操作系统的内存管理高度依赖硬件
- 与计算机存储架构紧耦合
- MMU (内存管理单元): 处理CPU存储访问请求的硬件
提纲
- 计算机的存储层次
2. 地址和地址空间
- 虚拟存储的作用
地址空间的定义
三种地址空间的视角不同
- 物理地址空间:系统总线视角的地址空间
- 起始地址$0$,直到 $MAX_{phy}$
- 虚拟地址空间:CPU视角的地址空间
- 起始地址$0$,直到 $MAX_{virt}$
- 逻辑地址空间:编译器视角的地址空间
- 起始地址$0$, 直到 $MAX_{prog}$
逻辑地址生成
地址生成时机
- 编译时
- 假设起始地址已知
- 如果起始地址改变,必须重新编译
- 加载时
- 如编译时起始地址未知,编译器需生成可重定位的代码 (relocatable code)
- 加载时,位置可不固定,生成绝对(虚拟)地址
- 执行时
- 执行时代码不可修改
- 需地址转换(映射)硬件支持
地址生成过程
- CPU
- MMU:进行虚拟地址和物理地址的转换
- CPU控制逻辑:给总线发送物理地址请求
- 内存
- 发送物理地址的内容给CPU
- 接收CPU数据到物理地址
- 操作系统
- 建立虚拟地址VA和物理地址PA的映射
地址检查
提纲
- 计算机的存储层次
- 地址和地址空间
3. 虚拟存储的作用
外存的缓存
虚拟内存可作为外存的缓存
- 常用数据放在物理内存中
- 不常用数据放在外存
- 运行的程序直接用虚存地址,不用关注具体放在物理内存还是外存
简化应用编译和加载运行
每个运行程序具有独立的地址空间,而不管代码和数据在物理内存的实际存放,从而简化:
- 编译的执行程序链接
- 操作系统的执行程序加载
- 共享:动态链接库、共享内存
- 内存分配:物理不连续,虚拟连续
保护数据
虚拟内存可保护数据
- 独立的地址空间使得区分不同进程各自内存变得容易
- 地址转换机制可以进行可读/可写/可执行的检查
- 地址转换机制可以进行特权级检查
小结
- 存储层次结构的作用
- 存储效率(速度、容量、成本)、简化访问过程、存储保护
- 存储单元的地址和地址空间
- 逻辑地址、虚拟地址、物理地址
- 操作系统通过提供虚拟存储来实现存储层次结构的作用