我有关于Linux内存的下列问题:
我知道活动内存是最常访问的内存部分。 但有人可以解释我如何认为一个内存位置被用于活动内存或非活动内存。
活动内存中的所有组件都由什么组成? 磁盘/文件caching是否被视为活动内存的一部分。
Buffers
和Cached
内存有什么区别?
我试图回答你的问题:
(1)基本上,你的想法是正确的。 但是Linux内核中的页面缓存实现很复杂。 Linux内核使用LRU(最近最少使用)算法来管理页面缓存列表。 在一个Linux系统中可能有不同的内存区域,每个区域维护着LRU_INACTIVE_ANON,LRU_ACTIVE_ANON(这两个列表用于匿名页面缓存),LRU_INACTIVE_FILE,LRU_ACTIVE_FILE(这两个列表用于文件页面缓存),LRU_UNEVICTABLE。 这些列表使用LRU算法进行维护(添加到尾部,从头部移除)。 根据访问频率,页面在活动列表和非活动列表之间转换。 只有在页面被访问时,页面才被添加到活动列表尾部,并且它位于不活动列表中。 如果活动列表变得太大,活动列表头部的页面将移动到非活动列表尾部。 页面回收发生在非活动列表上,从非活动列表的头部开始。
(2)常规的文件读写,块文件访问,内存映射文件都可以触发Linux内核生成页面缓存,有效或无效。 另外用户空间进程和用户空间堆栈中使用的malloc可以触发Linux内核生成页面缓存。
(3)也许我误解了你的问题,我想你的意思是缓冲区缓存和页面缓存之间的区别:较旧的版本内核使用缓冲区缓存和页面缓存。 页面缓存是用于文件访问(如常规文件访问,内存映射文件,块设备文件访问)和缓冲区缓存,用于物理磁盘块访问(通常物理磁盘块的大小小于一页,因此多个物理磁盘块可以填充到一个页面中)。 尽管新版本的内核仍在使用缓冲区缓存的概念,但新内核基于页面缓存实现了缓冲区缓存。
或者你的意思是内存缓冲区和CPU缓存之间的区别,如果是的话,内存缓冲区是加速磁盘/外设访问,而CPU缓存是加快内存访问。