源码基于:Linux5.4

0. 前言

伙伴系统以页面为单位来管理内存,内存碎片也是基于页面的,即由大量离散且不连续的页面组成的。从内核角度来看,出现内存碎片不是好事情,有些情况下物理设备需要大段的连续的物理内存,如果内核无法满足,则会发生内核错误。内存规整就是为了解决内核碎片化而出现的一个功能。

内核中去碎片化的基本原理是按照页面的可移动性将页面分组。

迁移内核本身使用的物理内存的实现难度和复杂度都很大,因此目前的内存不迁移内核本身使用的物理页面。对于户进程使用的页面,实际上通过用户用页表的映射来访问,用户页表可以移动和修改映射关系,不会影响用户进程,因此内存规整是基于页面迁移实现的

本文将着重介绍内存规整的基本原理,以及 kcompacted 触发、启动的过程。

1. 内存规整的基本原理

系统长时间运行后,页面变得越来越分散,分配一大块连续的物理内存变得越来越难,但有时系统就是需要一大块连续的物理内存,这就是内存碎片化(memory fragmentation)。

Linux内存管理(三十五):内存规整简介和 kcompactd详解相关推荐

  1. linux内存管理(十五)-内存池

    一.内存池原理 平时我们直接所使用的 malloc,new,free,delete 等等 API 申请内存分配,这做缺点在于,由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能 ...

  2. Linux 驱动开发 三十五:Linux 内核时钟管理

    参考: linux时间管理,时钟中断,系统节拍_u010936265的博客-CSDN博客_系统节拍时钟中断 Linux内核时钟系统和定时器实现_anonymalias的专栏-CSDN博客_linux内 ...

  3. Linux中free函数头文件,Linux C 堆内存管理函数malloc()、calloc()、realloc()、free()详解...

    C 编程中,经常需要操作的内存可分为下面几个类别: 堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等,它们获取的方式都是由编译器自动执行的 堆区(heap):一般 ...

  4. STM32F429第二十五篇之MCU屏实验详解

    文章目录 前言 硬件 软件 结构体 SRAM_HandleTypeDef Instance(FMC寄存器地址) Extended(拓展寄存器地址) Init(初始化变量) Lock(锁) State( ...

  5. ReactNative进阶(三十八):Android ndk abiFilters 详解

    一.前言 二.ABI 是什么 三.为何设置 ndk 的 abiFilters 四.如何配置 gardle 五.ABI支持详解 六.支持建议 七.拓展阅读 一.前言 Android 系统本质是一个经过改 ...

  6. 第十五章: 菱悦 -垃圾回收GC详解

    第 15章 垃圾回收GC详解 文章目录 第 15章 垃圾回收GC详解 1.System.gc() 的理解 1.1.System.gc() 方法 1.2.不可达对象回收行为 2.内存溢出与内存泄漏 2. ...

  7. openstack 管理三十五 - 利用 SQL 获取 tenant 当前资源情况

    作用 因为 openstack 命令行下, 没有办法直接获取资源使用情况 通过 sql 语句获得 tenant(project) 当前的资源使用情况 常见资源分别有 core, memory, dis ...

  8. 十五、CSS 3新特性详解(三)——3D转换(位移、旋转、呈现)、透视perspective、旋转rotateX、Y、Z、呈现transform-style

    HTML5 第三天 一. 认识 3D 转换 3D 的特点 近大远小 物体和面遮挡不可见 三维坐标系 x 轴:水平向右 – 注意:x 轴右边是正值,左边是负值 y 轴:垂直向下 – 注意:y 轴下面是正 ...

  9. python接口自动化(十五)--参数关联接口(详解)

    简介 我们用自动化新建任务之后,要想接着对这个新建任务操作,那就需要用参数关联了,新建任务之后会有一个任务的Jenkins-Crumb,获取到这个Jenkins-Crumb,就可以通过传这个任务Jen ...

最新文章

  1. [转]SQL Server 2005链接字符串
  2. mysql恢复root密码
  3. 利用优盘安装win2008r2系统
  4. python写程序求多项式的和_用正则编译和搜索在python中计算区分多项式的系数
  5. linux内核杂记(16)-系统调用(3)
  6. mybatis学习(2):基本设置和核心配置
  7. 继承的方式编写日向家族
  8. java abstractlist_Java集合类源码解析:AbstractList
  9. 数据中台是什么意思?如何建设数据中台?
  10. Hive中类SQL语言中的where 与having
  11. 6、tcp_wrapper
  12. 德标螺纹规格对照表_常用螺栓的标准和规格表
  13. python一键电影搜索与下载
  14. cv2.cvtColor() 的使用
  15. Python语法之文件操作思维导图
  16. 几款常见蓝牙芯片整理
  17. mysql数据库巡检方案_Mysql数据库巡检
  18. vue中的 vxe-table表格插件 实现树形数据表
  19. java gc 对象可达性_JVM垃圾回收系列---GC Roots可达性分析
  20. 美国地质调查局DEM,需账户密码

热门文章

  1. 相似度计算之(二)——余弦距离
  2. nginx 配置端口转发
  3. 【BZOJ1818】【CQOI2010】【XSY2428】内部白点(树状数组+扫描线)
  4. 会计专业毕业论文如何选题?
  5. 在澳洲学计算机挣得多吗,2020年澳洲计算机科学专业挂科率高吗?
  6. 非常有用的一个正则表达式.匹配多个任意字符
  7. 你可和差拨便去那里 视频转换软件
  8. 查看自己电脑的开关机记录
  9. 谷歌正式发布Android 12,UI更好看,应用更快,打造独属于自己的定制化属性
  10. Coin Change