本文我们展示一个只有一级页表,虚拟地址转换为物理地址的示例。
其中VA为32比特(共4GB地址空间),每个页大小为1MB,所以一共4096个页表项。
每个页表项指向的都是1MB页表大小的页表项,其中会给出物理地址的高位比特([31:20])。
上图中的页表基地址Translation Table Base Address(TTBA)是由软件指定的。当MMU执行硬件页表转换时,需要根据页表的基地址和VA[31:20] index获取VA-PA映射关系,以页表粒度完成VA-PA的转换,例如1MB粒度,那么
VA[19:0]=PA[19:0]
上图中页表的基地址为0x12300000,每个页表项的大小为4Byte,VA为 0x00100000,高12比特(0x001)作为页表的索引index。所以这个VA-PA需要使用到的页表项存储地址为
Base addr + 0x001 * 4 bytes = 0x12300004
最后,根据拿到的VA-PA映射关系就可以拿到PA了,具体的页表格式根据不同的实现而异。
上图是个示例的32比特页表格式,根据低2比特确定这个页表项的类型。
2`b00:invalid 页表,上报异常,由软件处理。
2`b10:指向的是物理地址。
2`b01:指向的是下一级页表的基地址。
假设低2比特为2’b10,那么这个页表项中的内容就是实际指向的物理地址。页表项中除了指定了物理地址,还包含了页的内存属性(访问权限、cache属性、buffer属性等等)。
简单来说就是指定了访问物理地址空间所需的全部信息。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !