注册 | 登录读书好,好读书,读好书!
读书网-DuShu.com
当前位置: 首页出版图书科学技术计算机/网络操作系统LinuxLinux内核设计与实现

Linux内核设计与实现

Linux内核设计与实现

定 价:¥35.00

作 者: (美)Robert Love著;陈莉君,康华,张波译;陈莉君译
出版社: 机械工业出版社
丛编项: 计算机科学丛书
标 签: Linux

ISBN: 9787111152415 出版时间: 2005-03-01 包装: 胶版纸
开本: 26cm 页数: 257 字数:  

内容简介

  “如果有这样一本书,既能提纲挈领,为我理顺思绪、指引方向;同时又能照顾小节、阐述细微,帮助我更好更快地理解源码,那该有多好。”说这话的先生虽然针对的是C++,但道出的是研习源码的人们共同的心声。我们能不能做点儿什么,让学习Linux内核的过程更符合程序员的习惯呢?本书回答了这个问题。本书作者RobertLove是一个狂热的内核爱好者,所以他的想法自然贴近程序员。本书内容涉及Linux 2.6内核,包含许多新特性,如O(1)调度程序、块I/0层、I/0调度程序等。本书提供Linux内核设计和实现的概述性信息,覆盖了从核心内核系统的应用到内核设计与实现等各方面内容,能够带领读者快速走进Linux内核世界。本书不但介绍了理论,而且也讨论了具体应用,可以满足不同读者的需要,适合于各类希望理解Linux内核软件开发的读者。

作者简介

  Robert Love:很早就开始使用Linux, 而且一直活跃于开源社区. 最近, 他受聘于Monta Vista软件公司, 作为软件工程师继续做开发Linux内核的工作. 他的内核项目包括进程调度程序. 抢占式内核, 还有VM和多任务处理性能优化. 他负责维护的另外两个开源项目是schedutils和procps. 此外, 他对内核还有不少精彩评论, 并担任Linux Journal杂志的特邀编辑.

图书目录

 第1章  Linux内核简介
 1. 1  Linux简介
 1. 2  操作系统和内核简介
 1. 3  Linux内核和传统Unix内核的比较
 1. 4  Linux内核版本
 1. 5  Linux内核开发者社区
 1. 6  内核开发的特点
 1. 6. 1  没有libc库
 1. 6. 2  GNU C
 1. 6. 3  没有内存保护机制
 1. 6. 4  不要轻易在内核中使用浮点数
 1. 6. 5  容积小而固定的栈
 1. 6. 6  同步和并发
 1. 6. 7  可移植性的重要性
 1. 7  编译内核
 1. 8  小结
 第2章  进程管理
 2. 1  进程描述符及任务队列
 2. 1. 1  分配进程描述符
 2. 1. 2  进程描述符的存放
 2. 1. 3  进程状态
 2. 1. 4  设置当前进程状态
 2. 1. 5  进程上下文
 2. 2  进程创建
 2. 2. 1  写时拷贝
 2. 2. 2  fork()
 2. 2. 3  vfork()
 2. 3  线程在Linux中的实现
 2. 4  进程终结
 2. 4. 1  删除进程描述符
 2. 4. 2  孤儿进程造成的进退维谷
 第3章  调度
 3. 1  策略
 3. 1. 1  I/O消耗型和处理器消耗型的进程
 3. 1. 2  进程优先级
 3. 1. 3  时间片
 3. 1. 4  进程抢占
 3. 1. 5  调度策略的活动
 3. 2  调度算法
 3. 2. 1  可执行队列
 3. 2. 2  优先级数组
 3. 2. 3  重新计算时间片
 3. 2. 4  计算优先级和时间片
 3. 2. 5  睡眠和唤醒
 3. 2. 6  负载平衡程序
 3. 3  抢占和上下文切换
 3. 3. 1  用户抢占
 3. 3. 2  内核抢占
 3. 4  实时
 3. 5  与调度相关的系统调用
 3. 5. 1  与调度策略和优先级相关的系统调用
 3. 5. 2  与处理器绑定有关的系统调用
 3. 5. 3  放弃处理器时间
 第4章  系统调用
 4. 1  API. POSIX和C库
 4. 2  系统调用
 4. 2. 1  系统调用号
 4. 2. 2  系统调用的性能
 4. 3  系统调用处理程序
 4. 3. 1  指定恰当的系统调用
 4. 3. 2  参数传递
 4. 4  系统调用的实现
 4. 5  系统调用上下文
 4. 5. 1  绑定一个系统调用的最后步骤
 4. 5. 2  从用户空间访问系统调用
 4. 5. 3  为什么不通过系统调用的方式实现
 第5章  中断和中断处理程序
 5. 1  中断
 5. 2  中断处理程序
 5. 3  注册中断处理程序
 5. 4  编写中断处理程序
 5. 4. 1  共享的中断处理程序
 5. 4. 2  中断处理程序实例
 5. 4. 3  中断上下文
 5. 5  中断处理机制的实现
 5. 6  中断控制
 5. 6. 1  禁止和激活中断
 5. 6. 2  禁止指定中断线
 5. 6. 3  中断系统的状态
 第6章  下半部和推后执行的工作
 6. 1  下半部
 6. 1. 1  为什么要用下半部
 6. 1. 2  下半部的环境
 6. 2  软中断
 6. 2. 1  软中断的实现
 6. 2. 2  使用软中断
 6. 3  Tasklets
 6. 3. 1  Tasklets的实现
 6. 3. 2  使用Tasklets
 6. 3. 3  ksoftirqd
 6. 3. 4  老的BH机制
 6. 4  工作队列
 6. 4. 1  工作队列的实现
 6. 4. 2  使用工作队列
 6. 4. 3  老的任务队列机制
 6. 5  下半部机制的选择
 6. 6  在下半部之间加锁
 第7章  内核同步介绍
 7. 1  临界区和竞争条件
 7. 2  加锁
 7. 2. 1  到底是什么造成了并发执行
 7. 2. 2  需要保护什么
 7. 3  死锁
 7. 4  争用和扩展性
 7. 5  小结
 第8章  内核同步方法
 8. 1  原子操作
 8. 1. 1  原子整数操作
 8. 1. 2  原子位操作
 8. 2  自旋锁
 8. 2. 1  其他针对自旋锁的操作
 8. 2. 2  自旋锁和下半部
 8. 3  读-写自旋锁
 8. 4  信号量
 8. 4. 1  创建和初始化信号量
 8. 4. 2  使用信号量
 8. 5  读-写信号量
 8. 6  完成变量
 8. 7  BKL
 8. 8  Seq锁
 8. 9  禁止抢占
 8. 10  屏障
 第9章  定时器和时间管理
 9. 1  内核中的时间概念
 9. 2  节拍率:Hz
 9. 3  jiffes
 9. 3. 1  jiffies的内部表示
 9. 3. 2  jiffies的回绕
 9. 3. 3  用户空间和Hz
 9. 4  硬时钟和定时器
 9. 4. 1  实时时钟
 9. 4. 2  系统定时器
 9. 5  时钟中断处理程序
 9. 6  实际时间
 9. 7  定时器
 9. 7. 1  使用定时器
 9. 7. 2  定时器竞争条件
 9. 7. 3  实现定时器
 9. 8  延迟执行
 9. 8. 1  忙等待
 9. 8. 2  短延迟
 第10章  内存管理
 10. 1  页
 10. 2  区
 10. 3  获得页
 10. 3. 1  获得填充为0的页
 10. 3. 2  释放页
 10. 4  slab层
 10. 5  slab分配器的接口
 10. 6  在栈上的静态分配
 10. 7  高端内存的映射
 10. 7. 1  永久映射
 10. 7. 2  临时映射
 10. 8  分配函数的选择
 第11章  虚拟文件系统
 11. 1  通用文件系统接口
 11. 2  文件系统抽象层
 11. 3  Unix文件系统
 11. 4  VFS对象及其数据结构
 11. 5  超级块对象
 11. 6  索引节点对象
 11. 7  目录项对象
 11. 7. 1  目录项状态
 11. 7. 2  目录项缓存
 11. 7. 3  目录项操作
 11. 8  文件对象
 11. 9  和文件系统相关的数据结构
 11. 10  和进程相关的数据结构
 11. 11  Linux中的文件系统
 第12章  块I/O层
 12. 1  解剖一个块设备
 12. 2  缓冲区和缓冲区头
 12. 3  bio结构体
 12. 4  请求队列
 12. 5  I/O调度程序
 12. 5. 1  I/O调度程序的工作
 12. 5. 2  Linus电梯
 12. 5. 3  最终期限I/O调度程序
 12. 5. 4  预测I/O调度程序
 第13章  进程地址空间
 13. 1  内存描述符
 13. 1. 1  分配内存描述符
 13. 1. 2  销毁内存描述符
 13. 1. 3  mm_struct与内核线程
 13. 2  内存区域
 13. 2. 1  VMA标志
 13. 2. 2  VM操作
 13. 2. 3  内存区域的树型结构和内存区域的链表结构
 13. 2. 4  实际使用中的内存区域
 13. 3  操作内存区域
 13. 3. 1  find_vma()
 13. 3. 2  find_vma_prev()
 13. 3. 3  find_vma_intersection()
 13. 4  mmap()和do_mmap():创建地址区间
 13. 5  mummap()和do_mummap():删除地址区间
 13. 6  页表
 第14章  页高速缓存和页回写
 14. 1  页高速缓存
 14. 2  基树
 14. 3  缓冲区高速缓存
 14. 4  pdflush后台例程
 14. 4. 1  bdflush和kupdated
 14. 4. 2  避免拥塞的方法:使用多线程
 第15章  调试
 15. 1  调度前需要准备什么
 15. 2  内核中的bug
 15. 2. 1  pintk()
 15. 2. 2  记录等级
 15. 2. 3  记录缓冲区
 15. 2. 4  syslogd和klogd
 15. 2. 5  printk()和内核开发时需要留意的一点
 15. 3  oops
 15. 3. 1  ksymoops
 15. 3. 2  kallsyms
 15. 4  内核调试配置选项
 15. 5  引发bug并打印信息
 15. 6  神奇的系统请求键
 15. 7  内核调试器的传奇
 15. 7. 1  gdb
 15. 7. 2  kgdb
 15. 7. 3  kdb
 15. 8  刺探系统
 15. 8. 1  用UID作为选择条件
 15. 8. 2  使用条件变量
 15. 8. 3  使用统计量
 15. 8. 4  重复频率限制
 15. 9  用二分查找法找出引发罪恶的变更
 15. 10  当所有的努力都失败时:社区
 第16章  可移植性
 16. 1  Linux移植史
 16. 2  字长和数据类型
 16. 2. 1  不透明类型
 16. 2. 2  指定数据类型
 16. 2. 3  长度明确的类型
 16. 2. 4  char型的符号问题
 16. 3  数据对齐
 16. 3. 1  避免对齐引发的问题
 16. 3. 2  非标准类型的对齐
 16. 3. 3  结构体填补
 16. 4  字节顺序
 16. 4. 1  高位优先和低位优先的历史
 16. 4. 2  内核中的字节顺序
 16. 5  时间
 16. 6  页长度
 16. 7  处理器排序
 16. 8  SMP. 内核抢占. 高端内存
 16. 9  小结
 第17章  补丁. 开发和社区
 17. 1  社区
 17. 2  Linux编码风格
 17. 2. 1  缩进
 17. 2. 2  括号
 17. 2. 3  命名规范
 17. 2. 4  函数
 17. 2. 5  注释
 17. 2. 6  Typedefs
 17. 2. 7  多用现成的东西
 17. 2. 8  在源码中不要使用ifdef
 17. 2. 9  结构初始化
 17. 2. 10  代码的事后修正
 17. 3  管理系统
 17. 4  提交错误报告
 17. 5  创建补丁
 17. 6  提交补丁
 附录A  链表
 附录B  单CPU接口
 附录C  内核随机数产生器
 附录D  算法复杂度
 参考资料

本目录推荐