关闭

关闭

关闭

封号提示

内容

首页 [Linux内核0.11完全注释].clk011c-1_1__1_.9.5.pdf

[Linux内核0.11完全注释].clk011c-1_1__1_.9.5.pdf

[Linux内核0.11完全注释].clk011c-1_1__…

上传者: lhxcc 2011-09-19 评分 0 0 0 0 0 0 暂无简介 简介 举报

简介:本文档为《[Linux内核0.11完全注释].clk011c-1_1__1_.9.5pdf》,可适用于IT/计算机领域,主题内容包含Linux内核完全注释内核版本()赵 炯著wwwoldlinuxorg修正版VgohighshnetLinux内核完全注释AHeavilyComme符等。

Linux内核完全注释内核版本()赵 炯著wwwoldlinuxorg修正版VgohighshnetLinux内核完全注释AHeavilyCommentedLinuxKernelSourceCodeLinuxVersion修正版(Revision)赵炯ZhaoJionggohighshnetwwwplinuxorgwwwoldlinuxorg内容简介本书对Linux早期操作系统内核(v)全部代码文件进行了详细全面的注释和说明旨在使读者能够在尽量短的时间内对Linux的工作机理获得全面而深刻的理解为进一步学习和研究Linux系统打下坚实的基础。虽然所选择的版本较低但该内核已能够正常编译运行其中已经包括了LINUX工作原理的精髓通过阅读其源代码能快速地完全理解内核的运作机制。书中首先以Linux源代码版本的变迁历史为主线详细介绍了Linux系统的发展历史着重说明了各个内核版本之间的重要区别和改进方面给出了选择()版作为研究的对象的原因。另外介绍了内核源代码的组织结构及相互关系同时还说明了编译和运行该版本内核的方法。然后本书依据内核源代码的组织结构对所有内核程序和文件进行了注释和详细说明。每章的安排基本上分为具体研究对象的概述、每个文件的功能介绍、代码内注释、代码中难点及相关资料介绍、与当前版本的主要区别等部分。最后一章内容总结性地介绍了继续研究Linux系统的方法和着手点。版权说明作者保留本电子书籍的修改和正式出版的所有权利读者可以自由传播本书全部和部分章节的内容,但需要注明出处由于目前本书尚为草稿阶段,因此存在许多错误和不足之处,希望读者能踊跃给予批评指正或建议可以通过电子邮件给我发信息:gohighshnet,或直接来信至:上海同济大学机械电子工程研究所(上海四平路号,邮编:),,byZhaoJiong,,赵炯版权所有“RTFSC–ReadTheF**kingSourceCode!”–LinusBenedictTorvalds目录I目录序言本书的主要目标现有书籍不足之处阅读早期内核的其它好处阅读完整源代码的重要性和必要性如何选择要阅读的内核代码版本阅读本书需具备的基础知识使用早期版本是否过时?EXT文件系统与MINIX文件系统第章概述LINUX的诞生和发展内容综述本章小结第章LINUX内核体系结构LINUX内核模式LINUX内核系统体系结构中断机制系统定时LINUX进程控制LINUX内核对内存的使用方法LINUX系统中堆栈的使用方法LINUX内核源代码的目录结构内核系统与用户程序的关系LINUXMAKEFILE文件本章小结第章引导启动程序(BOOT)概述总体功能BOOTSECTS程序SETUPS程序HEADS程序本章小结第章初始化程序(INIT)概述MAINC程序环境初始化工作本章小结第章内核代码(KERNEL)概述总体功能描述MAKEFILE文件ASMS程序TRAPSC程序SYSTEMCALLS程序MKTIMEC程序SCHEDC程序SIGNALC程序EXITC程序FORKC程序SYSC程序VSPRINTFC程序PRINTKC程序PANICC程序本章小结第章块设备驱动程序(BLOCKDRIVER)概述总体功能MAKEFILE文件BLKH文件HDC程序LLRWBLKC程序RAMDISKC程序FLOPPYC程序第章字符设备驱动程序(CHARDRIVER)概述总体功能描述MAKEFILE文件KEYBOARDS程序CONSOLEC程序SERIALC程序RSIOS程序TTYIOC程序TTYIOCTLC程序第章数学协处理器(MATH)概述MAKEFILE文件MATHEMULATIONC程序第章文件系统(FS)概述总体功能描述MAKEFILE文件目录IIBUFFERC程序BITMAPC程序INODEC程序SUPERC程序NAMEIC程序FILETABLEC程序BLOCKDEVC程序FILEDEVC程序PIPEC程序CHARDEVC程序READWRITEC程序TRUNCATEC程序OPENC程序EXECC程序STATC程序FCNTLC程序IOCTLC程序第章内存管理(MM)概述总体功能描述MAKEFILE文件MEMORYC程序PAGES程序第章头文件(INCLUDE)概述INCLUDE目录下的文件AOUTH文件CONSTH文件CTYPEH文件ERRNOH文件FCNTLH文件SIGNALH文件STDARGH文件STDDEFH文件STRINGH文件TERMIOSH文件TIMEH文件UNISTDH文件UTIMEH文件INCLUDEASM目录下的文件IOH文件MEMORYH文件SEGMENTH文件SYSTEMH文件INCLUDELINUX目录下的文件CONFIGH文件FDREGH头文件FSH文件HDREGH文件HEADH文件KERNELH文件MMH文件SCHEDH文件SYSH文件TTYH文件INCLUDESYS目录中的文件STATH文件TIMESH文件TYPESH文件UTSNAMEH文件WAITH文件第章库文件(LIB)概述MAKEFILE文件EXITC程序CLOSEC程序CTYPEC程序DUPC程序ERRNOC程序EXECVEC程序MALLOCC程序OPENC程序SETSIDC程序STRINGC程序WAITC程序WRITEC程序第章建造工具(TOOLS)概述BUILDC程序第章实验环境设置与使用方法概述BOCHS仿真系统创建磁盘映象文件访问磁盘映象文件中的信息制作根文件系统在LINUX系统上编译内核在REDHAT系统下编译LINUX内核利用BOCHS调试内核参考文献附录附录内核主要常数附录内核数据结构附录X保护运行模式附录ASCII码表索引序言序言本书是一本有关Linux操作系统内核基本工作原理的入门读物。本书的主要目标本书的主要目标是使用尽量少的篇幅或在有限的篇幅内对完整的Linux内核源代码进行解剖以期对操作系统的基本功能和实际实现方式获得全方位的理解。做到对linux内核有一个完整而深刻的理解对linux操作系统的基本工作原理真正理解和入门。本书读者群的定位是一些知晓Linux系统的一般使用方法或具有一定的编程基础但比较缺乏阅读目前最新内核源代码的基础知识又急切希望能够进一步理解UNIX类操作系统内核工作原理和实际代码实现的爱好者。这部分读者的水平应该界于初级与中级水平之间。目前这部分读者人数在Linux爱好者中所占的比例是很高的而面向这部分读者以比较易懂和有效的手段讲解内核的书籍资料不多。现有书籍不足之处目前已有的描述Linux内核的书籍均尽量选用最新Linux内核版本(例如Redhat使用的稳定版等)进行描述但由于目前Linux内核整个源代码的大小已经非常得大(例如版具有万行代码!)因此这些书籍仅能对Linux内核源代码进行选择性地或原理性地说明许多系统实现细节被忽略。因此并不能给予读者对实际Linux内核有清晰而完整的理解。ScottMaxwell著的一书《Linux内核源代码分析》(陆丽娜等译)基本上是面对Linux中级水平的读者需要较为全面的基础知识才能完全理解。而且可能是由于篇幅所限该书并没有对所有Linux内核代码进行注释略去了很多内核实现细节例如其中内核中使用的各个头文件(*h)、生成内核代码映象文件的工具程序、各个make文件的作用和实现等均没有涉及。因此对于处于初中级水平之间的读者来说阅读该书有些困难。浙江大学出版的《Linux内核源代码情景分析》一书也基本有这些不足之处。甚至对于一些具有较高Linux系统应用水平的计算机本科高年级学生由于该书篇幅问题以及仅仅选择性地讲解内核源代码也不能真正吃透内核的实际实现方式因而往往刚开始阅读就放弃了。这在本人教学的学生中基本都会出现这个问题。该书刚面市时本人曾极力劝说学生购之阅读并在二个月后调查阅读学习情况基本都存在看不下去或不能理解等问题大多数人都放弃了。JohnLions著的《莱昂氏UNIX源代码分析》一书虽然是一本学习UNIX类操作系统内核源代码很好的书籍但是由于其采用的是UNIXV版其中系统调用等部分代码是用早已过时的PDP系列机的汇编语言编制的因此在阅读与硬件部分相关的源代码时就会遇到较大的困难。ASTanenbaum的书《操作系统:设计与实现》是一本有关操作系统内核实现很好的入门书籍但该书所叙述的MINIX系统是一种基于消息传递的内核实现机制与Linux内核的实现有所区别。因此在学习该书之后并不能很顺利地即刻着手进一步学习较新的Linux内核源代码实现。在使用这些书籍进行学习时会有一种“盲人摸象”的感觉不能真正理解Linux内核系统具体实现的整体概念尤其是对那些Linux系统初学者或刚学会如何使用Linux系统的人在使用那些书学习内核序言原理时内核的整体运作结构并不能清晰地在脑海中形成。这在本人多年的Linux内核学习过程中也深有体会。在年月份Linux的创始人LinusToravlds在开发出Linux版后写的一篇文章中也提到了同样的问题。在这篇题为“LINUXafreeunixkernel”的文章中他说:“开发Linux是为了那些操作系统爱好者和计算机科学系的学生使用、学习和娱乐。自由软件基金会的GNUHurd系统如果开发出来就已经显得太庞大而不适合学习和理解。”而现今的Linux系统要比GNU的Hurd系统更为庞大和复杂因此同样也已经不适合作为操作系统初学者的入门学习起点。这也是写作本书的动机之一。为了填补这个空缺本书的主要目标是使用尽量少的篇幅或在有限的篇幅内对完整的Linux内核源代码进行全面解剖以期对操作系统的基本功能和实际实现方式获得全方位的理解。做到对Linux内核有一个完整而深刻的理解对Linux操作系统的基本工作原理真正理解和入门。阅读早期内核的其它好处目前已经出现不少基于Linux早期内核而开发的专门用于嵌入式系统的内核版本如DJJ的x操作系统、Uclinux等(在wwwlinuxorg上有专门目录)世界上也有许多人认识到通过早期Linux内核源代码学习的好处目前国内也已经有人正在组织人力注释出版类似本文的书籍。因此通过阅读Linux早期内核版本的源代码的确是学习Linux系统的一种行之有效的途径并且对研究和应用Linux嵌入式系统也有很大的帮助。在对早期内核源代码的注释过程中作者发现早期内核源代码几乎就是目前所使用的较新内核的一个精简版本。其中已经包括了目前新版本中几乎所有的基本功能原理的内容。正如《系统软件:系统编程导论》一书的作者LelandLBeck在介绍系统程序以及操作系统设计时引入了一种极其简化的简单指令计算机(SIC)系统来说明所有系统程序的设计和实现原理从而既避免了实际计算机系统的复杂性又能透彻地说明问题。这里选择Linux的早期内核版本作为学习对象其指导思想与Leland的一致。这对Linux内核学习的入门者来说是最理想的选择之一。能够在尽可能短的时间内深入理解Linux内核的基本工作原理。对于那些已经比较熟悉内核工作原理的人为了能让自己在实际工作中对系统的实际运转机制不产生一种空中楼阁的感觉因此也有必要阅读内核源代码。当然使用早期内核作为学习的对象也有不足之处。所选用的Linux早期内核版本不包含对虚拟文件系统VFS的支持、对网络系统的支持、仅支持aout执行文件和对其它一些现有内核中复杂子系统的说明。但由于本书是作为Linux内核工作机理实现的入门教材因此这也正是选择早期内核版本的优点之一。通过学习本书可以为进一步学习这些高级内容打下扎实的基础。阅读完整源代码的重要性和必要性正如Linux系统的创始人在一篇新闻组投稿上所说的要理解一个软件系统的真正运行机制一定要阅读其源代码(RTFSC–ReadTheFuckingSourceCode)。系统本身是一个完整的整体具有很多看似不重要的细节存在但是若忽略这些细节就会对整个系统的理解带来困难并且不能真正了解一个实际系统的实现方法和手段。虽然通过阅读一些操作系统原理经典书籍(例如MJBach的《UNIX操作系统设计》)能够对UNIX类操作系统的工作原理有一些理论上的指导作用但实际上对操作系统的真正组成和内部关系实现的理解仍不是很清晰。正如AST所说的“许多操作系统教材都是重理论而轻实践”“多数书籍和课程为调度算法耗费大量的时间和篇幅而完全忽略IO其实前者通常不足一页代码而后者往往要占到整个系统三分之一的代码总量。”内核中大量的重要细节均未提到。因此并不能让读者理解一个真正的操作系统实现的奥妙所在。只有在详细阅读过完整的内核源代码之后才会对系统有一种豁然开朗的感觉对序言整个系统的运作过程有深刻的理解。以后再选择最新的或较新内核源代码进行学习时也不会碰到大问题基本上都能顺利地理解新代码的内容。如何选择要阅读的内核代码版本那么如何选择既能达到上述要求又不被太多的内容而搞乱头脑选择一个适合的Linux内核版本进行学习提高学习的效率呢?作者通过对大量内核版本进行比较和选择后最终选择了与目前Linux内核基本功能较为相近又非常短小的版内核作为入门学习的最佳版本。下图是对一些主要Linux内核版本行数的统计。VVVVVaVVVVVVVV目前的Linux内核源代码量都在几百万行的数量上极其庞大对这些版本进行完全注释和说明几乎是不可能的而版内核不超过万行代码量因此完全可以在一本书中解释和注释清楚。麻雀虽小五脏俱全。另外使用该版本可以避免使用现有较新内核版本中已经变得越来越复杂得各子系统部分的研究(如虚拟文件系统VFS、ext或ext文件系统、网络子系统、新的复杂的内存管理机制等)。阅读本书需具备的基础知识在阅读本书时作者希望读者具有以下一些基础知识或有相关的参考书籍在手边。其一是有关x处理器结构和编程的知识或资料。例如可以从网上下载的x编程手册(INTELProgrammer'sReferenceManual)其二是有关x硬件体系结构和接口编程的知识或资料。有关这方面的资料很多其三还应具备初级使用Linux系统的简单技能。另外由于Linux系统内核实现最早是根据MJBach的《UNIX操作系统设计》一书的基本原理序言开发的源代码中许多变量或函数的名称都来自该书因此在阅读本书时若能适当参考该书更易于对源代码的理解。Linus在最初开发Linux操作系统时参照了MINIX操作系统。例如最初的Linux内核版本完全照搬了MINIX文件系统。因此在阅读本书时ASTanenbaum的书《操作系统:设计与实现》也具有较大的参考价值。但Tanenbaum的书描述的是一种基于消息传递在内核各模块之间进行通信(信息交换)这与Linux内核的工作机制不一样。因此可以仅参考其中有关一般操作系统工作原理章节和文件系统实现的内容。使用早期版本是否过时?表面看来本书对Linux早期内核版本注释的内容犹如Linux操作系统刚公布时Tanenbaum就认为其已经过时的(Linuxisobsolete)想法一样但通过学习本书内容你就会发现利用本书学习Linux内核由于内核源代码量短小而精干因此会有极高的学习效率能够做到事半功倍快速入门。并且对继续进一步选择新内核部分源代码的学习打下坚实的基础。在学习完本书之后你将对系统的运作原理有一个非常完整而实际的概念这种完整概念能使人很容易地进一步选择和学习新内核源代码中的任何部分而不需要再去啃读代码量巨大的新内核中完整的源代码。Ext文件系统与MINIX文件系统目前Linux系统上所使用的Ext(或最新的Ext)文件系统是在内核x之后开发的文件系统其功能详尽并且其性能也非常完整和稳固是目前Linux操作系统上默认的标准文件系统。但是作为对Linux操作系统完整工作原理入门学习所使用的部分原则上是越精简越好。为了达到对一个操作系统有完整的理解并且能不被其中各子系统中的复杂性和过多的细节喧宾夺主在选择学习剖析用的内核版本时只要系统的部分代码内容能说明实际工作原理就越简单越好。Linux内核版上当时仅包含最为简单的MINIX文件系统对于理解一个操作系统中文件系统的实际组成和工作原理已经足够。这也是选择Linux早期内核版本进行学习的主要原因之一。在完整阅读完本书之后相信您定会发出这样的感叹:“对于Linux内核系统我现在终于入门了!”。此时您应该有十分的把握去进一步学习最新Linux内核中各部分的工作原理和过程了。同济大学赵炯博士Linux的诞生和发展第章概述本章首先回顾了Linux操作系统的诞生、开发和成长过程由此可以理解本书为什么会选择Linux系统早期版本作为学习对象的一些原因。然后具体说明了选择早期Linux内核版本进行学习的优点和不足之处以及如何开始进一步的学习。最后对各章的内容进行了简要介绍。Linux的诞生和发展Linux操作系统是UNIX操作系统的一种克隆系统。它诞生于年的月日(这是第一次正式向外公布的时间)。此后借助于Internet网络经过全世界各地计算机爱好者的共同努力现已成为当今世界上使用最多的一种UNIX类操作系统并且使用人数还在迅猛增长。Linux操作系统的诞生、发展和成长过程依赖于以下五个重要支柱:UNIX操作系统、MINIX操作系统、GNU计划、POSIX标准和Internet网络。下面根据这五个基本线索来追寻一下Linux的开发历程、它的酝酿过程以及最初的发展经历。首先分别介绍其中的四个基本要素然后根据Linux的创始人LinusToravlds从对计算机感兴趣而自学计算机知识、到心里开始酝酿编制一个自己的操作系统、到最初Linux内核版公布以及从此如何艰难地一步一个脚印地在全世界hacker的帮助下最后推出比较完善的版本这段时间的发展经过也即对Linux的早期发展历史进行详细介绍。当然目前Linux内核版本已经开发到了版。而大多数Linux系统中所用到的内核是稳定的版内核(其中第个数字若是奇数则表示是正在开发的版本不能保证系统的稳定性)。对于Linux的一般发展史许多文章和书籍都有介绍这里就不重复。UNIX操作系统的诞生Linux操作系统是UNIX操作系统的一个克隆版本。UNIX操作系统是美国贝尔实验室的KenThompson和DennisRitchie于年夏在DECPDP小型计算机上开发的一个分时操作系统。KenThompson为了能在闲置不用的PDP计算机上运行他非常喜欢的星际旅行(Spacetravel)游戏于是在年夏天乘他夫人回家乡加利福尼亚渡假期间在一个月内开发出了UNIX操作系统的原型。当时使用的是BCPL语言(基本

用户评论(0)

0/200

精彩专题

上传我的资料

每篇奖励 +2积分

资料评价:

/49
仅支持在线阅读

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部