为什么32位操作系统最多支持4 GB RAM

时间:2019-01-28 03:04:03

标签: c

所以我知道32位操作系统可以支持2 32 个不同的值,大约是4x10 9

我可以想象每个值的内部表示是这样的:

0000 0000 0000 0000 0000 0000 0000 0000

.....

1111 1111 1111 1111 1111 1111 1111 1111

所以我们这里大约有4x10 9 不同的模式。 但是由于每个地址都包含4个字节(32/8 = 4),因此RAM不应 4x4x10 9

4 个答案:

答案 0 :(得分:0)

在典型的现代系统中,每个地址寻址一个字节。

即使硬件一次只能传输四个字节或八个字节,在这样一个单元内的每个字节也会被赋予自己的地址。处理器只能使用28或29或其他一些位数与存储硬件进行交互,但是它使用附加位来区分字中的字节。

当程序访问特定地址时,处理器使用低位隔离字节。读取时,它将从内存中获取整个单元,然后使用低位隔离请求的一个或多个字节。写入时,它使用低位将选定的一个或多个字节合并为一个数据单位,然后将整个单位写入内存。

因此,如果一个地址中有32位,则2 32 = 4,294,967,296个地址可用,并且可以解决4,294,967,296个问题。在典型的现代硬件中,所有这些都是一个字节。通常,并非所有的代码都可供用户程序使用,因为某些地址是为特殊目的保留的。

答案 1 :(得分:0)

x86是字节寻址的,这意味着每个字节都有一个唯一的地址。 (在正常情况下)这使可寻址内存的总量为2^32 bytes(大约为4 GB)。而且不可寻址的内存(您无法为其提供地址的内存)完全无法使用。

在整个地址空间中,并非所有地址都位于主存储器中。其中的一部分是为IO保留的,因此最大RAM量甚至低于4 GB


我会尽力解决您的困惑

  

所以我们这里大约有4x10 9 不同的模式。

正确

  

但是由于每个地址都包含4个字节(32/8 = 4)

无关

  

RAM应该不是4x4x10 9 吗?

地址的位数确定可以有多少个不同的值。我们已经确定32 bits给我们确切的2^32 ≈ 4^10个不同的地址。因此,我们可以拥有≈4^10个具有唯一地址的不同对象。忍受我,让我们思考一下。如果地址是城市的地址,那么我们最多可以有≈4^10个城市。如果地址是街道地址,那么我们最多可以有≈4^10条街道。如果地址是苹果的地址,那么我们最多可以有≈4^10个苹果。与我一起?如果地址是64-bit个QWORDS的地址,那么我们最多可以有≈4^10 64-bit个qwords。如果地址是32-bit DWORDS的地址,那么我们最多可以有≈4^10 32-bit qwords个地址。但是在x86中,地址不是上述任何一个。在x86中,地址是一个字节(8位)的地址,因此我们最多可以有≈4^10 bytes又名≈4 GiB

如您所见,地址的宽度仅给出了我们可以处理的不同对象的数量。在x86中,这些 object 是字节,因此我们最多可以有2^32个可寻址字节。


Physical Address Extension可以克服2^32 bytes的正常限制。这需要操作系统和硬件(CPU,芯片组和主板)的支持,即使满足这些条件,每个程序仍然只能使用32 bit地址。

答案 2 :(得分:-1)

[我可能误解了这个问题。我可能稍后会删除此答案。]

对于具有32位(4字节-假设为8位字节)地址的系统,有2 32 个不同的地址值。如果内存空间完全装有RAM,则可以使用32位地址来引用系统上2 32 个字节的内存中的任何一个。

但是您不能同时将所有这两个2 32 地址值存储在内存中。如您所说,您将需要4 * 2 32 字节来存储所有这些地址值。

幸运的是,无需将所有这些不同的内存地址值存储在内存中。您只需要存储您实际使用的地址值即可。

(我忽略了虚拟内存与物理内存的问题。)

答案 3 :(得分:-1)

对于现代操作系统,通常会将虚拟地址转换为物理地址。

对于32位操作系统,虚拟地址通常(但不一定)是32位。使用字节寻址,这意味着您可以拥有1234个进程,其中每个进程具有4 GiB的虚拟空间(或总共4936 GiB的虚拟空间)。但是,通常,每个虚拟地址空间在一个部分中被划分为“用户空间”,而在另一部分中被划分为“内核空间”。因此,每个进程可能更像2 GiB,内核更像2 GiB(或者1234个进程总共2470 GiB)。

但是,由于虚拟地址已转换为物理地址,因此虚拟地址的大小不必与物理地址的大小相同。这意味着即使虚拟地址是32位,物理地址也可以大于(或小于)32位。例如,对于大多数较旧的80x86 CPU,具有“物理地址扩展”(PAE)功能,可将物理地址大小扩展到36位(为您提供16 GiB的物理地址空间),而对于现代80x86 CPU(具有以下功能:运行64位OS的PAE)得到了增强,允许32位OS使用最多52位(“当前最大体系结构”)的物理地址,从而使32位OS的物理地址空间最大为4096 TiB。位操作系统(理论上)。

当然,物理地址空间包含RAM,一些ROM,设备的某些区域等。例如,如果物理地址空间为16 GiB,则可能为非RAM保留1.5 GiB的空间,因此最大RAM您可能可以(并且最多可以使用32位操作系统)为14.5 GiB。

不幸的是,大多数主板不支持CPU可以使用的最大RAM量。例如,许多现代CPU支持48位物理地址(物理地址空间为256 TiB),但我从未见过能够支持超过8 TiB RAM的主板,而且大多数现代主板甚至都不支持1位。 RAM的TIB。

以同样的方式,各种操作系统都有其自身的局限性。例如,大多数32位版本的Windows不支持PAE(最初是由于设备驱动程序兼容性问题,然后由于每个人都采用64位,所以没有人在意)。因此,如果您有一台具有(例如)8 GiB RAM的计算机,则操作系统将无法使用大部分RAM(并且可能只能使用3 GiB RAM,因为ROM可能保留/使用了1 GiB空间) ,设备等)。

请注意,对于80x86上的64位操作系统;虚拟地址是48位(不是64位),物理地址是从32位(Atom)到52位(也不是64位)。英特尔一直在考虑“ 5级分页”扩展,以允许使用57位虚拟地址(仍然不会是64位)。

通常(如果忽略特定的CPU);通用寄存器的大小,虚拟地址的大小和物理地址的大小都可以完全不同;对于32位OS(使用32位通用寄存器),虚拟地址空间大小可以为任意值,物理地址空间大小可以为任意值;并且您在物理地址空间中可以拥有的最大RAM数量可以是任何数量。