【问题标题】:Virtual memory: process' one and system's one虚拟内存:进程一和系统一
【发布时间】:2011-08-19 12:43:19
【问题描述】:

这篇文章http://msdn.microsoft.com/en-us/library/aa366912(v=vs.85).aspx 指出,win32 环境中的虚拟内存(假定为 32 位)一半专用于用户模式进程,一半专用于内核模式进程。

如果我从分页中回忆起,每个进程都应该有自己的地址空间,从 0 到任何值(根据文章最大 0x7FFFFFFF)。但是对于内核驱动程序呢?每个内核驱动程序/程序是否都有从 0x80000000 到 0xFFFFFFFF 的内核地址空间?

还是我错了?

【问题讨论】:

  • -> 所以 ring3 进程有许多不同的虚拟空间(都具有相同的地址范围)和一个只有 ring0 共享的虚拟空间,对吧?
  • @davka,我不是程序员,但我想 C/C++ 程序员应该很了解这一点
  • 我更新了我的答案:大部分(但不一定是全部)内核地址空间都是共享的。

标签: windows memory pagination virtual


【解决方案1】:

我相信您的印象是驱动程序是独立的进程;对于单体内核和混合内核(NT 被认为是混合内核),它们不是。将驱动程序视为内核在 ring 0 中加载到自身中的模块。实际上,它们成为内核的一部分。

该地址空间的一部分可能会在进程之间发生变化,但大部分内核地址空间将在所有进程之间共享。

【讨论】:

    【解决方案2】:

    据我所知,只有一个内核。 :-)

    地址范围似乎没问​​题,除非系统配置为 3GB 用户空间。

    【讨论】:

    • .. 程序在最后的链接中被制作成 /LARGEADDRESSAWARE。
    【解决方案3】:

    在 Windows 中,内核模式驱动程序存在于内核中并共享内核的地址空间。

    【讨论】:

      猜你喜欢
      • 2012-09-23
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      • 2014-01-18
      • 2023-04-03
      • 2020-10-15
      相关资源
      最近更新 更多