taskmgr 中的“内存使用情况”和“虚拟内存大小”是什么?

taskmgr 中的“内存使用情况”和“虚拟内存大小”是什么?

我读:任务管理器内存列是什么意思?。但我还是不明白他们说什么。

  • 工作集(Mem)RAM 上进程内存的确切大小?
  • 分页池(VirtMem)交换文件上的进程内存的确切大小?
  • 总进程内存(地址空间使用量)是否等于 Mem 与 VirtMem 的总和?

维基百科上提供了一些信息Windows 任务管理器页。

任务管理器


似乎任务管理器是获取进程拥有的 RAM 页面数量(例如丢弃内核和驱动程序页面)以及有多少页面被交换到磁盘的信息的正确工具。但我不明白哪一列可以显示这些值。

答案1

不清楚你在问什么。你问的是“总进程内存”,好像这是一个定义明确的术语。其实不然。对于那些不深入了解内存管理的人来说,内存测量类型似乎很自然,但在现代系统中基本上不存在。

更有用的方法是告诉我们你正在试图弄清楚什么。我们可以告诉你如何做到这一点。人们往往会说“我需要知道一个进程使用了​​多少内存”,但这基本上毫无意义。这就像问一个人使用了多少空间。嗯,他们共用浴室,这算吗?他们在车库里存放了一些东西,但只是因为没有人使用它,如果有人需要空间,他们可以把这些东西扔掉,这算吗?

确实没有什么可以替代详细研究现代操作系统如何管理内存、物理内存和虚拟内存的区别、干净页面和脏页面等。这样,您就可以理解系统实际上可以为您提供的数字。

答案2

工作集(Mem)确实是 RAM 上进程内存的大小吗?

不是。它是进程虚拟地址空间的子集,根据英特尔页表格式,它是“常驻的”或“存在的”,这意味着它可以被访问而不会产生页面错误。

由于多种原因,这个数字有点误导人,主要是因为 a) 它包括与其他进程共享的一些 RAM - 主要是那些使用相同代码(如来自公共库的代码)的进程,并且这些共享页面被计入它们所在的所有进程的“工作集”。因此,如果将所有“工作集”大小相加,则会得到一个大于实际使用量的数字。b) 此外,由于页面替换而最近从进程工作集中丢失的一些 RAM 可能仍位于系统的待机页面列表中,如果是这样,访问它将导致页面错误,但不会导致硬页面错误。因此,这是包含进程可能再次使用的进程信息的 RAM - 但它不计入工作集。

内存(私有工作集)计数器是(工作集)的一个子集。它是工作集中进程私有的部分,也就是说,不可共享。

分页池(VirtMem)确实是交换文件上的进程内存的大小吗?

不是。分页池是一种特殊类型的内核空间内存堆。任务管理器中进程显示的“分页池”列表示已分配了多少分页池来支持该进程的活动。

所有进程的“分页池”计数器总数不会等于正在使用的分页池总量,因为操作系统将分页池用于许多未“分配给”特定进程的事务。

总进程内存(地址空间使用量)是否等于 Mem 与 VirtMem 的总和?

我猜你说的“Mem”是指“工作集 (mem)”。无论如何,不​​是。那是物理内存 (RAM),而 VirtMem 是虚拟的。你不能将物理内存和虚拟内存大小加在一起并得出任何合理的结果。进程使用的物理内存是其虚拟地址空间的一个子集。

Windows 通过令人困惑、不一致和不断变化的术语混淆了这个问题。例如,在您提供的屏幕截图中,前四个“内存 - ”计数器是物理的(RAM),“提交大小”和“分页池”都是虚拟的,而“非分页池”(与分页池一样,是内核空间堆,但从未分页)是两个都分配的虚拟和物理大小。

还有一个你没有问的问题:

为什么内存管理如此复杂?

因为这种方式比过去简单的系统性能好得多。对此深表歉意。

相关内容