物理和虚拟寻址
地址空间
虚拟地址空间:[0,
2
n
2^{n}
2n - 1], n
为虚拟地址位数
物理地址空间:[0, M - 1] ,M
为物理内存大小
虚拟内存作为缓存的工具
磁盘与虚拟内存以磁盘块为单位进行数据交互.
虚拟页集合中的单个页分别归属于三个类别
- 未分配的
虚拟页与磁盘块没建立关联
- 未缓存的
虚拟页与磁盘块建立了关联,但其关联的磁盘块并未放在内存.
- 缓存的
虚拟页与磁盘块建立了关联,且其关联的磁盘块已经放入内存,此后此虚拟页内的地址访问是CPU
与内存的交互.
DRAM缓存的组织结构
虚拟页往往比较大
DRAM
是全相联的[只有一组]
写回
页表
- 标志位为1
页表项所含地址指向内存
- 标志位为0
1.页表项不含地址
2.页表项含地址,地址指向磁盘
页命中
缺页
分配页面
局部性
任意时刻,程序趋向于在一个较小的活动页面集合上工作[工作集]
虚拟内存作为内存管理的工具
- 将一组连续的虚拟页映射到任意文件的任意位置的表示法叫内存映射
虚拟内存作为内存保护的工具
地址翻译
- 物理页面和虚拟页面大小一致
- 虚拟地址寻址单位是字节
即地址addr, addr+1
两者相差了一个字节的距离[不是一个比特位的距离,注意区分]
结合高速缓存和虚拟内存
虚拟内存是对磁盘内容的缓存
SRAM
高速缓存是对内存内容的缓存
一般SRAM
高速缓存采用物理寻址
地址翻译-->高速缓存查找-->命中/不命中
页面主体在内存,但可缓存在高速缓存
利用TLB加速地址翻译
许多系统在MMU
含一个关于PTE
的小缓存:TLB
[位于芯片内部,缓存一个PTE
集合,利用VPN
进行寻址]
多级页表
虚拟页大小4KB
,虚拟地址空间4GB
节省页表所占据主存空间
上图PPN
与PPO
结合可以用来得到内存物理地址或磁盘物理地址.[依赖页表项有效位]
综合:端到端地址翻译
- 一个TLB
[缓存页表项集合,加速地址翻译,依据虚拟地址进行命名测试]和L1 d-cache
- 字节寻址/虚拟地址14
位/物理地址12
位/虚拟页64
字节
- TLB
采用四路组相联,四组
- L1 d-cache
[缓存内存字节集合,加速CPU
存取内存数据速度,依据内存物理地址进行命中测试]物理寻址,直接映射,16
组,行大小为4
字节
对0x03d4
处一个字节读取
1.取虚拟地址的VPN
2.依据VPN
在TLB
进行命中测试.这里命中得到PPN
.
如不命中,则从内存页表取得PPN
,并将其放入TLB
,再次对TLB
访问.
若PPN
存在但有效位为0
,则触发缺页异常,从磁盘将PPN
对应的磁盘页调入内存,更新页表.
若PPN
不存在且有效位为0
,触发段错误.
再次执行此访问.
若PPN
存在且有效位为1
但访问权限和页表项中冲突,触发段错误.
3.PPN+VPO
得到物理地址
4.将物理地址划分为CT/CI/CO
对高速缓存进行命中测试
这里命中,取得此地址处一个字节的数据信息.发到CPU
.
如不命中,从内存取得一个指定内存地址开始的缓存行大小数据块放入高速缓存,再次对高速缓存进行访问.
案例:Intel Core i7/Linux
Core i7地址翻译
Linux虚拟内存系统
Linux虚拟内存区域
虚拟内存按区域为单位划分,区域是虚拟页的集合