免费申请: 《Linux内核深度解析》,基于ARM64架构的Linux 4.12内核,通俗化讲解
<div><strong>本书主要讲解Linux内核中的源代码,并对其进行分析。</strong>基于Linux内核4.12版本,选择ARM64处理器架构,内容上包括内核的几个关键子系统:引导过程,进程管理,内存管理,异常、中断和系统调用,内核互斥技术,以及文件系统。</div><div id="activitydetail">
<p>“学习内核,关键是要理解数据结构之间的关系和函数调用关系。内核中数据结构之间的关系错综复杂,函数调用层次深,有些函数中的分支非常多,一个函数就可能涉及很多技术,这些都是初学者学习中的障碍。<strong>作者建议读者</strong>在学习时抓住主要线索,弄清楚执行流程,刚开始不要过多关注函数的细节。为了方便学习,作者绘制了很多图描述数据结构之间的关系和函数的执行流行。作者在介绍每种技术时会先介绍使用方法,从使用方法开始学习技术。”</p>
<p>——摘自图书的使用方法</p>
<p> </p>
<p style="background:rgb(255,255,255)"><strong>如何申请</strong></p>
<p style="background:rgb(255,255,255)">(1)往下滑到“产品资料”栏,可进一步了解书籍内容,章节设置;</p>
<p style="background:rgb(255,255,255)">(2)<span style="font-size:16px;"><a href="https://bbs.eeworld.com.cn/elecplay/apply/422" target="_self"><span style="color:#1abc9c;">>>点击我要申请</span></a></span>,认真填写申请理由、阅读分享计划等,即有机会免费获取书籍。本期活动有1个名额可使用测评券,先用先得。</p>
<p style="background:rgb(255,255,255)"> </p>
<p style="background:rgb(255,255,255)"><strong>活动日程</strong></p>
<p style="background:rgb(255,255,255)">申请时间:11月21日至12月5日<br />
遴选公布:12月10日前,公布全部入围名单<br />
阅读时间:12月17日-2月10日<br />
颁奖时间:活动结束后两周内</p>
<p style="background:rgb(255,255,255)"><strong> </strong></p>
<p style="background:rgb(255,255,255)"><strong>阅读要求</strong></p>
<p style="background:rgb(255,255,255)">收到书籍后,请在EEWorld <a href="https://bbs.eeworld.com.cn/forum-15-1.html" target="_self">嵌入式系统版块</a> 自拟标题发表阅读心得,活动期间内,进度为至少每15天提交一篇,直到完成自己的阅读分享计划,要求100%原创首发,抄袭会被封杀哦。心得可包含:书籍内容的评价、理解、尝试书中实验过程等;</p>
<p style="background:rgb(255,255,255)"> </p>
<p style="background:rgb(255,255,255)"><span style="color:#e74c3c;"><strong>产品资料</strong></span></p>
<p>作者简介</p>
<p>余华兵,2005年毕业于华中科技大学计算机学院,取得硕士学位。毕业后的十余年一直在网络通信行业从事软件设计和开发工作,研究方向包括IPv4协议栈、IPv6协议栈和Linux内核。</p>
<p> </p>
<p>目录</p>
<p><strong>第1章 内核引导和初始化 1</strong></p>
<p>1.1 到哪里读取引导程序 1</p>
<p>1.2 引导程序 1</p>
<p>1.2.1 入口_start 1</p>
<p>1.2.2 标号reset 2</p>
<p>1.2.3 函数_main 4</p>
<p>1.2.4 函数run_main_loop 6</p>
<p>1.3 内核初始化 8</p>
<p>1.3.1 汇编语言部分 8</p>
<p>1.3.2 C语言部分 11</p>
<p>1.3.3 SMP系统的引导 12</p>
<p>1.4 init进程 15</p>
<p><strong>第2章 进程管理 17</strong></p>
<p>2.1 进程 17</p>
<p>2.2 命名空间 18</p>
<p>2.3 进程标识符 20</p>
<p>2.4 进程关系 21</p>
<p>2.5 启动程序 23</p>
<p>2.5.1 创建新进程 23</p>
<p>2.5.2 装载程序 41</p>
<p>2.6 进程退出 48</p>
<p>2.6.1 线程组退出 49</p>
<p>2.6.2 终止进程 51</p>
<p>2.6.3 查询子进程终止原因 53</p>
<p>2.7 进程状态 55</p>
<p>2.8 进程调度 55</p>
<p>2.8.1 调度策略 55</p>
<p>2.8.2 进程优先级 56</p>
<p>2.8.3 调度类 57</p>
<p>2.8.4 运行队列 59</p>
<p>2.8.5 任务分组 60</p>
<p>2.8.6 调度进程 65</p>
<p>2.8.7 调度时机 75</p>
<p>2.8.8 带宽管理 85</p>
<p>2.9 SMP调度 93</p>
<p>2.9.1 进程的处理器亲和性 93</p>
<p>2.9.2 对调度器的扩展 96</p>
<p>2.9.3 限期调度类的处理器负载均衡 96</p>
<p>2.9.4 实时调度类的处理器负载均衡 98</p>
<p>2.9.5 公平调度类的处理器负载均衡 99</p>
<p>2.9.6 迁移线程 108</p>
<p>2.9.7 隔离处理器 110</p>
<p>2.10 进程的安全上下文 111</p>
<p><strong>第3章 内存管理 113</strong></p>
<p>3.1 概述 113</p>
<p>3.2 虚拟地址空间布局 115</p>
<p>3.2.1 虚拟地址空间划分 115</p>
<p>3.2.2 用户虚拟地址空间布局 115</p>
<p>3.2.3 内核地址空间布局 121</p>
<p>3.3 物理地址空间 122</p>
<p>3.4 内存映射 124</p>
<p>3.4.1 应用编程接口 125</p>
<p>3.4.2 数据结构 129</p>
<p>3.4.3 创建内存映射 133</p>
<p>3.4.4 虚拟内存过量提交策略 137</p>
<p>3.4.5 删除内存映射 139</p>
<p>3.5 物理内存组织 140</p>
<p>3.5.1 体系结构 140</p>
<p>3.5.2 内存模型 140</p>
<p>3.5.3 三级结构 141</p>
<p>3.6 引导内存分配器 144</p>
<p>3.6.1 bootmem分配器 144</p>
<p>3.6.2 memblock分配器 145</p>
<p>3.6.3 物理内存信息 148</p>
<p>3.7 伙伴分配器 151</p>
<p>3.7.1 基本的伙伴分配器 151</p>
<p>3.7.2 分区的伙伴分配器 152</p>
<p>3.7.3 根据可移动性分组 158</p>
<p>3.7.4 每处理器页集合 162</p>
<p>3.7.5 分配页 163</p>
<p>3.7.6 释放页 181</p>
<p>3.8 块分配器 184</p>
<p>3.8.1 编程接口 185</p>
<p>3.8.2 SLAB分配器 186</p>
<p>3.8.3 SLUB分配器 197</p>
<p>3.8.4 SLOB分配器 204</p>
<p>3.9 不连续页分配器 207</p>
<p>3.9.1 编程接口 207</p>
<p>3.9.2 数据结构 208</p>
<p>3.9.3 技术原理 209</p>
<p>3.10 每处理器内存分配器 210</p>
<p>3.10.1 编程接口 210</p>
<p>3.10.2 技术原理 212</p>
<p>3.11 页表 219</p>
<p>3.11.1 统一的页表框架 219</p>
<p>3.11.2 ARM64处理器的页表 222</p>
<p>3.12 页表缓存 226</p>
<p>3.12.1 TLB表项格式 226</p>
<p>3.12.2 TLB管理 226</p>
<p>3.12.3 地址空间标识符 228</p>
<p>3.12.4 虚拟机标识符 232</p>
<p>3.13 巨型页 233</p>
<p>3.13.1 处理器对巨型页的支持 233</p>
<p>3.13.2 标准巨型页 235</p>
<p>3.13.3 透明巨型页 245</p>
<p>3.14 页错误异常处理 257</p>
<p>3.14.1 处理器架构特定部分 257</p>
<p>3.14.2 用户空间页错误异常 266</p>
<p>3.14.3 内核模式页错误异常 283</p>
<p>3.15 反碎片技术 288</p>
<p>3.15.1 虚拟可移动区域 289</p>
<p>3.15.2 内存碎片整理 291</p>
<p>3.16 页回收 309</p>
<p>3.16.1 数据结构 310</p>
<p>3.16.2 发起页回收 317</p>
<p>3.16.3 计算扫描的页数 320</p>
<p>3.16.4 收缩活动页链表 321</p>
<p>3.16.5 回收不活动页 323</p>
<p>3.16.6 页交换 325</p>
<p>3.16.7 回收slab缓存 335</p>
<p>3.17 内存耗尽杀手 338</p>
<p>3.17.1 使用方法 338</p>
<p>3.17.2 技术原理 338</p>
<p>3.18 内存资源控制器 340</p>
<p>3.18.1 使用方法 340</p>
<p>3.18.2 技术原理 344</p>
<p>3.19 处理器缓存 370</p>
<p>3.19.1 缓存结构 370</p>
<p>3.19.2 缓存策略 372</p>
<p>3.19.3 缓存维护 374</p>
<p>3.19.4 SMP缓存一致性 378</p>
<p>3.19.5 利用缓存提高性能的编程技巧 383</p>
<p>3.20 连续内存分配器 384</p>
<p>3.20.1 使用方法 385</p>
<p>3.20.2 技术原理 386</p>
<p>3.21 userfaultfd 391</p>
<p>3.21.1 使用方法 391</p>
<p>3.21.2 技术原理 395</p>
<p>3.22 内存错误检测工具KASAN 401</p>
<p>3.22.1 使用方法 401</p>
<p>3.22.2 技术原理 402</p>
<p><strong>第4章 中断、异常和系统调用 403</strong></p>
<p>4.1 ARM64异常处理 403</p>
<p>4.1.1 异常级别 403</p>
<p>4.1.2 异常分类 404</p>
<p>4.1.3 异常向量表 405</p>
<p>4.1.4 异常处理 407</p>
<p>4.2 中断 411</p>
<p>4.2.1 中断控制器 412</p>
<p>4.2.2 中断域 413</p>
<p>4.2.3 中断控制器驱动初始化 415</p>
<p>4.2.4 Linux中断处理 422</p>
<p>4.2.5 中断线程化 428</p>
<p>4.2.6 禁止/开启中断 430</p>
<p>4.2.7 禁止/开启单个中断 431</p>
<p>4.2.8 中断亲和性 431</p>
<p>4.2.9 处理器间中断 432</p>
<p>4.3 中断下半部 434</p>
<p>4.3.1 软中断 435</p>
<p>4.3.2 小任务 441</p>
<p>4.3.3 工作队列 444</p>
<p>4.4 系统调用 457</p>
<p>4.4.1 定义系统调用 457</p>
<p>4.4.2 执行系统调用 459</p>
<p><strong>第5章 内核互斥技术 463</strong></p>
<p>5.1 信号量 464</p>
<p>5.2 读写信号量 465</p>
<p>5.3 互斥锁 466</p>
<p>5.4 实时互斥锁 467</p>
<p>5.5 原子变量 468</p>
<p>5.6 自旋锁 472</p>
<p>5.7 读写自旋锁 476</p>
<p>5.8 顺序锁 478</p>
<p>5.8.1 完整版的顺序锁 479</p>
<p>5.8.2 只提供序列号的顺序锁 481</p>
<p>5.9 禁止内核抢占 482</p>
<p>5.10 进程和软中断互斥 483</p>
<p>5.11 进程和硬中断互斥 483</p>
<p>5.12 每处理器变量 484</p>
<p>5.12.1 静态每处理器变量 484</p>
<p>5.12.2 动态每处理器变量 484</p>
<p>5.12.3 访问每处理器变量 485</p>
<p>5.13 每处理器计数器 485</p>
<p>5.14 内存屏障 487</p>
<p>5.14.1 编译器屏障 488</p>
<p>5.14.2 处理器内存屏障 489</p>
<p>5.14.3 MMIO写屏障 492</p>
<p>5.14.4 隐含内存屏障 493</p>
<p>5.14.5 ARM64处理器内存屏障 493</p>
<p>5.15 RCU 495</p>
<p>5.15.1 使用方法 496</p>
<p>5.15.2 技术原理 504</p>
<p>5.16 可睡眠RCU 533</p>
<p>5.16.1 使用方法 533</p>
<p>5.16.2 技术原理 534</p>
<p>5.17 死锁检测工具lockdep 542</p>
<p>5.17.1 使用方法 543</p>
<p>5.17.2 技术原理 543</p>
<p><strong>第6章 文件系统 548</strong></p>
<p>6.1 概述 548</p>
<p>6.1.1 用户空间层面 549</p>
<p>6.1.2 硬件层面 549</p>
<p>6.1.3 内核空间层面 550</p>
<p>6.2 虚拟文件系统的数据结构 552</p>
<p>6.2.1 超级块 552</p>
<p>6.2.2 挂载描述符 554</p>
<p>6.2.3 文件系统类型 555</p>
<p>6.2.4 索引节点 556</p>
<p>6.2.5 目录项 559</p>
<p>6.2.6 文件的打开实例和打开文件表 561</p>
<p>6.3 注册文件系统类型 563</p>
<p>6.4 挂载文件系统 564</p>
<p>6.4.1 系统调用mount 566</p>
<p>6.4.2 绑定挂载 567</p>
<p>6.4.3 挂载命名空间 568</p>
<p>6.4.4 挂载根文件系统 574</p>
<p>6.5 打开文件 580</p>
<p>6.5.1 编程接口 580</p>
<p>6.5.2 技术原理 582</p>
<p>6.6 关闭文件 591</p>
<p>6.7 创建文件 593</p>
<p>6.7.1 使用方法 593</p>
<p>6.7.2 技术原理 594</p>
<p>6.8 删除文件 595</p>
<p>6.8.1 使用方法 595</p>
<p>6.8.2 技术原理 595</p>
<p>6.9 设置文件权限 597</p>
<p>6.9.1 使用方法 597</p>
<p>6.9.2 技术原理 598</p>
<p>6.10 页缓存 599</p>
<p>6.10.1 地址空间 600</p>
<p>6.10.2 基数树 601</p>
<p>6.10.3 编程接口 602</p>
<p>6.11 读文件 602</p>
<p>6.11.1 编程接口 602</p>
<p>6.11.2 技术原理 603</p>
<p>6.12 写文件 606</p>
<p>6.12.1 编程接口 606</p>
<p>6.12.2 技术原理 607</p>
<p>6.13 文件回写 610</p>
<p>6.13.1 编程接口 610</p>
<p>6.13.2 技术原理 610</p>
<p>6.14 DAX 618</p>
<p>6.14.1 使用方法 618</p>
<p>6.14.2 技术原理 618</p>
<p>6.15 常用的文件系统类型 621</p>
<p>结束语 622</p>
<p><img _height="8319" border="0" src="https://bbs.eeworld.com.cn/data/attachment/elecplay/upload/image/20241113/1731492008966726.jpg" width="790" /></p>
<p> </p>
</div>
<p>已经申请了,按照这本书,学习AM335X(4.9.65内核)的内核是不是更有效率~~</p>
<p>看起来还真是一本 好书,不过,要是一个名额大概率不会是我了,我就看看吧</p>
<p>讲Linux内核的书和人都比较多,有非常经典的呢。。。。。。。。<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/smile.gif" width="48" /></p>
hellokitty_bean 发表于 2024-11-26 14:05
讲Linux内核的书和人都比较多,有非常经典的呢。。。。。。。。
<p>欢迎推荐书名</p>
nmg 发表于 2024-11-26 14:37
欢迎推荐书名
<p>Linux Kernel Programming, 2nd Edition</p>
<p><strong><a href="https://www.packtpub.com/en-us/product/linux-kernel-programming-9781803232225" target="_blank">Packt</a></strong></p>
<p><strong>2024.2</strong></p>
<p><strong><img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/smile.gif" width="48" /></strong></p>
hellokitty_bean 发表于 2024-11-26 19:46
Linux Kernel Programming, 2nd Edition
Packt
2024.2
<p>英文版本,没有中文版本?</p>
nmg 发表于 2024-11-27 09:53
英文版本,没有中文版本?
<p>中文版的内核版本没有这个作者的新,从这个角度讲,这部著作还是值得一读的<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/smile.gif" width="48" /></p>
hellokitty_bean 发表于 2024-11-27 10:43
中文版的内核版本没有这个作者的新,从这个角度讲,这部著作还是值得一读的
<p>英文版本内核更新吗?英文版本的书籍对于大部分读者还有挺有挑战的,咱们还没尝试过开英文书籍的读书活动,不过有时候可能英文版本更容易懂,翻译的有时候反而翻译的有些晦涩。可以考虑考虑,这个英文版本在国内有出版吗?</p>
<p> </p>
<p>对了,你读了没?有心得欢迎先来给我们分享分享哈<img height="52" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/pleased.gif" width="48" /></p>
nmg 发表于 2024-11-27 11:53
英文版本内核更新吗?英文版本的书籍对于大部分读者还有挺有挑战的,咱们还没尝试过开英文书籍的读书活动 ...
<p>下回来不久,还没拜读。。。。。。惭愧惭愧。。。。。。。。<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/smile.gif" width="48" /></p>
页:
[1]