【问题标题】:Why does a 32-bit OS support 4 GB of RAM?为什么 32 位操作系统支持 4 GB RAM?
【发布时间】:2010-11-10 07:05:26
【问题描述】:

只是阅读purdue lecture about OSs 中的一些注释,上面写着:

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

为什么是 4 GB?

【问题讨论】:

  • 4 GB 是 32 位操作系统可以使用的理论最大内存。实际上,您不能使用完整的 4GB 内存(可能只有 3.5 GB),因为您还需要一些地址空间用于其他硬件组件,例如:CPU、HDD、显卡等。
  • 题目的问题是错误的。 32位操作系统可以支持更多的RAM;它一次只能看到 4GB。
  • 技术上,PAE 可以给你超过 4GiB

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


【解决方案1】:

因为 32 位能够表示最多 232 - 1 = 4294967295 = 4 GiB - 1 的数字,因此最多可以寻址 232 个单独的字节,这将是那么 4 GiB。

不过,有一些方法可以规避这一点。例如使用PAE,即使是 32 位操作系统也可以支持更多内存。不过,从历史上看,这最常用于服务器。此外,非服务器 Windows SKU 不支持它。不过,鉴于 64 位 CPU、操作系统和驱动程序支持已经司空见惯。

【讨论】:

  • 我认为这个 gibibyte 的事情就像争论冥王星是否是行星一样毫无意义(顺便说一句)
  • GiB 属于 slashdot 和维基百科。世界其他地方使用 GB(不管委员会怎么说)。
  • 如果说世界其他地方的使用方式不尽相同,那可不是什么好事,Greg
  • 鉴于这是一个回答技术问题的论坛,我觉得答案应该是准确的。 “Giga”是具有特定含义的 SI 前缀。 4 GB 是 4,000,000,000 字节,不等于 2³²。
  • @Life: 2³¹ + 1 是 2147483649。
【解决方案2】:

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

【讨论】:

  • “因为内存的每个字节都必须有一个地址。” - 当然,仅在字节可寻址系统中。在字可寻址平台中,您可以拥有两倍的内存量......
  • 或更多,取决于你的机器字的大小
  • 你能解释一下为什么 2^32 地址意味着 2^32 字节吗?谢谢。
  • @hqt:在基本情况下,每个字节都有一个地址,因此地址数 == 字节数。
【解决方案3】:

每个人都说 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-1 是几何序列的总和。
【解决方案4】:

如果你有一个 4 位系统,这意味着 每个字节的地址是 4 个二进制数字,你所有地址的概率范围是从 00001111,即 @ 987654325@(2 因为有 0 或 1),如果您有 16 个不同的地址,则可以使用四位创建 16 不同的零和一值。每个代表一个byte,那么你最多可以有16 bytes

4 位系统如下所示:

对于 32 位系统,您的最大值为 2^32 = 4294967292 bytes

【讨论】:

    【解决方案5】:

    4 GB = 2^32 字节。

    【讨论】:

      【解决方案6】:
      2 ^ 32 = 4 * 1024 * 1024 * 1024
      

      以字节为单位,是 4 GB 的定义。换句话说,作为内存指针的 32 位寄存器可以寻址 4 GB 的内存,仅此而已。

      【讨论】:

        【解决方案7】:

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

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

        • 位 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)。

        【讨论】:

        • PAE 不允许 you 处理超过 4GiB 的地址,除非有问题的 you 在超级用户模式下运行并考虑重写页表访问之间仍然构成“寻址”,此时您几乎可以争辩说您也可以“寻址”磁盘上的数据...... PAE 是一个巧妙的黑客,但它只是一个黑客。
        【解决方案8】:
        1. 32可以表示数字0..2^32 = 0..4,294,967,296
        2. 32最多可寻址 2^32Bytes(假设字节大小的块)
        3. 2^32Bytes 是最大尺寸

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

        【讨论】:

        • 你不是说 4,096MiB
        【解决方案9】:

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

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

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

        【讨论】:

          【解决方案10】:

          具有 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

          【讨论】:

            【解决方案11】:

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

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

            【讨论】:

              【解决方案12】:

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

              【讨论】:

                【解决方案13】:

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

                实际上,如今大多数 32 位芯片都使用 36 位寻址,使用 Intel 的物理地址扩展 (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 位地址,

                【讨论】:

                • 即使您可以分配超过 4GB 的内存,如果没有 64 位或 PAE,您也不能使用超过 4GB 的 RAM。
                • 您可以使用 CPUID(在 x86 上)或其他处理器系列上的类似功能检查您的 CPU 上实际工作的物理和虚拟地址位的数量。你也可以在 Linux 的 /proc/cpuinfo 中看到它 我便宜的街角商店 PC 有 40 位物理地址和 48 位虚拟地址。我们服务器机架中的旧至强只有 36 位物理地址(无论如何,它们只能占用 16GiB 的 DIMM)
                猜你喜欢
                • 1970-01-01
                • 2021-02-12
                • 2013-02-27
                • 1970-01-01
                • 1970-01-01
                • 2015-09-26
                • 2012-12-02
                • 2013-10-31
                • 2013-08-29
                相关资源
                最近更新 更多