资料下载网
首页 计算机 考试教辅
Linux_内核完全注释_赵炯 pdf电子书免费下载,百度云
首页 > 计算机 > 计算机网络/服务器 > Linux_内核完全注释_赵炯 pdf电子书免费下载,百度云

《Linux_内核完全注释_赵炯》pdf电子书免费下载


下载方式一:

百度网盘下载地址:https://pan.baidu.com/s/1s42AE-49VrjvLAg-KhUx5g
百度网盘密码:1111

下载方式二:

http://ziliaoshare.cn/Download/ad_123566_pd_Linux_NHWQZS_ZJ.zip

 


Linux_内核完全注释_赵炯

作者:empty

页数:652

出版社:empty

《Linux_内核完全注释_赵炯》介绍

内容简介

本书对Linux早期操作系统内核(v 0.11) 个部代码文件进行了详绢全面的注释和说明, 斤在使读者能够在尽量炮的时间作者保留木电子书籍的修改和正式出版的所有权利读者可以自由传据木书全部和部分章节的内容,但需要注明出处由“RTF SC-Read The F**king SourceCode@!”

内对Linux的工作机理获得全面而深剑的理解, 为进一步学习和研究Linux系统打下坚实的基础。虽然所选择的版木较低,但该内核已能够正常编译运行, 其中已经包括了LINUX工作原理的精髓, 通过阅读其源代码能快速地完全理解内核的运作机制。书中首先以Linux源代码版本的变迁历史为主线, 详细介绍了Linux系统的发展历史, 着重说明了各个内核版本之间的重要区别和改进方面,给出了选择0.11(0.95)版作为研究的对象的原因。另外介绍了内核源代码的组织结构及相互关系,同时还说明了编译和运行该版本内核的方法.然后本书依据内核源代码的组织结构对所有内核程序和文件进行了注释和详细说明。每章的安井基本土分为具体研究对象的概述、每个文件的功能介纲、代码内注释、代码中难点及相关资料介绍,与当前版木的土要区别等部分。最后一章内容总结性地介绍了继续研究Linux系统的方法和若于点。版权说明

序言

本书是本有关Linux操作系统内核基本工作原理的入门读物。本书的主要目标

本书的主要目标是使用尽量少的篇韬或在有限的篇幅内, 对完整的Linux内核源代码进行解剖, 以期对操作系统的基本功能和实际实现方式获得全方位的理解。做到对linux内核有一个完整而深刻的理解, 对linux操作系统的基本工作原理真正理解和入门。本书读者群的定位是一些知晓Linux系统的一般使用方法或具有一定的编程基础, 但比较缺乏阅读日前最新内核源代码的基础知识, 又急切希望能够进一步理解UNIX类操作系统内核工作原理和实际代码实现的爱好者。这部分读者的水平应该界于初级与中级水平之间。目前, 这部分读者人数在Linux爱好者中所占的比例是很高的,面面向这部分读者以比较易懂和有效的手段讲解内核的书籍资料不多。现有书籍不足之处

稳定版等) 进行描述, 但由于目前Linux内核整个源代码的大小已经非常得大(例如2.2.20版具有268万行代码D, 因此这些书铭仅能对Linux内核源代码进行选择性地或原理性地说明, 许多系统实现细节月前已有的描述Linux内核的书籍, 均尽量选用最新Linux内核版本(例如Redhat 7.0使用的2.2.16被忽略。因此并不能给予读者对实际Linux内核有清晰而完精的理解,Scott Maxwell著的一书《Linux内核源代码分析》(陆丽娜等译) 基本上是面对Linux中级水平的读者, 需要较为全面的基础知识才能完全理解。而且可能是巾于篇幅所限, 该书井没有对所有Linux内核代码进行注释,略去了很多内核实现细节,例如其中内核中使用的各个头文件(*h)、生成内核代码映象文件的工具程序、各个make文件的作用和实现等均没有涉及。因此对于处于初中级水平之间的读者来说阅读该书有些困难。

浙江大学出版的《Linux内核源代码情景分析》一书, 也基木有这些不足之处。甚至对于一些具有较高Linux系统应用水平的计算机本科高年级学生, 巾丁该书篇幅问题以及仅仅选择性地讲解内核源代码,也不能真正吃透内核的实际实现方式,因而往往刚开始阅读就放弃了,这在本人教学的学生中基本都会出现这个问题.该书刚面市时,本人曾极力劝说学生购之阅读,并在二个月后调查阅读学习情况,基本都存在看不下去或不能理解等问题,大多数人都放弃了。

John Lions著的《菜昂氏UNIX源代码分析》一书虽然是一本学习UNIX类操作系统内核源代码很好的书籍, 但是巾于其采用的是UNIX V 6版, 其中系统调用等部分代码是用早已过时的PDP-11系列机的编语言编制的,因此在阅读与硬件部分相关的源代码时就会遇到较大的困难。该书所叙述的MINIX系统是一种基于消息传递的内核实现机制, 与Linux内核的实现有所区别。因此在学习该书之后, 并不能很顺利地即刻着手进一步学习较新的Linux内核源代码实现.

A.S.Tanenbaum的书《操作系统:设计与实现》是一本有关操作系统内核实现很好的入门书籍, 但在使用这些书籍进行学习时会有一种“育人摸象”的感觉, 不能真正理解Linux内核系统具体实现的整体概念, 尤其是对那些Linux系统初学者或刚学会如何使用Linux系统的人在使用那些书学习内核原理时, 内核的整体运作结构并不能清晰地在脑海中形成。这在本人多年的Linux内核学习过程中也深有体会。在1991年10月份, Linux的创始人Linus To rav lds在开发出Linux 0.03版后写的一篇文章中也提到了同样的问题, 在这篇题为“LINUX--a frec unix-386 kernel”的文章中, 他说:“开发Linux是为了那些操作系统爱好者和计算机科学系的学生使用、学习和娱乐。...自由软件基金会的GNU Hurd系统如果开发出来就已经显得太庞大面不适合学习和理解, “而现今的Linux系统要比GNU的Hurd系统更为庞大和复杂,因此同样也已经不适合作为操作系统初学者的入门学习起点。这也是写作本书的动机之一。为了填补这个空缺, 本书的主要目标是使用尽量少的篇幅或在有限的篇幅内, 对完整的Linux内核源代码进行全面解剖, 以期对操作系统的基本功能和实际实现方式获得全方位的理解。做到对Linux内核有一个完整而深刻的理解, 对Linux操作系统的基木工作原理真正理解和入门。阅读早期内核的其它好处

操作系统、Ue linux等(在www.inux.org上有专门目录) , 世界上也有许多人认识到通过早期Linux内核源代码学习的好处, 目前国内也已经有人正在组织人力注释出版类似本文的书籍。因此, 通过阅读Linux日前, 已经出现不少基于Linux早期内核而开发的专门用于嵌入式系统的内核版本, 如DJJ的x 86早期内核版本的源代码, 的确是学习Linux系统的一种行之有效的途径, 并且对研究和应用Linux嵌入式系统也有很大的助,

在对早期内核源代码的注释过程中,作者发现,早期内核源代码几乎就是目前所使用的较新内核的一个精简版本,其中已经包括了目前新版本中几乎所有的基本功能原理的内容,正如《系统软件:系统编程导论》一书的作者Leland L Beck在介绍系统程序以及操作系统设计时, 引入了一种极其简化的简单指令计算机(SIC) 系统来说明所有系统程序的设计和实现原理, 从而既避免了实际计算机系统的复杂性, 又能透彻地说明问题。这里选择Linux的早期内核版木作为学习对象, 其指导思想与Leland的一致。这对Linux内核学习的入门者来说, 是最理想的选择之一。能够在尽可能短的时间内深入理解Linux内核的基本工作原理,

对于那些已经比较熟悉内核工作原理的人,为了能让自己在实际工作中对系统的实际运转机制不产生种空中楼阁的感觉,因此也有必要阅读内核源代码,件系统VFS的支持、对网络系统的支持、仅支持a.out执行文件和对其它一些现有内核中复杂子系统的说明, 但由于本书是作为Linux内核工作机理实现的入门教材, 因此这也正是选择早期内核版本的优点之一,通过学习本书,可以为进一步学习这些高级内容打下扎实的基础。当然, 使用早期内核作为学习的对象也有不足之处。所选用的Linux早期内核版木不包含对虚拟文阅读完整源代码的重要性和必要性正如Linux系统的创始人在一篇新闻投稿上所说的, 要理解一个软件系统的真正运行机制, 一定要阅读其源代码(RTF SC-Read The Fucking SourceCode) 。系统本身是一个完整的整体, 具有很多看似不重要的细节存在,但是若忽略这些细节,就会对整个系统的理解带来困难,并且不能真正了解一个实际系统的实现方法和手段。虽然通过阅读些操作系统原理经典书籍(例如MJ.Bach的《UNIX操作系统设计》) 能够对UNIX类操作系统的工作原理有一些理论上的指导作用,但实际上对操作系统的真正组成和内部关系实现的理解仍不是很清晰。正如AST所说的, “许多操作系统教材都是重理论而轻实践 , “多数书籍和课程为调度算法耗费大量的时间和篇幅而完全忽略I/O,其实,前者通常不足一页代码,而后者往往要占到整个系统三分之一的代码总量。“内核中大量的重要细节均未提到。因此并不能让读者理解一个真正的操作系统实现的奥妙所在,只有在详细阅读过完整的内核源代码之后,才会对系统有种然开朗的感觉,对

整个系统的运作过程有深刻的理解。以后再选择最新的或较新内核源代码进行学习时,也不会碰到大问题,基本上都能顺利地理解新代码的内容.如何选择要阅读的内核代码版本那么, 如何选择既能达到上述要求, 又不被太多的内容而搞乱头脑, 选择一个适合的Linux内核版木进行学习, 提高学习的效率呢?作者通过对大量内核版本进行比较和选择后, 最终选择了与目前Linux内核基本功能较为相近, 又非常短小的0.11版内核作为入门学习的最佳版本, 下图是对一些主要Linux内核版本行数的统计。在阅读木书时,作者希望读者具有以下一些基础知识或有相关的参考书籍在手边。其一是有关80x86另外, 由于Linux系统内核实现, 最早是根据M.J.Bach的《UNIX操作系统设计》一书的基本原理日前Linux系统上所使用的Ext 2(或最新的Ext 3) 文件系统, 是在内核1.x之后开发的文件系统,在完整阅读完本书之后, 相信您定会发出这样的感叹:“对于Linux内核系统, 我现在终于入门了!”

目前的Linux内核源代码量都在几百万行的数量上, 极其庞大, 对这些版本进行完全注释和说明几乎是不可能的,而0.11版内核不超过2万行代码量,因此完全可以在一本书中解释和注释清楚。麻雀虽小,五脏俱全,另外,使用该版本可以避免使用现有较新内核版本中已经变得越来越复杂得各子系统部分的研究(如虚拟文件系统VFS、ext 2或ext 3文件系统、网络子系统、新的复杂的内存管理机制等) .阅读本书需具备的基础知识处理器结构和编程的知识或资料, 例如可以从网上下载的80x 86编程手册(INTEL 80386 Programmer'sReference Manual) :其二是有关80x 86硬件体系结构和接口编程的知识或资料, 有关这方面的资料很多:其三还应具备初级使用Linux系统的简单技能。开发的,源代码中许多变量或函数的名称都来自该书,因此在阅读本书时,若能适当参考该书,更易于对源代码的理解。Linus在最初开发Linux操作系统时, 参照了MINIX操作系统。例如, 最初的Linux内核版本完全照搬了MINIX 1.0文件系统。因此, 在阅读本书时, A.S.Tanenbaum的书《操作系统:设计与实现》也具有较大的参考价值。但Tanenbaum的书描述的是一种基丁消息传递在内核各模块之间进行通信(信息交换) , 这与Linux内核的工作机制不样, 因此可以仅参考其中有关般操作系统工作原理章节和文件系统实现的内容。

使用早期版本是否过时?

表面看米本书对Linux早期内核版本注释的内容犹如Linux操作系统刚公布时Tanenbaum就认为其已经过时的(Linux is obsolete) 想法一样, 但通过学习木书内容, 你就会发现, 利用本书学习Linux内核,由丁内核源代码量短小而精干,因此会有极高的学习效率,能够做到事半功倍,快速入门井且对继续进步选择新内核部分源代码的学习打下坚实的基础。在学习完本书之后,你将对系统的运作原理有一个非常完整而实际的概念,这种完整概念能使人很容易地进一步选择和学习新内核源代码中的任何部分,而不需要再去啃读代码量巨大的新内核中完整的源代码。Ext 2文件系统与MINIX文件系统其功能详尽并片其性能也非常完整和稳固, 是目前Linux操作系统上默认的标准文件系统、但是, 作为对Linux操作系统完整工作原理入门学习所使用的部分, 原则上是越精简越好。为了达到对一个操作系统有完整的理解,并且能不被其中各子系统中的复杂性和过多的细节喧宾夺生,在选择学习剖析用的内核版木时,只要系统的部分代码内容能说明实际工作原理,就越简单越好。Linux内核0.11版上当时仅包含最为简单的MINIX 1.0文件系统, 对丁理解一个操作系统中文件系统的实际组成和工作原理己经足够。这也是选择Linux早期内核版本进行学习的主要原因之一.此时, 您应该有十分的把握去进一步学习最新Linux内核中各部分的工作原理和过程了,同济大学赵炯博士

第1章概述

1.1Linx的诞生和发展

本章首先回顾了Linux操作系统的题生、开发和成长过程, 由此可以理解本书为什么会选择LinuxAST虽出生在美国纽约, 但却是荷兰侨民(1914年他的祖来到美国) 。他在纽约上的中学、M.IT对于Linux系统, 他后来曾表示对其开发者Linus的称赞.但他认为Linux的发展很人原因是巾于作为一个操作系统, MINIX并不是优秀者, 但它同时提供了用C语言和汇编语言编写的系统源代码。GNU计划和自由软件基金会FSF(the Free Software Foundation) 是由Richard M.Stallman丁1984年一1985年, IEEE操作系统技术委员会标准小组委员会(T COS-SS) 开始在ANSI的支持下责成IEEEPOSIX.1仅规定了系统服务应用程序编程接口(APD, 仅概括了基本的系统服务标准。因此工作组在90年代初, POSIX标准的制定正处在最后投票敲定的时候, 那是1991-1993年间.此时正是Linux系统早期版本作为学习对象的些原因。然后具体说明了选择早期Linux内核版本进行学习的优点和不足之处以及如何开始进一步的学习。最后对各章的内容进行了简要介绍。

1.1 Linux的诞生和发展

Linux操作系统是UNIX操作系统的一种克隆系统。它诞生于1991年的10刀5日(这是第一次正式向外公布的时间) , 此后借助于Internet网络, 经过全世界各地计算机爱好者的共同努力, 现已成为当今世界上使用最多的一种UNIX类操作系统, 并且使用人数还在迅猛增长,Linux操作系统的诞生、发展和成长过程依赖于以下五个重要支柱:UNIX操作系统、MINIX操作系统、GNU计划、POSIX标准和Inte met网络, 下面根据这五个基本线索来追寻一下Linux的开发历程、它的酝酿过程以及最初的发展经历。首先分别介绍其中的四个基本要素, 然后根据Linux的创始人LinusTo rav lds从对计算机感兴趣而白学计算机知识、到心里开始酝麗编制一个自己的操作系统、到最初Linux内核0.01版公布以及从此如何艰难地一步一个脚印地在全世界hacker的帮助下最后推出比较完善的1.0版本这段时间的发展经过, 也即对Linux的早期发展历史进行详细介绍。当然, 目前Linux内核版本已经开发到了2.5.52版。而大多数Linux系统中所用到的内核是稳定的2.4.20版内核(其中第2个数字若是奇数则表示是正在开发的版本, 不能保证系统的稳定性) 。对于Linux的一般发展史,许多文章和书籍都有介绍,这里就不重复。

1.1.1UNIX操作系统的诞生

Linux操作系统是UNIX操作系统的一个克隆版本。UNIX操作系统是美国贝尔实验室的Ken Thompson和Dennis Ritchie于1969年夏在DEC PDP-7小型计算机上开发的一个分时操作系统。Ken Thompson为了能在闲置不用的PDP-7计算机上运行他非常喜欢的星际旅行(Space travel) 游戏, 于是在1969年夏天乘他大人回家乡加利福尼亚渡假期间, 在一个月内开发出了UNIX操作系统的原型。当时使用的是BCPL语言(基本组合编程语言) , 后经Dennis Ritchie于1972年用移植性很强的C语言进行了改写, 使得UNIX系统在大专院校得到了推广。

1.1.2MINIX操作系统

MINIX系统是AndrewS.Tanenbaum(AST) 开发的, AST是在荷兰Amsterdam的Vrije大学数学与计算机科学系统工作, 是ACM和IEEE的资深会员(全世界也只有很少人是两会的资深会员) .共发表了100多篇文章,5本计算机书籍上的大学、加洲大学Berkeley分校念的博士学位。出于读博士后的缘故, 他来到了家乡荷兰。从此就与家乡一直有来往。后来就在Vrije大学开始教书、带研究生, 荷兰首都Amsterdam是个常年阴雨绵绵的城市, 但对于AST来说, 这最好不过了, 因为在这样的环境下他就可以经常待在家中摆弄他的计算机了.MINIX是他1987年编制的, 主要用于学生学习操作系统原理。到1991年时版本是1.5.目前主要有两个版本在使用:1.5版和2.0版。当时该操作系统在大学使用是免费的,但其它用途则不是,当然日前MINIX系统已经是免费的, 可以从许多FTP上下载,他为了保持MINIX的小型化, 能让学生在一个学期内就能学完, 因而没有接纳全世界许多人对MINIX的扩展要求。因此在这样的前提下激发了Linus编写Linux系统。当然Linus也正好抓住了这个好时机。这是第一次使得有抱负的程序员或hacker能够阅读操作系统的源代码, 在当时, 这种源代码是软件商们一直小心守护着的秘密.

1.1.3GNU计划

于创办的, 旨在开发个类似UNIX并H是自由软件的完整操作系统:GNU系统(GNU是 GNU's NotUnix 的递归缩写, 它的发音为 guh-NEW ) 。各种使用Linux作为核心的GNU操作系统正在被广泛的使用。虽然这些系统通常被称作“Linux , 但是Stallman认为, 严格地说, 它们应该被称为GNU/Linux系统。到上世纪90年代初, GNU项目已经开发出许多高质量的免费软件, 其中包括有名的emacs编辑系统、bash shell程序、gee系列编译程序、gdb调试程序等等.这些软件为Linux操作系统的开发创造了·个合适的环境。这是Linux能够诞生的基础之一, 以至于目前许多人都将Linux操作系统称为“GNU/Linux“操作系统。

1.1.4POSIX标准

POSIX(Portable OperatingSystem Interface for Computing Systems) 是由IEEE和ISO/IEC开发的簇标准。该标准是基于现有的UNIX实践和经验, 描述了操作系统的调用服务接口, 用于保证编制的应用程序可以在源代码一级上在多种操作系统上移植和运行, 它是在1980年早期一个UNIX用户组(usr/group) 的早期工作基础上取得的.该UNIX用户组原来试图将AT&T的System V操作系统和BerkeleyCSR G的BSD操作系统的调用接口之间的区别重新调和集成。并丁1984年定制出了/usr/group标准。标准委员会制定有关程序源代码可移植性操作系统服务接口正式标准, 到了1986年4月, IEEE制定出了试用标准。第一个正式标准是在1988年9月份批准的(IEEE 1003.1-1988) , 也既以后经常提到的POSIX.1标准。到1989年, POSIX的工作被转移系ISO/IEC社团, 井由15工作组续将其制定成ISO标准, 到1990年, POSIX.1与已经通过的C语言标准联合, 正式批准为IEEE 1003.1-1990(也是ANSI标准) 和ISO/IEC9945-1:1990标准。期望对系统的其它功能也制定出标准, 这样IEEE POSIX的工作就开始展开了, 刚开始有十个批准的计划在进行, 有近300多人参加每季度为期一周的会议。着手的工作有命令与工具标准(POSIX.2) 、测试方法标准(POSIX 3) 、实时API(POSIX.4) 等。到了1990年上半年已经有25个计划在进行, 并且有16个工作组参与了进来。与此同时, 还有一些组织也在制定类似的标准, 如X/Open, AT&T, OSF等刚刚起步的时候, 这个UNIX标准为Linux提供了极为重要的信息, 使得Linux能够在标准的指导下进行开发, 并能够与绝大多数UNIX操作系统兼容, 在最初的Linux内核源代码中(0.01版、0.11版) 就已经为Linux系统与POSIX标准的兼容做好了准备工作。在Linux 0.01版内核的include/uni std.h文件中就已经定义了儿个有关POSX I标准要求的符号常数, 而且Linus在注释中己写道:“OK, 这也许是个玩笑,但我正在着手研究它呢”.

1.1 Linux的诞生和发展

1.1Linx的生和发展

1991年7月3日在comp.os.minix上发布的post上就已经提到了正在搜集POSIX的资料。其中透露了他正在着手一个操作系统的开发, 并且在开发之初已经想到要实现与POSIX相兼容的问题了。

1.1.5 Linux操作系统的诞生

在1981年, IBM公司推出了享誉全球的微型计算机IBM PC在1981-1991年间, MS-DOS操作系统一直是微型计算机操作系统的主宰,此时计算机硬件价格虽然逐年下降,但软件价格仍然居高不下,当时Apple的MACs操作系统可以说是性能最好的, 但是其天价使得没人能够轻易靠近。当时的另一个计算机技术阵营就是UNIX世界, 但是UNIX操作系统就不仅是价格昂贵的问题了,为了寻求高利润率, UNIX经销商们把价格拾得极高, PC小用户根木不能靠近它.曾经一度收到Bell Labs许可而能在大学中用丁教学的UNIX源代码也一直被小心地守卫着不许公开, 对丁广大的PC用户, 软件行业的大型供应商们始终没有给出有效的解决这个问题的于段,正在此时, 出现了MINIX操作系统, 并且有一本描述其设计实现原理的书同时发行.由于AST的这本书写的非常详细,并且叙述得有条有理,于是几乎全世界的计算机爱好者都开始看这本书,以期能理解操作系统的工作原理。其中也包括Linux系统的创始者Linus Bene diet Torvalds.的计算机hacker。这个21岁的芬兰年轻人喜欢鼓他的计算机, 测试计算机的性能和限制, 但当吋他所缺乏的就是一个专业级的操作系统。

当时(1991年) , Linus Benedict Torvalds是赫尔辛基大学计算机科学系的一年级学生, 也是一个自学在同一年间, GNU计划己经开发出了许多工具软件。其中最受期盼的GNU C编译器已经出现, 但还没有开发出免费的GNU操作系统。即使是教学使用的MINIX操作系统也开始有了版权, 需要购买才能得到源代码, 虽然GNU的操作系统HURD一直在开发之中, 但在当时看来不能在儿年内完成。为了能更好地学习计算机知识(或许也只是为了兴触@) , Linus使用圣诞节的压岁钱和贷款购买了一台386兼容电脑, 并从美国邮购了一套MINIX系统软件。就在等待MINIX软件期间, Linus认真学习了有关Intel 80386的硬件知识。为了能通过Modem拨号连接到学校的主机上, 他使用汇编语言并利用80386CPU的多任务特性编制出一个终端仿真程序。此后为了将自己一台老式电脑上的软件复制到新电脑上,他还为软盘驱动器、键盘等硬件设备编制出相应的驱动程序。通过编程实践, 并在学习过程中认识到MINIX系统的诸多限制(MINIX虽然很好, 但只是一个用于教学目的简单操作系统, 而不是一个强有力的实用操作系统) , 而且通过上述实践Linus已经有了一些类似于操作系统硬件设备驱动程序的代码, 于是他开始有了编制一个新操作系统的想法。此时GNU计划已经开发出许多工具软件, 其中最受期盼的GNU C编译器已经出现.虽然GNU的免费操作系统HURD正在开发中。但Linus已经等不急了。

开始, 他的目的很简单, 只是为了学习Intel 386体系结构保护模式运行方式下的编程技术。但后来Linux的发展却完全改变了初衷。根据Linus在comp.os.tin ix新闻组上发布的清息, 我们可以知道他逐步从学从1991年4月份起,他通过修改终端仿真程序和硬件驱动程序,开始编制起自己的操作系统来刚习MINIX系统阶段发展到开发自己的Linux系统的过程.Linus第1次向comp.os.minix投递消息是在1991年3月29日.所发帖子的题日是“gcc on minix-386doesn't optimize , 是有关gec编译器在MINIX-386系统上运行优化的问题(MINIX-386是个出BruceEvans改进的利用Intel 386特性的32位MINIX系统) 。什此可知.Linus在1991年初期就已经开始深入研究了MINIX系统, 并在这段时间有了改进MINIX操作系统的思想, 在进一步学习MINIX系统之后这个想法逐步演变成想重新设计一个基于Intel 80386体系结构的新操作系统的构思.F**ing SourceCode:-) ”) .他认为答案就在源程序中。这也说明了对于学习系统软件来说, 我们不光需要他在回答有人提出MINIX上的一个问题时, 所说的第一句话就是“阅读源代码”(“RTF SC(Read the懂得系统的工作基本原理,还需要结合实际系统,学习实际系统的实现方法。因为理论毕竟是理论,其中省略了许多枝节,而这些枝节问题虽然没有太多的理论含量,但却是一个系统必要的组成部分,就象麻雀身上的一根羽毛。

从1991年4月份开始, Linus几乎花费了全部时间研究MINIX-386系统(Hacking the kerne) , 并H尝试着移植GNU的软件到该系统上(GNU gcc、bash、gdb等) .并于4月13日在comp.os.minix上发布说白己已经成功地将bash移植到了MINIX上, 而且己经爱不释手、不能高开这个shell软件了,第一个与Linux有关的消息是在1991年7月3口在comp.os.minix上发布的(当然, 那时还不存在Linux这个名称, 当时Linus脑子里想的名称可能是FREAX@, FREAX的英文含义是怪诞的、怪物、异想大开等) 。其中透露了他正在进行Linux系统的开发, 并且已经想到要实现与POSIX兼容的问题了,在Linus另一个发布的消息中(1991年8月25日comp.os.minix) , 他向所有MINIX用广询问“Whatwould you like to see in minix?(“你最想在MINIX系统中见到什么?”) , 在该消息中他首次透露出正在开发一个(免费的) 386(486) 操作系统, 并且说只是兴趣而已, 代码不会很大, 也不会象GNU的那样专业。希望大家反馈一些对丁MINIX系统中喜欢哪些特色不喜欢什么等信息, 并且说明由于实际和其它一些原因, 新开发的系统刚开始与MINIX很象(并使用了MINIX的文件系统) 。并已经成功地将bash(1.08版) 和gcc(1.40版) 移植到了新系统上, 而且在过几个月就可以实用了。最后, Linus申明他开发的操作系统没有使用一行MINIX的源代码:而且由于使用了386的任务切换特性, 所以该操作系统不好移植(没有可移植性) , 并且只能使用AT硬盘。对丁Linux的移植性问题,Linus当时并没有考虑, 但是目前Linux几乎可以运行在任何种硬件体系结构上,到了1991年的10月5日, Linus在comp.os minix新闻组上发布消息, 正式向外宜布Linux内核系统的诞生(Free minix-like kem el sources for 386-AT) 。这段消息可以称为Linux的诞生宜言, 井且一直广为流传.因此10月5口对Linux社区来说是一个特殊的口子, 许多后来Linux的新版木发布时都选择了这个日子, 所以RedHat公司选择这个日子发布它的新系统也不是偶然的。

1.1.6 Linux操作系统版本的变迁

Liu x操作系统从诞生到1.0版正式出现, 共发布了表1-1中所示的一些主要版本。两个进程,分别在屏幕上显示AAA'和'BBB,第一个正式向外公布的Linux内核版本, 多线程文件系统、分段和分页内存管理.该版本以及0.03版是内部版本,目前已经无法找到特点同上,由Ted Tso发布的Linux内核版本。增加了内存分配沂函数、基本可以正常运行的内核版本,至此硬盘和软驱驱动。主要增加了数学协处理器的软件模拟程序,增加了作业控制、虚拟控制台、文件符号链接和虚拟内存对换功能。加入虚拟文件系统支持,增加了登录功能,改善了软盘驱动程序和文件系统的性能。改变了硬盘编号方式。支持CDROM.开始加入网络支持,改善了串行驱动、高速缓冲、内存管理的性能, 支持动态链接库, 并能运行X-Widows程序。增加了对新的SCSI驱动程序的支持。

改善了对TCP/P(.8.1) 网络的支持, 纠正了exts的错说,重新设计进程对内存的使用分配,每个进程有4G线性空间。第一个正式版.

将Linux系统0.13版内核直接改称0.95版, Linus的意思是让大家不要觉得离1.0版还很遥远。同时, 从0.95版开始, 对内核的许多改进之处(补丁程序的提供) 均以其他人为主了, 而Linus的主要任务开始变成对内核的维护和决定是否采用某个补丁程序。到现在为止,最新的内核版本是2003年12月18口公布的2.6.2版.其中包括大约15000个文件,而且使用gz压缩后源代码软件包也有40MB左右!到现在为止,最新版见表1-2所示,

1.1.7 Linux名称的由来

Linux操作系统刚开始时并没有被称作Linux, Linus给他的操作系统取名为FREAX, 其英文含义是怪诞的、怪物、异想天开等意思, 在他将新的操作系统上载到fip.funet.fi服务器上时, 管理员Ari Lemke很不喜欢这个名称, 他认为既然是Linus的操作系统就取其谐音Linux作为该操作系统的目录吧, 于是Linux这个名称就开始流传下来,在Linus的自传Just for Fun》书中, Linus解释说:了。而我为最终发布版准备的是什么名字呢?Freax.实际上, 内核代码中某些早期的Makefile-用于描述如何编译源代码的文件·文件中就已经包含有“Freax“这个名字了, 大约存在了半年左右, 但其实这也没什么关系,在当时还不需要一个名字,因为我还没有向任何人发布过内核代码.”字。他坚持要用现在这个名字(Linux) , 我承认当时我并没有跟他多争论。但这都是他取的名字。所以我可以光明正大地说我并不自负,或者部分坦白地说我并没有本位主义思想。但我想好吧,这也是个好名字,而凡以后为这事我总能说服别人,就象我现在做的这样,”内核版木号

1.2内容综述

“坦白地说, 我从来没有想到过要用Linux这个名称发布这个操作系统, 因为这个名字有些太自负“面Ari Lemke, 他坚持要用自己的方式将内核代码放到ftp站点上, 并且非常不喜欢Freax这个名1.1.8早期Linux系统开发的主要贡献者从Linux早期源代码中可以看出, Linux系统的早期主要开发人员除了Linus本人以外, 最著名的人员之一就是TheodoreT so(Ted Tso) 。他于1990年毕业于MIT计算机科学专业, 在大学时代他就积极参加学校中举办的各种学生活动。他喜欢烹饪、骑自行车, 当然还有就是Hacking on Linux。后来他开始喜欢起业余无线电报运动。日前他在IBM工作从事系统编程及其它重要事务。他还是国际网络设计、操作、销售和研究者开放团体IETF成员。Linux在世界范围内的流行也有他很大的功劳.早在Linux操作系统刚问世时, 他就怀着极大的热情为linux的发展提供了Maillist, 几乎是在Linux刚开始发布时起, 他就一直在为Linux做出贡献。他也是最早向Linux内核添加程序的人《Linux内核0.10版中的虚拟盘驱动程序ramdisk.c和内核内存分配程序kmalloc.c) .直到日前为止他仍然从事着与Linux有关的工作。在北美洲地区他最早设立了Linux的ftp站点(tsx-11mit.edu) , 而且该结点至今仍然为广大Linux用户提供服务。他对Linux作出的最大贡献之一是提出并实现了ext 2文件系统.该文件系统现已成为Linux世界中事实上的文件系统标准。最近他又推出了ext 3文件系统。该系统大大提高了文件系统的稳定性和访问效率, 作为对他的推崇, 第97期(2002年5月) 的Linux Journal期刊将他作为了封面人物, 并对他进行了米访。目前, 他为IBM LinuxLinus Torvalds(Just for fun》第84-88页。技术中心工作, 并从事着有关Linux标准库LSB(Linux Standard Base) 等方而的工作,Linux社区中另一位著名人物足Alan Cox。他原工作于英国威尔士斯西大学(Swansea UniversityCollege) .刚开始他特别喜欢玩电脑游戏, 尤其是MUD(MultiUser Dungeon or Dimension, 多用户网络游戏) , 在90年代早期games.mud新闻组的posts中你可以找到他发表的大量帖子。他甚至为此还写了篇MUD的发展史(rec.games.mud新闻组, 1992年3月9日, A history of MUD) ,由于MUD游戏与网络密切相关, 慢慢地他开始对计算机网络着迷起来。为了玩游戏并提高电脑运行游戏的速度以及网络传输速度,他需要选择一个最为满意的操作平台。于是他开始接触各种类型的操作系统。由于没钱, 即使是MINIX系统他也买不起。当Linux 0.11和386BSD发布时, 他考虑良久总算购置了一台386SX电脑。由于386BSD需要数学协处理器支持, 而采用Intel 386SXCPU的电脑是不带数学协处理器的, 所以他安装了Linux系统, 于是他开始学习带有免费源代码的Linux, 并开始对Linux系统产生了兴趣, 尤其是有关网络方面的实现, 在关于Linux单用户运行模式问题的讨论中, 他甚至赞叹Linux实现得巧妙(beautifully) 。

Linux 0.95版发布之后, 他开始为Linux系统编写补丁程序(修改程序) (记得他最早的两个补丁程序, 都没有被Linus采纳) , 并成为Linux系统上TCP/IP网络代码的最早使用人之一。后来他逐渐加入了Linux的开发队伍, 并成为维护Linux内核源代码的主要负责人之, 也可以说成为Linux社团中继Linus之后最为重要的人物.以后Microsoft公司普经邀请他加盟, 但他却干脆地拒绝了.从2001年开始,他负责维护Linux内核2.4.x的代码。而Linus主要负责开发最新开发版内核的研制(奇数版, 比如2.5.x版).

Linux操作系统的人之(从0.97版) .他还是著名Linux文档计划(Linux Document Project-LDP) 的发起者之一.曾经在Linux Jou mel工作, 现在RedHat公司工作。《内核黑客手册》(The Linux Kernel Hackers Guide) 一书的作者Michael K.Johnson也是最早接触Linux系统并不是仅有这些中坚力量就能发展成今天这个样子的, 还有许多计算机高手对Linux做出了极大的献, 这里就不一一列举了, 主要页献者的其体名单可参见Linux内核中的CREDITS文件,其中以字母顺序列出了对Linux做出较大贡献的近400人的名单列表, 包括他们的email地址和通信地址、主页以及主要贡献事迹等信息。

UNIX操作系统-UNIX丁1969年诞生在Bell实验室。Linux就是UNIX的一种克降系统。UNIX的重要性就不用多说了,MINIX操作系统--MINIX操作系统也是UNIX的一种克隆系统, 它于1987年巾著名计算机教授AndrewS.Tanenbaum开发完成。由于MINIX系统的出现并且提供源代码(只能免费用于大学内) 在全世界的大学中刮起了学习UNIX系统旋风.Linux刚开始就是参照MINIX系统于1991年才开始开发。GNU计划-开发Linux操作系统, 以及Linux上所用大多数软件基本上都自GNU计划, Linux只是操作系统的一个内核, 没有GNU软件环境(比如说bash shell) , 则Linux将寸步难行。POSIX标准-该标准在推动Linux操作系统以后朝着正规路上发展起着重要的作用, 是Linux前进的灯塔,INTERNET--如果没有Intenet网, 没有遍布全世界的无数计算机黑客的无私奉献, 那么Linux最多只能发展到0.13(0.95)版的水平,本文将主要对Linux的早期内核0.11版进行详细描述和注释。Linux-0.11版本是在1991年12月8通过上述说明, 我们可以对上述Linux的五大支柱归纳如下:

目前除了原来的root image.Z文件, 其它四个文件均能找到。不过作者己经利用Internet上的资源为本文主要详细分析linux-0.11内核中的所有源代码程序, 对每个源程序文件都进行了详细注释, 包所有的程序在分析过程中如果遇到作者认为是较难理解的语句时,将给出相关知识的详细介绍。比拿Linux 0.11版内核来“开刀”是为了提高我们认识Linux运行机理的效率。Linux-0.11版整个内核拿Linux 0.11版进行学习也有不足之处。比如该内核版本中尚不包括有关专门的进程等待队列、本文对Linux内核中所有的代码都进行了说明, 为了保持结构的完整性, 对代码的说明是以内核中本书内容可以分为三个部分.第1章至第4章是描述内核引导启动和32位运行方式的准备阶段,作第2章概要地描述了Linux操作系统的体系结构、内核源代码文件放置的组织结构以及每个文件人第3章将详细注释boot/目录卜的三个汇编程序, 其中包括磁盘引导程序boot sect.s、获取BIOS中参第4章主要介绍in i/日录中内核系统的初始化程序main.c。它是内核完成所有初始化工作并进入正第5章主要介绍ken el/目录中的所有程序。其中最重要的部分是进程调度函数schedule() 、sleep_on(第6章对kernel dey_blk/日录中的块设备程序进行了注释说明。该章主要含有硬盘、软盘等块设备第7章对kernel dev_chr/目录中的字符设备驱动程序进行注释说明。这一章中主要涉及串行线路驱第8章介绍kernel/math/目录中的数学协处理器的仿真程序。由于本书所注释的内核版本, 还没有真第9章介绍内核源代码fs/目录中的文件系统程序,在看这章内容时建议你能够暂停一下而去阅读Linux 0.11重新制作出了一个完全可以使用的root image-0.11根文件系统。并重新为其编译出能在0.11环境下使用的gcc 1.40编译器, 配置出可用的实验开发环境。目前, 这些文件均可以从old linux.org网站上下载。

括对Makefile文件的注释。分析过程主要是按照计算机启动过程进行的。因此分析的连贯性到初始化结束内核开始调用shell程序为止。其余的各个程序均针对其自身进行分析, 没有连贯性, 因此可以根据自己的需要进行阅读,但在分析时还是提供了些应用实例。

如, 在阅读代码头一次遇到C语言内嵌汇编码时, 将对GNU C语言的内嵌汇编语言进行较为详细的介绍:在遇到对中断控制器进行输入/输出操作时, 将对Intel中断控制器(8259A) 芯片给日详细的说明,并列出使用的命令和方法。这样做有助于加深对代码的理解,又能更好的了解所用硬件的使用方法,作者认为这种解读方法要比单独列出一章内容来总体介绍硬件或其它知识要效率高得多。源代码只有325K字节左右, 其中包括的内容基本上都是Linux的精髓。面目前最新的2.5.XX版内核非常大,将近有188兆字节,即使你花生的经历来阅读也未必能全部都看完,也许你要问“既然要从简入手, 为什么不分析更小的Linux 0.01版内核源代码呢?它只有240K字节左右”主要原因是因为0.01版的内核代码有太多的不足之处,甚至还没有包括对软盘的驱动程序,也没有很好地涉及数学协处理器的使用以及对登陆程序的说明。并且其引导启动程序的结构也与目前的版本不太一样,而0.11版的引导启动程序结构划与现在的基本上是一样的、另外一个原因是可以找到0.11版早期的已经编译制作好的内核映像文件(boot age) , 可以用来进行引导演示, 如果再配上简单的根文件系统映像文件(root image) .那么它就可以进行正常的运行了

TCP/IP网络等方面的一些当前非常重要的代码, 对内存的分配和使用与现今的内核也有所区别, 但好在Linux中的网络代码基本是自成一体的, 与内核机制关系不是非常大, 因此可以在了解了Linux工作的基本原理之后再去分析这些代码。源代码的组成结构来进行的,基木上是以每个源代码中的目录为一章内容进行介绍。介绍的源程序文件的次序可参见前面的文件列表索引.整个Linux内核源代码的月结构如下列表I.1所示。所有月习结构均是以linux为当前日录。为学习内核的初学者应该全部进行阅读。第二部分从第5章到第10章是内核代码的主要部分,其中第5章内容可以作为阅读本部分后续章节的索引来进行,第11章到第13章是第二部分内容,可以作为阅读第二部分代码的参考信息。

致功能。还介绍了Linux对物理内存的使用分配方式、内核的几种堆栈及其使用方式和虚拟线性地址的使用分配。最后开始注释内核程序包中Linux/甘录下的所看到的第一个文件, 也即内核代码的总体Makefile文件的内容, 该文件是所有内核源程序的编译管理配置文件, 供编译管理工具软件make使用。数的setup.s汇编程序和32位运行启动代码程序heads, 这三个汇编程序完成了把内核从块设备上引导加载到内存的工作,并对系统配置参数进行探测,完成了进入32位保护模式运行之前的所有工作.为内核系统执行进一步的初始化工作做好了准备。

常运行的关键地方, 在完成了系统所有的初始化工作后, 创建了用于shell的进程。在介绍该程序时将需要查看其所调用的其它程序,因此对后续章节的阅读可以按照这里调用的顺序进行。由于内存管理程序的函数在内核中被广泛使用, 因此该章内容应该最先选读。当你能真正看懂直到main.c程序为止的所有程序时, 你应该已经对Linux内核有了一定的了解, 可以说已经有一半入门了@, 但你还需要对文件系统、系统调用、各种驱动程序等进行更深一步的阅读。函数和有关系统调用的程序,此时你应该已经对其中的一些重要程序有所了解,的驱动程序,主要用来与文件系统和高速缓冲区打交道,含有较多与硬件相关的内容。因此,在阅读这章内容时需参考一些硬件资料。最好能首先浏览一下文件系统的章节,动程序、键盘驱动程序和显示器驱动程序。这些驱动程序构成了0.11内核支持的串行终端和控制台终端设备,因此本章也含有较多与硬件有关的内容,在阅读时需要参考下相关硬件的书籍.正开始支持协处理器,因此本章的内容较少,也比较简单。只需有一般性的了解即可。AndrewS Tanenbaum的《操作系统设计与实现》一书中有关MINIX文件系统的章节, 因为最初的Linux系统是只支持MINIX一种文件系统, Linux 0.11版也不例外.

1.3本章小结

第10章解说mm/目录中的内存管理程序。要透彻地理解这方面的内容, 需要对Intel 80X 86微处理器的保护模式运行方式有足够的理解,因此本章在适当的地方包含有较为完整的有关80X86保护模式运行方式的说明, 这些知识基本上都可以参考Intel 80386程序员编程手册(Intel 80386 Programmer'sReference Manual) .但在此章中, 以源代码中的运用实例为对象进行解说, 应该可以更好地理解它的工作原理。序时会碰到许多障碍。本书的第11章对inch ude/目录中的所有头文件进行了详细说明, 基本上对每一个现有的Linux内核分析书籍都缺乏对内核头文件的描述, 因此对于个初学者来讲, 在阅读内核程定义、每一个常量或数据结构都进行了详细注释。为了便于在阅读时参考查阅,本书在附录中还对一些经常要用到的重要的数据结构和变量进行了归纳注释,但这些内容实际上都能在这一章中找到.虽然该章内容主要是为阅读其它章节中的程序作参考使用的,但是若想彻底理解内核的运行机制,仍然需要了解这些头文件中的许多细节

第12章介绍了Linux 0.11版内核源代码lib/目录中的所有文件。这些库两数文件主要向编译系统等系统程序提供了接口函数,对以后理解系统软件会有较大的帮助,由于这个版本较低,所以这里的内容并不是很多,可以很快地看完。这也是我们为什么选择0.11版的原因之一.在对每个程序进行解说时,我们首先简单说明程序的主要用途和目的、输入输出参数以及与其它程对于阅读本书所需要的一些基本概念知识的介绍都散布在各个章节相应的地方,这样做主要是为了第13章介绍tools/日求下的build.c程序。这个程序并不会包括在编译生以的内核映像(image) 文件中,它仅用于将内核中的磁盘引导程序块与其它主要内核模块连接成个完整的内核映像(kernel image) 文件。

第14章介绍了学习内核源代码时的实验环境以及实验方法。主要介绍了在Bochs仿真系统下使用和编译Linux内核的方法以及磁盘镜象文件的制作方法。还说明了如何修改Linux 0.11源代码的语法使其能在RedHat 9系统下顺利编译出正确的内核来。最后是附录和索引, 附录中给出了Linux内核中的一些常数定义和基本数据结构定义, 以及保护模式运行机制的简明描述.为了便于查阅,在本书的附录中还单独列出了内核中要用到的有关PC机硬件方面的信息.在参考文献中,我们仅给出了在阅读源代码时可以参考的书籍、文章等信息,并没有包罗万象地给出一大堆的繁杂凌乱的文献列表。比如在引用Linux文档项目LDP(Linux Document Pro jeet) 中的文件时, 我们会明确地列出具体需要参考哪一篇HOWTO文章, 而并不是仅仅给出LDP的网站地址了事.Linus在最开发Linux操作系统内核时, 主要参考了3本书。一本是M.J.Bach著的《UNIX操作系统设计》, 该书描述了UNIX System V内核的工作原理和数据结构.


《Linux_内核完全注释_赵炯》目录

目录

5.3 MAKEFILE文件....

5.4A5M.5程序...

5.5TRAPS.C程序...

5.6 SYSTEM CALL.S程序,

5.7MK TIME.C程序...

5.8SCHED.C程序....

5.9 SIGNAL.C程序...

5.10EXITC程序.............

5.11FORKC程序........

5.12sys.c程序.......

5.13VSPRINTE.C程序..

5.14PRINTKC程序......

5.15PANIC.C程序.....

5.16本章小结....

第12章库文件(LIB........

12.5C TYPE.C程序..

12.6DUP.C程序

12.12STRINGC程序.

12.13WAIT.C程序...

第13章建造工具(TOOLS....

本书的主要目标......

现有书籍不足之处.....

阅读早期内核的其它好处......

阅读完整源代码的重要性和必要性........

如何选择要阅读的内核代码版本...

阅读本书需具备的基础知识.......

使用早期版本是否过时?...

ExT 2文件系统与MINIX文件系统......

第1章概述......

1.1 LINUX的诞生和发展.......

1.2内容综述....

1.3木章小结.

第2章LINUX内核体系结构........

2.1 LINUX内核模式............

2.2 LINUX内核系统体系结构...

2.3中断机制..........

2.4系统定时................

2.5 LINUX进程控制.......

2.6 LINUX内核对内存的使用方法................

2.7 LINUX系统中堆栈的使用方法.....

2.8 LINUX内核源代码的目录结构,

2.9内核系统与用户程序的关系.....

2.10 LINUX/MAKEFILE文件......

2.11本章小结......47

第3章引导启动程序(BOOT) ..........49

3.1概述...............49

3.2总体功能....49

3.3BOOTSECTS程序.....50

34SETUPS程序.......

3.5 HEAD.S程序.

3.6本章小结....

第4章初始化程序(IN IT) .....

4.1概述...........

4.2 MAIN.C程序..........

43环境初始化工......

4.4木章小结.....

第5章内核代码(KERNEL......

5.1概述...............

5.2总体功能描述

9.4 BUFFER.C程序

9.5BITMAPC程序.

9.6INODE.C程序.........

9.7 SUPER.C程序........

9.8NAMELC程序.

99 FILE TABLE.C程序

9.10BLOCKDEVC程序..

9.11 FILE_DEV.C程序.........

9.12PIPE.C程序................

9.13CHARDEV.C程序

9.14 READWRITE.C程序......

9.15 TRUNCATE.C程序.......

9.16 OPEN.C程序...

9.17EXEC.C程序...

9.18STATC程序...

9.19FCNTL.C程序..........

9.20IOCTLC程序

第10章内存管理(MM).....

10.1概述.........

10.2总体功能描述....

10.3 MAKEFILE文件......

104 MEMORY.C程序....

10.5 PAGE.S程序.....

第11章头文件(INCLUDE.........

11.1概述.......

11.2 INCLUDE/目录下的文件

11.3A.OUT.H文件

11.4 CONST.H文件

11.5C TYPE.H文件

11.6ERRNO.H文

11.7FCNTL.H文

11.8 SIGNAL.H文件

11.9STDARGH文件

11.1OSTDDEF.H文件

11.11STRINGH文件

11.12TERMIOS.H文件....

11.13 TIME.H文件..

11.14UNISTD.H文件...........

11.15U TIME.H文件

11.16 INCLUDE/ASM/日录下的文件...............

11.1710.H文件.....

11.18MEMORYH文件

11.19 SEGMENT.H文件.................

11.20 SYSTEM.H文件.....

11.21 INCLUDE/LINUX/目录下的文件.........

11.22CONFIGH文件.............

11.23FDREGH头文件.

11.24FS.H文件..

11.25HDREGH文件.....

11.26 HEAD.H文件..

第6章块设备驱动程序(BLOCK DRIVER .......... 177

6.1概述...........177

6.2总体功能..177

6.3 MAKEFILE文件.....180

6.4BLKH文件..........182

6.5HD.C程序.....186

6.6LL_RW_BLK.C程序........202

..6.7RAMDISKC程序...........207

6.8 FLOPPY.C程序...212

第7章字符设备驱动程序(CHAR DRIVER) ....... 239

7.1概述......239

7.2总体功能描述.................239

7.3 MAKEFILE文件........247

7.4 KEYBOARD.S程序....249

7.5CONSOLEC程序.....267

7.6 SERIAL.C程序290

7.7RS_10.S程序293

587.8TTY_IO.C程序297

717.9TTY_IOCTL C程序.......308

第8章数学协处理器(MATH) .........

8.1概述...........

8.2 MAKEFILE文件.

8.3MATH-EMULATION.C程序..

第9章文件系统(FS)......

9.1概述..............

9.2总体功能描述.............

9.3 MAKEFILE文件....

330I 1.27 KERNEL.H文件...

34511.28MMH文件

34911.29SCHED.H文件.......

.36011.30SYS.H文件...........

.36911.31TTY.H文件.

39011.32 INCLUDE/SYS/日录中的文件.

39011.33STATH文件...

39411.34 TIMES.H文件........

39711.35 TYPES.H文件....

400I 1.36UTS NAME.H文件.

..40311.37WAITH文件............

41512.1概述,

43012.2 MAKEFILE文件..

.43112.3EXTE.C程序....

.43412.4 CLOSE.C程序...

..437

.43712.7ERRNO.C程序

..43712.8EXECVE.C程序.......

-44212.9MALLOC.C程序

.44312.10 OPEN.C程序

...45712.11SETSID.c程序

.45912.14 WRITE.C程序..

47013.1概述........

..47113.2 BUILD.C程序...

第14章实验环境设置与使用方法.........

14.1概述.........................

14.2BoCHs仿真系统...

14.3创建秘撇映象文件..

14.4访问盘象文件中的信息.................

14.5制作根文件系统.....

14.6在LINUX 0.11系统上编译0.11内核...........590

14.7在REDHAT 9系统下编译LINUX 0.11内核..591

14.8利用BOCHS调试内核.......594

参考文献.............595

附录..................596

附录1内核主要常数................596

附录2内核数据结构599

附录380x86保护运行模式............607

附录4ASCI码表....617

案引................618

-II-

计算机


python
AI人工智能
javascript
计算机网络/服务器
数据库技术
计算机F

考试教辅


考研考博
英语四六级

沪ICP备18046276号-5
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:15618918379