描述
开 本: 16开纸 张: 纯质纸包 装: 精装是否套装: 否国际标准书号ISBN: 9787111740650
赵炯博士的Linux内核源码书系列自从问世以来,在全国乃至世界范围内产生了很大影响。第一批读者受惠良多,早已成为IT大厂的中坚力量。20年过去了,Linux内核的体量发生了巨大变化,这更加凸显了“从小内核学起”的理念的正确。阅读本书,会帮助读者少走弯路,快速理解Linux的精髓,早日成长为合格的开发人员和系统架构师。
本书对早期的Linux操作系统内核(v0.11)全部源代码文件进行了详细的注释和说明,旨在帮助读者够在短时间内对Linux的工作机理获得全面而深刻的理解,为进一步学习和研究Linux系统打下坚实的基础。书中首先介绍了Linux系统的发展历史,着重说明了各个内核版本之间的重要区别,给出了选择0.11版作为研究对象的原因;然后依据内核源代码的组织结构对所有代码进行了详细注释。在注释的同时,还介绍了读者应该了解的相关知识,并给出了相关的硬件信息。本书还介绍了内核源代码的组织结构及相互关系。
前言
第1章概述1
1.1 Linux的诞生和发展1
1.1.1 UNIX、MINIX、GNU和POSIX1
1.1.2 Linux操作系统的诞生和版本的变迁1
1.2 内容综述3
1.3 本章小结5
1.4 习题6
第2章Linux内核体系结构7
2.1 Linux内核模式和体系结构7
2.2 Linux中断机制9
2.3 Linux系统定时10
2.4 Linux内核进程控制11
2.4.1 任务数据结构11
2.4.2 进程运行状态11
2.4.3 进程初始化12
2.4.4 创建新进程14
2.4.5 进程调度14
2.4.6 终止进程15
2.5 Linux内核对内存的使用方法16
2.6 Linux系统中堆栈的使用方法19
2.6.1 初始化阶段19
2.6.2 任务的堆栈20
2.6.3 内核态与用户态堆栈之间的切换21
2.7 Linux内核源代码的目录结构21
2.7.1 引导启动程序目录boot22
2.7.2 文件系统目录fs22
2.7.3 头文件主目录include23
2.7.4 内核初始化程序目录init23
2.7.5 内核程序主目录kernel24
2.7.6 内核库函数目录lib25
2.7.7 内存管理程序目录mm26
2.7.8 编译内核工具程序目录tools26
2.8 内核系统与用户程序的关系26
2.9 Linux内核的编译实验环境26
2.10 linux/Makefile文件28
2.11 本章小结34
2.12 习题35
第3章内核引导启动程序36
3.1 总体功能描述36
3.2 程序分析37
3.2.1 bootsect.s程序37
3.2.2 setup.s程序44
3.2.3 head.s程序52
3.3 本章小结60
3.4 习题60
第4章内核初始化过程61
4.1 main.c程序分析61
4.2 本章小结68
4.3 习题69
第5章进程调度与系统调用70
5.1 总体功能描述70
5.1.1 中断处理程序70
5.1.2 系统调用处理相关程序71
5.2 程序分析72
5.2.1 asm.s程序72
5.2.2 traps.c程序77
5.2.3 systemcall.s程序83
5.2.4 mktime.c程序91
5.2.5 sched.c程序92
5.2.6 signal.c程序103
5.2.7 exit.c程序108
5.2.8 fork.c程序112
5.2.9 sys.c程序117
5.2.10 vsprintf.c程序122
5.2.11 printk.c程序127
5.2.12 panic.c程序128
5.3 本章小结129
5.4 习题129
第6章输入输出系统——块设备驱动程序130
6.1 总体功能描述130
6.1.1 块设备请求项和请求队列130
6.1.2 块设备操作方式132
6.2 程序分析133
6.2.1 blk.h文件133
6.2.2 hd.c程序136
6.2.3 llrwblk.c程序149
6.2.4 ramdisk.c程序154
6.2.5 floppy.c程序157
6.3 本章小结170
6.4 习题170
第7章输入输出系统——字符设备驱动程序171
7.1 总体功能描述171
7.1.1 终端驱动程序基本原理171
7.1.2 终端基本数据结构172
7.1.3 规范模式和非规范模式174
7.1.4 控制台驱动程序175
7.1.5 串行终端驱动程序176
7.1.6 终端驱动程序接口177
7.2 程序分析177
7.2.1 keyboard.S程序177
7.2.2 console.c程序191
7.2.3 serial.c程序210
7.2.4 rsio.s程序213
7.2.5 tty_io.c程序216
7.2.6 tty_ioctl.c程序225
7.3 本章小结230
7.4 习题230
第8章数学协处理器231
8.1 mathemulation.c程序分析231
8.2 本章小结232
8.3 习题232
第9章文件系统233
9.1 总体功能描述233
9.1.1 MINIX文件系统233
9.1.2 高速缓冲区237
9.1.3 文件系统底层函数237
9.1.4 文件中数据的访问操作237
9.2 程序分析239
9.2.1 buffer.c程序239
9.2.2 bitmap.c程序251
9.2.3 inode.c程序255
9.2.4 super.c程序264
9.2.5 namei.c程序272
9.2.6 filetable.c程序292
9.2.7 blockdev.c程序292
9.2.8 filedev.c程序295
9.2.9 pipe.c程序297
9.2.10 chardev.c程序300
9.2.11 readwrite.c程序303
9.2.12 truncate.c程序306
9.2.13 open.c程序307
9.2.14 exec.c程序312
9.2.15 stat.c程序322
9.2.16 fcntl.c程序323
9.2.17 ioctl.c程序325
9.3 本章小结326
9.4 习题326
第10章内存管理328
10.1 总体功能描述328
10.1.1 内存分页管理机制328
10.1.2 Linux中内存的管理和分配331
10.1.3 写时复制机制332
10.2 程序分析332
10.2.1 memory.c程序332
10.2.2 page.s程序345
10.3 本章小结346
10.4 习题346
第11章包含文件347
11.1 程序分析347
11.1.1 include/目录下的文件347
11.1.2 a.out.h文件347
11.1.3 const.h文件356
11.1.4 ctype.h文件356
11.1.5 errno.h文件357
11.1.6 fcntl.h文件359
11.1.7 signal.h文件360
11.1.8 stdarg.h文件362
11.1.9 stddef.h文件363
11.1.10 string.h文件363
11.1.11 termios.h文件372
11.1.12 time.h文件379
11.1.13 unistd.h文件380
11.1.14 utime.h文件385
11.1.15 incl
本书是一本有关Linux操作系统内核工作原理的入门读物,主要目标是使用尽量少的篇幅和有限的学习时间,对完整的Linux内核源代码进行解剖,使读者对操作系统的基本功能和实现方式有一个全面的理解。
目前已有的阐述Linux内核的书籍,均尽量选用最新Linux内核版本进行描述,但由于这些版本的内核源代码庞大,只能对源代码进行选择性的讲解,许多实现细节被忽略。本书则对完整的Linux内核源代码进行了全面解剖。表面看来,本书对Linux早期内核版本注释的内容似乎过时,但通过学习你会发现,利用本书学习Linux内核,由于源代码短小精干,因此会有极高的学习效率,能够做到事半功倍,快速入门,并为进一步选择新内核学习打下坚实的基础。
正如Linux系统的创始人Linus所说,要理解一个系统的真正运行机制,一定要阅读其源代码。系统本身是一个整体,具有很多看似不重要的细节。只有在详细阅读过完整的内核源代码之后,才会对整个系统的运作过程有深刻的理解。以后再选择较新内核源代码进行学习时,也不会碰到大问题,基本上都能顺利地理解新代码的内容。
为了帮助读者提高学习效率,作者通过对多个Linux内核版本进行比较和选择,最终选择了与目前Linux内核基本功能较为相近,又非常短小的0.11版作为入门学习的最佳版本。0.11版内核源代码只有一万四千行左右(325KB),其中包括的内容基本上都是Linux系统的精髓。
在阅读本书时,读者应该具备基本的有关80x86处理器编程和相关外围硬件的知识,还应具备使用Linux系统的初级技能。由于Linux最早是根据M.J.Bach的《UNIX操作系统设计》一书的基本原理开发的,因此若能适当参考该书,则更有利于对源代码的理解。
在对每个程序进行描述时,我们首先说明程序的主要用途、输入输出参数以及与其他程序的关系,然后在程序中对代码进行详细注释。注释时对源代码和原注释不作任何改动。在代码之后是对程序中出现的一些语句或硬件方面的相关知识进行说明。
本书所需的一些基本概念均分布在各章中,这样编排主要是为了能够使读者方便地找到相关信息,而且在结合源代码阅读时,对一些基本概念能有更深的理解。另外,由于篇幅所限,我们对内核源代码多数文件开始处的版权信息作了省略,但程序中的行号仍然按原来的编号。
最后要说明的是,当你已经完全理解了本文解说的一切时,并不代表你已经成为一个Linux行家了,你只是刚刚踏上Linux的征途,具有了成为一个Linux高手的初步知识。这时你应该去阅读更多的源代码。本书读者群的定位是一些知晓Linux系统一般使用方法或具有一定编程经验,但比较缺乏阅读目前最新内核源代码的基础,又急切希望能够进一步理解类UNIX操作系统内核工作原理和实际代码实现的爱好者。在阅读时可以参考为本书专门开设的网站www.oldlinux.org。从中可以下载到很多学习资料和上机实习软件,也可以进行在线讨论。
评论
还没有评论。