虚拟内存
- 虚拟地址到物理地址的映射以实现隔离性
- 每个程序有独立的地址空间,不相互影响
页表
地址操作简单流程
CPU向虚拟地址va加载或写入数据–>CPU将va交给内存管理单元MMU–>SATP寄存器存放着内存中存放虚拟地址到物理地址的表单–>MMU通过SATP查找表单获得va的物理地址–>完成物理地址的加载或写入。
虚拟内存地址
- 为64bit,高25bit不使用,只用39bit
- 中间27bit为index,可知物理page号(PPN),包含4096字节
- 低12bit为offset(
2
12
=
4096
2^{12} = 4096
212=4096),指向page中4096字节的某1个–>物理地址 = page + offset
物理地址
- 为56bit,44bit为PPN,剩下12bit直接复制虚拟地址的offset
page table
- 内容:虚拟内存地址:物理地址的映射
- 多级结构
虚拟内存地址的index分成3个9bit,每个bit称作1个page directory
,SATP寄存器实际指向第1个page directory
的地址。每个page directory
都有512大小,它们指向一个PTE(Page Table Entry)
,因此共需要3*512个PTE(Page Table Entry)
。
PTE
PTE可以看成从虚拟地址到物理地址的分级索引。虚拟地址的3个数值表示在page directory
中的偏移,此偏移加上当前page directory
的首地址,则可得到1个64bit的PTE的物理地址。PTE中存放着PPN,PPN表示1个物理页号,在此物理页号后补12个0,相当于offset为0,则可得到真正的物理地址,以此进入下一个page directory
的首地址,当然最后1个page directory
加上va的offset就是查找的真正的物理地址;还有一些标志位,比如V表示此地址翻译是否可用。
TLB页表缓存
- 切换page table 会清空TLB