关于Linux内存类型的问题

6

关于Linux内存,我有以下问题:

  1. 我知道活跃内存是最经常访问的内存部分。但是,有人能解释一下Linux如何认为一个内存位置被用于活跃内存或非活跃内存吗?

  2. 活跃内存包括哪些组件?磁盘/文件缓存是否被视为活跃内存的一部分?

  3. 缓冲区和缓存内存之间的区别是什么?

1个回答

4

我试着回答你的问题:

(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缓存是为了加速内存访问。


您的意思是什么?“用户空间进程和用户空间堆栈中使用的malloc可以触发Linux内核生成页面缓存。” - Alex Hoppus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接