图书介绍

奔跑吧Linux内核 入门篇PDF|Epub|txt|kindle电子书版本网盘下载

奔跑吧Linux内核 入门篇
  • 张天飞著 著
  • 出版社: 北京:人民邮电出版社
  • ISBN:9787115502261
  • 出版时间:2019
  • 标注页数:366页
  • 文件大小:51MB
  • 文件页数:381页
  • 主题词: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的发展历史1

1.2 Linux发行版2

1.2.1 Red Hat Linux2

1.2.2 Debian Linux3

1.2.3 SuSE Linux4

1.2.4优麒麟Linux4

1.3 Linux内核5

1.3.1宏内核和微内核5

1.3.2 Linux内核概貌6

1.4如何学习Linux内核9

1.5 Linux内核实验入门10

1.5.1实验1:在虚拟机中安装优麒麟Linux 18.04系统10

1.5.2实验2:给优麒麟Linux系统更换“心脏”14

1.5.3实验3:使用定制的内核runninglinuxkernel15

1.5.4实验4:如何编译和运行一个ARM Linux内核19

第2章 Linux内核基础知识22

2.1 Linux常用的编译工具22

2.1.1 GCC工具22

2.1.2 ARM GCC23

2.1.3 GCC编译24

2.2 Linux内核中常用的C语言技巧25

2.3 Linux内核中常用的数据结构和算法31

2.3.1链表31

2.3.2红黑树34

2.3.3无锁环形缓冲区36

2.4 Vim工具的使用38

2.4.1 Vim 8介绍38

2.4.2 Vim的基本模式38

2.4.3 Vim中3种模式的切换39

2.4.4 Vim光标的移动40

2.4.5删除、复制和粘贴41

2.4.6查找和替换41

2.4.7文件相关41

2.5 git工具的使用42

2.5.1安装git43

2.5.2 git基本操作43

2.5.3分支管理46

2.6实验48

2.6.1实验1:GCC编译48

2.6.2实验2:内核链表51

2.6.3实验3:红黑树52

2.6.4实验4:使用Vim工具52

2.6.5实验5:把Vim打造成一个强大的IDE编辑工具52

2.6.6实验6:建立一个git本地仓库60

2.6.7实验7:解决合并分支冲突62

2.6.8实验8:利用git来管理Linux内核开发65

2.6.9实验9:利用git来管理项目代码67

第3章 内核编译和调试73

3.1内核配置73

3.1.1内核配置工具73

3.1.2.config文件74

3.2实验1:通过QEMU调试ARM Linux内核76

3.3实验2:通过QEMU调试ARMv8的Linux内核78

3.4实验3:通过Eclipse+QEMU单步调试内核81

3.5实验4:在QEMU中添加文件系统的支持85

第4章 内核模块86

4.1从一个内核模块开始86

4.2模块参数90

4.3符号共享92

4.4实验93

4.4.1实验1:编写一个简单的内核模块93

4.4.2实验2:向内核模块传递参数95

4.4.3实验3:在模块之间导出符号95

第5章 简单的字符设备驱动96

5.1实验1:从一个简单的字符设备开始97

5.2字符设备驱动详解102

5.2.1字符设备驱动的抽象102

5.2.2设备号的管理104

5.2.3设备节点104

5.2.4字符设备操作方法集105

5.3实验2:使用misc机制来创建设备107

5.4一个简单的虚拟设备109

5.4.1实验3:为虚拟设备编写驱动109

5.4.2实验4:使用KFIFO改进设备驱动112

5.5阻塞I/O和非阻塞I/O115

5.5.1实验5:把虚拟设备驱动改成非阻塞模式115

5.5.2实验6:把虚拟设备驱动改成阻塞模式118

5.6 I/O多路复用122

5.6.1 Linux的I/O多路复用122

5.6.2实验7:向虚拟设备中添加I/O多路复用支持123

5.7实验8:为什么不能唤醒读写进程128

5.8实验9:向虚拟设备中添加异步通知129

5.9本章小结133

第6章 系统调用134

6.1系统调用概念134

6.1.1系统调用和POSIX标准135

6.1.2系统调用表135

6.1.3用程序访问系统调用136

6.1.4新增系统调用137

6.2实验137

6.2.1实验1:在ARM32机器上新增一个系统调用137

6.2.2实验2:在优麒麟Linux机器上新增一个系统调用138

第7章 内存管理139

7.1从硬件角度看内存管理139

7.1.1内存管理的“远古时代”139

7.1.2分段机制141

7.1.3分页机制142

7.1.4虚拟地址到物理地址的转换143

7.2从软件角度看内存管理144

7.2.1 free命令144

7.2.2从应用编程角度看内存管理145

7.2.3从内存布局图角度看内存管理146

7.2.4从进程角度看内存管理150

7.3物理内存管理154

7.3.1物理页面155

7.3.2内存管理区159

7.3.3分配和释放页面162

7.3.4分配小块内存170

7.4虚拟内存管理177

7.4.1进程地址空间177

7.4.2内存描述符mm_struct178

7.4.3 VMA管理180

7.4.4 malloc分配函数183

7.4.5 mmap185

7.5缺页异常188

7.5.1 do_page_fault函数189

7.5.2匿名页面缺页异常190

7.5.3文件映射缺页中断190

7.5.4写时复制缺页异常191

7.5.5缺页异常小结192

7.6内存短缺193

7.6.1页面回收算法193

7.6.2 OOM Killer机制194

7.7内存管理实验195

7.7.1实验1:查看系统内存信息195

7.7.2实验2:获取系统的物理内存信息197

7.7.3实验3:分配内存199

7.7.4实验4:slab200

7.7.5实验5:VMA201

7.7.6实验6:mmap203

7.7.7实验7:映射用户内存203

7.7.8实验8:OOM204

第8章 进程管理205

8.1进程205

8.1.1进程的来由205

8.1.2进程描述符207

8.1.3进程的生命周期209

8.1.4进程标识212

8.1.5进程间的家族关系212

8.1.6获取当前进程214

8.2进程的创建和终止216

8.2.1写时复制技术216

8.2.2 fork()函数217

8.2.3 vfork()函数218

8.2.4 clone()函数218

8.2.5内核线程219

8.2.6 do_fork()函数219

8.2.7终止进程221

8.2.8僵尸进程和托孤进程222

8.2.9进程0和进程1222

8.3进程调度223

8.3.1进程分类224

8.3.2进程优先级224

8.3.3时间片225

8.3.4经典调度算法225

8.3.5 Linux O(n)调度算法228

8.3.6 Linux O(l)调度算法228

8.3.7 Linux CFS调度算法228

8.3.8进程切换233

8.3.9与调度相关的数据结构239

8.4多核调度241

8.4.1调度域和调度组241

8.4.2负载计算244

8.4.3负载均衡算法245

8.5实验246

8.5.1实验1:fork和clone246

8.5.2实验2:内核线程247

8.5.3实验3:后台守护进程247

8.5.4实验4:进程权限247

8.5.5实验5:设置优先级247

8.5.6实验6:per-cpu变量248

第9章 同步管理250

9.1原子操作与内存屏障251

9.1.1原子操作251

9.1.2内存屏障253

9.2自旋锁机制254

9.2.1自旋锁定义254

9.2.2自旋锁变种256

9.2.3自旋锁和raw_spin_lock257

9.2.4自旋锁的改进257

9.3信号量258

9.4互斥体259

9.5读写锁261

9.5.1读写锁定义261

9.5.2读写信号量262

9.6 RCU264

9.7等待队列267

9.7.1等待队列头267

9.7.2等待队列节点268

9.8实验269

9.8.1实验1:自旋锁269

9.8.2实验2:互斥锁269

9.8.3实验3:RCU269

第10章 中断管理270

10.1 Linux中断管理机制270

10.1.1 ARM中断控制器271

10.1.2硬件中断号和Linux中断号的映射275

10.1.3注册中断276

10.2软中断和tasklet278

10.2.1 SoftIRQ软中断279

10.2.2 tasklet280

10.2.3 local_bh_disable/local_bh_enable281

10.2.4本节小结282

10.3工作队列机制282

10.3.1工作队列类型283

10.3.2使用工作队列285

10.3.3本节小结285

10.4实验286

10.4.1实验1:tasklet286

10.4.2实验2:工作队列286

10.4.3实验3:定时器和内核线程287

第11章 调试和性能优化288

11.1 printk和动态输出289

11.1.1 printk输出函数289

11.1.2动态输出290

11.1.3实验1:printk292

11.1.4实验2:动态输出292

11.2 proc和debugfs293

11.2.1 proc文件系统293

11.2.2 sys文件系统295

11.2.3 debugfs296

11.2.4实验3:procfs297

11.2.5实验4:sysfs298

11.2.6实验5:debugfs300

11.3 frrace301

11.3.1 irqs跟踪器302

11.3.2 preemptoff跟踪器304

11.3.3 preemptirqsoff跟踪器305

11.3.4 function跟踪器306

11.3.5动态ftrace307

11.3.6事件跟踪308

11.3.7实验6:使用frace310

11.3.8实验7:添加一个新的跟踪点311

11.3.9实验8:使用示踪标志314

11.3.10实验9:使用kemelshark来分析数据317

11.4实验10:分析oops错误319

11.5 perf性能分析工具323

11.5.1实验11:使用 perf工具来进行性能分析328

11.5.2实验12:采集perf数据生成火焰图329

11.6内存检测329

11.6.1实验13:使用slub_debug检查内存泄漏330

11.6.2实验14:使用kmemleak检查内存泄漏335

11.6.3实验15:使用kasan检查内存泄漏337

11.6.4实验16:使用valgrind检查内存泄漏340

11.7实验17:kdump342

11.8性能和测试348

11.8.1性能测试概述348

11.8.2实验18:使用lkp-tests工具进行性能测试349

第12章 开源社区350

12.1什么是开源社区350

12.1.1开源软件的发展历史350

12.1.2 Linux基金会351

12.1.3开源协议351

12.1.4 Linux内核社区353

12.1.5国内开源社区354

12.2参与开源社区354

12.2.1参与开源项目的好处354

12.2.2如何参与开源项目355

12.3实验1:使用cppcheck检查代码356

12.4实验2:提交第一个Linux内核补丁357

12.5实验3:管理和提交多个补丁组成的补丁集359

12.6实验4:在Gitee中创建一个开源项目363

参考文献366

热门推荐