Eric Smith Asked: 2009-05-29 07:21:43 +0800 CST2009-05-29 07:21:43 +0800 CST 2009-05-29 07:21:43 +0800 CST 在 Windows 下,什么是进程“工作集”? 772 到目前为止,我对这个问题还没有一个满意的答案,但我经常被 Sysinternals Process Explorer 中“工作集”列下的淫秽数字所震撼。有人可以以易于理解的方式定义这一点吗? windows memory 6 个回答 Voted Best Answer Emmanuel BERNAT 2009-05-29T07:32:33+08:002009-05-29T07:32:33+08:00 工作集可以定义为: 工作集字节 = Sizeof(RAM) –(可用字节 + 池非分页字节 + 池分页常驻字节 + 系统缓存常驻字节 + 系统代码常驻字节 + 系统驱动程序常驻字节) 具有以下定义: Pool Nonpaged Bytes:这些表示指向非分页池的分配,这是一组始终驻留在 RAM 中的虚拟内存页面。(这些是不可分页的字节。)设备驱动程序和操作系统使用非分页池来存储必须保留在物理内存中并且永远不能被分页到磁盘的数据结构。(例如,TCP/IP 驱动程序必须为计算机上处于活动状态的每个 TCP/IP 连接分配一定数量的非分页内存,以便在不能容忍页面错误时处理网络适配器中断期间所需的数据结构。) Pool Paged Resident Bytes:在操作系统虚拟地址范围内获取的大多数虚拟内存页面都可以被分页。Pool Paged Resident Bytes 表示当前驻留在 RAM 中的可分页池中的内存位置。System Cache Resident Bytes:系统的文件缓存占用一个保留范围的虚拟内存地址,其中一些当前可能驻留在 RAM 中。(缓存文件段也可以是非常驻的,在这种情况下,当执行进程引用它们时,它们必须从磁盘中获取。) System Cache Resident Bytes:表示当前驻留在 RAM 中的文件缓存段。 系统代码驻留字节:与当前驻留在 RAM 中的系统代码相关的内存位置。 系统驱动程序驻留字节:与当前驻留在 RAM 中的设备驱动程序代码相关的内存位置。 Neobyte 2009-05-29T07:44:47+08:002009-05-29T07:44:47+08:00 这是我的一个易于理解的解释。 进程工作集是它当前使用(引用)来完成其工作的总物理 RAM 量。 它可能有点令人困惑,因为它也计算 RAM 中的“共享”空间。例如,如果 process1 需要运行一些系统 dll,操作系统会将其读入 RAM。如果 process2 还需要运行该系统 dll,则操作系统不需要将其读入 RAM,因为它已经存在。但是,用于存储该系统 dll 代码的 RAM 量将显示在两个进程的工作集下,因为它们都使用该代码来完成工作。 因此,当您看到一个具有大量工作集的进程时,可能有相当数量的 RAM 声称它声称使用实际上是与其他进程共享的,例如操作系统。 craziac 2009-05-29T07:31:31+08:002009-05-29T07:31:31+08:00 见 MSDN? “程序的工作集是其虚拟地址空间中最近被引用的那些页面的集合”。 简而言之:应用程序当前直接使用的地址(页面)范围。 jldugger 2009-05-29T08:31:04+08:002009-05-29T08:31:04+08:00 工作集是进程在任何给定时间所需的 RAM 页集。它可以随时间变化、增长或缩小。想象一个电子表格:大多数时候,您在工作表末尾附近添加或更改值,但每天晚上您都会运行一个使用整个工作表的报告。由于它存储在 RAM 中,因此工作集在白天会很小,并在报表运行时增长到覆盖整个数据集。 这很重要,因为如果您的程序的工作集大于 RAM,您将开始颠簸——不断地换出磁盘上的 RAM 页面。如果您只访问每个单元一次,上面的示例可能很好或不可避免,但如果您反复需要所有内容,那么您实际上会受到交换速度的限制。最便宜的解决方案:添加更多 RAM。更复杂的解决方案:将您的程序重写为可感知缓存(访问 (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。 RBarryYoung 2009-05-29T09:36:58+08:002009-05-29T09:36:58+08:00 进程工作集是进程虚拟地址空间中当前在内存中的那些页面(并标记为属于该进程的工作集)。因此,它也是当前分配给进程的物理页面(或非常接近)的数量 这些通常是正在使用和最近使用的页面,理论上这些也是它将来最有可能需要的页面,但不一定。一个进程工作集很可能包含许多它最近没有使用过的页面,或者将来可能永远不需要的页面(即“膨胀”)。 这是大多数虚拟内存操作系统的普遍趋势,因为如果没有其他进程需要它,没有理由不给进程更多的物理内存(因此,工作集)。 请注意,WS(工作集)不是程序所需的物理空间量,而是它当前拥有的量。 DKFunk 2010-12-01T20:35:41+08:002010-12-01T20:35:41+08:00 这是 Peter Denning对工作集模型的科学定义的可视化表示(它不一定会匹配操作系统,尤其是 Windows 任务管理器会向您报告的内容)。 假设您有一组进程:{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 我们还假设您的 delta (dt) 为 4。 您的工作集是从时间 T-delta 到 T 的所有唯一页面引用的集合。 每个进程在时间 T 的工作集如下: P1: {3,4,5} P2: {1,2,3,4} P3: {1,3,4,5} P4: {2,5}
工作集可以定义为:
工作集字节 = Sizeof(RAM) –(可用字节 + 池非分页字节 + 池分页常驻字节 + 系统缓存常驻字节 + 系统代码常驻字节 + 系统驱动程序常驻字节)
具有以下定义:
Pool Nonpaged Bytes:这些表示指向非分页池的分配,这是一组始终驻留在 RAM 中的虚拟内存页面。(这些是不可分页的字节。)设备驱动程序和操作系统使用非分页池来存储必须保留在物理内存中并且永远不能被分页到磁盘的数据结构。(例如,TCP/IP 驱动程序必须为计算机上处于活动状态的每个 TCP/IP 连接分配一定数量的非分页内存,以便在不能容忍页面错误时处理网络适配器中断期间所需的数据结构。)
Pool Paged Resident Bytes:在操作系统虚拟地址范围内获取的大多数虚拟内存页面都可以被分页。Pool Paged Resident Bytes 表示当前驻留在 RAM 中的可分页池中的内存位置。System Cache Resident Bytes:系统的文件缓存占用一个保留范围的虚拟内存地址,其中一些当前可能驻留在 RAM 中。(缓存文件段也可以是非常驻的,在这种情况下,当执行进程引用它们时,它们必须从磁盘中获取。)
System Cache Resident Bytes:表示当前驻留在 RAM 中的文件缓存段。
系统代码驻留字节:与当前驻留在 RAM 中的系统代码相关的内存位置。
系统驱动程序驻留字节:与当前驻留在 RAM 中的设备驱动程序代码相关的内存位置。
这是我的一个易于理解的解释。
进程工作集是它当前使用(引用)来完成其工作的总物理 RAM 量。
它可能有点令人困惑,因为它也计算 RAM 中的“共享”空间。例如,如果 process1 需要运行一些系统 dll,操作系统会将其读入 RAM。如果 process2 还需要运行该系统 dll,则操作系统不需要将其读入 RAM,因为它已经存在。但是,用于存储该系统 dll 代码的 RAM 量将显示在两个进程的工作集下,因为它们都使用该代码来完成工作。
因此,当您看到一个具有大量工作集的进程时,可能有相当数量的 RAM 声称它声称使用实际上是与其他进程共享的,例如操作系统。
见 MSDN?
“程序的工作集是其虚拟地址空间中最近被引用的那些页面的集合”。
简而言之:应用程序当前直接使用的地址(页面)范围。
工作集是进程在任何给定时间所需的 RAM 页集。它可以随时间变化、增长或缩小。想象一个电子表格:大多数时候,您在工作表末尾附近添加或更改值,但每天晚上您都会运行一个使用整个工作表的报告。由于它存储在 RAM 中,因此工作集在白天会很小,并在报表运行时增长到覆盖整个数据集。
这很重要,因为如果您的程序的工作集大于 RAM,您将开始颠簸——不断地换出磁盘上的 RAM 页面。如果您只访问每个单元一次,上面的示例可能很好或不可避免,但如果您反复需要所有内容,那么您实际上会受到交换速度的限制。最便宜的解决方案:添加更多 RAM。更复杂的解决方案:将您的程序重写为可感知缓存(访问 (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。
进程工作集是进程虚拟地址空间中当前在内存中的那些页面(并标记为属于该进程的工作集)。因此,它也是当前分配给进程的物理页面(或非常接近)的数量
这些通常是正在使用和最近使用的页面,理论上这些也是它将来最有可能需要的页面,但不一定。一个进程工作集很可能包含许多它最近没有使用过的页面,或者将来可能永远不需要的页面(即“膨胀”)。
这是大多数虚拟内存操作系统的普遍趋势,因为如果没有其他进程需要它,没有理由不给进程更多的物理内存(因此,工作集)。
请注意,WS(工作集)不是程序所需的物理空间量,而是它当前拥有的量。
这是 Peter Denning对工作集模型的科学定义的可视化表示(它不一定会匹配操作系统,尤其是 Windows 任务管理器会向您报告的内容)。
假设您有一组进程:
{P1, P2, P3, P4}
假设您有以下进程随时间推移的页面引用列表:
我们还假设您的 delta (dt) 为 4。
您的工作集是从时间 T-delta 到 T 的所有唯一页面引用的集合。
每个进程在时间 T 的工作集如下: