为什么计算 CPU 可以寻址的最大 RAM 大小时不以页为单位?

为什么计算 CPU 可以寻址的最大 RAM 大小时不以页为单位?

维基百科说

页、内存页或虚拟页是固定长度的连续虚拟内存块,由页表中的单个条目描述。它是操作系统代表程序执行的内存分配的最小数据单位,也是主内存和任何其他辅助存储器(如硬盘驱动器)之间传输数据的最小数据单位。

...

页面大小通常由处理器架构决定。传统上,系统中的页面大小统一,例如 4096 字节。但是,由于各有利弊,处理器设计通常允许两种或更多种页面大小,有时甚至同时允许两种页面大小。

我们知道32位CPU最大可以寻址2^32字节=4GiB内存,为什么计算时以字节为单位,而不是以页为单位呢?

如果一页有 4096 字节,那么 32 位 CPU 可以寻址更大的内存。

我是否遗漏或者误解了什么?

答案1

原因是 CPU 不会一次处理整个页面;它会处理每个单独的字节。页面只是用来分配内存并设置权限。另外,该维基百科文章有一个错误:磁盘 IO 是不是它以扇区为单位进行,通常是 512 字节。

答案2

在过去,大型机内存被描述为很多词。其中的词由硬件定义(18、20、30、32、60……位)。当小型机和个人电脑出现时,内存用字节来描述(从 4K 一直到 64K)。现在我们有更多的内存,它仍然用字节数来描述。您说的是对的,页面可能是描述它的更好方法。正如您所说,32 位 CPU 可以寻址 4GB 内存。再多的话就必须通过分页来完成。使用分页来管理内存是有效的。页面大小在不同的操作系统中可能有所不同,因此字节仍然是了解实际内存量的唯一方法(必须知道页面大小)。大多数情况下,我认为它只是一贯的做法。

答案3

维基百科页面在一些细节上是错误的,或者充其量是误导性的。

它是操作系统代表程序执行的内存分配的最小数据单位

仅适用于以页面为单位工作的内存分配调用。例如,在 Windows 中,这将是 VirtualAlloc。但堆管理例程当然可以以较小的增量运行。(在有人说“但这不是操作系统,堆例程都在用户空间中”之前,请考虑也有一个内核空间堆……程序从用户模式执行的一些操作需要操作系统分配内核堆……并且内核堆分配不是以页面大小的步幅为单位的。)

以及用于主存储器和任何其他辅助存储器(例如硬盘驱动器)之间的传输。

这也不是真的。对于由于分页。但磁盘和磁盘控制器只能处理一个块的传输,传统上这意味着 512 字节。声称任何“其他辅助存储”都加重了罪行:磁带驱动器可以处理几乎任意块长度的读写。

正如其他回答者正确指出的那样,CPU 寻址字节,因此可用于寻址的位数决定了字节可以解决。

相关内容