【问题标题】:Kernel memory address space内核内存地址空间
【发布时间】:2011-06-30 19:46:42
【问题描述】:

我了解到,在具有 4GB 系统内存的 32 位系统上,2GB 分配给用户模式,2GB 分配给内核模式。但是,如果我有一个 512 MB 内存的系统,它会被划分为 256 MB 给用户,256 MB 给内核地址空间吗?

【问题讨论】:

  • 你在哪里读到的?因为,在 32 位 Windows(Win7 之前)上,您最多只能使用 3GB 内存。有关详细信息,请参阅msdn.microsoft.com/en-us/library/aa366778(v=vs.85).aspx
  • @David:这些是物理内存限制。在 32 位系统上,虚拟地址空间始终为 4GB。
  • 我的印象是“系统内存”是指系统上的物理 RAM。我这么说是因为如果没有操作系统,这是可以识别的所有内存。
  • 实际上我在我的问题中将“系统内存”称为物理 RAM,但我不知道它是 HDD 上的虚拟内存。

标签: windows memory-management x86 kernel


【解决方案1】:

您混淆了物理内存和虚拟内存。 2GB 分配给用户/系统,但它是虚拟内存。更正确的说法是它们没有被分配,而是构成了一个寻址空间。最初,这个空间根本没有绑定到物理内存。当应用程序实际需要内存时(第一次是在启动时)分配物理内存并将地址空间中的一些地址映射到它。当内存已分配但未使用足够长的时间或 PC 的物理内存不足时,数据可以转储到交换文件中,并保留在那里直到请求。这种映射对应用程序是透明的,它不知道数据当前在哪里:在芯片上还是在 HDD 上。所以地址空间总是以同样的方式分割。

【讨论】:

  • 但我的虚拟内存仅限于说 765 MB 它在哪里分配 4 GB 内存?
  • @user32344 对于每个进程,无论虚拟地址空间(虚拟内存)的物理内存大小为 4Gbs。对于 32 位系统,它不能是 765 MB 甚至是 4765 MBen.wikipedia.org/wiki/Virtual_address_space
  • 如果我的磁盘空间用完了,如何补偿?
  • 它会假装磁盘是 RAM。正如您可能想象的那样,这会对性能产生重大影响。您需要在虚拟内存上查找 Wikipedia 页面。
  • @user32344 如果您不关闭应用程序,您的系统将显示开始抛出错误和崩溃。
【解决方案2】:

这与内存(物理或虚拟)无关,而与地址空间有关。

您可以将 16GB 的物理内存插入您的计算机并创建一个 100GB 的交换文件,但 32 位(非企业)Windows 仍然只能看到 4GB(并减去 0.75GB 用于 GPU 内存等)。通过PAE,它可以使用更多,但非企业版不会这样做。

除了实际内存量之外,还有地址空间,也限制为 4GB。基本上,它只不过是可以用 32 位数字表示的“数字”(在这种情况下是地址)的集合。 由于内核也需要内存,因此绘制了一些任意线,恰好位于 32 位 Windows 的 2GB 边界,但也可以进行不同的配置。

与计算机上的内存量(虚拟或物理)无关,但它是一个限制因素,您可以在单个程序实例中使用多少内存。但是,不是,它是多个程序可以使用的内存的限制因素。

【讨论】:

    【解决方案3】:

    As far as I can tell, what you are referring to are limits of how much memory can be allocated。这与操作系统在运行时分配的内存有很大不同。

    【讨论】:

    • 系统可以分配比实际存在的更多的内存。发生这种情况时,它来自页面文件。
    猜你喜欢
    • 2016-05-05
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 2014-11-13
    • 2011-09-08
    • 1970-01-01
    相关资源
    最近更新 更多