Linux的进程和内存是两座大山,没有翻过这两座大山对于内核的理解始终是不完整的。

关于Linux内存管理,在开始之前做些准备工作。

首先bing到了Quora的《How can one really learn Linux Kernel Memory Management?》,这也是大部分初学者,或者说大部分Linux内核开发人员的疑问?

正如Vaishali Thakkar所说,最好的方法是读代码,但是面对这么庞杂的代码,往往是无从下手。Vaishali Thakkar推荐从LSF/MM论坛入手去了解年度报告,但是这些技术往往都是最前沿的。倒是下面的路径相对合适:

  1. LinuxMM - linux-mm.org Wiki
  2. Understanding the Linux Virtual Memory Manager 关于Linux内存管理的经典之作,虽然有点老2.4,但仍然有可取之处。
  3. 一些内存管理Maintainer的博客:Rik van Riel's home page Mel Gorman
  4. Kernel coverage at LWN.net内核开发相关细节
  5. 最方便的内核帮助文档。

其他方法还包括通过IRC channel #mm on OFTC提问,阅读代码有疑问使用‘git blame’查找对应的git,然后通过阅读注释来理解背景。

最后还可以通过修改代码或者参数来做实验,验证自己的想法。

另一位Chen Gang同样提到了Understanding the Linux Virtual Memory Manager这本书。另由于MMU是架构相关的,要想理解内存管理,不阅读MMU规格书是不可能的,对于ARM架构在官网提供了下载。同样提到了阅读代码的重要性,虽然不是立即体现出来效果,但是久而久之会起效的。另外还可以通过修改MM相关参数,来做实验;和阅读MM相关 commits。

补充一个Mel Gorman用于测试内核MM的工具集mmtests。

在经过一些了解之后,简单做了个总结,如下:
1. 阅读ARM MMU相关资料《阅读ARM Memory(L1/L2/MMU)笔记》
2. 内存管理相关图书《Understanding the Linux Virtual Memory Manager》、《奔跑吧 Linux内核》、《Professional Linux Kernel Architecture/深入Linux内核架构》、《Linux Kernel Development》、《Understanding the Linux Kernel》
3. 内核代码阅读,git blame/log查看信息;内核帮助文档
4. 修改内核VM参数,进行测试;使用mmtests

最后,正如Chen Gang所说“MM is a tough topic”,前面的路注定不平坦。戒骄戒躁,一步一个脚印吧!

如何展开Linux Memory Management学习?相关推荐

  1. 内存管理:Linux Memory Management:MMU、段、分页、PAE、Cache、TLB

    目录 Linux Memory Management Memory Address Need for Virtual Addressing Address Translation Address Tr ...

  2. linux 进程 转存储,Linux memory management——(进程虚存空间的管理)(转)

    Linux memory management--(进程虚存空间的管理)(转)[@more@]Linux memory management--(进程虚存空间的管理) 1.内核空间和用户空间 进程运行 ...

  3. Linux内存管理Linux Memory Management Notes

    Linux 内存基础 地址类型 linux内核中有许多种不同的地址类型 用户虚拟地址 用户空间看到的常规地址,通过页表可以将虚拟地址和物理地址映射起来 物理地址 用在cpu和内存之间的地址叫做物理地址 ...

  4. Memory Management Concepts overview(内存管理基本概念)

    目录 Concepts overview Virtual Memory Primer Huge Pages Zones Nodes Page cache Anonymous Memory Reclai ...

  5. 【学习札记NO.00004】Linux Kernel Pwn学习笔记 I:一切开始之前

    [学习札记NO.00004]Linux Kernel Pwn学习笔记 I:一切开始之前 [GITHUB BLOG ADDR](https://arttnba3.cn/2021/02/21/NOTE-0 ...

  6. Linux第二周学习笔记(7)

    Linux第二周学习笔记(7) 2.13 文档查看cat_more_less_head_tail (1). cat命令 cat命令:用于查看一个文件的内容并将其显示在屏幕上 cat-A命令:显示所有的 ...

  7. linux设备驱动程序调试方法,Linux设备驱动程序学习(2)-调试技术

    Linux设备驱动程序学习(2)-调试技术 Linux设备驱动程序学习(2)-调试技术 今天进入<Linux设备驱动程序(第3版)>第四章调试技术的学习. 一.内核中的调试支持 在前面已经 ...

  8. 异构内存管理 Heterogeneous Memory Management (HMM)

    https://www.kernel.org/doc/html/latest/vm/hmm.html 目录 异构内存管理 (HMM) 使用特定于设备的内存分配器的问题 I/O 总线.设备内存特性 共享 ...

  9. linux基础命令学习笔记(二)

    linux基础命令学习笔记(二) 1.kill :终止进程  kill pid (唯一标示一个进程) kill -9  强制终止  kill -15 命令未结束不能终止 # ps aux 查看所有进程 ...

最新文章

  1. Chrome Full black Screen [Solved]
  2. curl不通 k8s_如何利用curl命令访问Kubernetes API server
  3. Linux中cat、more、less、tail、head命令的使用示例
  4. 即插即用的轻量注意力机制ECA--Net
  5. 【JZOJ4861】【NOIP2016提高A组集训第7场11.4】推冰块
  6. 牛客网--蛇形矩阵(Java)
  7. spark 2.2 读取 Hadoop3.0 数据异常 org.apache.hadoop.hdfs.web.HftpFileSystem cannot access its superinterfa
  8. rpm安装mysql5.5_CentOS下以RPM方式安装MySQL5.5
  9. java中set怎么建int型_使用Array.setInt来填充Java中的数组
  10. git生成SSH密钥提示ssh文件不存在-已解决
  11. 安装问题的审计(产生漏洞,抓包)
  12. [Spring-cloud-eureka]使用 gradle, spring boot,Spring cloud Eureka 搭建服务注册中心
  13. kafka监控之kafka-run-class.sh
  14. thread.sleep会释放锁吗_面试 LockSupport.park()会释放锁资源吗?
  15. 串口和TCP调试助手
  16. 触摸屏调出虚拟键盘_win7系统中打开虚拟键盘的两种方法(屏幕键盘)
  17. 读书的作用--引用《儒道至圣》小说章节
  18. cad一直正在加载_CAD总是打开要加载好久,卡到不行。
  19. java捕鱼增值版游戏下载_捕鱼游戏 java
  20. c语言指针笔试面试题,c语言指针面试常见问题

热门文章

  1. java 代码检验表不存在_诊断 Java 代码: Liar View 错误模式
  2. 3842开关电源完整原理图_8大常见开关电源电路分析,让你项目设计更轻松!
  3. 怎么设置计算机管理员权限,Windows7管理员权限怎么设置?
  4. 人工智能的数学基础(二):函数
  5. 安卓 页面跳转_挑战安卓和iOS!华为:鸿蒙覆盖1亿台设备,明年出鸿蒙手机
  6. java 处理时间的类_java 日期时间处理类
  7. boost电路输出电流公式_boost电路解析
  8. html语言1002html语言,HTML基础和标签介绍
  9. linux屏幕分辨率文件,Ubuntu 16.04 LTS设置屏幕分辨率显示Unknown display 解决
  10. centos 6.5配置apache php mysql_centos6.7下搭配apache php mysql环境