【发布时间】:2010-11-10 01:04:36
【问题描述】:
众所周知,Windows 应用程序在 32 位系统上通常具有 2Gb 的私有地址空间。这个空间可以通过 /3Gb 开关扩展到 3Gb。
操作系统会为自己保留剩余的 4Gb。
我的问题是为什么?
在内核模式下运行的代码(即设备驱动程序代码)有自己的地址空间。为什么在独占的 4Gb 地址空间之上,操作系统仍要为每个用户模式进程保留 2Gb?
我认为原因是用户模式和内核模式调用之间的转换。例如,对NtWriteFile 的调用将需要内核调度例程的地址(因此系统在每个应用程序中保留 2Gb)。但是,使用SYSENTER,系统服务号是否不足以让内核模式代码知道正在调用哪个函数/服务?
如果您能向我解释一下为什么操作系统占用每个用户模式进程的 2Gb(或 1Gb)如此重要。
【问题讨论】:
-
我真的不敢相信人们投票决定将其作为 NPR 关闭。
-
我同意,Dave,断言操作系统设计“与编程无关”简直是疯了。
-
您在帖子中的任何地方都使用了代表位的小写“b”。它应该是代表字节的大写“B”。所有操作系统都遵循字节可寻址方案。因此,对于 32 位 PC,2 的 32 次方等于 4 Gb(4 Gb 唯一地址),但由于计算机实际上寻址的是一个字节而不是一个位,因此它变成了 4GB。
标签: windows memory virtual memory-address virtual-address-space