图书介绍

Linux内核编程PDF|Epub|txt|kindle电子书版本网盘下载

Linux内核编程
  • (美)罗德里格斯,(美)费舍尔,(美)斯莫斯基著;陈莉君,贺炎,刘霞林译 著
  • 出版社: 北京:人民邮电出版社
  • ISBN:9787115251947
  • 出版时间:2011
  • 标注页数:400页
  • 文件大小:28MB
  • 文件页数:416页
  • 主题词:Linux操作系统-程序设计

PDF下载


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

下载说明

Linux内核编程PDF格式电子书版下载

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

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

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

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

图书目录

第1章 概述1

1.1 UNIX的历史2

1.2 标准和通用接口3

1.3 自由软件和开放源码3

1.4 Linux发布版概览3

1.4.1 Debian4

1.4.2 Red Hat/Fedora4

1.4.3 Mandriva4

1.4.4 SUSE4

1.4.5 Gentoo4

1.4.6 Yellow Dog5

1.4.7 其他发布版5

1.5 内核版本信息5

1.6 基于Power的Linux5

1.7 什么是操作系统6

1.8 内核组织7

1.9 Linux内核概述7

1.9.1 用户接口7

1.9.2 用户标识符8

1.9.3 文件和文件系统8

1.9.4 进程12

1.9.5 系统调用15

1.9.6 Linux调度程序15

1.9.7 Linux设备驱动程序15

1.10 可移植性和体系结构的相关性16

1.11 小结16

1.12 习题16

第2章 内核探索工具集18

2.1 内核中常见的数据类型18

2.1.1 链表18

2.1.2 查找21

2.1.3 树22

2.2 汇编24

2.2.1 PowerPC24

2.2.2 x8627

2.3 汇编语言示例29

2.3.1 x86中的汇编示例30

2.3.2 PowerPC中的汇编示例31

2.4 内联汇编33

2.4.1 输出操作数34

2.4.2 输入操作数34

2.4.3 已修改过的寄存器(已修改的元素列表)34

2.4.4 参数的编号方式34

2.4.5 约束条件34

2.4.6 asm35

2.4.7 __volatile__35

2.5 特殊的C语言用法38

2.5.1 asmlinkage38

2.5.2 UL39

2.5.3 内联39

2.5.4 const和volatile39

2.6 内核探索工具一览40

2.6.1 objdump/readlf40

2.6.2 hexdump41

2.6.3 nm41

2.6.4 objcopy42

2.6.5 ar42

2.7 内核发言:倾听来自内核的消息42

2.7.1 printk()42

2.7.2 dmesg42

2.7.3 /var/log/messages42

2.8 其他奥秘43

2.8.1 __init43

2.8.2 likely()和unlikely()43

2.8.3 IS_ERR和PTR_ERR44

2.8.4 通告程序链44

2.9 小结45

2.9.1 项目:Hellomod45

2.9.2 第一步:构造Linux模块的框架45

2.9.3 第二步:编译模块46

2.9.4 第三步:运行代码47

2.10 习题48

第3章 进程:程序执行的基本模型49

3.1 程序51

3.2 进程描述符52

3.2.1 与进程属性相关的字段54

3.2.2 与调度相关的字段55

3.2.3 涉及进程间相互关系的字段58

3.2.4 与进程信任状相关的字段59

3.2.5 与进程权能相关的字段60

3.2.6 与进程限制相关的字段61

3.2.7 与文件系统及地址空间相关的字段63

3.3 进程的创建:系统调用fork()、vfork和clone()64

3.3.1 fork()函数65

3.3.2 vfork()函数66

3.3.3 clone()函数67

3.3.4 do_fork()函数68

3.4 进程的生命周期70

3.4.1 进程的状态70

3.4.2 进程状态的转换71

3.5 进程的终止74

3.5.1 sys_exit()函数75

3.5.2 do_exit()函数75

3.5.3 通知父进程和sys_wait4()77

3.6 了解进程的动态:调度程序的基本构架80

3.6.1 基本结构80

3.6.2 从等待中醒来或者激活81

3.7 等待队列86

3.7.1 添加到等待队列88

3.7.2 等待事件89

3.7.3 唤醒进程91

3.8 异步执行流程93

3.8.1 异常93

3.8.2 中断95

3.9 小结114

3.9.1 项目:系统变量current114

3.9.2 项目源码115

3.9.3 运行代码116

3.10 习题116

第4章 内存管理117

4.1 页119

4.2 内存管理区121

4.2.1 内存管理区描述符122

4.2.2 内存管理区操作辅助函数124

4.3 页面124

4.3.1 请求页面的函数124

4.3.2 释放页面的函数126

4.3.3 伙伴系统126

4.4 Slab分配器130

4.4.1 缓存描述符133

4.4.2 通用缓存描述符135

4.5 Slab描述符136

4.5 Slab分配器的生命周期138

4.5.1 与Slab分配器有关的全局变量138

4.5.2 创建缓存139

4.5.3 创建slab与cache_grow144

4.5.4 Slab的销毁:退还内存与kmem_cache_destroy()146

4.6 内存请求路径147

4.6.1 kmalloc()147

4.6.2 kmem_cache_alloc()148

4.7 Linux进程的内存结构149

4.7.1 mm_struct150

4.7.2 vm_area_struct152

4.8 进程映像的分布及线性地址空间153

4.9 页表155

4.10 缺页156

4.10.1 x86缺页异常156

4.10.2 缺页处理程序157

4.10.3 PowerPC缺页异常164

4.11 小结164

4.12 项目:进程内存映射165

4.13 习题166

第5章 输入/输出167

5.1 总线、桥、端口和接口的硬件实现167

5.2 设备171

5.2.1 块设备概述172

5.2.2 请求队列和I/O调度173

5.2.3 示例:“通用”块设备驱动程序180

5.2.4 设备操作182

5.2.5 字符设备183

5.2.6 网络设备184

5.2.7 时钟设备184

5.2.8 终端设备184

5.2.9 直接存储器存取184

5.3 小结185

5.4 项目:创建并口驱动程序187

5.4.1 并口的硬件185

5.4.2 运行的并口上软件187

5.5 习题192

第6章 文件系统194

6.1 文件系统的基本概念194

6.1.1 文件和文件名194

6.1.2 文件类型195

6.1.3 文件的附加属性195

6.1.4 目录和路径名196

6.1.5 文件操作197

6.1.6 文件描述符197

6.1.7 磁盘块、磁盘分区以及实现198

6.1.8 性能198

6.2 Linux虚拟文件系统198

6.2.1 VFS的数据结构200

6.2.2 全局链表和局部链表的应用211

6.3 与VFS相关的结构212

6.3.1 fs_struct结构212

6.3.2 files_struct结构213

6.4 页缓存216

6.4.1 address_epace结构217

6.4.2 buffer_head结构219

6.5 VFS的系统调用和文件系统层221

6.5.1 open()221

6.5.2 close()227

6.5.3 read()229

6.5.4 write()244

6.6 小结246

6.7 习题246

第7章 进程调度和内核同步247

7.1 Linux的调度程序248

7.1.1 选择下一个进程248

7.1.2 上下文切换253

7.1.3 让出CPU261

7.2 内核抢占269

7.2.1 显示内核抢占269

7.2.2 隐式用户抢占270

7.2.3 隐式内核抢占270

7.3 自旋锁和信号量272

7.4 系统时钟:关于时间和定时器274

7.4.1 实时时钟:现在几点了274

7.4.2 读取PPC的实时时钟276

7.4.3 读取x86的实时时钟278

7.5 小结280

7.6 习题280

第8章 内核引导281

8.1 BIOS和Open Firmware282

8.2 引导加载程序282

8.2.1 GRUB283

8.2.2 LILO286

8.2.3 PowerPC和Yaboot286

8.3 与体系结构相关的内存初始化287

8.3.1 PowerPC的硬件内存管理287

8.3.2 基于Intel x86体系结构的硬件内存管理296

8.3.3 PowerPC和x86的代码汇集305

8.4 原始的RAM盘305

8.5 开始:start_kernel()306

8.5.1 调用lock_kernel()307

8.5.2 调用page_address_init()309

8.5.3 调用printk(linux_banner)311

8.5.4 调用setup_arch311

8.5.5 调用setup_per_cpu_areas()315

8.5.6 调用smp_prepare_boot_cpu()316

8.5.7 调用sched_init()317

8.5.8 调用build_all_zonelists()319

8.5.9 调用page_alloc_init319

8.5.10 调用parse_args()320

8.5.11 调用trap_init()322

8.5.12 调用rcu_init()323

8.5.13 调用init_IRQ()323

8.5.14 调用softirq_init()324

8.5.15 调用time_init()325

8.5.16 调用console_init()326

8.5.17 调用profile_init()326

8.5.18 调用local_irq_enable()327

8.5.19 配置initrd327

8.5.20 调用mem_init()327

8.5.21 调用late_time_init()333

8.5.22 调用calitrate_delay()333

8.5.23 调用pgtable_cache_init()334

8.5.24 调用buffer_init()335

8.5.25 调用security_scaffol-ding_startup()336

8.5.26 调用vfs_caches_init()336

8.5.27 调用radix_tree_init()343

8.5.28 调用signal_init()344

8.5.29 调用page_writeback_init()344

8.5.30 调用proc_root_init()346

8.5.31 调用init_idle()347

8.5.32 调用rest_init()348

8.6 init线程(或进程1)349

8.7 小结353

8.8 习题353

第9章 构建Linux内核354

9.1 工具链354

9.1.1 编译程序355

9.1.2 交叉编译355

9.1.3 连接程序356

9.1.4 ELF二进制目标文件356

9.2 内核源代码的构建360

9.2.1 解释源代码360

9.2.2 构建内核映像364

9.3 小结369

9.4 习题369

第10章 向内核添加代码371

10.1 浏览源代码371

10.1.1 熟悉文件系统371

10.1.2 filp和fops372

10.1.3 用户空间和内核空间374

10.1.4 等待队列375

10.1.5 工作队列及中断378

10.1.6 系统调用380

10.1.7 其他类型的驱动程序380

10.1.8 设备模型和sysfs文件系统383

10.2 编写代码386

10.2.1 设备基础386

10.2.2 符号输出388

10.2.3 IOCTL388

10.2.4 轮询与中断391

10.2.5 工作队列和tasklet395

10.2.6 增加系统调用的代码396

10.3 构建和调试398

10.4 小结399

10.5 习题400

热门推荐