作者简介
陈华才
博士,。现任江苏航天龙梦信息技术有限公司副总,负责龙芯3号处理器的内核开发。作为Linux内核中MIPS/ 龙芯3 号的Maintainer,向Linux 内核官方提交了大量的代码。陈华才于华中科技计算机学院,攻读博士期间,先后在中国电力科学院、英特尔开源技术中心实习,参与高可靠冗余系统、Xen 虚拟机监控器和Linux 内核的研发。2012年进入中国科学院计算技术研究所博士后流动站,同时被派往江苏梦兰集团企业博士后工作站从事博士后研究工作,其间获得“江苏省科技创新团队”和“常熟市科技创新创业领军人才”等人才计划。
目录
第01章基础知识
1.1龙芯处理器简介002
1.1.1龙芯3号功能特征004
1.1.2龙芯3号处理器核008
1.1.3龙芯电脑基本结构015
1.2Linux内核简介018
1.2.1Linux内核发展简史019
1.2.2Linux内核的开发模式021
1.2.3关于长期维护稳定版025
1.2.4龙芯的内核版本选型025
1.3如何高效阅读代码027
1.3.1找准入口点028
1.3.2理清主脉络029
1.3.3顾名思义看功能040
1.3.4理解补丁文件042
1.4如何开发健壮内核045
1.4.1内核代码风格046
1.4.2合理生成补丁048
1.4.3谨慎对待创新049
第02章内核启动解析
2.1内核源代码目录结构054
2.2内核启动过程:主核视角055
2.2.1入口:kernel_entry056
2.2.2第二入口:start_kernel()063
2.2.3重要函数:setup_arch()070
2.2.4重要函数:trap_init()083
2.2.5重要函数:init_IRQ()087
2.2.6重要函数:time_init()092
2.2.71号进程:kernel_init()096
2.3内核启动过程:辅核视角104
2.3.1入口:smp_bootstrap105
2.3.2第二入口:start_secondary()107
2.4本章小结110
第03章异常与中断解析
3.1寄存器操作113
3.2异常处理解析114
3.2.1复位异常和NMI115
3.2.2缓存错误异常116
3.2.3TLB/XTLB异常117
3.2.4其他通用异常126
3.3中断处理解析137
3.3.1中断处理的入口137
3.3.2中断处理的分派140
3.4软中断、小任务与工作队列151
3.4.1软中断softirq151
3.4.2小任务tasklet154
3.4.3工作队列workqueue156
3.5本章小结159
第04章内存管理解析
4.1内存管理相关概念161
4.1.1龙芯3号的高速缓存161
4.1.2龙芯3号的TLB168
4.1.3龙芯的虚拟地址空间170
4.2物理内存页帧管理171
4.2.1物理地址空间177
4.2.2伙伴系统算法183
4.3内核内存对象管理201
4.3.1数据结构与API202
4.3.2核心函数解析209
4.4分页映射内存管理217
4.4.1持久内核映射221
4.4.2临时内核映射226
4.4.3非连续内存管理229
4.5进程地址空间管理241
4.5.1数据结构与API241
4.5.2内存映射250
4.5.3堆区管理257
4.5.4缺页异常处理258
4.6内存管理其他话题266
4.6.1反向映射267
4.6.2内存回收271
4.6.3巨页机制274
4.7本章小结275
第05章进程管理解析
5.1进程描述符278
5.1.1运行状态相关285
5.1.2标识调度相关289
5.1.3其他重要部分295
5.2进程创建296
5.2.1复制新进程296
5.2.2执行新程序308
5.3进程销毁314
5.3.1退出程序执行314
5.3.2清理进程资源317
5.4进程调度327
5.4.1基本概念328
5.4.2发展历史330
5.4.3公平调度策略334
5.4.4调度核心解析347
5.4.5进程切换解析360
5.5其他话题364
5.5.1CPU负载364
5.5.2调度域与调度组370
5.5.3NUMA均衡调度374
5.6本章小结380
第06章显卡驱动解析
6.1显卡概述382
6.1.1发展简史及有关概念382
6.1.2现代显卡的硬件结构385
6.2Linux图形系统架构388
6.2.1X-Window和Wayland388
6.2.2直接渲染、间接渲染和显卡驱动391
6.3Linux内核显卡驱动392
6.3.1寄存器读写393
6.3.2常用数据结构394
6.3.3显卡初始化411
6.3.4命令流处理435
6.3.5存储区域间数据交换439
6.3.6GPU重置(Reset)443
6.4本章小结446
第07章网卡驱动解析
7.1网络子系统概述448
7.2Linux以太网卡驱动449
7.2.1常用数据结构449
7.2.2网卡初始化452
7.2.3网卡的开与关456
7.2.4数据发送与接收457
7.2.5故障检测与修复(看门狗)466
7.3本章小结468
第08章电源管理解析
8.1电源管理概述470
8.2运行时电源管理473
8.2.1动态变频474
8.2.2自动调核488
8.3系统级睡眠管理507
8.3.1睡眠到内存(待机)509
8.3.2睡眠到磁盘(休眠)520
8.4本章小结527
附录A并发与同步原语
A.1内存屏障529
A.2每CPU变量533
A.3原子操作535
A.4开关抢占539
A.5自旋锁540
A.6顺序锁544
A.7信号量546
A.8互斥量548
A.9RCU机制549
A.10其他原语556
附录BLinux内核大事记
B.1史前时代560
B.2奇偶时代560
B.3快速演进时代562
B.4极速演进时代564
后记
参考文献
内容摘要
这是一本基于龙芯平台,结合Linux-5.4.x版本的内核源代码来解析Linux内核的书籍。本书首先介绍了有关龙芯处理器和Linux内核的基础知识,然后重点讲解了内核启动、异常与中断、内存管理、进程管理、显卡驱动、网卡驱动和电源管理这7大板块的内容。本书甚少涉及代码的细枝末节,而是重点关注代码实现的主干流程,并且创造性地引入了树形视图和链式视图这两种比流程图更好用的代码解析方法。本书适合Linux系统相关的开发人员,特别是基于龙芯处理器做内核开发的技术人员学习参考。
主编推荐
Linux内核中龙芯3号的Maintainer十年磨一剑 基于MIPS/龙芯架构的Linux-5.x版本内核 立足龙芯而包罗万象 创造性地使用“树形视图”和“链式视图”来解析源代码 胡伟武/龙芯中科技术有限公司董事长 金海/CCF副理事长,华中科技大学教授 作序
精彩内容
第01 章 基础知识 1.1 龙芯处理器简介 002 1.1.1 龙芯3 号功能特征 004 1.1.2 龙芯3 号处理器核 008 1.1.3 龙芯电脑基本结构 015 1.2 Linux 内核简介 018 1.2.1 Linux 内核发展简史 019 1.2.2 Linux 内核的开发模式 021 1.2.3 关于长期维护稳定版 025 1.2.4 龙芯的内核版本选型 025 1.3 如何阅读代码 027 1.3.1 找准入口点 028 1.3.2 理清主脉络 029 1.3.3 顾名思义看功能 040 1.3.4 理解补丁文件 042 1.4 如何开发健壮内核 045 1.4.1 内核代码风格 046 1.4.2 合理生成补丁 048 1.4.3 谨慎对待创新 049 第02 章 内核启动解析 2.1 内核源代码目录结构 054 2.2 内核启动过程:主核视角 055 2.2.1 *入口:kernel_entry 056 2.2.2 第二入口:start_kernel() 063 2.2.3 重要函数:setup_arch() 070 2.2.4 重要函数:trap_init() 083 2.2.5 重要函数:init_IRQ() 087 2.2.6 重要函数:time_init() 092 2.2.7 1 号进程:kernel_init() 096 2.3 内核启动过程:辅核视角 104 2.3.1 *入口:smp_bootstrap 105 2.3.2 第二入口:start_secondary() 107 2.4 本章小结 110 第03 章 异常与中断解析 3.1 寄存器操作 113 3.2 异常处理解析 114 3.2.1 复位异常和NMI 115 3.2.2 缓存错误异常 116 3.2.3 TLB/XTLB 异常 117 3.2.4 其他通用异常 126 3.3 中断处理解析 137 3.3.1 中断处理的入口 137 3.3.2 中断处理的分派 140 3.4 软中断、小任务与工作队列 151 3.4.1 软中断softirq 151 3.4.2 小任务tasklet 154 3.4.3 工作队列workqueue 156 3.5 本章小结 159 第04 章 内存管理解析 4.1 内存管理相关概念 161 4.1.1 龙芯3 号的高速缓存 161 4.1.2 龙芯3 号的TLB 168 4.1.3 龙芯的虚拟地址空间 170 4.2 物理内存页帧管理 171 4.2.1 物理地址空间 177 4.2.2 伙伴系统算法 183 4.3 内核内存对象管理 201 4.3.1 数据结构与API 202 4.3.2 核心函数解析 209 4.4 分页映射内存管理 217 4.4.1 持久内核映射 221 4.4.2 临时内核映射 226 4.4.3 非连续内存管理 229 4.5 进程地址空间管理 241 4.5.1 数据结构与API 241 4.5.2 内存映射 250 4.5.3 堆区管理 257 4.5.4 缺页异常处理 258 4.6 内存管理其他话题 266 4.6.1 反向映射 267 4.6.2 内存回收 271 4.6.3 巨页机制 274 4.7 本章小结 275 第05 章 进程管理解析 5.1 进程描述符 278 5.1.1 运行状态相关 285 5.1.2 标识调度相关 289 5.1.3 其他重要部分 295 5.2 进程创建 296 5.2.1 复制新进程 296 5.2.2 执行新程序 308 5.3 进程销毁 314 5.3.1 退出程序执行 314 5.3.2 清理进程资源 317 5.4 进程调度 327 5.4.1 基本概念 328 5.4.2 发展历史 330 5.4.3 公平调度策略 334 5.4.4 调度核心解析 347 5.4.5 进程切换解析 360 5.5 其他话题 364 5.5.1 CPU 负载 364 5.5.2 调度域与调度组 370 5.5.3 NUMA 均衡调度 374 5.6 本章小结 380 第06 章 显卡驱动解析 6.1 显卡概述 382 6.1.1 发展简史及有关概念 382 6.1.2 现代显卡的硬件结构 385 6.2 Linux 图形系统架构 388 6.2.1 X-Window 和Wayland 388 6.2.2 直接渲染、间接渲染和显卡驱动 391 6.3 Linux 内核显卡驱动 392 6.3.1 寄存器读写 393 6.3.2 常用数据结构 394 6.3.3 显卡初始化 411 6.3.4 命令流处理 435 6.3.5 存储区域间数据交换 439 6.3.6 GPU 重置(Reset) 443 6.4 本章小结 446 第07 章 网卡驱动解析 7.1 网络子系统概述 448 7.2 Linux 以太网卡驱动 449 7.2.1 常用数据结构 449 7.2.2 网卡初始化 452 7.2.3 网卡的开与关 456 7.2.4 数据发送与接收 457 7.2.5 故障检测与修复(看门狗) 466 7.3 本章小结 468 第08 章 电源管理解析 8.1 电源管理概述 470 8.2 运行时电源管理 473 8.2.1 动态变频 474 8.2.2 自动调核 488 8.3 系统级睡眠管理 507 8.3.1 睡眠到内存(待机) 509 8.3.2 睡眠到磁盘(休眠) 520 8.4 本章小结 527 附录A 并发与同步原语 A.1 内存屏障 529 A.2 每CPU 变量 533 A.3 原子操作 535 A.4 开关抢占 539 A.5 自旋锁 540 A.6 顺序锁 544 A.7 信号量 546 A.8 互斥量 548 A.9 RCU 机制 549 A.10 其他原语 556 附录B Linux 内核大事记 B.1 史前时代 560 B.2 奇偶时代 560 B.3 快速演进时代 562 B.4 极速演进时代 564 后记 参考文献
媒体评论
Linux 操作系统内核结构复杂,硬件关联性强,开发难度较大。本书作者陈华才博士从龙芯CPU 上运行的内核入手,深入浅出地分析了内核各个重要模块,并讲解了大量关联知识。他还分享了在内核代码中融会贯通、化繁为简的经验技巧,降低了开发者入门的门槛。相信本书能为从事国产自主可控网信生态构建的广大科技人员提供重要的、切合实际的帮助。
倪光南/ 中国工程院院士
Linux 内核开发是一个门槛比较高的事情,而国产CPU上的内核开发者还面临一个额外的困难:缺乏合适的参考书籍。这本书基于龙芯平台的内核开发书籍的出版,恰逢其时。作者长期从事龙芯内核研究和实践,是官方Linux 内核中龙芯支持代码的主要贡献者之一。扎实的理论功底和丰富的实践经验使得他能够在有限的篇幅里覆盖龙芯内核开发实践中必须掌握的内容和常见的难点。强烈推荐!
张福新/ 中科院计算所研究员、龙芯中科技术有限公司技术总监
此书不是针对Linux 内核的全面描述,而是紧密结合龙芯CPU 和Linux 内核5.4 版本来讲述操作系统内核知识,它很好地平衡了内容的广度和深度,并且兼具知识性与实用性,偶尔提到的方法论等,都体现出了作者在Linux 内核方面深厚的知识积淀和丰富的实战经验。此书既适合作为学习Linux内核的初级教材,也适合作为掌握龙芯CPU 配套Linux 内核的参考书,并同样适合想要学习Linux 内核知识的其他读者使用。很好高兴能看到这样一本定位清晰、特色鲜明的Linux内核书籍出版!
韩乃平/ 麒麟软件有限公司执行总裁
经过20 多年的发展,Linux 操作系统已经成为优选操作系统中很重要的生态之一;龙芯作为国产CPU 的很好代表,Linux 操作系统也是其很主要的应用运行环境。随着靠前信息产业中龙芯CPU 和Linux 操作系统的不断广泛应用,在相关体系架构、Linux 内核技术方面急需大量的高水平人才。但目前市面上关于Linux 内核的书籍并不丰富,涉及龙芯的Linux内核资料更是很好缺乏。
本书由长期从事龙芯平台下Linux内核研发的技术专家,也是Linux 内核MIPS 架构的重要贡献者亲自撰写,内容覆盖全面,讲解由浅入深。我认为,这是每一位有志于从事Linux 内核研发,或者希望参与龙芯生态建设的技术人员所推荐的书籍。
刘闻欢/ 统信软件技术有限公司总经理
首先,本书基于龙芯平台,不仅抢先发售从系统开发角度展示了国产龙芯,也在业内抢先发售基于 MIPS 架构讲解了 Linux内核开发。其次,作者来自龙芯产业化基地,工作涉猎芯片、系统和应用,讲解视野很好全面。再者,作者长期活跃于Linux 内核社区,是靠前少数长期坚持在一线的工程师。本书不仅剖析了内核启动、异常处理、进程调度、内存管理等常规知识,也讲解了显卡驱动、网卡驱动、电源管理等新技术。另外,龙芯已开放全系 Qemu 模拟器,读者可以通过 LinuxLab 边学边练,为以后实际参与龙芯平台开发打下坚实基础。
吴章金/Linux Lab 开源项目作者、泰晓科技创始人、前魅族 Linux 部门技术总监
以下为对购买帮助不大的评价