目录译者序序言前言第1章 Linux内核简介1.1 追寻Linus的足迹:Linux简介1.2 操作系统和内核简介1.3 Linux内核和传统Unix内核的比较1.4 Linux内核版本1.5 Linux内核开发者社区1.6 小结第2章 从内核出发2.1 获取内核源码2.1.1 安装内核源代码2.1.2 使用补丁2.2 内核源码树2.3 编译内核2.3.1 减少编译的垃圾信息2.3.2 衍生多个编译作业2.3.3 安装内核2.4 内核开发的特点2.4.1 没有libc库2.4.2 GNU C2.4.3 没有内存保护机制2.4.4 不要轻易在内核中使用浮点数2.4.5 容积小而固定的栈2.4.6 同步和并发2.4.7 可移植性的重要性2.5 小结第3章 进程管理3.1 进程描述符及任务结构3.1.1 分配进程描述符3.1.2 进程描述符的存放3.1.3 进程状态3.1.4 设置当前进程状态3.1.5 进程上下文3.1.6 进程家族树3.2 进程创建3.2.1 写时拷贝3.2.2 fork()3.2.3 vfork()3.3 线程在Linux中的实现3.4 进程终结3.4.1 删除进程描述符3.4.2 孤儿进程造成的进退维谷3.5 进程小结第4章 进程调度4.1 策略4.1.1 I/O消耗型和处理器消耗型的进程4.1.2 进程优先级4.1.3 时间片4.1.4 进程抢占4.1.5 调度策略的活动4.2 Linux调度算法4.2.1 可执行队列4.2.2 优先级数组4.2.3 重新计算时间片4.2.4 schedule()4.2.5 计算优先级和时间片4.2.6 睡眠和唤醒4.2.7 负载平衡程序4.3 抢占和上下文切换4.3.1 用户抢占4.3.2 内核抢占4.4 实时4.5 与调度相关的系统调用4.5.1 与调度策略和优先级相关的系统调用4.5.2 与处理器绑定有关的系统调用4.5.3 放弃处理器时间4.6 调度程序小结第5章 系统调用5.1 API、POSIX和C库5.2 系统调用5.2.1 系统调用号5.2.2 系统调用的性能5.3 系统调用处理程序5.3.1 指定恰当的系统调用5.3.2 参数传递5.4 系统调用的实现5.5 系统调用上下文5.5.1 绑定一个系统调用的最后步骤5.5.2 从用户空间访问系统调用5.5.3 为什么不通过系统调用的方式实现5.6 系统调用小结第6章 中断和中断处理程序6.1 中断6.2 中断处理程序6.3 注册中断处理程序6.4 编写中断处理程序6.4.1 共享的中断处理程序6.4.2 中断处理程序实例6.5 中断上下文6.6 中断处理机制的实现6.7 中断控制6.7.1 禁止和激活中断6.7.2 禁止指定中断线6.7.3 中断系统的状态6.8 别打断我,马上结束第7章 下半部和推后执行的工作7.1 半部7.1.1 为什么要用下半部7.1.2 下半部的环境7.2 软中断7.2.1 软中断的实现7.2.2 使用软中断7.3 tasklet7.3.1 tasklet的实现7.3.2 使用tasklet7.3.3 ksoftirqd7.3.4 老的BH机制7.4 工作队列7.4.1 工作队列的实现7.4.2 使用工作队列7.4.3 老的任务队列机制7.5 下半部机制的选择7.6 在下半部之间加锁7.7 下半部处理小结第8章 内核同步介绍8.1 临界区和竞争条件8.2 加锁8.2.1 到底是什么造成了并发执行8.2.2 要保护些什么8.3 死锁8.4 争用和扩展性8.5 小结第9章 内核同步方法9.1 原子操作9.1.1 原子整数操作9.1.2 原子位操作9.2 自旋锁9.2.1 其他针对自旋锁的操作9.2.2 自旋锁和下半部9.3 读-写自旋锁9.4 信号量9.4.1 创建和初始化信号量9.4.2 使用信号量9.5 读-写信号量9.6 自旋锁与信号量9.7 完成变量9.8 BKL9.9 禁止抢占9.10 顺序和屏障9.11 小结第10章 定时器和时间管理10.1 内核中的时间概念10.2 节拍率:HZ10.3 jiffies10.3.1 jiffies的内部表示10.3.2 jiffies的回绕10.3.3 用户空间和HZ10.4 硬时钟和定时器10.4.1 实时时钟10.4.2 系统定时器10.5 时钟中断处理程序10.6 实际时间10.7 定时器10.7.1 使用定时器10.7.2 定时器竞争条件10.7.3 实现定时器10.8 延迟执行10.8.1 忙等待10.8.2 短延迟10.8.3 schedule_timeout()10.8.4 设置超时时间,在等待队列上睡眠10.9 小结第11章 内存管理11.1 页11.2 区11.3 获得页11.3.1 获得填充为0的页11.3.2 释放页11.4 kmalloc()11.4.1 gfp_mask标志11.4.2 kfree()11.5 vmalloc()11.6 slab层11.7 slab分配器的接口11.8 在栈上的静态分配11.9 高端内存的映射11.9.1 永久映射11.9.2 临时映射11.10 每个CPU的分配11.11 新的每个CPU接口11.11.1 编译时的每个CPU数据11.11.2 运行时的每个CPU数据11.12 使用每个CPU数据的原因11.13 分配函数的选择第12章 虚拟文件系统12.1 通用文件系统接口12.2 文件系统抽象层12.3 Unix文件系统12.4 VFS对象及其数据结构12.5 超级块对象12.6 索引节点对象12.7 目录项对象12.7.1 目录项状态12.7.2 目录项缓存12.7.3 目录项操作12.8 文件对象12.9 和文件系统相关的数据结构12.10 和进程相关的数据结构12.11 Linux中的文件系统第13章 块I/O层13.1 解剖一个块设备13.2 缓冲区和缓冲区头13.3 bio结构体13.4 请求队列13.5 I/O调度程序13.5.1 I/O调度程序的工作13.5.2 Linus电梯13.5.3 最终期限I/O调度程序13.5.4 预测I/O调度程序13.5.5 完全公正的排队I/O调度程序13.5.6 空操作的I/O调度程序13.5.7 I/O调度程序的选择13.6 小结第14章 进程地址空间14.1 内存描述符14.1.1 分配内存描述符14.1.2 销毁内存描述符14.1.3 mm_struct与内核线程14.2 内存区域14.2.1 VMA标志14.2.2 VMA操作14.2.3 内存区域的树型结构和内存区域的链表结构14.2.4 实际使用中的内存区域14.3 操作内存区域14.3.1 find_vma()14.3.2 find_vma_prev()14.3.3 find_vma_intersection()14.4 mmap()和do_mmap():创建地址区间14.5 munmap()和do_munmap():删除地址区间14.6 页表14.7 小结第15章 页高速缓存和页回写15.1 页高速缓存15.2 基树15.3 缓冲区高速缓存15.4 pdflush后台例程15.4.1 膝上型电脑模式15.4.2 bdflush和kupdated15.4.3 避免拥塞的方法:使用多线程15.5 小结第16章 模块16.1 构建模块16.1.1 放在内核源代码树中16.1.2 放在内核代码外16.2 安装模块16.3 产生模块依赖性16.4 载入模块16.5 管理配置选项16.6 模块参数16.7 导出符号表16.8 小结第17章 kobject sysfs17.1 kobject17 2 ktype17 3 kset17.4 subsystem17.5 别混淆了这些结构体17.6 管理和操作kobject17.7 引用计数17 8 sysfs17.8.1 sysfs中添加和删除kobject17.8.2 向sysfs中添加文件17.9 内核事件层17.10 小结第18章 调试18.1 调试前需要准备什么18.2 内核中的bug18.3 printk()18.3.1 printk()函数的健壮性18.3.2 记录等级18.3.3 记录缓冲区18.3.4 syslogd和klogd18.3.5 printk()和内核开发时需要留意的一点18.4 oops18.4.1 ksymoops18.4.2 kallsyms18.5 内核调试配置选项18.6 引发bug并打印信息18.7 神奇的SysRq18.8 内核调试器的传奇18.8.1 gdb18.8.2 kgdb18.8.3 kdb18.9 刺探系统18.9.1 用UID作为选择条件18.9.2 使用条件变量18.9.3 使用统计量18.9.4 重复频率限制18.10 用二分查找法找出引发灾难的变更18.11 当所有的努力都失败时第19章 可移植性19.1 Linux的可移植性19.2 字长和数据类型19.2.1 不透明类型19.2.2 指定数据类型19.2.3 长度明确的类型19.2.4 char型的符号问题19.3 数据对齐19.3.1 避免对齐引发的问题19.3.2 非标准类型的对齐19.3.3 结构体填补19.4 字节顺序19.4.1 高位优先和低位优先的历史19.4.2 内核中的字节顺序19.5 时间19.6 页长度19.7 处理器排序19.8 SMP、内核抢占、高端内存19.9 小结第20章 补丁、开发和社区20.1 社区20.2 Linux编码风格20.2.1 缩进20.2.2 括号20.2.3 每行代码的长度20.2.4 命名规范20.2.5 函数20.2.6 注释20.2.7 typedef20.2.8 多用现成的东西20.2.9 在源码中不要使用ifdef20.2.10 结构初始化20.2.11 代码的事后修正20.3 管理系统20.4 提交错误报告20.5 创建补丁20.6 提交补丁20.7 小结附录A 链表附录B 内核随机数产生器附录C 复杂度算法参考资料
下载Linux内核设计与实现用户还喜欢
- 18480 文章数
- 500万+ 热度
作者专栏
编辑推荐
- 淡抹u2引擎,修复内容较多,物有所值
- 界域传说·经典巨作=传世单机(一键安装)
- 丸子版本(175个传世版本大集合)
- GS版本:神话公益服务端+客户端
- 图片放大工具(放大图片不模糊)
- 剪映无限制VIP版
- 传奇世界客户端下载器,史上最全传世客户端
- 传世GS20220920商业引擎注册+登录配置器 解压密码是1
- U2官方排行榜游戏网关 支持元神,支持传家宝
- GS开战传世客户端+服务端
- (淡漠夕阳)u2引擎合区工具
- 传世GS引擎消除“你的游戏客户端版本号过旧,请及时更新”提示
- 传世一机多区双线路配置器--免密码版本
- 传世凤凰登陆器劫持修复软件
- SQLite3 for Navicat
- 传奇世界npc对话框编辑工具
- 传世GS落霞铭文服务器端
- gs_20210409引擎包+注册机(无限制)
- 传奇世界NPC对话封包查看器[支持时长版和极速版]
- 彩虹引擎传世脚本编辑工具1.7版来了,支持函数脚本翻译
评论