在操作系统中,我们有多级分页的概念。我明白了,但我不太明白的是,直到我们继续进行分页?我看到一些文章说继续在页表上应用分页,直到我们可以将其放入(RAM)的一帧中。这是真的吗?
我问过一些人,他们说这是错误的概念。
有人可以澄清这个疑问吗?如果您还可以提供一些提到这一点的标准资源(例如许多大学认可的任何作者的书),则会增加可信度。包含所有案例和解释的答案将不胜感激。
多级分页系统中的级数由虚拟地址空间的大小、页面大小和系统架构决定。理论上,可以根据需要设置任意多个级别来分解虚拟地址空间,但实际上,该数量受到性能和架构约束的限制。
我们可以为此想出一个公式 分页级别数 = 虚拟地址中的位数 / 页表索引的位数
-对于 32 位架构: 您有一个 32 位虚拟地址空间和 4 KB 的页面大小(即 2^12 字节)。剩下 20 位用于页表索引。 如果每个页表条目为 4 个字节,则页表可以容纳 2^10 (1024) 个条目。 您可以将 20 位地址空间划分为两个 10 位字段,因此 2 级分页方案有效。
对于页面大小为 4 KB 的 64 位系统,有 52 位用于页表索引(总共 64 位减去页面偏移量的 12 位)。
如果页表每个表有 512 个条目(每级 9 位,假设每个页表条目 8 个字节),这通常会导致 4 级分页方案,因为 52 位可以分为四个 9 位字段(每个为一个级别)。
x86-64 通常使用 4 级分页(在 Linux 和 Windows 中),每个页表有 512 个条目,如下
级别 1(PML4 表):9 位
2级(页目录指针表):9位
3级(页面目录):9位
4级(页表):9位
剩余位:12位用于页面偏移。
ARM 架构可能使用 3 或 4 级,具体取决于配置(例如,使用 39 位或 48 位虚拟地址空间)。
理论上,您可以根据需要继续添加级别,但每增加一个级别都会增加地址转换的内存访问时间,这就是为什么超过 4 或 5 个级别在实践中并不常见。由于多次内存查找,过多的级别会导致性能低下。 除了性能开销之外,管理多个级别的分页还增加了操作系统内存管理子系统的复杂性 在现代系统中,根据架构和虚拟地址空间的大小,通常使用 3 到 5 级分页。