操作系统方面的书籍通常会提到页面大小是由处理器架构决定的,例如Intel x86支持4KB页面大小。我有一种感觉,当我们在硬件上安装操作系统时,操作系统从硬件中读取了 4KB 的页面大小,并在逻辑上将虚拟地址空间分别划分为 4KB 大小的页面,并将内存划分为帧。
如果我的看法是正确的,那么操作系统从处理器中的何处或硬件中的哪个位置读取这个 4KB 的值?操作系统使用什么机制来确定硬件提供的页面大小?有人可以启发我吗? Intel 如何(On What Basis)决定保留 4KB 页面大小。
答案1
操作系统根据体系结构(在某些情况下,构建时内核配置)对页面大小进行硬编码。例如,在 x86 上,基本页面大小始终为 4KiB — 这是 CPU 架构的一个属性;在 Linux 上你会看到这个定义在include/asm/page_types
。在 64 位 ARM 上,页面大小可以在构建时配置为 4KiB、16KiB 或 64KiB。某些架构在运行时具有多种页面大小(例如x86 上的大页面),但所有大小都是提前已知的,并且基本大小是固定的。
在 Linux 上,页面大小的规范定义是PAGE_SIZE
,您可以通过包含 来获得它asm/page.h
,这是特定于体系结构的(可能会引入其他标头,就像 x86 上发生的那样)。 Elixir 提供了一个方便的列表所有PAGE_SIZE
定义。
Linux内核支持的大多数架构都支持4KiB页面; Alpha、ARC、某些 Motorola 68k 系统、OpenRISC 和 64 位 SPARC 是例外,它们都使用 8KiB 页。许多架构可以配置为使用其他页面大小。