到目前为止,我还没有对这个问题有一个满意的答案,但是我经常被Sysinternals Process Explorer中“工作集”列下的淫秽数字所淹没。 有人可以用一种容易理解的方式来定义这个吗?
工作集可以定义为:
(RAM) – (可用字节+池非分页字节+池分页驻留字节+系统高速caching驻留字节+系统代码驻留字节+系统驱动程序驻留字节)
提供以下定义:
池非分页字节 :这些表示分配针对非分页池,这是一组永久驻留在RAM中的虚拟内存页面。 (这些是不可分页的字节。)设备驱动程序和操作系统使用非分页池来存储必须保留在物理内存中的数据结构,永远不能将其分页到磁盘。 (例如,TCP / IP驱动程序必须为计算机上处于活动状态的每个TCP / IP连接分配一定数量的非分页内存,以便在页面错误不能容忍时处理networking适配器中断期间所需的数据结构。
池分页的驻留字节 :在虚拟地址的操作系统范围内获取的大多数虚拟内存页面都可以分页。 Pool Paged驻留字节代表当前驻留在RAM中的可分页池中的内存位置。 系统caching驻留字节:系统的文件caching占用虚拟内存地址的保留范围,其中一些地址当前可驻留在RAM中。 (caching的文件段也可以是非驻留的,在这种情况下,它们必须在被执行进程引用时从磁盘中获取)。
系统caching驻留字节 :表示当前驻留在RAM中的文件caching段。
系统代码驻留字节 :与当前驻留在RAM中的系统代码关联的内存位置。
系统驱动程序驻留字节 :与当前驻留在RAM中的设备驱动程序代码关联的内存位置。
这是我的一个易于理解的解释。
进程工作集是当前正在使用(引用)的物理RAM总量,以完成其工作。
它可能有点令人困惑,因为它也计算RAM中的“共享”空间。 例如,如果process1需要运行某个系统的dll,操作系统会将其读入RAM中。 如果process2还需要运行该系统的dll,操作系统不需要将其读入RAM,因为它已经在那里了。 但是,用于存储系统dll代码的RAM数量将显示在两个进程的工作集下,因为它们都使用该代码来完成其工作。
所以当你看到一个拥有巨大工作集的进程时,可能会有相当数量的RAM被声称使用,实际上是与其他进程共享的,比如OS。
请参阅MSDN?
“程序的工作集是虚拟地址空间中最近被引用的那些页面的集合。
简而言之:应用程序当前直接使用的地址范围(页面)。
工作集是任何给定时间内进程所需的一组RAM页面。 它可以随时间变化,增长或缩小。 设想一下电子表格:大多数情况下,您可以在表格末尾附近添加或更改值,但是每天晚上您都会运行一个报告来处理整张表格。 由于这是存储在RAM中,所以工作集在白天会变小,并且在报告运行时增长到覆盖整个数据集。
这很重要,因为如果你的程序的工作集大于RAM,你将会开始抖动 – 不断地换出磁盘上的RAM页面。 如果你只访问每个单元格一次,上面的例子可能是好的或者是不可避免的,但是如果你反复需要所有的东西,那么你实际上限于交换的速度。 最便宜的解决scheme:添加更多内存。 更复杂的解决scheme:将程序重写为caching感知(访问(m * n)数组,步长为1,2,3,4,… m + 1,m + 2,而不是0 * m + 0, 1 * m + 0,2 * m + 0 … n * m + 0,0 * m + 1 … n * m + n。
进程工作集是进程的虚拟地址空间的当前在内存中(并被标记为属于该进程的工作集)的那些页面。 因此,这也是当前分配给进程的物理页面(或者非常接近)的数量
这些通常是正在使用的和最近使用的页面,理论上这些页面也是将来可能需要的页面,但不一定是这样。 一个stream程工作集很可能包含许多最近未使用过的页面,或者将来可能永远不需要(即“膨胀”)。
在大多数虚拟内存操作系统中,这是一个普遍的趋势,因为如果没有其他进程需要它,没有理由不给予进程更多的物理内存(从而工作集)。
请注意,WS(工作集)不是程序需要的物理空间量,而是当前的量。
下面是Peter Denning 的工作集模型的科学定义的可视化表示(不一定匹配操作系统,特别是Windows任务pipe理器将向您报告)。
假设你有一组进程{P1, P2, P3, P4}
假设你有一段时间内进程的页面引用列表:
T-5 T-4 T-3 T-2 T-1 --------------------------- P1: 2, 3, 5, 4, 5 P2: 2, 3, 4, 1, 2 P3: 2, 3, 1, 4, 5 P4: 4, 5, 5, 2, 5
让我们也假设你有一个德尔塔(dt)4。
您的工作集是从时间T-delta到T的所有唯一页面引用的集合。
时间T的每个过程的工作集如下:
P1: {3,4,5} P2: {1,2,3,4} P3: {1,3,4,5} P4: {2,5}