在 Windows 下,什么是进程“工作集”?

在 Windows 下,什么是进程“工作集”?

到目前为止,我还没有对这个问题找到满意的答案,但 Sysinternals Process Explorer 中“工作集”列下的淫秽数字总是让我震惊。有人能用简单易懂的方式定义它吗?

答案1

工作集可以定义为:

工作集字节数 = Sizeof(RAM) – (可用字节数 + 池非分页字节数 + 池分页驻留字节数 + 系统缓存驻留字节数 + 系统代码驻留字节数 + 系统驱动程序驻留字节数)

具有以下定义:

池非分页字节数:这些表示指向非分页池的分配,非分页池是一组始终驻留在 RAM 中的虚拟内存页面。(这些是不可分页的字节。)设备驱动程序和操作系统使用非分页池来存储必须保留在物理内存中且永远不能分页到磁盘的数据结构。(例如,TCP/IP 驱动程序必须为计算机上处​​于活动状态的每个 TCP/IP 连接分配一定数量的非分页内存,用于在无法容忍页面错误的情况下处理网络适配器中断期间所需的数据结构。)

池分页驻留字节数:在操作系统虚拟地址范围内获取的大多数虚拟内存页面都可以被调出。池分页驻留字节表示当前驻留在 RAM 中的可分页池的内存位置。系统缓存驻留字节:系统的文件缓存占用保留的虚拟内存地址范围,其中一些可能当前驻留在 RAM 中。(缓存的文件段也可以是非驻留的,在这种情况下,当执行进程引用它们时,必须从磁盘中获取它们。)

系统缓存驻留字节:代表当前驻留在 RAM 中的文件缓存段。

系统代码驻留字节:与当前驻留在 RAM 中的系统代码相关的内存位置。

系统驱动程序驻留字节:与当前驻留在 RAM 中的设备驱动程序代码相关的内存位置。

答案2

以下是我所做的易​​于理解的解释。

进程工作集是进程当前用于完成其工作的物理 RAM 总量。

这可能有点令人困惑,因为它也计算了 RAM 中的“共享”空间。例如,如果进程 1 需要运行某个系统 dll,操作系统会将其读入 RAM。如果进程 2 也需要运行该系统 dll,操作系统无需将其读入 RAM,因为它已经在那里了。但是,用于存储该系统 dll 代码的 RAM 量将显示在两个都进程,因为他们都使用该代码来完成工作。

因此,当您看到一个具有巨大工作集的进程时,它声称使用的 RAM 中可能会有相当一部分实际上是与其他进程(如操作系统)共享的。

答案3

参见 MSDN?

“程序的工作集是其虚拟地址空间中最近被引用的页面的集合”。

简而言之:应用程序当前直接使用的地址范围(页面)。

答案4

进程工作集是进程虚拟地址空间中的那些页面,它们现在内存中(并标记为属于该进程的工作集)。因此,它也是当前分配给进程的物理页面数量(或非常接近)。

这些都是通常正在使用和最近使用的页面,理论上这些页面也是将来最有可能需要的页面,但不一定。进程工作集很可能包含许多最近未使用或将来可能永远不需要的页面(即“膨胀”)。

这是大多数虚拟内存操作系统的普遍趋势,因为如果没有其他进程需要,就没有理由不为进程提供更多的物理内存(以及工作集)。

请注意,WS(工作集)不是程序所需的物理空间量,而是程序当前

相关内容