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内存管理学习笔记 转

    https://yq.aliyun.com/articles/11192?spm=0.0.0.0.hq1MsD 随着要维护的服务器增多,遇到的各种稀奇古怪的问题也会增多,要想彻底解决这些“小”问题往往 ...

  2. Operating System Memory Management、Page Fault Exception、Cache Replacement Strategy Learning、LRU Algorithm

    目录 . 引言 . 页表 . 结构化内存管理 . 物理内存的管理 . SLAB分配器 . 处理器高速缓存和TLB控制 . 内存管理的概念 . 内存覆盖与内存交换 . 内存连续分配管理方式 . 内存非连 ...

  3. Linux 系统编程 学习:03-进程间通信1:Unix IPC(2)信号

    Linux 系统编程 学习:03-进程间通信1:Unix IPC(2)信号 背景 上一讲我们介绍了Unix IPC中的2种管道. 回顾一下上一讲的介绍,IPC的方式通常有: Unix IPC包括:管道 ...

  4. Linux 系统编程 学习:04-进程间通信2:System V IPC(1)

    Linux 系统编程 学习:04-进程间通信2:System V IPC(1) 背景 上一讲 进程间通信:Unix IPC-信号中,我们介绍了Unix IPC中有关信号的概念,以及如何使用. IPC的 ...

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

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

  6. Linux之RTOS学习

    Linux之RTOS学习 RTOS: Real time operating system 系统选型 可选方案 RTLinux - FSMLabs, WindRiver Systems - http: ...

  7. Linux内存管理学习资料

    下面是Linux内存管理学习的一些资料. 博客 mlock() and mlockall() system calls. All about Linux swap space 逆向映射的演进 Linu ...

  8. Linux 目录结构学习与简析 Part2

    linux目录结构学习与简析 by:授客 QQ:1033553122 ---------------接Part 1-------------- #1.查看CPU信息 #cat /proc/cpuinf ...

  9. Linux 目录结构学习与简析 Part1

    linux目录结构学习与简析 by:授客 QQ:1033553122 说明: /             linux系统目录树的起点 =============== /bin      User Bi ...

随机推荐

  1. MySQL 个人学习笔记

    最早之前学习了Mysql,不知道是多长时间了 O(∩_∩)O,今天突然发现之前学习过程中的这个笔记,于是,就分享给大家,希望,能帮助到有需要的朋友,有不足的地方欢迎大家多多交流 b( ̄▽ ̄)d 1. ...

  2. PE知识复习之PE合并节

    PE知识复习之PE合并节 一丶简介 根据上一讲.我们为PE新增了一个节. 并且属性了各个成员中的相互配合. 例如文件头记录节个数.我们新增节就要修改这个个数. 那么现在我们要合并一个节.以上一讲我们例 ...

  3. 第27章 联合网关 - Identity Server 4 中文文档(v1.0.0)

    通用架构是所谓的联合网关.在此方法中,IdentityServer充当一个或多个外部身份提供商的网关. 该架构具有以下优点: 您的应用程序只需要了解一个令牌服务(网关),并且屏蔽了有关连接到外部提供程 ...

  4. MTF测试图卡规格

    1.Imatest Chart Finder计算图卡大小 测试camera MTF时,需要知道所需要的图卡的大小,Imatest提供了一个网页,只要输入sensor的像素, 镜头的视场角,还有镜头到图 ...

  5. MD5&&DES加密解密帮助类

    public class _MD5_NETCore加密解密 { /// <summary> /// 加密 /// </summary> /// <param name=& ...

  6. php 日期时间类型带毫秒

    <?php date_default_timezone_set('PRC'); $mtimestamp = sprintf("%.3f", microtime(true)); ...

  7. Java开发笔记(七十)Java8新增的几种泛型接口

    由于泛型存在某种不确定的类型,因此很少直接运用于拿来即用的泛型类,它更经常以泛型接口的面目出现.例如几种基本的容器类型Set.Map.List都被定义为接口interface,像HashSet.Tre ...

  8. HTML5移动端拖动惯性

    下面代码只是实现了上下滑动惯性,没有写水平滑动惯性.(临时代码笔记,可能会在以后的过程中不断更新优化代码) /** * 惯性原理: * 产生的速度 = 移动距离 / 移动时间 * 距离 = 松开的坐标 ...

  9. onScrollChanged()

    转载请标明出处:http://www.cnblogs.com/tangZH/p/8428100.html  onScrollChanged里面有四个参数 @Overrideprotected void ...

  10. (详细)华为畅享7 SLA-AL00的usb调试模式在哪里打开的流程

    就在我们使用Pc链上安卓手机的时候,如果手机没有开启usb开发者调试模式,Pc则不能够成功检测到我们的手机,有时我们使用的一些功能比较好的的应用软件如之前我们使用的一个应用软件引号精灵,老版本就需要打 ...