《Linux内核源代码》PDF下载

  • 购买积分:18 如何计算积分?
  • 作  者:范磊编著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2002
  • ISBN:7115098476
  • 页数:615 页
图书介绍:本书从操作系统的基本原理入手,全面分析了内核数据结构之间的关系,从而深入剖析了Linux操作系统的内在机制和实现方法。本书共分13章,详细地分析了Linux操作系统的各个功能模块,包括系统初始化、中断、系统调用、进程管理、进程间通信模块、内存管理、文件系统、虚拟文件系统、设备驱动、网络、多对称处理等,并且在每章后列出了精选的Linux内核源代码程序。本书是一本具有很强指导性的学习参考书。本书适用于Linux系统管理员、Linux系统程序员以及大专院校相关专业的师生。

第1章 Linux操作系统概述 1

1.1 Linux的历史 2

1.2 Linux开发过程 4

1.3 Linux的现状 4

1.3.1 RedHat 6.0(http://www.redhat.com) 5

1.3.2 Slackware 3.4(http://www.cdrom.com) 5

1.3.3 Debian 1.3.1(http://www.debian.org) 5

1.3.4 SuSE Linux 5.2(http://www.suse.com) 5

1.4 分析内核的意义 6

1.4.1 开发“自己的”操作系统 6

1.3.6 红旗Linux 6

1.3.5 Turbo Linux 4.0简体中文标准版10CD 6

1.4.2 开发高水平软件 7

1.4.3 计算机科学的教学和科研 7

1.5 小结与练习 8

1.5.1 小结 8

1.5.2 习题与思考 8

第2章 内核体系结构概述 9

2.1.2 兼容性 10

2.1 内核设计目标 10

2.1.1 清晰性 10

2.1.3 可移植性 11

2.1.4 健壮性和安全性 12

2.1.5 速度 12

2.2 内核体系结构初识 12

2.3 内核体系结构的深入了解 14

2.4 Linux内核的类型 15

2.4.1 层次(Layer) 15

2.4.2 Linux内核类型 16

2.5 了解Linux内核源代码 18

2.5.1 内核源代码结构 18

2.5.2 体系结构相关和体系结构无关的代码 23

2.6 Linux内核源代码的部分特点 23

2.6.1 gcc特性的使用 23

2.6.2 内核代码习惯用语 24

2.6.3 减少#if和#ifdef的使用 25

2.7 代码详例 25

2.7.1 printk函数 26

2.7.2 等待队列 29

2.7.3 内核模块 32

2.8 配置与编译内核 34

2.8.1 配置内核 34

2.8.2 构建内核 35

2.8.3 备份的重要性 35

2.8.4 发布改进 36

2.9.2 习题与思考 37

2.9.1 小结 37

2.9 小结与练习 37

2.8.5 多版本的内核代码 37

第3章 系统初始化 39

3.1 初始化流程 40

3.1.1 系统加电或复位 41

3.1.2 BIOS启动 41

3.1.3 Boot Loader 41

3.1.4 操作系统内核的初始化 41

3.3 操作系统的初始化 42

3.2.2 其他硬件设备对初始化的影响 42

3.2 初始化的任务 42

3.2.1 处理器对初始化的影响 42

3.3.1 引导PC机(BIOS启动和LILO引导) 43

3.3.2 准备Linux内核 44

3.3.3 初始化Linux内核 46

3.3.4 Bogo MIPS 48

3.3.5 分析内核选项 49

3.4 init进程 53

3.5 本章代码 54

3.6.2 习题与思考 76

3.6 小结与练习 76

3.6.1 小结 76

第4章 进程 77

4.1 进程在内核中的表示方法 79

4.2 进程的状态 81

4.3 引用计数 81

4.4 优先级 81

4.5 创建进程 83

4.5.1 fork和_clone 83

4.5.3 进程的运行 84

4.5.2 分配PID 84

4.6 进程调度 87

4.6.1 调度策略 87

4.6.2 调度函数 89

4.6.3 计算goodness值 91

4.6.4 非实时优先级 92

4.6.5 实时优先级 93

4.7 遵守限制 95

4.7.1 权能 95

4.7.3 资源限制 98

4.7.2 用户ID和组ID 98

4.8 进程的结束 99

4.8.1 exit函数组 99

4.8.2 wait函数组 100

4.9 本章代码 101

4.10 小结与练习 146

4.10.1 小结 146

4.10.2 习题与思考 146

第5章 中断和中断处理 147

5.1.1 可编程中断控制器 149

5.1 硬件基础 149

5.1.2 初始化中断处理数据结构 150

5.1.3 中断处理任务 151

5.2 中断及其有关数据结构 152

5.2.1 中断和中断请求IRQ 152

5.2.2 数据结构 153

5.3 初始化中断请求 154

5.4 中断处理 157

5.5 本章代码 160

5.6.2 习题与思考 185

5.6 小结与练习 185

5.6.1 小结 185

第6章 系统调用 187

6.1 什么是系统调用 188

6.2 基本原理 189

6.3 系统调用的初始化 190

6.3.1 在处理系统调用时使用“陷阱门”的原因 190

6.3.2 利用“陷阱门”完成向高特权级(内核)切换 190

6.4 如何激活系统调用 191

6.3.3 “陷阱门”特权切换时堆栈的变化 191

6.4.1 system_call函数 192

6.4.2 lcall7函数 196

6.5 系统调用样例 197

6.5.1 sys_ni_syscal函数 197

6.5.2 sys_time函数 198

6.5.3 sys_reboot 199

6.5.4 sys_sysinfo函数 200

6.6 本章代码 201

6.7.2 习题与思考 224

6.7.1 小结 224

6.7 小结与练习 224

第7章 内存管理 225

7.1 虚拟内存 226

7.1.1 虚拟内存的抽象模型 226

7.1.2 交换和分页 228

7.1.3 地址空间 229

7.1.4 内存管理单元(MMU) 229

7.1.5 页目录和页表 230

7.1.7 段 232

7.1.6 转换后备缓存 232

7.2 进程的内存组织 233

7.2.1 struct vm_area_struct 233

7.2.2 struct vm_operations_struct 234

7.2.3 struct mm_struct 235

7.2.4 VMA的操作 235

7.3 分页 236

7.3.1 页面保护详述 236

7.3.3 页面错误 237

7.3.2 写拷贝 237

7.3.4 页面调出 242

7.4 交换设备 243

7.4.1 get_swap_page函数 244

7.4.2 swap_free函数 244

7.4.3 sys_swapoff函数 245

7.4.4 sys_swapon函数 245

7.5 内存映射mmap 247

7.5.1 do_mmap函数 247

7.5.2 merge_segments函数 248

7.5.3 do_munmap函数 249

7.5.4 unmap_fixup函数 250

7.6 用户空间和内核空间的动态内存 251

7.6.1 brk 251

7.6.2 vmalloc和vfree 252

7.7 主存储器信息转储 255

7.8 缓存和刷新机制 257

7.8.1 linux使用的缓存 257

7.8.2 缓冲区高速缓存 258

7.9 内存的初始化 260

7.9.1 内存的初始化过程 260

7.9.2 进入用户模式 261

7.10 本章代码 261

7.11 小结与练习 306

7.11.1 小结 306

7.11.2 习题与思考 306

第8章 虚拟文件系统 307

8.1 概述 308

8.2 VFS中的重要数据结构 309

8.2.1 VFS的超级块 310

8.2.2 VFS的索引节点 311

8.2.3 与进程联系的三个结构 312

8.2.4 有关操作的数据结构 314

8.3 高速缓存 317

8.3.1 块高速缓存 317

8.3.2 索引节点高速缓存 320

8.3.3 目录高速缓存 320

8.4.1 文件系统的注册 321

8.4 文件系统的注册、安装与卸载 321

8.4.2 文件系统的安装 322

8.4.3 文件系统的卸载 323

8.5 限额机制 323

8.6 文件系统的系统调用 325

8.6.1 open系统调用 325

8.6.2 read系统调用 326

8.6.3 fcntl系统调用 327

8.7 本章代码 328

8.8.2 习题与思考 360

8.8 小结与练习 360

8.8.1 小结 360

第9章 EXT2文件系统 361

9.1 基本概念 362

9.1.1 一组字节到逻辑块的映射 363

9.1.2 逻辑块到物理块的映射 363

9.2 EXT2的磁盘布局和数据结构 364

9.2.1 EXT2的磁盘布局 364

9.2.2 EXT2超级块 365

9.2.3 EXT2索引节点 367

9.2.5 位图 370

9.2.4 EXT2组描述符 370

9.2.6 索引节点表及举例 371

9.2.7 EXT2目录 372

9.2.8 在一个EXT2文件系统中查找一个文件 373

9.2.9 在EXT2文件系统中改变一个文件的大小 373

9.3 文件的访问权限和安全 375

9.4 连接文件 377

9.5 错误处理 377

9.6.2 分配新的索引节点的算法 378

9.6 分配策略 378

9.6.1 分配新块的算法 378

9.7 本章代码 379

9.8 小结与练习 410

9.8.1 小结 410

9.8.2 习题与思考 410

第10章 进程间通信 411

10.1 管理(pipe) 412

10.1.1 Linux管道机制的实现 413

10.1.2 管道的应用 414

10.1.3 命名管道(FIFO) 415

10.2 System V IPC机制 416

10.2.1 消息队列 416

10.2.2 信号量 428

10.3 共享内存 437

10.4 信号 443

10.4.1 信号的引入 443

10.4.2 信号掩码 444

10.4.3 系统调用 445

10.4.4 进程与信号的关系 446

10.5 本章代码 447

10.6 小结与练习 502

10.6.1 小结 502

10.6.2 习题与思考 502

第11章 设备驱动 503

11.1 Linux的设备驱动 504

11.1.1 I/O软件 505

11.1.2 设备驱动程序 506

11.1.3 Linux驱动程序的几个通用函数 508

11.2 中断 509

11.2.1 硬件对中断的支持 510

11.2.2 Linux对中断的管理 511

11.2.3 Linux对中断的处理 512

11.3 块设备驱动程序 512

11.3.1 块设备驱动程序的登记 513

11.3.2 块设备基于缓冲区的数据交换 513

11.3.3 PAM盘驱动程序的实现 514

11.3.4 硬盘驱动程序的实现 515

11.4 字符设备驱动程序 517

11.4.1 字符设备的注册 517

11.4.2 工作内存 518

11.4.3 基本入口点 519

11.5 网络设备的初始化 519

11.6 本章代码 520

11.7 小结与练习 542

11.7.1 小结 542

11.7.2 习题与思考 542

第12章 网络 543

12.1 概述 544

12.1.1 Linux的网络层次结构 544

12.1.2 面向对象的设计方法实现网络层次 544

12.2 网络协议 545

12.2.1 网络参考模型 545

12.2.2 TCP/IP协议工作原理及数据流 546

12.2.3 Internet协议 548

12.3 套接字(socket) 551

12.3.1 套接字在网络中的地位和作用 551

12.3.2 套接字接口的种类 552

12.3.3 套接字的工作原理 553

12.3.4 socket的通信过程 554

12.3.5 socket为用户提供的系统调用 557

12.4 套接字缓冲区(sk_buff) 557

12.4.1 套接字缓冲区的特点 557

12.4.2 套接字缓冲区操作基本原理 558

12.4.3 sk_buff数据结构的核心内容 559

12.4.4 套接字缓冲区提供的函数 561

12.4.5 套接字缓冲区的上层支持例程 562

12.5 网络设备接口 563

12.5.1 基本结构 563

12.5.2 命令规则 564

12.5.3 设备注册 564

12.5.4 网络设备数据结构 565

12.5.5 支持函数 567

12.6 本章代码 570

12.7.1 小结 578

12.7.2 习题与思考 578

12.7 小结与练习 578

第13章 多对称处理 579

13.1 并行程序设计概念及其原语 581

13.1.1 原子操作 581

13.1.2 test-and-set原语 583

13.1.3 信号量 584

13.1.4 自旋锁 589

13.2 APIC和CPU-TO-CPU通信 591

13.3.1 对调度的影响 592

13.3 SMP对内核的影响 592

13.3.2 smp_local_timer_interrupt函数 595

13.3.3 lock_kernel函数和unlock_kernel函数 596

13.3.4 softirq_trylock函数 597

13.3.5 cli宏和sti宏 597

13.3.6 irq_enter函数和irq_exit函数 598

13.4 本章代码 599

13.5 小结与练习 606

13.5.1 小结 606

13.5.2 习题与思考 606

附录 部分习题参考答案 607