工作集
进程的工作集是进程的虚拟地址空间中当前驻留在物理内存中的一组页面。 工作集仅包含可分页内存分配;工作集中不包括不可分页的内存分配,例如 地址窗口扩展 (AWE) 或 大型页面分配 。
当进程引用当前不在工作集中的可分页内存时,会发生 页面错误 。 系统页错误处理程序尝试解决页面错误,如果成功,该页将添加到工作集。 (访问 AWE 或大型页面分配永远不会导致页面错误,因为这些分配不可分页。)
必须通过从页面的后备存储(系统分页文件或进程创建的内存映射文件)读取页面内容来解决硬页面错误。 无需访问后备存储即可解决 软页面错误 。 在出现软页面错误时::
- 该页位于其他某个进程的工作集中,因此它已驻留在内存中。
- 该页处于转换状态,因为它已从正在使用该页的所有进程的工作集中删除并且尚未重新调整用途,或者由于内存管理器预提取操作而已驻留。
- 进程首次引用分配的虚拟页面, (有时称为 “零需求”故障) 。
由于执行以下操作,可以从进程工作集中删除页面:
- 该进程通过调用 SetProcessWorkingSetSize、SetProcessWorkingSetSizeEx 或 EmptyWorkingSet 函数减少或清空工作集。
- 进程在未锁定的内存范围上调用 VirtualUnlock 函数。
- 进程使用 UnmapViewOfFile 函数取消映射文件的映射视图。
- 内存管理器从工作集中剪裁页,以创建更多可用内存。
- 例如,内存管理器必须从工作集中删除页,以便为新页 (腾出空间,因为工作集处于其最大大小) 。
如果多个进程共享一个页面,则从一个进程的工作集中删除该页不会影响其他进程。 从使用该页的所有进程的工作集中删除页面后,该页将成为 过渡页。 转换页将一直缓存在 RAM 中,直到某个进程再次引用该页或重新调整 (用途,例如,用零填充并提供给另一个进程) 。 如果转换页自上次写入磁盘 (即,如果页面是“脏”) ,则必须将页面写入其后备存储,然后才能重新调整用途。 一旦这些页面可用,系统可能会开始将脏转换页面写入其后备存储。
每个进程都有影响进程的虚拟内存分页行为的最小和最大工作集大小。 若要获取指定进程的工作集的当前大小,请使用 GetProcessMemoryInfo 函数。 若要获取或更改最小和最大工作集大小,请使用 GetProcessWorkingSetSizeEx 和 SetProcessWorkingSetSizeEx 函数。
PSAPI) (进程状态应用程序编程接口提供了许多函数,这些函数返回有关进程的工作集的详细信息。 有关详细信息,请参阅 工作集信息。