形式上来说,地址翻译是一个N元素的虚拟地址空间(VAS)中的元素和一个M元素的物理地址空间(PAS)中元素之间的映射,
下面的图片展示了MMU如何利用页表来实现这种映射,CPU中的一个控制寄存器,页表基址寄存器(Page Table Base Register,PTBR)指向当前页表。
n位的虚拟地址包含两个部分:一个p位的虚拟页面位移(Virtual Page Offset,VPO)和一个(n-p)位的虚拟页号(Virtual Page Number,VPN),MMU利用VPN来选择适当的PTE。
以此类推,将页表条目中物理页号(PPN)和虚拟地址中的VPO串联起来,就得到相应的物理地址。
注意,因为物理和虚拟页面都是p字节的,所以物理页面偏移(PPO)和VPO是相同的。
一个具体的例子:
假设:
*内存是按字节寻址的。
*内存访问是针对1字节的字的(不是4字节的字)。
*虚拟地址是14位长的(n=14)。
*物理地址是12位长的(m=12)。
*页面大小是64字节(P=64)。
*TLB是四路组相联的,总共有16个条目。
*L1 d-cache是物理寻址、直接映射的,行大小为4字节,而总共有16个组。
假设:
CPU执行一条读地址0x03d4处字节的加载指令时:
首先,将地址翻译成二进制
对比图a:
找出是否命中和和是否缺页
再找出对应的PPN
如果不命中,再到图b中查找对应的PPN。
他通过将来自PTE的PPN和来自虚拟地址的VPO连接起来,就形成了物理地址。
MMU发送物理地址给缓存,缓存从物理地址中抽取出缓存偏移CO,缓存组索引CI
最后再通过查找图c的表格:比较标记位,读取在偏移量CO处的数据字节并将它返回给MMU,随后MMU将它传递到CPU。