Linux Kernel Development

副标题:无

作   者:(美)Robert Love著;陈莉君,康华,张波译

分类号:

ISBN:9787111152415

微信扫一扫,移动浏览光盘

简介

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

目录

出版者的话

专家指导委员会

译者序

序言

前言

第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 算法复杂度

参考资料


已确认勘误

次印刷

页码 勘误内容 提交人 修订印次

Linux Kernel Development
    • 名称
    • 类型
    • 大小

    光盘服务联系方式: 020-38250260    客服QQ:4006604884

    意见反馈

    14:15

    关闭

    云图客服:

    尊敬的用户,您好!您有任何提议或者建议都可以在此提出来,我们会谦虚地接受任何意见。

    或者您是想咨询:

    用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问

    Video Player
    ×
    Audio Player
    ×
    pdf Player
    ×
    Current View

    看过该图书的还喜欢

    some pictures

    解忧杂货店

    东野圭吾 (作者), 李盈春 (译者)

    loading icon