linux内核0.11完全注释(赵炯)
内容简介 本书对 早期操作系统内核全部代码文件进行了详细全面的注释和说明,旨在使读者能够在尽量短的时间 内对的工作机理获得全面而深刻的理解,为进一步学习和研究 系统打下坚实的基础。虽然所选择的版本较低, 但该内核已能够正常编译运行,其中已经包括了 工作原理的精髓,通过阋读其源代码能快速地完全理解内核的运作 机制。书中首先以源代码版本的变迁历史为主线,许细介绍了系统的发展历史,着重说明了各个内核版本之间 的重要区别和改进方面,给出了选择 版作为研究的对象的原因。另外介绍了内核源代码的组织结构及相互关系 同时还说明了编译和运行该版本内核的方法。然后本书依据内核源代码的组织结构对所有内核程序和文件进行了注释和详细 说明。每章的安排基本上分为具体研究对象的概述、每个文件的功能介绍、代码内注释、代码中难点及相关资料介绍、与 前版本的主要区别等部分。最后一章内容总结性地介绍了继续研究系统的方法和着手点。 版权说明 作者保留本电子书籍的修改和正式出版的所有权利读者可以自由传播本书全部和部分章节的內容但需要注明出处由 于目前本书澂为草稿阶段因此存在许多错误和不足之处希望读者能踊跃给予批评指正或建议可以通过电子邮件给我发信 或直接来信至上海同济大学机槭电子工程研究所上海四平路号邮编 赵炯版权所有 “ RTFSC- Read the e*冰 king Source Code因!” Linus benedict torvalds 目录 目录 序言 文件 程序 木书的主要标 程序 现有书籍不足之处 程序 阅读早期内核的其它好处 程序 阅读完整源代码的重要性和必要性 程序 如何选择要阅读的内核代码版本 程序 阅读本书需具备的基础知识 程序 使用早期版本是否过时? 程序 文件系统与 文件系统 程序 第章概述 程序 程序 的诞生和发展 程序 内容综述 本章小结 本章小结 第章块设备驱动程序 第章 内核体系结构 概述 内核模式 总体功能 内核系统休系结构 文件 屮新机制 文件 系统定时 程序 进程控制 程序 内核对内存的使用方法 程序 系统中堆栈的使用方法 栏序 内核源代码的目录结构 内核系统与用户程序的关系 第章字符设备驱动程序 文件 概述 木章小结 总体功能描述 第章引导启动程序( 文件 程序 概述 程序 总休功能 程序 程序 程序 程序 程序 程序 程序 本章小结 第章数学协处理器 第章初始化程序 概述 概述 文件 程序 程序 环境初始化工作 本章小结 第章文件系统 第章内核代码 概述 总体功能描述 概述 文件 总体功能措述 目录 程序 文件 程序 文件 程序 文件 程序 文件 程序 文件 程序 日录中的文件 程序 文件 程序 文件 程序 文件 程序 文件 程序 文件 程序 程序 第章库文件 程序 概述 程序 文件 程序 程序 程序 程序 程序 第章内存管理 程序 概述 程序 总体功能描述 程序 文件 程序 程序 程序 程序 程序 第章头文件 程序 程序 概述 程序 日录下的文件 文件 第章建造工具 文件 概述 文件 程序 文件 第章实验环境设置与使用方法 文件 文件 概述 文件 仿真系统 文件 创建磁盘泱象文件 文件 访问磁盘映象文件中的信息 文件 制作根文件系统 文件 在 系统上编译内核 文件 在 系统下编译 内核 文件 利用 调试内核 目录下的文件 参考文献 文件 文件 附录 文件 附录内核主要常数 文件 附录内核数据结构 目录下的文件 附录 保护运行模式 文件 附录 码表 头文件 文件 索引 文件 文件 序言 序 木书是一木有关操作系统内核基木工作原理的入门读物 本书的主要目标 本书的主要目标是使用尽量少的篇幅或在有限的篇幅内,对完整的内核源代码进行解剖,以 期对操作系统的基本功能和实际实现方式获得全方位的理解。做到对内核有一个亢整而深刻的理 解,对操作系统的基木工作原理真正理解和入门。 本书读者群的定位是一些知晓系统的一般使用方法或具有一定的编程基础,但比较缺乏阅读 目前最新内核源代码的基础知识,又急切希望能够进一步理解类操作系统内核工作原理和实际代 码实现的爱好者。这部分读者的水平应该界于初级与中级水平之间。目前,这部分读者人数在 爱 好者中所占的比例是很高的,而面向这部分读者以比较易懂和有效的手段讲解内核的书籍资料不多 现有书籍不足之处 目前已冇的描述内核的籍,均尽量选用最新内核版本〔例如 仗用的 稳定版等)进行描述,但由于目前内核整个源代码的大小已经非常待大(例如 版只有 万行代码!),因此这些书籍仅能对 內核源代码进行选择性地或原珒性地说明,许多系统实现细节 被忽略。因此并不能给予读者对实际内核有清晰而完整的理解。 著的一书《内核源代码分析》(陆丽娜等译)基本上是面对中级水平的读 者,需要较为全面的基础知识才能完全理解。而且可能是由于篇幅所限,该书并没有对所有 内核 代码进行注释,略去了很多内核实现细节,例如其中内核中使用的各个头文件、生成内核代码映象 文件的工具程序、各个文件的作用和实现等均没有涉及。因此对于处于初中级水平之间的读者来 说阅读该书有些困难。 浙江大学出版的 内核源代码情景分析》一书,也基本有这些不足之处。甚至对于一些具有 较高系统应用水平的计算机本科高年级学生,由于该书篇幅问题以及仅仅选择性地讲解内核源代 码,也不能真正吃透内核的实际实现方式,因而往往刚廾始阅读就放弃了。这在木人教学的学生中基木 都会出现这个问题。该书刚面市时,本人曾极丿劝说学生购之阅读,并在二个月后调查阅读学习情况, 基本都存在看不下去或不能理解等问题,大多数人都放弃了。 著的《莱昂氏 源代码分析》一书虽然是一本学习 类操作系统内核源代码很 好的书籍,但是由于其采用的是 版,其中系统调用等部分代码是用早已过时的 系列机 的汇编语言编制的,因此在阅读与硬件部分相关的溟代码时就会遇到较大的困难。 的书《操作系统:设计与实现》是一本有关操作系统内核实现很好的入门书籍,但 该书所叙述的 系统是一种基于消息传递的内核实现机制,与内核的实现有所区别。因此在 学习该书之后,并不能很呗利地即刻着手进一步学习较新的内核源代码实现。 在使用这些书籍进行学习时会有一种“盲人摸象”的感觉,不能真正理解核系统具体实现 的整体概念,尤其是对那些统初学者或刚学会如何使用统的人在使用那些书学习内核 序言 原理时,内核的整体运作结构并不能清晰地在脑海中形成。这在本人多年的内核学习过程中也深 有体会。在年月份 的创始人 在开发出 版后写的一篇文章中也 提到了同样的问题。在这篇题为“ 的文章中,他说:“开发是为了 那些操作系统爱好者和计算机科学系的学生使用、学习和娱乐。自由软件基金会的 系统如 果丌发出来就已经显得太庞大而不适合学习和理解。而现今的系统要比的系统更为 庞大和复杂,因此同样也已经不适合作为操作系统初学者的入门学习起点。这也是写作本书的动机之 为了填补这个空缺,本书的主要目标是使用尽量少的篇幅或在有限的篇幅内,对完整的 内核 源代码进行全面解剖,以期对操作系统的基木功能和实际实现方式获得仝方位的珄解。做到对 内 核有一个完整而深刻的理解,对操作系统的基工作原理真正理解和入门。 阅读早期内核的其它好处 目前,已经出现不少基于早期内核而开发的专门用于嵌入式系统的内核版本,如的 操作系统、 等(在 上有专门目录),世界上也有许多人认识到通过早期 内核 源代码学习的好处,目前国内也已经有人正在组织人丿注释岀版类似本文的书籍。因此,通过阅读 早期内核版本的源代码,的确是学习 系统的一种行之有效的途径,并且对研究和应用 嵌入 式系统也有很大的帮助。 在对早期内核源代码的注释过程中,作者发现,早期内核源代码几乎就是目前所使用的较新内核的 个精简版木。其中凵经包括了目前新版木中儿乎所有的基木功能原理的内容。正如《系统软件:系统 编程导论》一书的作者 在介绍系统程序以及操作系统设计时,引入了一种极其简化的简 单指令计算机系统来说明所有系统程序的设计和实现原理,从而既避免了实际计算机系统的复杂 性,又能透彻地说明问题。这里选择的早期内核版本作为学习对象,其指导思想与 的一致 这对内核学习的入门者来说,是最理想的选择之一。能够在尽可能短的时间内深入理解 核的基木工作原理。 对于那些已经比较熟悉内核工作原理的人,为了能让自己在实际工作中对系统的实际运转机制不产 生一种空中楼阁的感觉,因此也有必要阅读内核源代码 当然,使用早期内核作为学习的对象也有不足之处。所选用的早期内核版本不包含对虚拟文 件系统的支持、对网终系统的支持、仅支持执行文件和对其它一些现有内核中复杂子系统的 说明。但由于本书是作为内核⊥作机理实现的入门教材,因此这也止是选择早期内核版本的优点 之一。通过学习本书,可以为进一步学习这些高级内容打下扎实的基础 阅读完整源代码的重要性和必要性 正如系统的创始人在一篇新闻组投稿上所说的,要理解一个软件系统的真正运行机制,一定 要阅读其源代码( )。系统本身是一个完整的整体,具有很多看似 不重要的细节存在,但是若忽略这些细节,就会对整个系统的理解带来困难,并且不能真正了解一个实 际系统的实现方法和手段。 虽然通过阅读一些操作系统原理经典书籍(例如 的《操作系统设计》)能够对 类操作系统的工作原理有一些理论上的指导作用,但实际上对操作系统的真正组成和内部关系实现的理 解仍不是很清晰。正如所说的,“许多操作系统教材都是重理论而轻实践”,“多数书籍和课程为调 度算法耗费大量的时间和篇幅而完全忽略,其实,前者通常不足一贞代码,而后者往往要占到整个 系统三分之一的代码总量。”內核中大量的重要细节均未提到。因此并不能让读者理解一个真正的操作系 统实现的奥妙所在。只有在详细阅读过完整的内核源代码之后,才会对系统有一种豁然廾朗的感觉,对 序言 整个系统的运作过程有深刻的理解。以后再选择最新的或较新内核源代码进行学习时,也不会碰到大问 题,基本上都能顺利地理解新代码的内容 如何选择要阅读的内核代码版本 那么,如何选择既能达到上述要求,又不被太多的内容而搞乱头脑,选择一个适合的内核版 本进行学习,提髙学习的效率呢?作者通过对大量内核版本进行比较和选择后,最终选择了与口前 内核基本功能较为相近,又非常短小的版内核作为入门学习的最佳版本。下图是对一些主要 内核版本行数的统计。 10000000 1000000 100000 10000 1000 目前的内核源代码量都在几百万行的数量上,极其庞大,对这些版本进行完全注释和说明几 乎是不可能的,而版内核不超过力行代码量,因此完全可以在一木书中解释和注释清楚。麻雀虽 小,五脏俱全 另外,使用该版本可以避免使用现有较新内核版本中已经变得越来越复杂得各了系统部分的研宄(如 虚拟文件系统 或文件系统、网终子系统、新的复杂的内存管理机制等) 阅读本书需具备的基础知识 在阋读本书时,作者希望读者具有以下一些基础知识或有相关的参考书籍在手边。其一是有关 处理器结构和编程的知识或资料。例如可以从网上下载的 编程手册( ):其二是有关使件体系结构和接口编程的知识或资料。有关这方面的资料很多; 其三还应具备初级使用系统的简单技能。 另外,由于 系统内核实现,最早是根据 的《操作系统设计》书的基本原理 序言 开发的,源代码中许多变量或函数的名称都来自该书,因此在阅读本书时,若能适当参考该书,更易于 对源代码的理解。 在最初廾发操作系统时,参照了 操作系统。例如,最初的核版木完全 照搬了 文件系统。因此,在阅读本书时, 的书《操作系统:设计与实现》也 具有较大的参考价值。但 的书描述的是和基于消息传递在内核各模块之间进行通信(信息 交换),这与 内核的工作机制个一样。因此可以仅参考其中有关一般操作系统工作原理章节和文件 系统实现的内容 使用早期版本是否过时? 表面看米本书对早期内核版本注释的内容犹如操作系统刚公布时 就认为其 已经过时的( )想法一样,但通过学习本书内容,你就会发现,利用本书学习 核,由于内核源代码量短小而精干,因此会有极高的学习敚率,能够做到事半功倍,快速入门。并且对 继续进一步选择新内核部分源代码的学习打卜坚实的基础。在学习完木书之后,你将对系统的运作原 有一个非常完整而实际的概念,这种完整概念能仗人很容易地进一步选择和学习新内核源代码中的任何 部分,而不需要再去啃读代码量巨大的新内核中完整的源代码。 文件系统与 文件系统 目前系统上所使用的(或最新的)文件系统,是在内核之后开发的文件系统 其功能详尽并且其性能也非常完整和稳固,是日前操作系统上默认的标准文件系统。但是,作为 操作系统亢整工作原理入门学习所使用的部分,原则上是越精简越好。为了达到对一个操作系 统有完整的理解,并且能不被其中各」系统中的复杂性和过多的细节喧宾夺主,在选择学习剖析用的内 核版时,只要系统的部分代码内容能说明实际工作原珥,就越简单越好。 内核版上当时仅包含最为简单的 文件系统,对于理解一个操作系统中文件系 统的实际组成和工作原理己经足够。这也是选择 早期内核版本进行学习的主要原因之一。 在完整阅读完本书之后,相信您定会发出这样的感叹:“对于内核系统,我现在终于入门了!”。 此时,您应该有|分的把握去进一步学习最新内核中各部分的工作原理和过程了。 同济大学 赵炯博上
暂无评论