在之前的文章中,我们介绍过 GDT(全局描述符表)以及一致代码段和非一致代码段,这篇文章我们再回到描述符,这次我们来以 ARM 架构为例了解一下页表描述符。
在这篇文章中,我们会看到以下内容:
页表是什么?
一级页表的地址变换过程
由一级描述符来获取二级描述符或者段地址的过程
页表
页表是什么?
页表是一种特殊的数据结构,放在系统空间的页表区,存放逻辑页与物理页帧的对应关系。 每一个进程都拥有一个自己的页表,PCB表中有指针指向页表。
(来自百度百科)
通俗的来讲,页表的内容就是一个描述符(关于描述符的介绍请参看该系列文章中的《实现一个 GDT》),我们可以将 GDT 理解成为一个一级描述符表,将 LDT 理解为一个二级描述符表。这篇文章我将以 ARM 体系结构为例,介绍一级页表的地址变换过程以及根据一级页表的类型来获取二级描述符表或者段的物理地址。
MMU 中的地址变换
ARM 系统中的虚拟空间到物理存储空间的映射是以内存块为单位进行的,即虚拟内存中的一块连续的空间被映射到物理存储空间一段连续的地址空间。
ARM 支持以下几种大小的存储块:
- 段(Section):大小为1MB
- 大页(Large Pages):大小为64KB
- 小页(Small Pages):大小为4KB