图书介绍

Linux内核设计与实现PDF|Epub|txt|kindle电子书版本网盘下载

Linux内核设计与实现
  • (美)Robert Love著;陈莉君,康华,张波译 著
  • 出版社: 北京:机械工业出版社
  • ISBN:7111152417
  • 出版时间:2004
  • 标注页数:257页
  • 文件大小:14MB
  • 文件页数:276页
  • 主题词:Linux操作系统-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

Linux内核设计与实现PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1章 Linux内核简介1

1.1 Linux简介2

1.2操作系统和内核简介3

1.3 Linux内核和传统Unix内核的比较4

1.4 Linux内核版本5

1.5 Linux内核开发者社区6

1.6 内核开发的特点6

1.6.1 没有libc库7

1.6.2 GNUC7

1.6.3 没有内存保护机制8

1.6.4 不要轻易在内核中使用浮点数9

1.6.5 容积小而固定的栈9

1.6.6 同步和并发9

1.6.7 可移植性的重要性9

1.7 编译内核10

1.8 小结11

第2章 进程管理13

2.1 进程描述符及任务队列14

2.1.1 分配进程描述符14

2.1 2 进程描述符的存放15

2.1.3 进程状态16

2.1.4 设置当前进程状态17

2.1.5 进程上下文17

2.2进程创建19

2.2.1写时拷贝19

2.2.2 fork()19

2.2.3 vfork()20

2.3线程在Linux中的实现20

2.4进程终结22

2.4.1删除进程描述符23

2.4.2孤儿进程造成的进退维谷24

3.1策略25

第3章 调度25

3.1.1 I/O消耗型和处理器消耗型的进程26

3.1.2 进程优先级26

3.1.3 时间片26

3.1.4 进程抢占27

3.1.5 调度策略的活动28

3.2 调度算法28

3.2.1 可执行队列28

3.2.2 优先级数组30

3.2.3重新计算时间片31

3.2.4 计算优先级和时间片33

3.2.5 睡眠和唤醒34

3.2.6 负载平衡程序36

3.3 抢占和上下文切换38

3.3.1用户抢占38

3.4 实时39

3.3.2内核抢占39

3.5 与调度相关的系统调用40

3.5.1 与调度策略和优先级相关的系统调用40

3.5.2 与处理器绑定有关的系统调用41

3.5.3 放弃处理器时间41

第4章 系统调用43

4.1 API、POSIX和C库43

4.2 系统调用44

4.3 系统调用处理程序45

4.3.1 指定恰当的系统调用45

4.2.1 系统调用号45

4.2.2 系统调用的性能45

4.3.2 参数传递46

4.4 系统调用的实现46

4.5系统调用上下文48

4.5.1 绑定一个系统调用的最后步骤48

4.5.2从用户空间访问系统调用50

4.5.3 为什么不通过系统调用的方式实现51

5.1 中断53

第5章 中断和中断处理程序53

5.2 中断处理程序54

5.3 注册中断处理程序55

5.4 编写中断处理程序56

5.4.1 共享的中断处理程序57

5.4.2 中断处理程序实例58

5.4.3 中断上下文59

5.5 中断处理机制的实现60

5.6.1 禁止和激活中断63

5.6 中断控制63

5.6.2 禁止指定中断线64

5.6.3 中断系统的状态65

第6章 下半部和推后执行的工作67

6.1 下半部67

6.1.1 为什么要用下半部68

6.1.2 下半部的环境68

6.2.1 软中断的实现70

6.2软中断70

6.2.2 使用软中断72

6.3 Tasklets73

6.3.1 Tasklets的实现74

6.3.2 使用Tasklets75

6.3.3 ksoftirqd77

6.3.4 老的BH机制78

6.4 工作队列79

6.4.1 工作队列的实现79

6.4.2 使用工作队列82

6.4.3 老的任务队列机制85

6.5 下半部机制的选择85

6.6 在下半部之间加锁86

第7章 内核同步介绍89

7.1 临界区和竞争条件89

7.2加锁90

7.2.1到底是什么造成了并发执行91

7.2.2需要保护什么92

7.3死锁93

7.4争用和扩展性95

7.5小结96

第8章 内核同步方法97

8.1原子操作97

8.1.1原子整数操作97

8.1.2原子位操作99

8.2 自旋锁100

8.2.1 其他针对自旋锁的操作102

8.2.2自旋锁和下半部103

8.3 读-写自旋锁103

8.4信号量105

8.4.1创建和初始化信号量106

8.4.2使用信号量107

8.5 读-写信号量108

8.7 BKL109

8.6 完成变量109

8.8 Seq锁110

8.9 禁止抢占111

8.10 屏障112

第9章 定时器和时间管理115

9.1 内核中的时间概念115

9.2 节拍率:Hz116

9.3 jiffes119

9.3.1 jiffies的内部表示119

9.3.2 jiffies的回绕120

9.3.3用户空间和Hz121

9.4 硬时钟和定时器122

9.4.1 实时时钟122

9.4.2系统定时器122

9.5 时钟中断处理程序122

9.6 实际时间124

9.7.1 使用定时器126

9.7 定时器126

9.7.3实现定时器128

9.8延迟执行128

9.7.2定时器竞争条件128

9.8.1 忙等待129

9.8.2 短延迟130

第10章 内存管理133

10.1 页133

10.2 区134

10.3 获得页136

10.3.1 获得填充为0的页137

10.3.2 释放页137

10.4 slab层143

10.5 slab分配器的接口145

10.6 在栈的静态分配148

10.7 高端内存的映射148

10.7.2 临时映射149

10.7.1 永久映射149

10.8 分配函数的选择150

第11章 虚拟文件系统151

11.1 通用文件系统接口151

11.2 文件系统抽象层151

11.3 Unix文件系统152

11.4 VFS对象及其数据结构153

11.5 超级块对象154

11.6 索引节点对象157

11.7 目录项对象161

11.7 1 目录项状态162

11.7.2 目录项缓存163

11.7.3 目录项操作163

11.8 文件对象164

11.9 和文件系统相关的数据结构168

11.10 和进程相关的数据结构170

11.11 Linux中的文件系统171

第12章 块I/O层173

12.1解剖一个块设备173

12.2缓冲区和缓冲区头174

12.3 bio结构体176

12.4 请求队列178

12.5 I/O调度程序179

12.5.1 I/O调度程序的工作179

12.5.2 Linus电梯180

12.5.3 最终期限I/O调度程序180

12.5.4 预测I/O调度程序182

第13章 进程地址空间185

13.1内存描述符186

13.1.1 分配内存描述符187

13.1.2 销毁内存描述符188

13.1.3 mm_struct与内核线程188

13.2内存区域188

13.2.1 VMA标志189

13.2.2 VM操作190

13.2.3内存区域的树型结构和内存区域的链表结构191

13.2.4实际使用中的内存区域191

13.3操作内存区域193

13.3.1 find_vma()193

13.3.2 find_vma_prev()193

13.3.3 find_vma_intersection()194

13.4 mmap()和do_mmap():创建地址区间195

13.5 mummap()和 do_mummap():删除地址区间196

13.6页表197

第14章 页高速缓存和页回写199

14.1页高速缓存199

14.2基树202

14.3缓冲区高速缓存203

14.4 pdflush后台例程203

14.4.1 bdflush和kupdatcd204

14.4.2避免拥塞的方法:使用多线程205

15.1调度前需要准备什么207

15.2内核中的bug207

第15章 调试207

15.2.1 pintk()208

15.2.2记录等级209

15.2.3记录缓冲区210

15.2.4 syslogd和klogd210

15.2.5 printk()和内核开发时需要留意的一点210

15.3 oops210

15.3.1 ksymoops212

15.3.2 kallsyms212

15.4内核调试配置选项212

15.5 引发bug并打印信息213

15.6神奇的系统请求键214

15.7内核调试器的传奇214

15.7.3 kdb215

15.7.1 gdb215

15.7.2 kgdb215

15.8 刺探系统216

15.8.1 用UID作为选择条件216

15.8.2 使用条件变量216

15.8.3 使用统计量216

15.8.4 重复频率限制217

15.9 用二分查找法找出引发罪恶的变更218

15.10 当所有的努力都失败时:社区218

第16章 可移植性219

16.1 Linux移植史220

16.2字长和数据类型220

16.2.1不透明类型222

16.2.2指定数据类型223

16.2.3长度明确的类型223

16.3.1 避免对齐引发的问题224

16.3 数据对齐224

16.2.4 char型的符号问题224

16.3.2 非标准类型的对齐225

16.3.3 结构体填补225

16.4 字节顺序226

16.4.1 高位优先和低位优先的历史227

16.4.2 内核中的字节顺序228

16.5 时间228

16.6 页长度228

16.8 SMP、内核抢占、高端内存229

16.7 处理器排序229

16.9小结230

第17章 补丁、开发和社区231

17.1 社区231

17.2 Linux编码风格231

17.2.1 缩进232

17.2.2 括号232

17.2.5 注释233

17.2.3 命名规范233

17.2.4 函数233

17.2.6 Typedefs234

17.2.7 多用现成的东西234

17.2.8 在源码中不要使用ifdef234

17.2.9 结构初始化235

17.2.10 代码的事后修正235

17.3 管理系统236

17.4 提交错误报告236

17.5 创建补丁236

17.6 提交补丁237

附录A 链表239

附录B 单CPU接口245

附录C 内核随机数产生器249

附录D 算法复杂度253

参考资料255

热门推荐