1.简介
CPU发出的虚拟地址经过MMU转换后得到物理地址,然后使用物理地址访问真实的硬件。虚拟地址和物理地址的映射关系保存在页表中,MMU需要遍历页表,才能将虚拟地址转换成物理地址。ARM64现在有两种大小的页表描述符,分别是ARMv8的64-bit描述符(一个页表描述符8字节),ARMv9的128-bit描述符(一个页表描述符16字节)。本文只介绍ARMv8的64-bit描述符。
2.页表类型
如下图所示,页表描述符的bit[1:0]表示类型。ARMv8的页表有四种类型,分别是Invalid descriptor、Block descriptor、Table descriptor和Page descriptor,具体如下:
- bit[1:0] == 0b0x:表示Invalid descriptor,此时MMU若使用该页表描述符进行地址转换,会触发Translation Fault。
- bit[1:0] == 0b10:如果不是第三级页表,则为Block descriptor。如果是第三级页表,则保留,可以看作是无效的页表描述符。Block descriptor和Page descriptor类型一样,定义了访问物理内存的属性和地址,并且没有下一级页表。Block descriptor专门应用于HugePage的映射,有的情况下只需要一个页表描述符即可完成地址映射,无需多级页表,这样可以加快MMU地址转换速度。比使用48位虚拟地址和4级页表的情况下,当映射1GB内存时,只需要一个level1 Block descriptor即可.
- bit[1:0] == 0b11:如果不是第三级页表,则为Table descriptor,如果是第三级页表,则为Page descriptor。Table descriptor为中间页表,用于指向下一级页表。Page descriptor为最后一级页表,定义了访问物理内存的属性和地址。

8945

被折叠的 条评论
为什么被折叠?



