由于定题是 MMU的地址转换过程
,这里就不再叙述 MMU 的基本概念、内存访问顺序和使能和禁止 MMU(Enabling and disabling the MMU)等内容。
本文主要参考 ARM Architecture Reference Manual
的Chapter B3
以及校内课件。
文章目录
前言
The process of doing a full translation table lookup is known as a
translation table walk
. It is performed automatically by hardware, and has a significant execution time cost (at least one main memory access, and often two). To reduce the average cost of a memory access, the results of translation table walks are cached in one or more structures known asTranslation Lookaside Buffers
(TLBs).
这一部分主要是介绍一下整个转换过程的术语以及优化方案,好对整个体系有个粗略的了解。其中的Walk的理解到后面就会慢慢有体会了。
预备知识
MMU支持基于段和页的内存访问
MMU的地址转换过程通过两级页表实现:
- 一级页表:包含段(section)描述符、粗页(coarse)描述符和细页(fine)描述符。以段为单位的地址转换只需要一级页表。
- 二级页表:有粗页和细页两种形式。包含大页、小页和极小页的描述符。以页为单位的地址转换需要二级页表。
地址转换的方式有两大类共四种情况:
- section-mapped acces
- page-mapped access
- A page-mapped access can be a large, small, or tiny page access.
转换过程开始都是差不多的:
转换表基址
由于上述提到的二级页表的功能就是帮助我们将虚拟地址映射为物理地址,所以我们可能会好奇我们是怎么访问到该二级页表的。一个叫做 转换表基址寄存器
( Translation Table Base Register ,CP15 register 2 )存放一级页表的基地址,该寄存器共32位,但是只有高18位是有效的,其余位应该为0。
获取一级页表
上面一小节我们提到一级页表的基址是由CP15的寄存器2的高18位来指定的。但是,我们知道只有基址还是远远不够的,我们还需要偏移地址来指明一级页表的位置。这个偏移量是由虚拟地址的高12位提供。更近一步的,我们需要两个0添加到末尾来表示字对齐。这样,我们就得到了一个32位用来表示一级页表位置的物理地址。
一级页表地址的形成
= 一级页表基地址(18位) + 一级页表偏移量(12位) + 00(字对齐)
= CP15-C2 高18位 + 虚地址高12位 + 00
图中的SBZ
是 should be zero
的缩写。
一级页表描述符
Each entry in the first-level table is a descriptor of how its associated 1MB virtual address range is mapped.
提问:这里的 1MB的虚拟地址
指的是什么?
一级页表描述符的种类是啥是由其低2位决定:
- 低两位为00:无效
- 低两位为10:页表项为段描述符
- 低两位为01:页表项给出粗页二级页表(coarse second-level table )的物理地址
- 低两位为10:页表项给出细页二级页表(fine second-level table)的物理地址
图中的 Each type of table specifies