深入Linux内核架构—简介和概述(四)

一、页表

用来将虚拟地址空间映射到物理地址空间的数据结构称为页表。实现两个地址空间(虚拟地址空间、物理地址空间)的关联最容易的方法是使用数组,对虚拟地址空间中的每一页,都分配一个数组项。该数组项指向与之关联的页帧(物理内存页),但有一个问题。例如,IA-32体系结构使用4KB页,在虚拟地址空间为4GB的前提下,则需要包含100万项的数组。在64位体系结构上,情况会更糟糕。每个进程都需要自身的页表,因此系统的所有内存都要用来保存页表,这个方法不切实际。

因为虚拟地址空间的大部分区域都没有使用,因而也没有关联到页帧(物理内存页),那么就可以使用功能相同但内存用量少得多的模型:多级分页。

为减少页表的大小并容许忽略不需要的区域,计算机体系结构的设计会将虚拟地址划分为多个部分,如图1-7所示。在例子中,将虚拟地址划分为4部分,需要一个三级的页表。大多数体系结构都是这样的做法。但有一些采用了四级的页表,Linux也采用了四级页表。为简化场景,采用三级页表阐述。

深入Linux内核架构—简介和概述(四)_第1张图片

虚拟地址的第一部分称为全局页目录(Page Global Directory,PGD)。

你可能感兴趣的:(深入Linux内核架构)