深入理解Linux虚拟内存管理
基本信息
- 作者: (爱尔兰)Mel Gorman [作译者介绍]
- 译者: 白洛 李俊奎 刘森林
- 丛书名: Bruce Perens开源系列
- 出版社:北京航空航天大学出版社
- ISBN:7810777300
- 上架时间:2006-6-30
- 出版日期:2006 年5月
- 开本:16开
- 页码:676
- 版次:1-1
- 所属分类:
计算机 > 操作系统 > Linux
内容简介回到顶部↑
vm的行为影响着linux内核的每个子系统,并动态地改变整体性能。但直至目前,理解vm的惟一途径便是:逐行学习文档极少的源代码。而现在有了更简单快捷的可选方案。本书史无前例地详细描述了vm,不仅包括理论基础,而且还包括逐行的代码注释。它同样系统地涵盖了从物理内存描述到内存溢出管理的每个方面:
1.linux vm 2.4 体系结构的层次,附图表和调用图
2.物理内存描述、页表、地址空间和内存分配
3.高端内存、交换、共享内存和更多的内容
4.专家级地指导如何分析开源项目
5.每个章节中有linux 2.6内核的新特性
《深入理解linux虚拟内存管理》将成为每个内核程序员和研究人员不可或缺的案头宝典。
1.linux vm 2.4 体系结构的层次,附图表和调用图
2.物理内存描述、页表、地址空间和内存分配
3.高端内存、交换、共享内存和更多的内容
4.专家级地指导如何分析开源项目
5.每个章节中有linux 2.6内核的新特性
《深入理解linux虚拟内存管理》将成为每个内核程序员和研究人员不可或缺的案头宝典。
作译者回到顶部↑
本书提供作译者介绍
Mel Gorman曾获得爱尔兰利马瑞克大学的计算机学士和硕士学位。他的研究领域广泛:从网页开发到摄影机的实时显示系统。Mel Gorman认为,即使是最难以攻克的项目也并没有想象中那么艰难。他曾经还担任过系统管理员,主要管理Linux, 也涉及到Solaris和Windows。现今Mel Gorman是都柏林IBM公司的Java程序开发员。
Mel Gorman的大部分技能都来自于他自己在利马瑞克大学的生活经历,与大学里计算机社区的广泛接触,以及实地工作经验这三者的完美结合。是计算机社区使他接触到了Linux,并相信Linux用.. << 查看详细
Mel Gorman的大部分技能都来自于他自己在利马瑞克大学的生活经历,与大学里计算机社区的广泛接触,以及实地工作经验这三者的完美结合。是计算机社区使他接触到了Linux,并相信Linux用.. << 查看详细
目录回到顶部↑
第1章简介
1.1开始启程2
1.2管理源码4
1.3浏览代码9
1.4阅读代码11
1.5提交补丁12
第2章描述物理内存
2.1节点14
2.2管理区16
2.3管理区初始化21
2.4初始化mem_map21
2.5页面22
2.6页面映射到管理区26
2.7高端内存26
2.82.6中有哪些新特性27
第3章页表管理
3.1描述页目录30
3.2描述页表项33
3.3页表项的使用34
3.4页表项的转换和设置36
1.1开始启程2
1.2管理源码4
1.3浏览代码9
1.4阅读代码11
1.5提交补丁12
第2章描述物理内存
2.1节点14
2.2管理区16
2.3管理区初始化21
2.4初始化mem_map21
2.5页面22
2.6页面映射到管理区26
2.7高端内存26
2.82.6中有哪些新特性27
第3章页表管理
3.1描述页目录30
3.2描述页表项33
3.3页表项的使用34
3.4页表项的转换和设置36
译者序回到顶部↑
这是我心仪已久的一本书,相信很多读者也会有同样的感受。
Linux在国内的普及还不成熟,而关于内核方面的中文资料却又都偏向大而全,细节部分描述得相当不够。这些书籍往往由于篇幅问题而仅仅选择性地讲解内核源代码,不少读者无法真正吃透内核的实际实现方式,存在看不下去或不能理解等问题。还有的书籍代码注释较为粗略,省去了很多内核实现细节,初、中级水平的读者阅读起来也有困难。而另有一部分内核书籍由于时代久远,很多系统调用方面,特别是与硬件相关的代码使读者产生不少疑问,对于中、高级内核开发人员以及在较新内核版本下进行开发的人员就略显不足了。
一次较为偶然的机会我在网络上发现这一至宝,在它还是草稿版的时候就得到LinuxCN网站的关注。但由于种种原因一直没有和大家见面。后来痛定思痛,觉得这样一本好书不能为中国众多Linux爱好者学习实为可惜,终于克服种种困难翻译该书完整正式版,希望能给大家带来一定的帮助。
在众多Linux内核分析的书籍中,本书的特点非常鲜明:
(1) 本书问世以前,基本上没有一套关于Linux 虚拟内存(Virtual Memory,VM)的完整文档。文档的匮乏直接导致VM只能被很少一部分内核开发人员所完全理解。极少或根本没有任何信息对这种实现的理论基础进行描述。
(2) 本书试图弥补内存管理理论和在Linux中具体实现之间的差距,并且将两个部分结合起来,是当今最能够充分理解Linux VM的运行机制以及将理论和实现联系在一起的书籍。本书不是以讲述理论为目标,而是先讲述理论,再结合Linux的实现深入剖析其细节。
(3) 本书以相对独立于硬件的角度阐述Linux VM。
(4) 函数调用图和系统架构图一目了然,思路清晰。读者可以快速地掌握系统总体架构。
(5) 在附录里面包含了对VM的详细注释。读者能够更简单地弄清楚VM的实现过程,对VM系统的运行机制更加得心应手。
(6) 在剖析2.4内核的基础上还分析2.6内核中VM的新特性。紧跟世界Linux内核发展进度。
本书内容涵盖物理内存、页表管理、进程地址空间、引导内存分配器、物理页面分配、非连续内存分配、Slab分配器、高端内存管理、页面帧回收、交换管理、共享内存虚拟文件系统等部分。
本书的翻译工作主要由白洛、李俊奎、刘森林完成。参与少量翻译工作的还有黄静、张申、贺虎、查志勇、吕志华、夏玉、倪晓雷、vbar、newface、hs_guanqi。黄忠霖教授完成了本书的审校工作。
翻译过程中,我的家人、朋友和同学给了我莫大的支持和鼓励。感谢我的家人、朋友和同学。感谢黄忠霖教授的谆谆指导和辛勤工作。感谢LinuxCN的热心网友们。感谢所有关心和热爱Linux的人们。
由于本人才疏学浅,翻译中不免有少量错误和遗漏,望各位读者批评指正。共同学习,共同进步。
本书读者主要针对高等院校师生、研究机构科研人员、Linux内核开发人员、应用开发人员及系统管理人员,以及任何对VM或内核子系统运行机制感兴趣的爱好者。
不要错过这本书,你会发现它有多神奇。
白洛
华中科大喻家山前言
Linux在国内的普及还不成熟,而关于内核方面的中文资料却又都偏向大而全,细节部分描述得相当不够。这些书籍往往由于篇幅问题而仅仅选择性地讲解内核源代码,不少读者无法真正吃透内核的实际实现方式,存在看不下去或不能理解等问题。还有的书籍代码注释较为粗略,省去了很多内核实现细节,初、中级水平的读者阅读起来也有困难。而另有一部分内核书籍由于时代久远,很多系统调用方面,特别是与硬件相关的代码使读者产生不少疑问,对于中、高级内核开发人员以及在较新内核版本下进行开发的人员就略显不足了。
一次较为偶然的机会我在网络上发现这一至宝,在它还是草稿版的时候就得到LinuxCN网站的关注。但由于种种原因一直没有和大家见面。后来痛定思痛,觉得这样一本好书不能为中国众多Linux爱好者学习实为可惜,终于克服种种困难翻译该书完整正式版,希望能给大家带来一定的帮助。
在众多Linux内核分析的书籍中,本书的特点非常鲜明:
(1) 本书问世以前,基本上没有一套关于Linux 虚拟内存(Virtual Memory,VM)的完整文档。文档的匮乏直接导致VM只能被很少一部分内核开发人员所完全理解。极少或根本没有任何信息对这种实现的理论基础进行描述。
(2) 本书试图弥补内存管理理论和在Linux中具体实现之间的差距,并且将两个部分结合起来,是当今最能够充分理解Linux VM的运行机制以及将理论和实现联系在一起的书籍。本书不是以讲述理论为目标,而是先讲述理论,再结合Linux的实现深入剖析其细节。
(3) 本书以相对独立于硬件的角度阐述Linux VM。
(4) 函数调用图和系统架构图一目了然,思路清晰。读者可以快速地掌握系统总体架构。
(5) 在附录里面包含了对VM的详细注释。读者能够更简单地弄清楚VM的实现过程,对VM系统的运行机制更加得心应手。
(6) 在剖析2.4内核的基础上还分析2.6内核中VM的新特性。紧跟世界Linux内核发展进度。
本书内容涵盖物理内存、页表管理、进程地址空间、引导内存分配器、物理页面分配、非连续内存分配、Slab分配器、高端内存管理、页面帧回收、交换管理、共享内存虚拟文件系统等部分。
本书的翻译工作主要由白洛、李俊奎、刘森林完成。参与少量翻译工作的还有黄静、张申、贺虎、查志勇、吕志华、夏玉、倪晓雷、vbar、newface、hs_guanqi。黄忠霖教授完成了本书的审校工作。
翻译过程中,我的家人、朋友和同学给了我莫大的支持和鼓励。感谢我的家人、朋友和同学。感谢黄忠霖教授的谆谆指导和辛勤工作。感谢LinuxCN的热心网友们。感谢所有关心和热爱Linux的人们。
由于本人才疏学浅,翻译中不免有少量错误和遗漏,望各位读者批评指正。共同学习,共同进步。
本书读者主要针对高等院校师生、研究机构科研人员、Linux内核开发人员、应用开发人员及系统管理人员,以及任何对VM或内核子系统运行机制感兴趣的爱好者。
不要错过这本书,你会发现它有多神奇。
白洛
华中科大喻家山前言
前言回到顶部↑
Linux的发展侧重于实践而非纸上谈兵。当建议在已有的应用当中使用一种新算法或变更时,人们通常要求编码与理论一致。虚拟内存系统中使用的许多算法都是由理论学家提出的,但实现它们的方法基本上已经和原来的理论相脱离。狭义上,Linux确实遵循了传统意义上从设计到实现的开发周期,但是随着系统在真实世界中的运转而进行的变更以及开发者直觉性的决定是很普遍的事情。
这意味着VM在实践中表现良好。然而,除了少量网站上未完成的部分框架和这些网站上早期的草稿以外,基本上没有一套完好无缺的VM文档。文档的匮乏直接导致VM只能被很少一部分内核开发人员所完全理解。新的开发人员在了解VM的运行机制时总是被告之去阅读源码。极少或根本没有任何信息对这种实现的理论基础进行描述。这就导致一个只想了解概要的人不得不投入大量的时间阅读源码和学习内存管理。
这本书讲述了Linux内核2.4.22下VM的实现细节,同时给出了内核2.6下VM变更情况的简介。在讨论实现的同时,也会详细介绍Linux VM的理论基础。这本书并不是为成为一本内存管理的书而设计的,而是为了在了解理论基础的情况下,理解VM为什么要以如此独特而简单的方式实现。
为完善讲述内容,在附录里面包含了对VM中重要部分的代码注释。这极大减少了开发者或研究人员在理解Linux VM的工作方式时所需投入的时间,这是因为即使Linux的版本不同,其VM也是按照类似的代码组织方式实现的。也就是说,只要我们深入理解内核2.4的VM,其后的2.5开发版以及2.6的最终发布版中的VM,我们也能在几周之内掌握清楚。
针对的读者
任何对VM以及内核子系统的运行机制感兴趣的读者,在本书中都将找到满意的答案。比起其他的子系统,VM对操作系统的整体性能具有重要的影响。VM也是Linux中最难理解、文档最糟糕的一个子系统,部分原因就在于其相关文档资料的欠缺。如果事先对整个VM没有一个清晰的概念模型,要想分离出并理解VM的代码相当困难。本书就是为了给那些即将阅读源码的读者一个细节性的描述。
本书对那些需要改进VM以满足自身需要的开发人员和需要降低理解VM难度的读者来说非常有益。同时,对于需要与VM打交道的子系统开发人员以及想清晰理解现代操作系统内存管理实现方式的研究人员来说,也是获益匪浅。甚至是对一些只想更多了解该子系统的其他人员而言,他们无需阅读源码就能轻易地了解VM中涵盖所有细节的函数功能。
尽管如此,读者在翻阅本书之前,至少应当阅读一本有关通用操作系统方面,或是介绍通用Linux内核的书,并且掌握C语言的一般知识。尽管作者竭尽全力以使本书通俗易懂,但前提是读者必须提前了解通用操作系统的相关知识。
本书概要
在第1章,详细介绍如何分析、浏览以及管理源代码。本书介绍了3种工具,其中的主要工具是Linux交叉引用器(LXR),我们可以使用它来以网页或CodeViz的形式阅读源码,其中CodeViz是在研究本书的同时为产生调用图而开发的。最后一个工具就是PatchSet,它用来管理内核和应用程序补丁。手工使用补丁比较耗时,而且使用诸如CVS(并发版本控制系统)(http://www.cvshome.org/)或者BitKeeper(http://www.bitmover.com)等类似的版本控制软件也不是一个好的选择。通过PatchSet,一个简单的规范文件就解决了使用哪些源码、哪些补丁以及内核如何配置等问题。
在其后的几个章节,我们将详细讨论Linux中VM实现的各个部分,比如,如何以与体系结构无关的方式描述内存,处理器怎样管理内存以及具体的分配器如何分配内存等问题。每一章都涉及描述Linux行为的源码,以及实现过程中用到的函数和调用图,以使读者对代码的组织结构有清晰的认识。每章均以“哪些新特性”作为最后一节结束,用于介绍VM在2.6版本内核中的新特性。
附录包含了VM中大部分代码的注释,对其中一些比较复杂的部分也进行了逐句解释。即使是在两个不同的内核发布版本间,VM的风格也是基本一致的,因而深入理解内核2.4中的VM对于理解即将发布的内核26具有重要意义。
2.6中有哪些新特性
在编写本书时,2.6.0test4已经发布,因而2.6.0的最终版本将指日可待。幸好2.6中的VM与2.4比较起来,大部分都相似。但是2.6中依然有些新的方法和概念,忽略它们是非常可惜的。因此本书在“2.6中有哪些新特性”这一节中将分别介绍。从一定程度上表述,阅读这些章节的前提是你已经阅读了本书的其他几个部分,因而如果你是第一次阅读本书,可以仅浏览这些章节。“2.6中有哪些新特性”中的内容对于理解2.5和2.6的VM代码具有很强的辅助作用。这些节基于2.6.0test4的内核版本,在26正式版本发布前,不会有太大的改变。但是,它们依然容易发生改动,所以可以将这些节的内容看作指导方针,却不能当成既定的事实。
附带光盘
原版书附带有一张光盘读者可以登录www.buaapress.com.cn的下载中心,下载原版书中光盘的内容。
强烈推荐使用光盘以方便读者更加熟悉本书,尤其是对于想通过本书获得长足进步或者需要查看附录中代码注释的读者。推荐在GNU/Linux系统中使用CD,但并不要求。
原版书中的内容以HTML、PDF以及文本方式存放在光盘中,以方便读者进行基本的文本查询,尤其是在目录中没有读者需要的信息时。如果你所阅读的是原版书的第1版,根据打印截止期,你会发现光盘版和打印版有少许细微差别。
光盘几乎包含了研究本书材料过程中使用到的所有工具。其中每个工具都可以安装在任何一个装有GNU/Linux的系统中。光盘同时也包含了有用的文档和项目主站的参考信息,以方便读者日后的更新。
对于大多数GNU/Linux系统,我们可以从光盘直接运行Web服务器。该服务器已经经过RedHat7.3和Debian Woody的测试,但是也应当可以在任意的发行版上面测试通过http://localhost:10080网址提供了许多有用的特性:
这意味着VM在实践中表现良好。然而,除了少量网站上未完成的部分框架和这些网站上早期的草稿以外,基本上没有一套完好无缺的VM文档。文档的匮乏直接导致VM只能被很少一部分内核开发人员所完全理解。新的开发人员在了解VM的运行机制时总是被告之去阅读源码。极少或根本没有任何信息对这种实现的理论基础进行描述。这就导致一个只想了解概要的人不得不投入大量的时间阅读源码和学习内存管理。
这本书讲述了Linux内核2.4.22下VM的实现细节,同时给出了内核2.6下VM变更情况的简介。在讨论实现的同时,也会详细介绍Linux VM的理论基础。这本书并不是为成为一本内存管理的书而设计的,而是为了在了解理论基础的情况下,理解VM为什么要以如此独特而简单的方式实现。
为完善讲述内容,在附录里面包含了对VM中重要部分的代码注释。这极大减少了开发者或研究人员在理解Linux VM的工作方式时所需投入的时间,这是因为即使Linux的版本不同,其VM也是按照类似的代码组织方式实现的。也就是说,只要我们深入理解内核2.4的VM,其后的2.5开发版以及2.6的最终发布版中的VM,我们也能在几周之内掌握清楚。
针对的读者
任何对VM以及内核子系统的运行机制感兴趣的读者,在本书中都将找到满意的答案。比起其他的子系统,VM对操作系统的整体性能具有重要的影响。VM也是Linux中最难理解、文档最糟糕的一个子系统,部分原因就在于其相关文档资料的欠缺。如果事先对整个VM没有一个清晰的概念模型,要想分离出并理解VM的代码相当困难。本书就是为了给那些即将阅读源码的读者一个细节性的描述。
本书对那些需要改进VM以满足自身需要的开发人员和需要降低理解VM难度的读者来说非常有益。同时,对于需要与VM打交道的子系统开发人员以及想清晰理解现代操作系统内存管理实现方式的研究人员来说,也是获益匪浅。甚至是对一些只想更多了解该子系统的其他人员而言,他们无需阅读源码就能轻易地了解VM中涵盖所有细节的函数功能。
尽管如此,读者在翻阅本书之前,至少应当阅读一本有关通用操作系统方面,或是介绍通用Linux内核的书,并且掌握C语言的一般知识。尽管作者竭尽全力以使本书通俗易懂,但前提是读者必须提前了解通用操作系统的相关知识。
本书概要
在第1章,详细介绍如何分析、浏览以及管理源代码。本书介绍了3种工具,其中的主要工具是Linux交叉引用器(LXR),我们可以使用它来以网页或CodeViz的形式阅读源码,其中CodeViz是在研究本书的同时为产生调用图而开发的。最后一个工具就是PatchSet,它用来管理内核和应用程序补丁。手工使用补丁比较耗时,而且使用诸如CVS(并发版本控制系统)(http://www.cvshome.org/)或者BitKeeper(http://www.bitmover.com)等类似的版本控制软件也不是一个好的选择。通过PatchSet,一个简单的规范文件就解决了使用哪些源码、哪些补丁以及内核如何配置等问题。
在其后的几个章节,我们将详细讨论Linux中VM实现的各个部分,比如,如何以与体系结构无关的方式描述内存,处理器怎样管理内存以及具体的分配器如何分配内存等问题。每一章都涉及描述Linux行为的源码,以及实现过程中用到的函数和调用图,以使读者对代码的组织结构有清晰的认识。每章均以“哪些新特性”作为最后一节结束,用于介绍VM在2.6版本内核中的新特性。
附录包含了VM中大部分代码的注释,对其中一些比较复杂的部分也进行了逐句解释。即使是在两个不同的内核发布版本间,VM的风格也是基本一致的,因而深入理解内核2.4中的VM对于理解即将发布的内核26具有重要意义。
2.6中有哪些新特性
在编写本书时,2.6.0test4已经发布,因而2.6.0的最终版本将指日可待。幸好2.6中的VM与2.4比较起来,大部分都相似。但是2.6中依然有些新的方法和概念,忽略它们是非常可惜的。因此本书在“2.6中有哪些新特性”这一节中将分别介绍。从一定程度上表述,阅读这些章节的前提是你已经阅读了本书的其他几个部分,因而如果你是第一次阅读本书,可以仅浏览这些章节。“2.6中有哪些新特性”中的内容对于理解2.5和2.6的VM代码具有很强的辅助作用。这些节基于2.6.0test4的内核版本,在26正式版本发布前,不会有太大的改变。但是,它们依然容易发生改动,所以可以将这些节的内容看作指导方针,却不能当成既定的事实。
附带光盘
原版书附带有一张光盘读者可以登录www.buaapress.com.cn的下载中心,下载原版书中光盘的内容。
强烈推荐使用光盘以方便读者更加熟悉本书,尤其是对于想通过本书获得长足进步或者需要查看附录中代码注释的读者。推荐在GNU/Linux系统中使用CD,但并不要求。
原版书中的内容以HTML、PDF以及文本方式存放在光盘中,以方便读者进行基本的文本查询,尤其是在目录中没有读者需要的信息时。如果你所阅读的是原版书的第1版,根据打印截止期,你会发现光盘版和打印版有少许细微差别。
光盘几乎包含了研究本书材料过程中使用到的所有工具。其中每个工具都可以安装在任何一个装有GNU/Linux的系统中。光盘同时也包含了有用的文档和项目主站的参考信息,以方便读者日后的更新。
对于大多数GNU/Linux系统,我们可以从光盘直接运行Web服务器。该服务器已经经过RedHat7.3和Debian Woody的测试,但是也应当可以在任意的发行版上面测试通过http://localhost:10080网址提供了许多有用的特性:


点击看大图






加载中...

