第1章 x86硬件基础 1
1.1 保护模式 1
1.1.1 分页机制 1
1.1.2 分段机制 7
1.2 系统门 13
1.3 x86的寄存器 14
1.4 典型的PC系统结构简介 16
第2章 基础知识 18
2.1 AT&T与Intel汇编语法比较 18
2.2 gcc内嵌汇编 20
2.3 同步与互斥 25
2.3.1 原子操作 25
2.3.2 信号量 27
2.3.3 自旋锁 29
2.3.4 RCU机制 35
2.3.5 percpu变量 39
2.4 内存屏障 41
2.4.1 编译器引起的内存屏障 41
2.4.2 缓存引起的内存屏障 44
2.4.3 乱序执行引起的内存屏障 47
2.5 高级语言的函数调用规范 49
第3章 Linux内核Makefile分析 52
3.1 Linux内核编译概述 52
3.2 内核编译过程分析 54
3.3 内核链接脚本分析 62
第4章 Linux内核启动 65
4.1 BIOS启动阶段 65
4.2 实模式setup阶段 67
4.3 保护模式startup_32 77
4.4 内核启动start_kernel() 84
4.5 内核启动时的参数传递 90
4.5.1 内核参数处理 91
4.5.2 模块参数处理 95
第5章 内存管理 99
5.1 内存地址空间 99
5.1.1 物理内存地址空间 99
5.1.2 虚拟地址空间 101
5.2 内存管理的基本数据结构 104
5.2.1 物理内存页面描述符 104
5.2.2 内存管理区 106
5.2.3 非一致性内存管理 108
5.3 内存管理初始化 109
5.3.1 bootmem alloctor的初始化 109
5.3.2 页表初始化 115
5.3.3 内存管理结构的初始化 118
5.4 内存的分配与回收 127
5.4.1 伙伴算法 127
5.4.2 SLUB分配器 138
第6章 中断与异常处理 152
6.1 中断的分类 152
6.2 中断的初始化 156
6.2.1 异常初始化 156
6.2.2 中断的初始化 160
6.2.3 中断请求服务队列的初始化 167
6.3 中断与异常处理 171
6.3.1 特权转换与堆栈变化 171
6.3.2 中断处理 172
6.3.3 异常处理 177
6.4 软件中断与延迟函数 180
6.4.1 softirq 180
6.4.2 tasklet 185
6.5 中断与异常返回 187
6.6 中断优先级回顾 191
6.7 关于高级可编程中断控制器 192
6.7.1 APIC初始化 193
第7章 信号机制 199
7.1 信号机制的管理结构 200
7.2 信号发送 204
7.3 信号处理 210
第8章 系统调用 220
8.1 Libc和系统调用 220
第9章 时钟机制 226
9.1 clocksource对象 227
9.1.1 clocksource概述 227
9.1.2 clocksource初始化 228
9.2 tickless机制 232
9.2.1 tickless由来 232
9.2.2 clock event device对象概述 234
9.2.3 clock event device对象的初始化 236
9.3 High-Resolution Timers 247
9.3.1 High-Resolution Timers管理结构 247
9.3.2 High-Resolution Timers初始化 252
9.3.3 High-Resolution Timers操作 258
9.4 时钟中断处理 268
9.4.1 时钟维护 276
9.4.2 进程时间信息统计 281
9.5 软件定时器 283
9.5.1 基本管理结构 283
9.5.2 初始化 284
9.5.3 注册与过期处理 287
第10章 进程管理 295
10.1 进程描述符 296
10.1.1 进程状态 297
10.1.2 进程标识 299
10.1.3 进程的亲缘关系 300
10.1.4 进程的内核态堆栈 301
10.1.5 进程的虚拟内存布局 302
10.1.6 进程的文件信息 305
10.2 进程的建立 306
10.2.1 建立子进程的task_struct对象 308
10.2.2 子进程的内存区域 315
10.2.3 子进程的内核态堆栈 323
10.2.4 0号进程的建立 325
10.3 进程切换 327
10.4 进程的退出 331
10.4.1 do_exit函数 331
10.4.2 task_struct结构的删除 334
10.4.3 通知父进程 335
10.5 do_wait()函数 338
10.6 程序的加载 344
第11章 调度器 351
11.1 早期的调度器 351
11.2 CFS调度器的虚拟时钟 353
11.3 CFS调度器的基本管理结构 357
11.4 CFS调度器对象 359
11.5 CFS调度操作 360
11.5.1 update_curr()函数 360
11.5.2 scheduler_tick()函数 362
11.5.3 put_prev_task_fair()函数 364
11.5.4 pick_next_task()函数 366
11.5.5 等待和唤醒操作 368
11.5.6 nice系统调用 373
第12章 文件系统 376
12.1 Ext2的磁盘结构 376
12.2 Ext2的内存结构 385
12.3 虚拟文件系统的管理结构 387
12.3.1 文件系统对象 388
12.3.2 VFS的超级块 389
12.3.3 VFS的inode结构 400
12.3.4 VFS的文件对象 406
12.3.5 VFS的目录对象 409
12.3.6 VFS在进程中的文件结构 412
12.4 文件系统的挂载 413
12.5 路径定位 425
12.6 文件打开与关闭 441
12.7 文件读写 449
12.7.1 缓冲区管理 449
12.7.2 文件读写操作分析 456
第13章 常用内核分析方法 471
13.1 准确定位同名宏及结构体 471
13.2 准确定位同名函数 473
13.3 利用link map文件定位全局变量 474
13.4 准确定位函数调用线索 476
13.5 SystemTap在代码分析中的使用 479