Linux内核完全剖析基于0.11内核》--赵炯

5星(超过95%的资源)
所需积分/C币:41 2017-11-29 16:21:14 8.59MB PDF
278
收藏 收藏
举报

本书对早期的Linux操作系统内核(v0.11)全部源代码文件进行了详细的注释和 说明,旨在让读者能够在短时间内对Linux的工作机理获得全面而深刻的理解,为进一步学习和研究Linux系统打下坚实的基础。书中首先介绍了 Linux系统的发展历史,着重说明了各个内核版本之间的重要区别,给出了选择0.11版作为研究对象的原因;然后依据内核源代码的组织结构对所有代码进 行了详细注释。
内容简介 本书对早期Liuⅸ操作系统内核(v.11)全部代码文件进行了详细全面的注释和说明,旨在让该者能够在尽量短的时 间内对Iinuⅸ的工作机理获得全面而深刻的理解,为进一步学习和研究Liux系统打下坚实的基础。虽然所选择的版木较低, 但该内核能够匚常编译运行,并且其中已包括了LINUⅹ工作原理的精髓。书中首先以 Linux源代码版本的变迁为主线, 概要而有趣地介绍了 Linux系统的发展历史,同时着亘说明了各个内核版本之间的主要区别和改进方面,绘岀了选择0.11 (0.95)版内核源代码作为研究对象的原因。然后在正式开始描述内核源代码之前,概要介绍了运行 Linux系统的PC机的 硬件组成结构、编制内核使用的汇编语言和¢溍言扩展邹分,并闬重点说明了80Ⅺ86处理器在保护模式下运行的编稈方法 接着我们详细介绍了Linx内核源代码日录树组织结构,并依据该组织结构对所有内核程序和文件进行了注释和详细说明 有关代码注释的章节安排基本上都分为具体硏究对象的概述、每个文作的功能介绍、代码内注释、代码中难点及相关资料介 缃等部分逐步展开。为了加深读者对内核工作原理的理解,书中最后一章给岀了围绕LiuκO.I系统的多个试验。试验屮所 使用的相关程序均可从本书配套网站(www.oldlinux.org)上下毂。 木书适合作为高校计算机专业学生学习操作系統踝程的辅助和实践教材,也适合 Linux爱好者作为学习内核工作原理 的自学参考书籍,还可供一般技术人员作为开发嵌入式系统的参考书使用 版权说明 作者保留本电子书籍的修改和正式出版的所有权不读者可以自由传播本书全部和部分章节的内容但需要注明出处由 于日前木书仍然处于不断改进阶毅,囚此其中肯定还存在一些错误和不足之处。希望读者能踊跃给予批评指正或良好建议。 反馈信息可以通过电子邮件发给我:gohigh(@sh163net或gohigh@gmail.com,也可直接来信至:上海同济大学电信工程 学院计算机系(江建慧教授收),或机械电∫工程硏究所(赵炯收)(上海四丬路1239号,邮编:20002)。 o 2002-2007 by Zhao Jiong ◎2002-2007赵炯版权所有. RTFSC -Read The Fxkx*king Source Code e! Linus benedict torvalds 目录 目录 序言 55 LINUX的系统调用 .160 56系统时间和定时 162 本书的主要目标 57 LINUX进程控制 164 现有书籍不足之处… 58 LINUX系统中堆栈的使用方法… 172 阅读早期内核的其他好处 59LNUx0.l1采用的文件系统 l76 阅读完整源代码的重要性和必要性∴ 5.10LNUX内核源代码的目录结构 177 如何选择要阅读的内核代码版本 511内核系统与应用程序的关系… 阅读木书需具备的基础知识 5.12 LINUX/ MAKEFILE文件 使用早期版本是否过时?… 445 513本章小结 FXT2文件系统与 MINIX文件系统 第6章引导启动程序(BOOT nn191 第1章概述 61总体功能 191 1.1 LINUX的诞生和发展 6,2 BOOTSECTS程序 193 1.2内容综述 12 63 SETUP. S程序 203 1.3木章小结… 16 64HEAD.S程序 221 第2章微型计算机组成结构… 234 17 65本章小结 2.1微型计算机组成原理 17第7章初始化程序(NIT)……… 235 22IO端口寻址和访问控制方式… 19 7 MAIN.C程序 235 23主存储器、BIOS和CMOS存储器……. 7.2环境初始化工作.……247 24控制器和控制 .23 7.3本章小结 49 2.5本章小结… 3 第8章内核代码( KERNEL)…251 第3章内核编程语言和环境 32 8.1总体功能…… 3.1As86汇编器 32 82 MAKEFILE文件 254 32 GNUAS汇编 38 83ASMS程序… .256 3.3C语言程序.… 48 84 TRAPS. C程序… 262 34C与汇编程序的相互调用…….….5 8.5 SYSTEM CALL.S程序 267 3.5LNUx0.11目标文件格式 86 MKTIME. C程序 36MAKE程序和 MAKEFILE文件, 72 87 SCHED C程序 281 第4章80X86保护模式及其编程…175 88 SIGNAL.C程序 300 89EXI:C程序 4.180X86系统寄存器和系统指令..75 8.10FORK.C程序… 4,2保护模式内存管理. 8. I SYS.C程序 326 4.3分段机制, 8.12 VSPRINTF C程序 333 44分页机制 8.13 PRINTK.C程序 341 4.5保护 99 8.|4 PANICO程序 342 4.6中断和异常处理 110 8.15本章小结 343 4.7任务管理 l20 48保护模式编程初始化 128 第9章块设备驱动程序 BLOCK DRIVER)…345 49一个简单的多任务内核实例 131 9.总体功能. 346 第5章 LINUX内核体系结构…141 92 MAKEFILE文件 349 93BLKH文件 351 51LNUx内核模式 141 94HDC程序 52 LINUX内核系统体系结构 9.5LL C程序 5.3 LINUX内核对内存的管理和使用 96 RAMDISK. C程序 384 54中断机制… 157 97 LOPPYO程序 390 目录 第10章字符设备驱动程序 CHAR DRIVER)…,417 14.12 TIME,H文件…1722 10.1总体功能 724 417 14.13 UNISTD.H文件 102 MAKEFILE文件 729 427 14.14 UTIME.H文件 10.3 KEYBOARDS程序 14.15 INCLUDE/ASM/求下的文件1731 10.4 CONSOLE.C程序. 14.1610.H文什. 73l 448 10.5 SERIAL C程序 1417 MEMORYH文件 732 474 10.6Rso.s程序… 483 14.18 SEGMENT.H文件…… 10.7 TTY IO.C程序 14.19 SYSTEMH文件 487 …1735 10.8 TTY IOCTL. C程序 1420 INCLUDE/ LINUX/目录下的文件 739 1421 CONFIG.H文件 739 第11章数学协处理器(MATH)507 1422 FDREG.H头文件 ……1741 111 MAKEFILE文件 744 507 1423FSH文件 ++· 11.2MATH- EMULATION. O程序 509 1424 HDREGH文件 749 1425HEAD.H文件 第12章文件系统(FS)… 5111426 KERNEL H文件 753 12.1总体功能 511 1427MMH文件… 754 122 MAKEFILE文件 1428SCHD.H文件 123 BUFFER C程序 530 1429sYS.H文件 761 124 BITMAP.C程序… 547 1430TTY.H文件. 763 12.5 TRUNCTE.C程序 .553 1431 INCLUDE/SYS/目录中的文件 766 126 NODE C程序… 14.32 STATH文什 127 SUPER O程序 ∴567 1433 TIMES.H文件 128 NAMEL. C程序. 577 1434 TYPES.H文件… 768 12.9 FILE TABLE. C程序 601 14.35 UTSNAMEH文件. 12.10 BLOCK DEVO程序 601 1436wAmH文件 770 12.11 FILE DEV.C程序 605第15章库文件IB) 773 12.12 PIPE. C程序 608 12.13 CHAR DEⅤC程序 612 15.1 MAKEFILE文件…… 774 12.14 READ WRITE.C稈序 6l5 152EXTC程序 776 12.15OPNC程序 .621 153 CLOSE.C程序 12.16 EXEC.C程序 627 154 CTYPE,C程序 777 12.17 STATC程序….647 55DUPC程序 778 12.18 FCNTL. C程序 156 ERRNO. C程序 779 12.19 IOCTL, C程序 652 157 EXECVE. C程序… 779 15.8 MALLOC.C程序 780 第13章内存管理(MM)…655 159 OPEN. C程序 789 13.1总体功能 655 15.10 SETSID. O程序.… 790 132 MAKEFILE文件 661 15.11 STRINGC程序 791 133 MEMORYC程序 15.12wArC程序 791 134RAGF.S程序. .679 15.13wRC程序 792 第14章头文件( NCLUDE)… 683 第16章建造工具( TOOLS)…195 14.1 INCLUDE/日录下的文件… 16.1BUDC程序 795 14.2A.OUT丑HI文件 684第17章实验环境设置与使用方法 802 143 CONST.H文件.… 144 CTYPE.H文件… 695 17.1 BOCHS仿真系统 02 14.5 ERRNO.H文件 697 172在 BOCHS中运行LNUx0.11系统 146 FCNTL.H文件 699 17.3访问磁盘映像文件中的信息.… 147 SIGNAL.H文件…1701 17.4编译运行简单内核示例程序 ∴815 148 STDARG.H文件 17.5利用 BOCHS调试内核 149 STDDEFE文件 704 17.6创建磁盘映像文件. 824 14.10 STRINGH文件 705 17.7制作根文件系统… 14.11 TERMIOS.H文件 715 178在 LINUX0.11系统上编译0.11内核…834 17.9在 REDHAT9系统下编译LNUx0.11内核.835 目录 17.10内核引导启动+根文件系统红成的集成盘838 附录2ASCⅡ码表… 17.11从硬盘启动:利用 SHOELACE引导软件.843 附录3常用C0、CI控制字符表 17.12利用GDB和 BOCHS调试内核源代码…..846 附录4常用转义序列和控制序列 865 参考文献… 853 附录5第1套键盘扫描码集∴…..-.-.-.868 附录… 索引∴ 869 855 附录1内核数据结构. 855 III 序言 序言 本是一本有关 Linux操作系统内核基本工作原理的入门读物。 本书的主要目标 本书的主要目标是使用尽量少的篇幅或在有限的篇幅内,对完整的 Linux内核源代码进行解剖,以 期对操作系统的基本功能和实际实现方式获得仝方位旳理解。做到对 linux内核有一个完整而深刻的理 解,对inux操作系统的基本工作原理真正珒解和入门。 本书读者群的定位是一些知晓Iinuⅹ系统的一般使用方汏或具有一定的编程基础,但比较缺乏阅读 目前最新内核源代码的基础知识,又急切希望能够一步理解UNX类操作系统内核工作原理和实际代 码实现的爱好者。这部分读者的水平应该界于初级与中级水平之间。目前,这部分读者人数在 Linux爱 好者中所占的比例是很高的,而面向这部分读者以比较易懂和有效的手段讲解内核的书籍资料不多。 现有书籍不足之处 目前已有的描述 Linux内核的书籍,均尽量选用最新 Linux内核版本(例如 Redhat7.0使用2.2.16、 Fedora core4使用2.6.11稳定版等)进行描述,但由于目前 Linux内核整个源代码的大小已经非常得大 (例如2.2.20版就已具有268万行代码!),因此这些书籍仅能对 Linux内核源代码进行选择性地或原理 性地说明,许多系统实现细节被忽略。因此并不能给予读者对实狝Liμx内核有淸晰而完整的理解。 Scott maxwell著的一书巛 Linux内核源代码分析》(陆丽娜等译)基木上是面对Liu中级水丬的读 者,需要较为全面的基础知识才能完全理解。而且可能是由于篇幅所限,该书并没有对所有 Linux内核 代码进行注释,略去了很多内核实现细节,例如其中内核中使用的各个头文件(*h)、生成内核代码映像 文件的工具程序、各个make文件的作用和实现等均没有涉及。因此对于处于初中级水平之间的读者来 说阅读该书有些困难 浙江大学出版的《Linuⅸx内核源代码情景分析》一书,也基本有这些不足之处。甚全对于一些具有 较高 Linux系统应用水平的计算机本科高年级学生,由于该书篇幅问题以及仅仅选择性地讲解内核源代 码,也不能真正吃透内核的实际实现方式,因而往往刚开始阅读就放弃了。该书刚面市时,本人曾极力 劝说学生购之阅读,而在一个月后调查阅读学习情况时,基本都存在看不下去或不能理解等问题,大多 数人都放弃了。 John lions著的《莱昂氏UNⅨ源代咼分析》一书虽然是一木学习UNIX类操仵系统内核源代码很 好的书籍,但是由于其采用的是UNXV6版,其中系统调用等部分代码是用早已废弃的PDP11系列机 的汇编语言编制的,因此在阅读和理解与硬件部分相关的源代码时就会選到较大的困难。 A.S. Tanenbaum的书《操作系统:设计与实现》是一本有关操作系统内核实现很好的入门书籍,但 该书所叙述的MNIX系统是·种基于消息传递的内核实现机制,与 Linux内核的实现有所区别。因此在 学习该书之后,并不能很顺利地即刻着手进一步学习较新的Liux内核代码实现、 在使用这些书籍进行学习时会有一种“盲人摸象”的感觉,不能真正理解Liux内核系统具体实现 的整体概念,尤其是对那些 Linux系统初学者或刚学会如何使用 Linux系统的人在使用那些书学习内核 原理时,内核的整体运作结构并不能淸晰地仁脑海中形成。这在本人多年的Iinuⅹ内核学习过程中也深 序言 有体会。在1991年10月份, Linux的创始人 Linus torvald在开发出 Linux0.03版后写的一篇文章中也 提到了同样的问题。在这篇题为“LNUX- a free unix-386 kernel”l的文章中,他说:“开发 Linux是为了 那些操作系统爱好者和计算机科学系的学生使用、学丬和娱乐”。“自由软件基金会的 GNU Hurd系统如 果开发出来就已经显得太庞大而不适合学习和理解。而现今流行的 Linux系统要比当年GNU的Hurd 系统更为庞大和复杂,因此同样也已经不适合作为操作系统初学者的入门学习起点。这也是作者基于 Linux早期内核版本写作本书的动机之一。 为了填补这个空缺,本书的主要目标是使用尽量少的篇幅或在有限的篇幅内,对完整的Liux内核 源代码进行全面解剖,以期对操作系统的基本功能和实际实现方式获得全方位的理解。做到对 Linux内 核有一个完整而深刻的理解,对 Linux操作系统的基本工作原理真正理解和入门。 阅读早期内核的其他好处 日前,已经出现不少基于 Linux早期内核而开发的专门用于嵌入式系统的内核版本,如DJ的x86 操作系统、Uclinux等(在www.linux.org上有专门目录),世界上也有许多人认识到通过早期Linux内核 源代码学习的好处,目前国内乜已经有人正在组织人力注释出版类似本文的书籍。因此,通过阅读 Linux 早期内核版本的源代码,的确是学丬 Linux系统的种行之有效的途径,并且对研究和应用 Linux嵌入 式系统也有很大的帮助 在对早期内核源代码的注释过程中,作者发现,早期内核源代码几乎就是目前所使用的较新内核的 个精简版本。其中已经包括了目前新版本中几乎所有的基本功能原理的内容。正如《系统软件:系统 编程导论》一书的作者 Leland L.Beck在介绍系统程序以及操作系统设计时,引入了一和极其简化的简 单指令计算机(SC)系统来说明所有系统程序的设计和实现原理,从而既避免了实际计算机系统的复杂 性,乂能透彻地说明问题。这里选择 Linux的早期内核版本作为学习对象,其指导思想与 Leland的一致。 这对 Linux内核学习的入门者来说,是最理想的选择之一。能够在尽可能短的时间内深入理解Liux内 核的基本工作原理 对于那些已经比较熟悉内核工作原理的人,为了能让自己在实际工作中对系统的实际运转机制不产 生一种空中楼阁的感觉,因此也有必要阅读内核源代码。 当然,使用早期内核作为学习的对象也有不足之处。所选用的 Linux早期内核版本不包含对虚拟文 件系统ⅤFS的支持、对网络系统的支持、仅支持a.out执行文件和对其他一些现有内核中复杂子系统的 说明。但由于本书是作为 Linux内核工作机理实现的入门教材,因此这也正是选择早期内核版本的优点 之一。通过学习本书,可以为进一步学习这些高级内容打下扎实的基础。 阅读完整源代码的重要性和必要性 正如Linuκ系统的创始人在篇新闻组投稿上所说的,要理解个软件系统的貞正运行机制,定 要阅读其源代码( RTFSC- Read The Fucking Source Code)。系统本身是一个完整的整体,具有很多看似 不重要的细节冇在,但是若忽略这些细节,就会对整个系统的理解带来困难,并且不能真正了解一个实 际系统的实现方法和手段。 虽然通过阅读一些操作系统原理经典书籍(例如 M.J. Bach的《UNIX操作系统设计》)能够对UNX 类操作系统的工作原理有些理论上的指导作用,但实际上对操作系统的貞正组成和内部关系实现的理 解仍不是很淯晰。正如ΔST所说的,“许多操作系统教材都是重理论而轻实践”,“多数书籍和课程为调 度算法耗费大量旳时间和篇幅而完全忽略ⅠO,其实,前者通常不足一页代码,而后者往往要占到整个 原文可参见http://oldlinux.org/linus 2 序言 系统三分之一的代码总量。”内核中大量的重要细节均未提到。因此并不能让读者理解一个真正的操作系 统实现的奥妙所仨。只有在详细阅读过完整的内核源代码之后,才会对系统有一种豁然开朗的感觉,对 整个系统的运作过程有深刻的理解。以后再选择最新的或较新内核源代码进行学丬吋,也不会位到大问 题,基本上都能顺利地理解新代码的内容。 如何选择要阅读的内核代码版本 那么,如何选择既能达到上述要求,又不被太多的内容而搞乱头脑,选择一个适合的 Linux内核版 本进行学习,提髙学习的效率呢?作者通过对大量内核版本进行比较和选择后,最终选择了与目前 Linux 内核基本功能较为相近,又非常短小的0.11版内核作为入门学习的最佳版本。下图是对一些主要 Linux 内核版本行数的统计 Linux内核各版木源代码行数 1000 100 R 10 5555555否5下F雨同雨再 卜9 内核版本号 目前的 Linux内核源代码量都在几百万行的数量上,2.60版内核代码行数约为592万行,极其庞大 对这些版本进行完全注释和说明几乎是不可能的。而0.11版内核不超过2万行代码量,因此完全可以在 木书中解释和注释清楚。庥雀虽小,五脏俱全。为」对所研究的系统有感性的∫解,并能利用实验来 加深对原理的理解,作者还专门重建了基于该内核的可运行的 Linux0.11系统。由于其中含有 GNU gcc 编译环境,因此使用该系统也能似一些简单的开发工作 另外,使用该版本可以避免使用现有较新内核版本巾已经变得越米越复杂得各子系统部分的研究(如 虚拟文件系统ⅤFS、εx口或εxt文件系统、网络子系统、新的复杂的内存管理机制等) 阅读本书需具备的基础知识 在阅读本书时,读者必须具备一些基本的C语言知识和 Intel cPu汇编语言知识。有关C诰言最佳 的参考资料仍然是 brain w. Kernighan和 Dennis m, Ritchie编写的《 The C Programming Language》一书。 而汇编语言的资料则可以参考仟意一本讲解与 Intel cpu相关的汇编语言教材。另外还需要一些嵌入式 汇编语言的资料。有关嵌入式汇编的权威信息都包含在 GnU gcc编译器手册中。我们也可以从 Internet

...展开详情
试读 127P Linux内核完全剖析基于0.11内核》--赵炯
立即下载 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
黄剑客 有点难度,偏硬件的东西不少。
2019-05-09
回复
耕码农 内容全面,值得一看
2019-04-02
回复
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
  • 签到新秀

  • 分享达人

关注 私信
上传资源赚钱or赚积分
最新推荐
Linux内核完全剖析基于0.11内核》--赵炯 41积分/C币 立即下载
1/127
Linux内核完全剖析基于0.11内核》--赵炯第1页
Linux内核完全剖析基于0.11内核》--赵炯第2页
Linux内核完全剖析基于0.11内核》--赵炯第3页
Linux内核完全剖析基于0.11内核》--赵炯第4页
Linux内核完全剖析基于0.11内核》--赵炯第5页
Linux内核完全剖析基于0.11内核》--赵炯第6页
Linux内核完全剖析基于0.11内核》--赵炯第7页
Linux内核完全剖析基于0.11内核》--赵炯第8页
Linux内核完全剖析基于0.11内核》--赵炯第9页
Linux内核完全剖析基于0.11内核》--赵炯第10页
Linux内核完全剖析基于0.11内核》--赵炯第11页
Linux内核完全剖析基于0.11内核》--赵炯第12页
Linux内核完全剖析基于0.11内核》--赵炯第13页
Linux内核完全剖析基于0.11内核》--赵炯第14页
Linux内核完全剖析基于0.11内核》--赵炯第15页
Linux内核完全剖析基于0.11内核》--赵炯第16页
Linux内核完全剖析基于0.11内核》--赵炯第17页
Linux内核完全剖析基于0.11内核》--赵炯第18页
Linux内核完全剖析基于0.11内核》--赵炯第19页
Linux内核完全剖析基于0.11内核》--赵炯第20页

试读结束, 可继续阅读

41积分/C币 立即下载