分页是否允许我们使用大于CPU地址指针长度所能寻址的物理内存?



我正在读一本关于内存管理的操作系统方面的老书。我认为这是最好的书之一,但是书中有一些关于分页的东西我不明白。

书上说,"32位CPU使用32位地址,这意味着一个给定的进程空间只能是2^32字节(4tb)。因此,分页允许我们使用比CPU地址指针长度所能寻址的更大的物理内存。"

我不太明白这部分,因为如果CPU只能引用2^32个不同的物理地址,如果有2^32+1个物理地址,最后一个地址将无法被CPU到达。那么分页如何帮助解决这个问题呢?

而且,前面的书说"通常,在32位CPU上,每个页表条目是4字节长,但这个大小也可以变化。32位条目可以指向2^32个物理页帧中的一个。如果帧大小为4 KB(2^12),那么具有4字节条目的系统可以寻址2^44字节(或16 TB)的物理内存。"

我不明白这在理想/理论情况下是如何可能的,因为据我所知,虚拟地址的一部分将参考页表的条目,而虚拟地址的另一部分将参考该页中特定类型的偏移量。所以在书中提出的上述情况下,即使CPU可以指向2^32个不同的页面条目,它也无法读取该页中的任何特定字节,因为它没有指定办公室。

也许我误解了这本书,或者我错过了一些部分。非常感谢你的帮助!非常感谢!

听起来你需要烧掉你的书。这是无用的。

"[p]老化使我们使用的物理内存大于CPU地址指针长度所能寻址的内存"完全是无稽之谈(除非书中给"分页"一词赋予了两种不同的含义,在这种情况下它仍然是无用的)。

让我们从逻辑寻址开始。逻辑地址由页选择器和页偏移量组成。一些(P)位将被分配给页面选择器,其余的将被分配给偏移量。如果页面为2^9位,则页面选择器中有23位,页面内的字节偏移量为9位。

请注意,9/23的选择是随意的。现在大多数系统使用更大的页面,但这些是过去使用过的值。

页选择器中的23位是进程页表的索引。

页表中条目的大小将是2的幂(我从未见过小于4的)。对于我们的目的,假设每个条目是8字节长。

页表项中的位分为物理页帧索引位和控制位。让我们任意选择32位索引页帧和32位用于控制。

这意味着系统理论上可以管理2^32个2^9字节大的页面,或者总共2^41字节。如果我们将页面大小从2^9增加到2^20,理论上系统可以管理2^52(32+20)字节的内存。

注意每个进程仍然只能访问2^32个字节。但是在我的9位页面系统中,2^9个进程可以在一个有2^41物理内存的系统上同时访问2^32个页面(在这种过度简化中忽略了对共享系统地址空间的需求)。

请注意,如果我将页表更改为32位,并将其中的9位分配给控制和23位分配给页帧选择,则系统只能管理2^32字节的内存(这比管理大于2^32字节的内存更常见)。

你引用:"通常,在32位CPU上,每个页表条目是4字节长,但这个大小也可以变化。32位条目可以指向2^32个物理页帧中的一个。如果帧大小为4 KB(2^12),那么具有4字节条目的系统可以寻址2^44字节(或16 TB)的物理内存。"

这是理论上的废话。使用页表条目的所有32位作为页帧索引的系统无法正常工作。页表中必须有一些控制位。

你从这本书中引用的引语极具误导性。由于地址行限制,很少(任何?)32位处理器甚至可以访问2^32字节的内存。

虽然逻辑页的使用可能允许处理器管理比逻辑地址大小所建议的更多的内存,但这并不是用页来管理内存的目的。

分页的目的是允许进程访问比系统中物理内存更多的虚拟内存,分页通常指的是在物理页帧和辅助存储器之间移动虚拟内存页。

还有一种额外的内存管理系统(谢天谢地)正在消亡:段。段还为系统提供了一种方法来管理比逻辑地址空间所允许的更多的物理内存。

最新更新