不懂就问: 32 位操作系统是如何突破 4G 内存限制的?

2020-10-11 15:51:37 +08:00
 maxhhg

32 位的系统能表达的内存位置只有 2 的 32 次方个,也就是 4G,但我在网上看到 内存是可以突破 4G 的

于是我就去 Google 一下,确实可以,但是基本没有讲原理的,即使讲了,也没有讲得很清楚(可能是我理解力不够吧)

我想问问大佬们:32 位操作系统是如何突破 4G 内存限制的?

3825 次点击
所在节点    程序员
12 条回复
louettagfh
2020-10-11 15:57:27 +08:00
开启 Intel 的 PAE (物理地址扩展)模式就可以
blless
2020-10-11 16:07:53 +08:00
Intel 的 CPU 可以开启 PAE 机制吧?
>>> 然而,使用 PAE 的主要问题是线性地址仍然 32 位长。这就迫使内核编程人员用同一线性地址映射到不同的 RAM 区。很明显,PAE 并没有扩大进程的线性地址空间,因为它只处理物理地址。此外,只有内核能够修改进程的页表,所以在用户态下运行的进程不能使用大于 4GB 的物理地址空间。另一方面,PAE 允许内核使用容量高达 64GB 的 RAM,从而显著增加了系统中的进程数量。
https://www.cnblogs.com/buaasts/p/4038683.html

毕竟 CPU 指针限制只能支持 4G 寻址,只是可以把不同进程的地址映射到不同的地址空间,提升进程数量而已。其实也不能算突破 4G 内存。
12101111
2020-10-11 16:09:23 +08:00
16 位下能用 20 位的地址宽度,32 位下能用 36 位的地址宽度,前者是靠分段(16 位段描述符), 后者是靠页表映射.
但是即使是在 32 位下,虚拟地址空间也只能是 4G, 因此单个进程无法直接突破 4G 的寻址限制,只能靠 mmap 之类的方式进行.
misdake
2020-10-11 16:18:10 +08:00
严格来说 “32 位的系统能表达的内存位置只有 2 的 32 次方个,也就是 4G” 其实应该是 “同一时刻,单个进程能寻址的内存位置有 4G”
多个进程(使用不同的页表)、或者不同时刻(修改页表前后),都可以某种程度上突破这个限制。
theolin
2020-10-11 16:18:18 +08:00
是 Intel PAE 技术。说起来很简单,原本 32 位处理器地址线也是 32 位,但是搭载 PAE 技术的处理器地址线是 36 位。所以,只要操作系统支持,就可以访问多达 64GB 内存。
maxhhg
2020-10-11 16:27:09 +08:00
@louettagfh @blless @12101111 @misdake @theolin
谢谢各位大佬
Mohanson
2020-10-11 16:28:49 +08:00
源头来讲大概是一项古老的技术,最早出现在 8 位机时代,叫做存储体切换 Bank switching,原理和 PAE 几乎一样。

像 gb 游戏机就在在 64k 寻址的 8080 cpu 中做出了 32 兆大小的游戏

http://accu.cc/content/gameboy/cartridge/memory_bank_controller/
nightwitch
2020-10-11 17:45:46 +08:00
老历史了,类似的思想最早可以追溯到保护模式出现之前。历史里比较有名的是 8086,8086 的寄存器只有 16 位,16 位只能寻址 64KB 的内存。但是实际上 8086 可以最大寻址 20 位,也就是 1MB,因为 8086 使用两个寄存器寻址。
levelworm
2020-10-11 17:50:02 +08:00
@Mohanson 不错刚想说这个。。。
jzmws
2020-10-12 09:32:11 +08:00
这个是 xp 时代最经常用的
julyclyde
2020-10-12 14:19:19 +08:00
@jzmws xp 对这俩应该是都不支持的吧
bclerdx
2020-10-12 14:46:39 +08:00
现在 32 位操作系统,应该已经逐步要退出历史舞台了吧。我 5 年前就已经换成了 64 位的 Windows 7 了。64 位还是比较好用的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/713933

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX