Linux 内存管理浅析

来源:互联网 发布:php在线教育系统源码 编辑:程序博客网 时间:2024/06/08 01:23

引言


终于开始动手写这篇博客了。

一直以来,都有个想法,想把自己对于linux内存管理的一些理解分享出来。等到真正动笔写,才明白把自己的理解转化为文字,从而让别人能够理解,甚至让没有接触过这方面知识的人理解,是多么困难的一件事。阅读哪些经典技术著作,往往能让我们产生茅塞顿开之感。我想,只有作者的技术知识和文字能力达到一定高度才能产生这样的效果吧。我不期望也没有能力去构筑一个大厦。如果你能从这篇博客里有点收获,我就心满意足了。如果还能说‘哇,原来是这样的’,那就是对我最大的鼓励了。

我们都知道,操作系统不同于一般的应用软件。对于一般的应用软件,我们通常只关心逻辑上的实现,它是一个解决问题的抽象,它与我们具体的业务或者问题有关,它不关心计算机本身的实现(比如进程调度,系统内存管理等),对于硬件它通常也不关心。而操作系统则需要关心这些计算机的实现,它需要知道CPU,知道内存,知道中断,知道这个计算机平台有哪些资源可以用等等。因为它需要关心这么多硬件方面的东西,所以我们理解操作系统的时候,第一步就是需要知道它是运行在哪个硬件平台上的。这就需要我们硬件方面的知识,底层编码的知识。这也是我们理解操作系统困难的一个原因。我这篇博客既然是介绍操作系统方面的知识,那就需要选定一个硬件平台来介绍。基于我的工作经历,我选择的是PowerPC平台freescale公司的e6500 CPU及B4860 SOC芯片。我知道大多数人对于x86或ARM平台比较熟悉,但我想操作系统绝大多数代码都是框架性的代码,只有少部分代码会涉及到平台相关性。虽然每个平台不一样,但它们与通用代码的接口都是相同的。在叙述问题的时候,我会尽量阐述这样的通用代码及接口,在涉及到平台实现时,用PowerPC平台为例子。在今天的博客附录部分,我会列出我所参考的文档及书籍,供大家参考。

如这篇博客标题所示,我打算只阐述linux内存管理方面的一些知识。但我们都知道,由于内存管理牵涉到linux系统的方方面面,必然会涉及到其他方面的内容如进程调度等。对于这些内容,我不打算详细介绍,但我会做些简短的介绍,目的是让我们更加深入的理解内存管理。当然,你也可以先忽视这部分内容,把它当成一个黑盒子,以使自己集中于先了解内存管理这块,等储备了足够多知识之后然后回过头来去深入理解。在后面的内容中,如涉及到这些知识,我也会列出一些我参考的书籍和文档在附录里。

对于模块的介绍,我不打算用罗列代码的方式。如果一上来就罗列出很多代码函数,然后跟着代码路径去一步步往下走,我想,我们比较容易迷失于细节当中。我打算先花点时间,先介绍整体的内存管理架构,将内存管理部分涉及到的模块尽量作为一个整体呈现在我们面前。在后面部分,我会逐一介绍这些模块。在介绍的过程中,我会尽量阐述为什么这么设计,代码为什么这么做,以及我们是否可以去优化它。当然,我的能力有限,在介绍的过程中难免会有错误或误导,请你帮忙指正出来。我非常期待你的意见。
对于内核的版本,我选择的是4.1.6。没有什么特别的原因,就是我打算写这篇博客的时候,阅读的内核代码。


附录:

  1. 深入Linux内核架构-英文版
    http://download.csdn.net/detail/wangmingchina/9882868

  2. PPC_Vers202_Book_public
    http://download.csdn.net/detail/wangmingchina/9882858

  3. e6500 Core Reference Manual
    http://download.csdn.net/detail/wangmingchina/9882850

  4. linux PowerPC详解-核心篇-王齐
    http://download.csdn.net/detail/wangmingchina/9882868
原创粉丝点击