为什么32位操作系统支持4 GB的RAM?

时间:2009-07-13 12:55:36

标签: memory operating-system virtual-address-space

只需阅读purdue lecture about OSs中的一些注释即可:

  

程序将内存视为一个数组   从地址0到2 ^ 32-1的字节数(0到   4GB-1)

为什么是4 GB?

13 个答案:

答案 0 :(得分:56)

因为32位能够表示最多2 32 的数字 - 1 = 4294967295 = 4 GiB - 1因此最多可以解决2个 32 个别字节4 GiB然后。

但是,有很多方法可以规避这一点。例如,使用PAE即使32位操作系统也可以支持更多内存。但从历史上看,这最常用于服务器上。此外,非服务器Windows SKU不支持它。到目前为止,所有这些都没有实际意义,因为64位CPU,操作系统和驱动程序支持是司空见惯的。

答案 1 :(得分:25)

因为每个内存字节都必须有一个地址。在32位操作系统中,地址长度为32位;因此,有2 ^ 32个可能的地址,这意味着有2 ^ 32个字节= 4 GB。

答案 2 :(得分:21)

每个人都说2 ^ 32 = 4GiB,这是对的。以防万一,我们是如何到达那里的:

32位机器使用32位来寻址内存。每个位的值为0或1.如果有1位,则有两个可能的地址:0或1。 两位系统(双边)有四个可能的地址:00 = 0,01 = 1,10 = 2,11 = 3。 2 ^ 2 = 4。 三个比特具有8个可能的地址:000 = 0,001 = 1,010 = 2,011 = 3,100 = 4,101 = 5,110 = 6,111 = 7。

每个位将潜在的地址空间加倍,这就是为什么2 ^ n告诉您在给定位数上使用了多少个地址。 2 ^ 1 = 2,2 ^ 2 = 2 * 2 = 4,2 ^ 3 = 2 * 2 * 2 = 8等

当你达到32位时,你处于4GiB。

答案 3 :(得分:11)

4 GB = 2 ^ 32字节。

答案 4 :(得分:9)

2 ^ 32 = 4 * 1024 * 1024 * 1024

以字节为单位,是4 GB的定义。换句话说,32位寄存器作为存储器指针可以处理4 GB的存储空间而不再存在。

答案 5 :(得分:9)

如果你有一个4位系统,这意味着每个字节的地址是4个二进制数字,你所有地址的概率范围从0000到{{1} } 1111(2因为有0或1),有4位可以创建2^4 = 16个不同的0和1值,如果你有16个不同的地址。每个代表一个16,那么您最多可以byte

4位系统将如下所示:

enter image description here

对于32位系统,您的最大值为16 bytes

答案 6 :(得分:5)

实际上,它并不像2 ^ 32 = 4294967296字节那么简单。您可以在x86保护模式下看到启用分页(即使用任何现代操作系统时获得的内容),即使分页转换机制对客户端应用程序是透明的,也不会直接寻址内存位置。

在使用4K页面时,逻辑32位内存地址:

  • 位22-31指的是页面目录
  • 位12-21是指页表
  • 位11-0指的是4096字节页面中的偏移量

正如您所看到的,您有2 ^ 10(1024)页目录,在每个页面目录中,您有2 ^ 10页表,每页长2 ^ 12(4096)字节,因此2 ^ 32 = 4294967296字节。存储器总线的宽度方便地与CPU的字长相同,但根本不必像这样。事实上,更现代的x86 CPU支持PAE,即使在32位模式下也可以寻址超过4GB(或GiB)。

答案 7 :(得分:2)

因为可以存储在Word中的不同内存地址(以字节为单位)的数量。

但事实上,并非总是如此(在大多数情况下并非如此),操作系统可以处理比(PAE)更多的物理内存,并且应用程序可以使用少于4GB的虚拟内存(因为部分该虚拟内存映射到操作系统,Linux中为1GB,Windows中为2GB。

另一种不适用的情况是,如果内存是通过Words而不是Bytes来寻址的,那么总内存可寻址将是16GB,例如。

答案 8 :(得分:1)

主要是由于32位操作系统选择仅支持2 ^ 32-1地址。

如果CPU在FSB上有超过32个地址线,那么32位操作系统可以选择使用分页机制来访问超过4GiB的地址。 (例如PAE支持的Intel / AMD芯片上的Windows 2000 Advanced Server / Data Center版本)

答案 9 :(得分:1)

具有32位寄存器的CPU将需要操作系统以32位块为单位计算所有内容。这是操作系统必须符合的硬件要求。同样,具有64位寄存器的CPU将需要一个操作系统,该操作系统以64位块的形式从RAM中读取和写入数据。 (每次从内存中读取数据时,都需要将其读取到其中一个寄存器中-32位,64位或16位等)。

32位寄存器可以存储2 ^ 32个不同的RAM地址。 每个RAM地址对应于现代RAM中的一个字节(8位)。 (4 GB参数仅对每个字节都有地址的RAM才适用。)

=> 2 ^ 32 = 4,294,967,296地址,→相当于4,294,967,296字节。

现在,1 KB = 2 ^ 10字节或1024字节(在二进制系统中)

因此,4,294,967,296字节/ 1024 = 4,194,304 KB

4,194,304 KB / 1024 = 4,096 MB

4,096 MB / 1024 = 4 GB

答案 10 :(得分:0)

4 GB = 2 ^ 32字节。 但请记住它的最大4gb由32位操作系统分配。实际上,操作系统会看到更少的在VRAM分配之后。

答案 11 :(得分:0)

如前所述,32位Windows操作系统使用32位字来存储内存地址。

实际上,目前大多数32位芯片使用36位寻址,使用英特尔的物理地址扩展(PAE)模型。某些操作系统直接支持此功能(例如Linux)。

正如Raymond Chen在Windows a 32-bit application can allocate more than 4GB of memory, and you don't need 64-bit Windows to do it中指出的那样。甚至是PAE。

就此而言,64位芯片不支持整个64位存储空间。我相信它们目前仅限于42位空间...... PAE使用的36位空间,加上最高的8位地址,

答案 12 :(得分:0)

  1. 32 代表数字0..4,294,967,296
  2. 32 可以用于寻址2 ^ 32 Byte s(假设字节大小的块)
  3. 2 ^ 32 B 是最大大小

2 ^ 32 B = 4,194,304 KiB = 4,194 MiB = 4 GiB