1

我试图理解以下内容:

  • 我知道页表是由虚拟内存管理器在某些时候为虚拟内存和物理内存之间的转换而构建的。由于系统上运行着许多进程,即使一次只有进程处于活动状态,我想知道是否在任何时间点将非活动进程的页表移动到页面文件?鉴于较低的 2 GB 区域是为 Windows 保留的,因此 Windows 会为系统上的所有进程保留页表是有道理的。尽管如果切换当前进程,将它们移动到页面文件也有意义吗?

  • 可写(数据)页面也是如此。windows会将所有进程的所有数据页保留在内存中还是在某个时候将它们移动到页面文件中。在我的机器上,任务管理器说正在使用 3 GB 中的 1.5 GB RAM,而 1.5 是性能选项卡中的系统缓存,所以我的理解是所有应用程序的数据都保留在物理内存中。但是有时间它需要移动到页面文件吗?

4

2 回答 2

1

我想知道是否在任何时候将非活动进程的页表移动到页面文件?

是的,页表是可分页的。

windows会将所有进程的所有数据页保留在内存中还是在某个时候将它们移动到页面文件中。

就 Windows 分页策略而言,有两种内存:可分页和不可分页。它属于哪个进程或者即使它属于O / S本身并不重要,如果它是可分页的,那么它就会被分页。所以,是的,Windows 会在必要时分页处理数据页。

我建议阅读 Windows Internals 书中的内存管理章节,它应该涵盖所有这些。

-斯科特

于 2011-09-07T14:04:09.327 回答
0

您实际上在这里问了两个问题。

  1. 关于页表的分页策略是什么。
  2. “可写数据”页面(即具有 R/W 权限的虚拟内存)的分页策略是什么。

首先我会纠正你一点。

鉴于较低的 2 GB 区域是为 Windows 保留的,因此 Windows 会为系统上的所有进程保留页表是有道理的

确切地说,它是为 Windows 保留的较高的2GB,更准确地说 - 只能由 Windows 内核和驱动程序在内核模式下访问。

现在,这可能会让您感到惊讶,但内核内存也可能是可分页的!所以从技术上讲,32 位地址空间的哪一部分在用户/内核模式下可见并不重要。它与分页无关。

另一个更正:虚拟内存可能在物理内存中保存到页面文件中。人们普遍认为操作系统通过按需将页面保存到页面文件来释放物理存储。错误的。

实际上,Windows 在需要释放内存页面之前将它们保存到页面文件中。实际上,它将所有内存页面转储到后台页面文件(与其他文件相关的页面文件除外,例如映射部分)。有两个原因:

  • 在高负载期间,操作系统将更快地释放内存页面(因为它们已经被保存)
  • 在内核模式下分页并不总是可能的。在高 IRQL 上运行的驱动程序(即服务于最关键的事件)可能无法访问物理存储驱动程序,因此不可能进行分页。

因此,您的问题的答案是:

  1. 不确定,但这取决于操作系统的实现细节。我看不出每个进程的页表可能不会被分页的原因。在上下文切换和修改进程虚拟内存期间需要它。这两种情况都不属于时间紧迫的事件。
  2. 绝对“可写数据”内存页面被保存到页面文件中。它们是否从物理内存中删除?仅按需,在系统加载期间,按最近最少使用的顺序。
于 2011-09-07T14:10:29.510 回答