首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows中的系统文件缓存使用RAM的哪一部分?

Windows中的系统文件缓存使用RAM的哪一部分?
EN

Stack Overflow用户
提问于 2018-11-13 20:14:28
回答 2查看 2.6K关注 0票数 3

根据关于页缓存这个答案的一般概念,系统文件缓存本质上使用任何其他进程都不使用的所有内存。据我所知,Linux中的页面缓存就是这种情况。

由于“空闲RAM”的概念在Windows中有点模糊,我的问题是,系统文件缓存使用的是RAM的哪一部分?例如,任务管理器中的“可用RAM”与“可用RAM”相同吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-14 11:27:21

是的,文件缓存使用的RAM本质上是任务管理器中显示的RAM。但不完全是。我将详细介绍并解释如何更精确地测量它。

文件缓存不是任务管理器中的进程列表中列出的进程。然而,由于Vista,它的内存管理像一个进程。因此,我将解释一些进程的内存管理,文件缓存是一个特例。

在Windows中,进程使用的RAM基本上有两种状态:“活动”和“备用”:

  • “活动”RAM在任务管理器和资源监视器中显示为“在使用”。它也是任务管理器中每个进程显示的RAM。
  • “备用”RAM在资源监视器中是全局可见的,对于RAMMap的每个进程都是可见的。

“备用”+“空闲”RAM是任务管理器中所谓的“可用”。在Windows中,“空闲”RAM倾向于接近0,但您可以有意义地考虑待机RAM也是空闲的。

待机RAM被视为“有一段时间没有被进程使用”。它是RAM的一部分,将用于给需要它的进程提供新的内存。但是它仍然属于进程,如果拥有进程突然访问它(系统认为这是不可能的),则可以直接使用它。

因此,文件缓存具有“活动”RAM和“备用”RAM。“活动”RAM是最近访问的数据的缓存。“备用”RAM是对不久前访问的数据的缓存。文件缓存的“活动”RAM通常相对较小。文件缓存的备用RAM通常是计算机的所有RAM :所有进程的总RAM -活动RAM。实际上,其他进程很少有备用RAM,因为如果您经常使用磁盘I/O,它往往会进入文件缓存。

这是RAMMap为繁忙的服务器显示的大量I/O和计算信息:

文件缓存是称为“映射文件”的第二行。请注意,32 GB中的大多数位于其他进程的活动部分,或者位于文件缓存的备用部分。

最后,是的,文件缓存使用的RAM本质上就是任务管理器中显示的RAM。如果您想更确切地度量,可以使用RAMMap。

票数 3
EN

Stack Overflow用户

发布于 2021-03-24 19:14:18

你的回答并不完全正确。

文件缓存(也称为系统缓存)描述了一系列虚拟地址,它有一个由MmSystemCacheWs跟踪的物理工作集,该工作集是系统上所有映射的文件物理页的子集。

系统缓存是指向映射的文件页的一系列虚拟地址,因此是PTE。映射的文件页是由创建映射的进程引入的,或者是由系统缓存管理器响应文件读取引入的。

文件缓存响应读取所需的现有页成为系统工作集的一部分。如果映射文件中的页不存在,那么它将被分页,并成为系统工作集的一部分。当一个页面位于多个工作集中(即系统和一个进程或进程以及另一个进程)时,它被认为是在像VMMap这样的程序上的共享工作集。

实际映射的文件页本身由节对象控制,每个文件一个,文件的数据控制区(文件)和分段对象,文件的分段对象,文件的prototype PTE。当进程第一次为该文件创建映射对象时,或者系统缓存管理器第一次为该文件创建映射对象(区段对象)时,由于该文件响应于进程执行的文件IO操作,需要访问该文件。

当系统缓存管理器需要从文件中读取时,它一次映射该文件的256 file视图,并跟踪VACB对象中的视图。进程映射文件的变量视图(通常是整个文件的大小),并在process中跟踪此视图。映射视图的行为就是简单地填充PTE,指向包含已经驻留的文件的物理页面,方法是查看文件中该范围的原型PTE并查看它包含的内容,如果原型PTE没有指向物理页面,初始化PTE以指向原型PTE而不是它所指向的页面,那么PTE将无效,当实际执行从视图读取的数据时,该错误将按页逐页解决。

VACB跟踪缓存管理器打开的文件的256 The视图和该视图的虚拟地址范围,该视图描述了服务范围为64 PTEs的虚拟地址范围。不存在虚拟外部碎片或页面表外部碎片,因为所有视图都是相同大小的,也没有物理外部碎片,因为视图中的所有页面都是4KiB。256 the是所选择的大小,因为如果它较小,就会有太多的VACB对象(占用空间是VACB的64倍),如果它更大,就会由于读取而产生大量内部碎片,从而导致大量的虚拟地址污染,而且VACB使用虚拟地址中较低的位来存储当前正在这个范围内执行的I/O操作的数量,因此VACB的大小必须增加几位,否则它能够处理更少的并发I/O操作。

如果视图是文件的整个大小,那么很快就会出现大量虚拟地址污染,因为它将映射到被读取的所有文件中,而文件映射应该用于用户进程,这些进程有意地将整个文件视图映射到其虚拟地址空间,期望访问整个文件。还会出现大量虚拟外部碎片,因为视图的大小不一样。

对于可执行图像,分别用单独的原型PTE和单独的物理页面、单独的控制区、单独的段和分段对象映射到文件的数据文件映射。进程映射映像,但内核也映射ntoskrnl.exehal.dll大页中的映像,然后驱动程序映像在system工作集中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53288810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档