六:内存回收

news/2025/2/14 0:07:26/

内存回收:

应用程序通过 malloc 函数申请内存的时候,实际上申请的是虚拟内存,此时并不会分配物理内存。

当应用程序读写了这块虚拟内存,CPU 就会去访问这个虚拟内存, 这时会发现这个虚拟内存没有映射到物理内存, CPU 就会产生缺页中断,进程会从用户态切换到内核态,并将缺页中断交给内核的 Page Fault Handler (缺页中断函数)处理。

缺页中断处理函数会看是否有空闲的物理内存,如果有,就直接分配物理内存,并建立虚拟内存与物理内存之间的映射关系。

如果没有空闲的物理内存,那么内核就会开始进行回收内存的工作,回收的方式主要是两种:快速内存回收,直接内存回收和kswapd内存回收。

回收内存页类型

文件页和匿名页的回收都是基于 LRU 算法。可以调整文件页和匿名页的回收倾向,使MMU优先回收文件页,从而减少内存回收对系统性能的影响(回收内存时伴随着大量的磁盘访问,而干净页不需要操作磁盘)。因此,实际系统又据此此为五种链表:匿名页的 active 链表,inactive 链表和文件页的active 链表, inactive 链表,非回收链表

  • LRU_INACTIVE_ANON:非活动匿名页链表,里面存放的是最近没有被访问过的页描述符。在内存回收时,会从该链表中取出部分页框放入swap分区。其活动标志PG_active是0。
  • LRU_ACTIVE_ANON:活动匿名页链表,按最近访问时间排序放置页描述符,这些页框不能直接放入到swap分区,需要先放到LRU_INACTIVE_ANON链表中。其活动标志PG_active是1。
  • LRU_INACTIVE_FILE:非活动文件页链表,存放的是最近没有被访问过的文件页描述符,在内存回收时。这些页框可以取出一部分回写到硬盘,然后被释放掉。其活动标志PG_active是0。
  • LRU_ACTIVE_FILE:活动文件页链表,按最近访问时间排序放置页描述符,这些页框不能直接被回收,需要先放入到LRU_INACTIVE_FILE链表中。其活动标志PG_active是1。
  • LRU_UNEVICTABLE:在内存中被锁的页框,这些页框不能被回收。可能是匿名页,也可能是文件页。

 


http://www.ppmy.cn/news/49441.html

相关文章

【PlumGPT】与PlumGPT开启智能对话之旅

文章目录 一、前言二、PlumGPT介绍篇三、PlumGPT登录篇四、PlumGPT体验篇1、与PlumGPT聊天2、让PlumGPT翻译3、让PlumGPT创作4、请PlumGPT写推荐信5、让PlumGPT展示图片6、让PlumGPT充当百科小助手 五、PlumGPT总结篇 PlumGPT入口体验链接:https://plumgpt.com 一、…

Android 10.0 user模式下解除系统进入recovery功能的限制

1.前言 在10.0的系统rom定制化开发中,系统中recovery模式功能也是很重要的一部分,而在原生系统中,对于debug模式的产品,可以通过电源键和音量+键进入recovery模式, 但是在user模式下的产品,对于通过这种方式,进入recovery模式就受限制了,防止用户无操作为了产品安全等…

测试从未如此简单:接口自动化测试Python脚本实现

目录 摘要 步骤1:安装依赖项 步骤2:编写测试脚本 步骤3:运行测试 结论 摘要 自动化测试是现代软件开发过程中的重要环节。在许多情况下,特别是在web应用程序和移动应用程序中,接口自动化测试是其基础。下面就来介绍一…

Java线程详解

线程是CPU调度和分配的基本单位,是操作系统可以识别的最小执行和调度单位,每个线程都有自己特定的独立的内存区域,当然也与其他线程共享堆内存,文件队列以及其他内核资源,Java虚拟机允许一个应用拥有多个线程并发工作。…

骨牌铺方格

文章目录 骨牌铺方格程序设计程序分析骨牌铺方格 【问题描述】 在2n的一个长方形方格中,用一个1 2的骨牌铺满方格,输入n ,输出铺放方案的总数. 例如n=3时,为2 3方格,骨牌的铺放方案有三种,如下图: 【输入形式】 输入数据由多行组成,每行包含一个整数n,表示该测试实例的长方形…

ElasticSearch入门学习:基础概念与简介

文章目录 一、ElasticSearch基础概念铺垫1.1 全文检索概念1.2 正排索引与倒排索引 二、ElasticSearch简介2.1 ElasticSearch简介2.2 ElasticSearch生态圈-Elastic Stack2.3 ElasticSearch与Solr搜索引擎对比 声明:以下内容均来自b站 ElasticSearch入门到精通教程&a…

SQL Server基础 第一章 (新建,分离,附加)

目录 前言 一,新建数据库 二,分离数据库 1,右键数据库,任务,分离 2,右键数据库,任务,分离 三,附加数据库 前言 本文主要详细介绍SQL server2019的简单使用&#xf…

【Linux学习】信号——信号保存 | 信号处理 | 不可重入函数,volatile,SIGCHLD信号

🐱作者:一只大喵咪1201 🐱专栏:《Linux学习》 🔥格言:你只管努力,剩下的交给时间! 信号的产生以及详细讲解了,有兴趣的小伙伴可以去看看,传送门。接下来介绍…