Memory 为什么32位操作系统支持4GB内存?

Memory 为什么32位操作系统支持4GB内存?,memory,operating-system,virtual-address-space,Memory,Operating System,Virtual Address Space,只需阅读a中的一些注释,上面写着: 程序将内存视为一个数组 从地址0到2^32-1(0到 4GB-1) 为什么是4 GB?因为32位最多可以代表232个数字− 1=4294967295=4吉布− 1,因此最多可寻址232个单独字节,即4 GiB 不过,有一些方法可以避免这种情况。例如,即使使用32位操作系统也可以支持更多内存。不过,从历史上看,这在服务器上最常用。此外,非服务器Windows SKU也不支持它。不过,考虑到64位CPU、操作系统和驱动程序支持已经司空见惯,到目前为止,所有这些都没

只需阅读a中的一些注释,上面写着:

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


为什么是4 GB?

因为32位最多可以代表232个数字− 1=4294967295=4吉布− 1,因此最多可寻址232个单独字节,即4 GiB


不过,有一些方法可以避免这种情况。例如,即使使用32位操作系统也可以支持更多内存。不过,从历史上看,这在服务器上最常用。此外,非服务器Windows SKU也不支持它。不过,考虑到64位CPU、操作系统和驱动程序支持已经司空见惯,到目前为止,所有这些都没有意义。

4 GB=2^32字节

2 ^ 32 = 4 * 1024 * 1024 * 1024

以字节为单位,这是4GB的定义。换句话说,作为内存指针的32位寄存器可以寻址4GB内存,但不能超过4GB。因为内存的每个字节都必须有一个地址。在32位操作系统中,地址的长度为32位;因此,有2^32个可能的地址,这意味着有2^32个字节=4 GB。

因为是一个字中可以存储的不同内存地址(以字节为单位)的数量

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

另一种不适用的情况是,如果内存是用字而不是字节寻址的,那么可寻址的总内存将是16GB,例如。

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

每个人都说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了。

实际上,它并不像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)。

主要原因是32位操作系统选择仅支持2^32-1个地址


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

如其他用户之前所述,32位Windows操作系统使用32位字存储内存地址

实际上,现在大多数32位芯片都使用36位寻址,使用Intel的物理地址扩展(PAE)模型。一些操作系统直接支持这一点(例如Linux)

正如Raymond Chen指出的,在Windows中。甚至PAE


因此,64位芯片不支持整个64位内存空间。我相信它们目前仅限于42位空间。。。PAE使用的36位空间,加上顶部的8位地址,

如果您有一个4位系统,这意味着每个字节的地址是4个二进制数字,所有地址的概率将从
0000
1111
,即
2^4=16
(2,因为存在0或1),如果您有16个不同的addr,使用四位可以创建
16
不同的0和1值。每个表示一个
字节
,那么您最多可以有
16个字节

4位系统将如下所示:

对于32位系统,最大值为
2^32=4294967292字节

  • 32s可以表示数字
    0..2^32
    =
    0..4294967296
  • 32s最多可寻址2^32Bytes(假设字节大小块)
  • 2^32Bytes是最大大小

  • 2^32B=4194304KiB=4194MiB=4GiB一个具有32位寄存器的CPU将需要操作系统以32位的块计算所有内容。这是操作系统必须符合的硬件要求。类似地,具有64位寄存器的CPU将需要一个操作系统,以64位为单位从RAM读取和写入数据。(每次从内存中读取数据时,都需要将其读入其中一个寄存器中—可以是32位、64位或16位,等等)

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

    =>2^32=4294967296‬ 地址,→ 这相当于4294967