2013-03-18 56 views
5

我有一个关于Linux内存以下问题:关于Linux内存类型问题

  1. 我知道主动存储器是最频繁访问的内存部分。但是,有人能够解释我如何将Linux视为一个内存位置用于活动内存或非活动内存。

  2. 所有组件的活动内存是由什么组成的?磁盘/文件缓存是否被视为活动内存的一部分。

  3. BuffersCached内存有什么区别?

回答

3

我试着回答你的问题:

(1)从根本上说,你的想法是正确的。但是Linux内核中的页面缓存实现很复杂。 Linux内核使用LRU(最近最少使用)算法来管理页面缓存列表。在一个Linux系统中可能有不同的内存区域,每个区域都维护着多个LRU列表,例如LRU_INACTIVE_ANON,LRU_ACTIVE_ANON(这两个列表用于匿名页面缓存),LRU_INACTIVE_FILE,LRU_ACTIVE_FILE(这两个列表用于文件页面缓存),LRU_UNEVICTABLE。这些列表使用LRU算法进行维护(添加到尾部,从头部删除)。根据访问频率,页面在活动列表和非活动列表之间转换。仅当页面被访问并且它位于不活动列表中时,才会将页面添加到活动列表尾部。如果活动列表变得太大,活动列表头部的页面将移动到非活动列表尾部。页面回收发生在非活动列表上,从非活动列表的开头开始。 (2)常规文件读/写,块设计文件访问和内存映射文件都可以触发Linux内核生成活动或非活动页面缓存。此外,用户空间进程和用户空间堆栈中使用的malloc可以触发Linux内核生成页面缓存。 (3)也许我误解了你的问题,我想你是指缓冲区缓存和页面缓存之间的区别:较旧的版本内核使用缓冲区缓存和页面缓存。页面缓存用于文件访问(如常规文件访问,存储器映射文件,块设备文件访问)和缓冲区缓存用于物理磁盘块访问(通常,物理磁盘块的大小小于一页,因此多个物理磁盘块可以填充到一个页面中)。尽管新版本内核仍在使用缓冲区缓存概念,但新内核基于页面缓存实现缓冲区缓存。

或者你指的是内存缓冲区和cpu缓存之间的区别,如果是的话,内存缓冲区是加速磁盘/外设访问,而cpu缓存是加速内存访问。

+0

你是什么意思? “用户空间进程和用户空间堆栈中使用的malloc也可以触发Linux内核生成页面缓存。” – 2015-01-13 12:29:50