当前位置: 首页 > news >正文

Linux内核 -- 内存管理之 lru_cache_add_inactive_or_unevictable 函数

lru_cache_add_inactive_or_unevictable 函数解析

背景介绍

lru_cache_add_inactive_or_unevictable 是 Linux 内核中的一个函数,主要用于将内存页添加到 LRU(Least Recently Used,最近最少使用)缓存的非活跃(inactive)或不可逐出(unevictable)列表中。该函数是内存管理子系统的一部分,旨在优化内存页的缓存与逐出策略。

LRU 算法与内存管理

LRU 是内核管理内存页的一种常用算法,主要用于决定哪些内存页应该被回收或逐出内存。内存页通常分为以下几类:

  • 活跃页(Active Pages):这些页正在使用或近期被访问,保存在活跃列表中。
  • 非活跃页(Inactive Pages):这些页近期没有被访问,内核会优先从该列表中选择页进行回收。
  • 不可逐出页(Unevictable Pages):一些特殊的内存页(如锁定内存或系统关键页)不能被回收,保存在不可逐出列表中。

函数作用

lru_cache_add_inactive_or_unevictable 函数用于根据内存页的状态,将其添加到相应的 LRU 列表中。具体功能如下:

  1. 非活跃页添加:如果内存页属于非活跃页,函数会将其添加到 LRU 的非活跃列表中。系统会优先从非活跃列表中回收内存。

  2. 不可逐出页添加:如果内存页被标记为不可逐出,函数会将其添加到不可逐出列表中。这些页通常是锁定页或关键系统页,不能被回收。

函数原型

void lru_cache_add_inactive_or_unevictable(struct page *page, struct vm_area_struct *vma);

参数说明

  • page:指向需要操作的内存页结构体。
  • vma:虚拟内存区域结构体,提供了内存区域的相关信息。

工作原理

lru_cache_add_inactive_or_unevictable 函数的执行步骤大致如下:

  1. 检查内存页是否应被标记为 unevictable
  2. 如果内存页不可逐出,则将其加入不可逐出页列表中。
  3. 如果不是不可逐出页,则将其加入 LRU 非活跃页列表中,便于内核后续进行回收或其他处理。

典型使用场景

该函数通常在内存管理的关键路径中被调用,例如在页分配失败后,或在特定的内存管理场景中。它保证了系统内存页的缓存和回收机制符合内核的整体管理需求。

总结

lru_cache_add_inactive_or_unevictable 是 Linux 内核中管理内存页的重要函数之一,确保了不同类型的内存页能够按照合理的策略进行处理与管理。通过将内存页加入不同的 LRU 列表,该函数帮助优化系统的内存回收机制,维护内存管理的高效性与稳定性。


http://www.mrgr.cn/news/24020.html

相关文章:

  • [Linux]:文件(下)
  • MySQL-CRUD入门2
  • 网络初识-相关概念
  • 《深度学习》OpenCV 高阶 图像直方图、掩码图像 参数解析及案例实现
  • 神经处理单元(NPU)小知识
  • 通信电路和信道的区别与联系
  • 004——双向链表和循环链表
  • 如何利用 CSS 渐变实现多样化背景效果
  • python+pytest+request 接口自动化测试
  • 量化交易backtrader实践(一)_数据获取篇(2)_tushare与akshare
  • 统计上升四元组
  • Mysql基础练习题 1527.患某种疾病的患者 (力扣)
  • NVDLA专题14:Runtime environment-用户模式驱动
  • 【网易低代码】第3课,页面表格删除功能
  • debug对于开发工程师很重要
  • 基于Springboot的鲜花销售网站的设计与实现
  • 解决 git 不是内部或外部命令,也不是可运行的程序
  • Vue双向数据绑定代码解读
  • 秃姐学AI系列之:实战Kaggle比赛:图像分类(CIFAR-10)
  • 技术美术一百问(01)