为啥 32 位操作系统支持 4 GB RAM?
Posted
技术标签:
【中文标题】为啥 32 位操作系统支持 4 GB RAM?【英文标题】: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 【参考方案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 个二进制数字,你所有地址的概率范围是从 0000
到 1111
,即 @ 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】:-
32位可以表示数字
0..2^32
= 0..4,294,967,296
32位最多可寻址 2^32Bytes(假设字节大小的块)
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)以上是关于为啥 32 位操作系统支持 4 GB RAM?的主要内容,如果未能解决你的问题,请参考以下文章