x86 - x86的多级分页相对于单页表有什么优势?

标签 x86 paging cpu-architecture page-tables

以 x86 的 32 位分页方案为例。从Intel开发者手册中我找到了下图,它描述了32位分页如何将线性地址转换为物理地址。

Paging diagram

我不明白这个三阶段过程的优势,例如,大部分线性地址用于索引页面,然后低 12 位用于索引该页面。

我不明白三阶段过程的必要性的原因是,它肯定无法以某种方式访问​​超过 2^20 的页面,因为它在线性中只有那么多的位。地址(不包括页偏移量)。除了无法访问更多页面之外,我无法想象它会有更好的性能。

最佳答案

请记住,此设计来自 1985 年发布的 Intel 80386,自那时以来基本上没有变化。

页表项为 4 个字节。如果您需要 2^20 个页表条目,则仅页表就需要 4 MiB 内存。这对今天的你来说可能看起来很合理,但按照 1985 年的标准来看,这实在是太离谱了。 Memory in those days cost something like $1000 per megabyte ,大多数人都习惯了 640K 或更少。

此外,如果您要使用多任务处理(这是 386 的主要进步),则每个任务都需要一个单独的页表。因此,将 4000 美元乘以另一个大数字; Unix 用户已经习惯了能够同时运行数十个进程。

大多数进程不需要接近 4 GiB 的虚拟内存:同样,几乎没有人拥有接近那么多的物理内存,甚至磁盘空间。真正的内存消耗者(Emacs,也许?)可能需要一两兆字节。使用两级结构,您只需要与实际使用的内存页数一样多的页表条目,再加上更多的页目录条目。大多数页目录条目是不需要的,并且可以标记为未使用,而不需要页表页来指向。因此,您的内存消耗现在只需要几 KiB 的分页开销。

当然,需要更多的周期才能走完额外的关卡,但为了节省数千美元的内存,这是一个合理的权衡。不管怎样,CPU 缓存了页表条目,因此不必经常在内存中遍历它们。

关于x86 - x86的多级分页相对于单页表有什么优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61535537/

相关文章:

linux-kernel - 为什么要使用分层页表?

x86 - 低位和高位寄存器的区别

parallel-processing - 英特尔刚刚推出了一款新的 48 核 CPU。向多核迁移对我们程序员意味着什么?

caching - 为什么现代处理器中的集合缓存关联性是 8 路集合关联性?

c - Intel x86 到 ARM 汇编转换

c - 浮点乘法执行速度较慢,具体取决于 C 中的操作数

floating-point - 浮点加法与浮点乘法的相对速度是多少

assembly - 请验证 AT&T Assembly line 的含义

c# - ObjectDataSource 分页和额外参数

iphone - UIScrollView:如何一次滚动一页