书籍详情

Linux 内核完全剖析:基于0.12内核(15周年版)

Linux 内核完全剖析:基于0.12内核(15周年版)

作者:赵炯

出版社:机械工业出版社

出版时间:2024-03-01

ISBN:9787111744191

定价:¥299.00

购买这本书可以去
内容简介
  本书对 Linux 作系统早期内核(V0.12)全部源代码文件进行了详细、全面的注释和说明,旨在帮助读者用较短的时间对 Linux 的工作机理获得全面而深刻的理解,为进一步学习和研究现代 Linux 系统打下坚实的基础。虽然分析的版本较低,但该内核已能够正常编译运行,并且其中已包括了 Linux 工作原理的精髓。书中首先概要地介绍了 Linux 内核发展历史,说明了各内核版本之间的主要区别和改进,给出了选择 0.12 版内核源代码作为研究对象的原因。然后给出了阅读内核源代码所需的相关基础知识,概要介绍了运行 Linux 系统的 PC 硬件组成结构、编写内核使用的汇编语言和 C 语言扩展部分,并且重点说明了 80x86 处理器在保护模式下运行的编程方法。接着介绍了内核代码概况,给出了内核源代码目录树结构,并依据该组织结构对所有内核程序和文件进行了详细描述和说明。为了加深读者对内核工作原理的理解,书中最后一章给出了多个相关运行调试实验。书中所有相关资料和信息均可从网站 www.oldlinux.org 下载。本书适合作为高校计算机专业学生学习作系统课程的辅助和实践教材,也适合 Linux 爱好者作为学习内核工作原理的自学参考书籍,还可作为一般技术人员开发嵌入式系统时的参考书。
作者简介
  赵炯,工学博士,计算机专家,Intel公司访问学者,国际计算机仿真协会、上海市通信学会会员。研究方向为计算机通信。曾经为本科、硕士和博士研究生开设《计算机网络》、《计算机通信技术》、《计算机通信与工控网络》、《微型计算机》和《计算机原理》等课程。参与国家自然科学基金项目“系统芯片在线测试与容错技术研究”和上海市自然科学基金“基于节点主动控制的大规模复杂输送系统控制模型研究”等工作。
目录
第 1 章 概述1
1.1 Linux 的诞生和发展1
1.1.1 UNIX 操作系统的诞生 1
1.1.2 MINIX 操作系统 1
1.1.3 GNU 计划 2
1.1.4 POSIX 标准 2
1.1.5 Linux 操作系统的诞生 3
1.1.6 Linux 操作系统版本的变迁 4
1.1.7 Linux 名称的由来 6
1.1.8 早期Linux 系统开发的主要贡献者 7
1.2 内容综述8
1.3 本章小结12
第 2 章 微型计算机组成结构13
2.1 微型计算机组成原理13
2.2 I/O 端口寻址和访问控制方式15
2.2.1 I/O 端口和寻址 15
2.2.2 接口访问控制 17
2.3 主存储器、IOS 和 CMOS存储器17
2.3.1 主存储器 17
2.3.2 基本输入/输出程序 IOS 18
2.3.3 CMOS 存储器 19
2.4 控制器和控制卡19
2.4.1 中断控制器 19
2.4.2 DMA 控制器 20
2.4.3 定时/计数器 21
2.4.4 键盘控制器 21
2.4.5 串行控制卡 22
2.4.6 显示控制 24
2.4.7 软盘和硬盘控制器 25
2.5 本章小结28
第 3 章 内核编程语言和环境29
3.1 as86 汇编器29
3.1.1 as86 汇编语言语法 30
3.1.2 as86 汇编语言程序 31
3.1.3 as86 汇编语言程序的编译和链接 33
3.1.4 as86 和 ld86 使用方法和选项 34
3.2 GNU as 汇编35
3.2.1 编译 as 汇编语言程序 36
3.2.2 as 汇编语法 37
3.2.3 指令语句、操作数和寻址 38
3.2.4 区与重定位 41
3.2.5 符号 43
3.2.6 as 汇编命令 44
3.2.7 编写 16 位代码 46
3.2.8 AS 汇编器命令行选项 46
3.3 C 语言程序46
3.3.1 C 程序编译和链接 46
3.3.2 嵌入汇编 47
3.3.3 圆括号中的组合语句 51
3.3.4 寄存器变量 52
3.3.5 内联函数 52
3.4 C 与汇编程序的相互调用54
3.4.1 C 函数调用机制 54
3.4.2 在汇编程序中调用 C 函数 59
3.4.3 在 C 程序中调用汇编函数 61
3.5 Linux 0.12 目标文件格式63
3.5.1 目标文件格式 63
3.5.2 Linux 0.12 中的目标文件格式 66
3.5.3 链接程序输出 68
3.5.4 链接程序预定义变量 69
3.5.5 System.map 文件 70
3.6 Make 程序和 Makefile 文件72
3.6.1 Makefile 文件内容 72
3.6.2 Makefile 文件中的规则 73
3.6.3 Makefile 文件示例 73
3.6.4 make 处理 Makefile 文件的方式 75
3.6.5 Makefile 中的变量 76
3.6.6 让 make 自动推断命令 76
3.6.7 隐含规则中的自动变量 77
3.7 本章小结78
第 4 章 80x86 保护模式及其编程79
4.1 80x86 系统寄存器和系统指令79
4.1.1 标志寄存器 79
4.1.2 内存管理寄存器 80
4.1.3 控制寄存器 81
4.1.4 系统指令 84
4.2 保护模式内存管理85
4.2.1 内存寻址 85
4.2.2 地址变换 86
4.2.3 保护 88
4.3 分段机制89
4.3.1 段的定义 89
4.3.2 段描述符表 91
4.3.3 段选择符 93
4.3.4 段描述符 95
4.3.5 代码和数据段描述符类型 98
4.3.6 系统描述符类型 99
4.4 分页机制100
4.4.1 页表结构 102
4.4.2 页表项格式 103
4.4.3 虚拟存储 104
4.5 保护104
4.5.1 段级保护 105
4.5.2 访问数据段时的特权级检查 107
4.5.3 代码段之间转移控制时的特权级检查108
4.5.4 页级保护  113
4.5.5 组合页级和段级保护  115
4.6 中断和异常处理 115
4.6.1 异常和中断向量  115
4.6.2 中断源和异常源  116
4.6.3 异常分类  117
4.6.4 程序或任务的重新执行  117
4.6.5 开启和禁止中断  118
4.6.6 异常和中断的优先级  118
4.6.7 中断描述符表  119
4.6.8 IDT 描述符 119
4.6.9 异常与中断处理 120
4.6.10 中断处理任务 123
4.6.11 错误码 123
4.7 任务管理124
4.7.1 任务的结构和状态 125
4.7.2 任务的执行 126
4.7.3 任务管理数据结构 126
4.7.4 任务切换 129
4.7.5 任务链 131
4 .7.6 任务地址空间 132
4.8 保护模式编程初始化133
4.8.1 进入保护模式时的初始化操作 134
4.8.2 模式切换 135
4.9 一个简单的多任务内核实例 137
4.9.1 多任务程序结构和工作原理 137
4.9.2 引导启动程序 oot.s 140
4.9.3 多任务内核程序 head.s 142
第 5 章 Linux 内核体系结构 147
5.1 Linux 内核模式147
5.2 Linux 内核系统体系结构148
5.3 Linux 内核对内存的管理和使用150
5.3.1 物理内存 150
5.3.2 内存地址空间概念 150
5.3.3 内存分段机制 151
5.3.4 内存分页管理 154
5.3.5 CPU 多任务和保护方式 157
5.3.6 虚拟地址、线性地址和物理地址之间的关系 157
5.3.7 用户申请内存的动态分配 161
5.4 中断机制162
5.4.1 中断操作原理 162
5.4.2 80x86 微机的中断子系统 163
5 .4.3 中断向量表 164
5.4.4 Linux 内核的中断处理 164
5.4.5 标志寄存器的中断标志 166
5.5 Linux 的系统调用 166
5.5.1 系统调用接口 166
5.5.2 系统调用处理过程 167
5.5.3 Linux 系统调用的参数传递方式168
5.6 系统时间和定时168
5.6.1 系统时间 168
5.6.2 系统定时 169
5.7 Linux 进程控制170
5.7.1 任务数据结构 170
5.7.2 进程运行状态 175
5.7.3 进程初始化 176
5.7.4 创建新进程 177
5.7.5 进程调度 178
5.7.6 终止进程 179
5.8 Linux 系统中堆栈的使用方法179
5.8.1 初始化阶段 180
5.8.2 任务的堆栈 181
5.8.3 任务内核态堆栈与用户态堆栈之间的切换 183
5.9 Linux 0.12 采用的文件系统184
5.10 Linux 内核源代码的目录结构184
5.10.1 内核主目录 linux 185
5.10.2 引导启动程序目录 oot 185
5.10.3 文件系统目录 fs 186
5.10.4 头文件主目录 include 187
5.10.5 内核初始化程序目录 init 188
5.10.6 内核程序主目录 kernel 188
5.10.7 内核库函数目录 li 191
5.10.8 内存管理程序目录 mm 191
5.10.9 编译内核工具程序目录 tools 192
5.11 内核系统与应用程序的关系192
5.12 linux/Makefile 文件193
5.12.1 功能描述 193
5.12.2 代码注释 194
5.13 本章小结 198
第 6 章 引导启动程序 199
6.1 总体功能199
6.2 ootsect.S 程序201
6.2.1 功能描述 201
6.2.2 代码注释 202
6.2.3 其他信息 213
6.3 setup.S 程序214
6.3.1 功能描述 214
6.3.2 代码注释 216
6.3.3 其他信息 232
6.4 head.s 程序242
6.4.1 功能描述 242
6.4.2 代码注释 243
6.4.3 其他信息 251
6.5 本章小结253
第 7 章 初始化程序255
7.1 main.c 程序255
7.1.1 功能描述 255
7.1.2 代码注释 258
7.1.3 其他信息 265
7.2 环境初始化工作267
7.3 本章小结269
第 8 章 内核代码 271
8.1 总体功能271
8.1.1 中断处理程序 271
8.1.2 系统调用处理相关程序 272
8.1.3 其他通用类程序 273
8.2 asm.s 程序273
8.2.1 功能描述 273
8.2.2 代码注释 275
8.2.3 Intel 保留中断向量的定义 279
8.3 traps.c 程序279
8.3.1 功能描述 279
8.3.2 代码注释 279
8.4 sys_call.s 程序 284
8.4.1 功能描述 284
8.4.2 代码注释 286
8.4.3 其他信息 294
8.5 mktime.c 程序296
8.5.1 功能描述 296
8.5.2 代码注释 297
8.5.3 闰年的计算方法 298
8.6 sched.c 程序298
8.6.1 功能描述 298
8.6.2 代码注释 300
8.6.3 其他信息 312
8.7 signal.c 程序317
8.7.1 功能描述 317
8.7.2 代码注释 325
8.7.3 进程信号说明 331
8.8 exit.c 程序332
8.8.1 功能描述 332
8.8.2 代码注释 333
8.9 fork.c 程序345
8.9.1 功能描述 345
8.9.2 代码注释 346
8.9.3 任务状态段信息 351
8.10 sys.c 程序 352
8.10.1 功能描述 352
8.10.2 代码注释 353
8.11 vsprintf.c 程序 366
8.11.1 功能描述 366
8.11.2 代码注释 367
8.11.3 vsprintf()的格式字符串 372
8.11.4 与当前版本的区别 374
8.12 printk.c 程序374
8.12.1 功能描述 374
8.12.2 代码注释 375
8.13 panic.c 程序375
8.13.1 功能描述 375
8.13.2 代码注释 376
8.14 本章小结 376
第 9 章 块设备驱动程序377
9.1 总体功能378
9.1.1 块设备请求项和请求队列 378
9.1.2 块设备访问调度处理 380
9.1.3 块设备操作方式 380
9.2 lk.h 文件381
9.2.1 功能描述 381
9.2.2 代码注释 382
9.3 hd.c 程序 386
9.3.1 功能描述 386
9.3.2 代码注释 388
9.3.3 其他信息 400
9.4 ll_rw_lk.c 程序409
9.4.1 功能描述 409
9.4.2 代码注释 409
9.5 ramdisk.c 程序415
9.5.1 功能描述 415
9.5.2 代码注释 417
9.6 floppy.c 程序421
9.6.1 功能描述 421
9.6.2 代码注释 422
9.6.3 其他信息 435
第 10 章 字符设备驱动程序449
10.1 总体功能449
10.1.1 终端驱动程序基本原理 449
10.1.2 Linux 支持的终端设备类型 450
10.1.3 终端基本数据结构 451
10.1.4 规范模式和非规范模式 455
10.1.5 控制台终端和串行终端设备 456
10.1.6 终端驱动程序接口 459
10.2 keyoard.S 程序459
10.2.1 功能描述 459
10.2.2 代码注释 459
10.2.3 其他信息 473
10.3 console.c 程序477
10.3.1 功能描述 477
10.3.2 代码注释 477
10.3.3 其他信息 503
10.4 serial.c 程序510
10.4.1 功能描述 510
10.4.2 代码注释 510
10.4.3 异步串行通信控制器 UART 512
10.5 rs_io.s 程序517
10.5.1 功能描述 517
10.5.2 代码注释 518
10.6 tty_io.c 程序522
10.6.1 功能描述 522
10.6.2 代码注释 523
10.6.3 控制字符 VTIME、VMIN 536
10.7 tty_ioctl.c 程序536
10.7.1 功能描述 536
10.7.2 代码注释 537
10.7.3 波特率与波特率因子 543
第 11 章 数学协处理器545
11.1 总体功能描述545
11.1.1 浮点数据类型 546
11.1.2 数学协处理器功能和结构 550
11.2 math_emulate.c 程序553
11.2.1 功能描述 553
11.2.2 代码注释 555
11.3 error.c 程序565
11.3.1 功能描述 565
11.3.2 代码注释 566
11.4 ea.c 程序566
11.4.1 功能描述 566
11.4.2 代码注释 567
11.5 convert.c 程序570
11.5.1 功能描述 570
11.5.2 代码注释 570
11.6 add.c 程序574
11.6.1 功能描述 574
11.6.2 代码注释 575
11.7 compare.c 程序577
11.7.1 功能描述 577
11.7.2 代码注释 577
11.8 get_put.c 程序579
11.8.1 功能描述 579
11.8.2 代码注释 579
11.9 mul.c 程序585
11.9.1 功能描述 585
11.9.2 代码注释 585
11.10 div.c 程序586
11.10.1 功能描述 586
11.10.2 代码注释 587
第 12 章 文件系统589
12.1 总体功能 589
12.1.1 MINIX 文件系统 590
12.1.2 文件类型、属性和目录项 594
12.1.3 高速缓冲区 598
12.1.4 文件系统底层函数 599
12.1.5 文件中数据的访问操作 599
12.1.6 文件和目录管理系统调用 601
12.1.7 360K 软盘中文件系统实例分析602
12.2 uffer.c 程序605
12.2.1 功能描述 605
12.2.2 代码注释 611
12.3 itmap.c 程序621
12.3.1 功能描述 622
12.3.2 代码注释 622
12.4 truncate.c 程序627
12.4.1 功能描述 627
12.4.2 代码注释 627
12.5 inode.c 程序630
12.5.1 功能描述 630
12.5.2 代码注释 632
12.6 super.c 程序641
12.6.1 功能描述 641
12.6.2 代码注释 642
12.7 namei.c 程序650
12.7.1 功能描述 650
12.7.2 代码注释 651
12.8 file_tale.c 程序675
12.8.1 功能描述 675
12.8.2 代码注释 675
12.9 lock_dev.c 程序676
12.9.1 功能描述 676
12.9.2 代码注释 677
12.10 file_dev.c 程序 680
12.10.1 功能描述 680
12.10.2 代码注释 680
12.11 pipe.c 程序682
12.11.1 功能描述 682
12.11.2 代码注释 683
12.12 char_dev.c 程序687
12.12.1 功能描述 687
12.12.2 代码注释 687
12.13 read_write.c 程序690
12.13.1 功能描述 690
12.13.2 代码注释 690
12.13.3 用户程序读写操作过程 693
12.14 open.c 程序695
12.14.1 功能描述 696
12.14.2 代码注释 696
12.15 exec.c 程序 703
12.15.1 功能描述 703
12.15.2 代码注释 707
12.16 stat.c 程序718
12.16.1 功能描述 718
12.16.2 代码注释 718
12.17 fcntl.c 程序 721
12.17.1 功能描述 721
12.17.2 代码注释 722
12.18 ioctl.c 程序724
12.18.1 功能描述 724
12.18.2 代码注释 724
12.19 select.c 程序725
12.19.1 功能描述 725
12.19.2 代码注释 730
第 13 章 内存管理738
13.1 总体功能 738
13.1.1 内存分页管理机制 738
13.1.2 物理内存的管理和分配 741
13.1.3 线性地址空间的使用分配 742
13.1.4 逻辑地址、线性地址和物理地址之间的变换 742
13.1.5 页面出错异常处理 744
13.1.6 写时复制机制 745
13.1.7 需求加载机制 745
13.2 memory.c 程序746
13.2.1 功能描述 746
13.2.2 代码注释 748
13.3 page.s 程序 764
13.3.1 功能描述 764
13.3.2 代码注释 764
13.4 swap.c 程序 765
13.4.1 功能描述 765
13.4.2 代码注释 766
第 14 章 头文件774
14.1 include/目录下的文件774
14.2 a.out.h 文件775
14.2.1 功能描述 775
14.2.2 代码注释 776
14.2.3 a.out 执行文件格式 782
14.3 const.h 文件 785
14.3.1 功能描述 785
14.3.2 代码注释 785
14.4 ctype.h 文件786
14.4.1 功能描述 786
14.4.2 代码注释 786
14.5 errno.h 文件 787
14.5.1 功能描述 787
14.5.2 代码注释 788
14.6 fcntl.h 文件 789
14.6.1 功能描述 789
14.6.2 代码注释 789
14.7 signal.h 文件791
14.7.1 功能描述 791
14.7.2 文件注释 791
14.8 stdarg.h 文件794
14.8.1 功能描述 794
14.8.2 代码注释 794
14.9 stddef.h 文件795
14.9.1 功能描述 795
14.9.2 代码注释 795
14.10 string.h 文件796
14.10.1 功能描述 796
14.10.2 代码注释 796
14.11 termios.h 文件805
14.11.1 功能描述 805
14.11.2 代码注释 806
14.11.3 控制字符 TIME 和 MIN 811
14.12 time.h 文件812
14.12.1 功能描述 812
14.12.2 代码注释 812
14.13 unistd.h 文件814
14.13.1 功能描述 814
14.13.2 代码注释 814
14.14 utime.h 文件820
14.14.1 功能描述 820
14.14.2 代码注释 820
14.15 include/asm/目录下的文件820
14.16 io.h 文件 820
14.16.1 功能描述 820
14.16.2 代码注释 821
14.17 memory.h 文件821
14.17.1 功能描述 821
14.17.2 代码注释 821
14.18 segment.h 文件 822
14.18.1 功能描述 822
14.18.2 代码注释 822
14.19 system.h 文件824
14.19.1 功能描述
猜您喜欢

读书导航