卧槽!这本“银杏书”能够带你深入理解信息产业之“魂”(文末送书)

原创
2020/11/15 10:13
阅读数 51



“等闲日月任西东,不管霜风著鬓蓬。满地翻黄银杏叶,忽惊天地告成功。”


—— (宋)葛绍体《晨兴书所见》



注:文末留言送 2 本银杏书,大家多多参与

《现代操作系统:原理与实现》


用这首诗来形容这本“银杏书”的诞生,实在是太贴切不过了。本书的作者陈海波教授多年以来一直辛勤坚守在操作系统研究与工业实践的第一线,取得了突出的研究成果并对产业界产生了重大影响,是国际计算机领域的知名青年学者。他从2009年开始一直在复旦大学、上海交通大学从事操作系统的教学工作,致力于将前沿研究与工业实践传递到人才培养与课堂教学中去,得到了广大学生的好评,培养了一批又一批在学术界与工业界崭露头角的青年计算机从业者。这次,他和夏虞斌教授一起,与上海交通大学并行与分布式系统研究所及领域操作系统教育部工程研究中心的多位老师和博士研究生共同合作,将他们对操作系统的深入理解、多年来的科研体会与一线的教学实践加以总结,撰写了这本操作系统的书籍——《现代操作系统:原理与实现》





视频介绍


创作背景



操作系统是现代计算平台的基础与核心支撑系统,负责管理硬件资源、控制程序运行、改善人机交互以及为应用软件提供运行环境等。长期以来,我国信息产业处于“缺芯少魂”的状态,作为信息产业之“魂”的操作系统是释放硬件能力、构筑应用生态的基础,也是关键的“卡脖子”技术之一。


随着智能终端的多样化,5G带来的大连接、低时延、高吞吐,以及异构硬件设备的繁荣发展,我们正在逐步进入万物互联的智能世界,覆盖所有场景的单一操作系统已经很难发挥出硬件的处理能力并满足应用越来越高的极限需求。当前,华为、阿里、微软、谷歌、Facebook等各大企业纷纷在操作系统领域投入重兵。例如,微软在Windows 10之后开始研制Windows CoreOS,谷歌从2016年开始投入Fuchsia项目,Facebook2019年开始研制面向AR/VR等的新OS,华为也于2019年发布鸿蒙操作系统并与合作伙伴一起构建openEuleropenHarmony开源社区和华为移动服务(HMS)生态。



操作系统的复兴也对教学科研与产业实践提出了新的要求。首先,操作系统教材需要体现操作系统的核心原理与设计,从而帮助读者建立对操作系统的系统性认识;其次,操作系统教材需要反映国际的研究前沿,当前操作系统技术仍在迅猛发展,随着新处理器、新加速器架构、新应用场景的出现,很多新的问题不断涌现,并且很多经典的问题也出现了新的解决方法,这些都给操作系统的设计与实现提供了新的思路;最后,操作系统教材需要反映工业界实践,操作系统是一门系统性与实践性非常强的学科,脱离实现来谈设计很容易陷入纸上谈兵的陷阱。 


独创性



本书将以三个“面向”为导向,即面向经典基础理论与方法,面向国际前沿研究,面向最新工业界实践,深入浅出地介绍操作系统的理论、架构、设计方法与具体实现。对于每项要介绍的内容,本书将从一个具体的操作系统设计问题出发,解释这个问题背后的挑战,给出当前的经典设计,并介绍当前的一些工业界实践与前沿研究。本书不仅介绍典型的Linux操作系统的设计与实现,还将介绍微内核(Microkernel)、外核(Exokernel)等操作系统架构。


此外,为了帮助读者更好地理解操作系统的设计与实现,除了本书中介绍的各种操作系统的设计与实现外,上海交通大学并行与分布式系统研究所团队还专门实现了一个小巧但具有较完整基础功能的微内核架构教学操作系统ChCore,并基于ChCore 设计了一系列的课程实验。因此,本书期望不仅从理论上具体讲解操作系统的设计与实现,而且能够帮助读者通过动手实践的方式获得操作系统设计与实现的第一手经验。


作者简介

 


陈海波

上海交通大学特聘教授、博导,并行与分布式系统研究所所长,领域操作系统教育部工程研究中心主任,国家杰出青年基金获得者,ACM杰出科学家,CCF杰出会员与杰出演讲者。主要研究领域为操作系统和系统安全。曾获教育部技术发明一等奖(第一完成人)、全国优秀博士学位论文奖、CCF青年科学家奖。


目前担任ACM SIGOPS ChinaSys主席、CCF系统软件专委会副主任、ACM旗舰杂志Communications of the ACM中国首位编委与Special Sections领域共同主席、ACM Transactions on Storage编委。曾任ACM SOSP 2017年大会共同主席、ACM CCS 2018系统安全领域主席、ACM SIGSAC奖励委员会委员。研究工作还获得了华为最高个人贡献奖、金牌团队奖。按照csrankings.org的统计,其近5年(20152019)在操作系统领域高水平会议(SOSP/OSDIEuroSysUSENIX ATCFAST)上发表的论文数居世界第一。



夏虞斌


上海交通大学副教授、博导,CCF高级会员。主要研究领域为操作系统、体系结构和系统安全,曾任OSDIEuroSys等多个国际会议的程序委员会委员。


领导团队研发的安全操作系统T6获得2015年“挑战杯”全国大学生课外学术科技作品竞赛和中国大学生创业计划竞赛特等奖、2019年中国“互联网+”大学生创新创业大赛全国银奖,并已实现产业化,实际部署设备数量过亿;基于RISC-V平台研发的可信执行环境软硬件系统“蓬莱”现已开源。



专家推荐


(按姓氏音序排列)



当看到上海交通大学陈海波教授、夏虞斌副教授等的著作《现代操作系统:原理与实现》这本教材时,内心满是钦佩与敬意。过去一直采用国外的操作系统教材,很高兴看到终于有国内学者编写的重量级操作系统教材——全书共有24章、800多页,这是迄今为止我所看到的知识最全面、内容最前沿、实践最重视的一本操作系统教材了。



相信不管是新入门的本科生,还是业界的资深专家,都能从这本教材中学习到新知识(节选自包老师微博https://weibo.com/1686707751/JrgpenHRh?type=comment。)

 

—— 包云岗(中国科学院计算技术研究所研究员,中国科学院大学教授)



作为上操作系统课的老师,我每年在课程准备时要做的一件事情就是看看最近是否有新的教材或更新版本的教材出现了。在2020年10月,上海交大的陈海波老师告诉我,他们写了一本新的操作系统教材《现代操作系统:原理与实现》,并给我看了他们的初稿。看完之后,我的总体感觉是:这是一本包含操作系统基础与前沿技术、学术理论与工业实践的优秀教材。我很高兴找到这样一本能够覆盖本科操作系统课和研究生操作系统课的教材。相对于经典的国外操作系统教材,除了基本的操作系统原理,本书涉及的领域更广,更前沿,更深入。本书分为上下两部分,上半部分为基础知识,下半部分为进阶内容。书中涵盖的知识点包括:AArch64 CPU架构的硬件描述与分析、多处理器架构下的缓存一致性模型、崩溃一致性模型、系统虚拟化技术、可信计算、形式化证明等。在我看来,本书的进阶内容基本上是研究生级别的操作系统教学内容,特别适合系统类的研究生学习。同时,据我了解,这本教材的内容,在上海交大的本科操作系统相关的教学阶段基本上都覆盖到了;这从某个侧面反映出上海交大的老师勇于探索系统类和操作系统类教学上的新教学体系,给其他高校的老师一个很好的借鉴与学习的目标。操作系统不仅仅是原理知识,还需要大量的工程实践来深入理解这些原理。我看到陈海波老师也考虑到这一点,为本书配套了详细的操作系统实验和指导,这些是帮助同学们学习的很好的辅助材料。希望对OS有兴趣的学生、工程师能够阅读这本书,相信你一定会有大的收获!


—— 陈渝(清华大学副教授,讲授“操作系统”课程)




海波和虞斌带领团队开发的这本操作系统教材,既有对经典概念理论的系统化介绍,也结合了当前业界广泛使用的真实软硬件环境来阐述实践方法;在传统操作系统技术的总结之外,还进一步深入探索了操作系统领域当前学术前沿的多个课题;更难得的是,这是一本“活”的书,每个章节都可以通过扫码反馈和作者团队直接交流。作为一本不可多得的优秀技术书籍,既可以用于操作系统技术的入门与提高,也强烈推荐给所有基础软件从业者,人手一本,作为案头参考。


—— 胡欣蔚(华为OS内核首席专家)




区别于所有本人已知的教材(包括我现在用的OSTEP、很出名的MOS等),这本书最大的特点就是挑战了传统操作系统教材的权威,果断地删掉了和“现代”操作系统关系比较小的部分,真正把“现代”两个字体现得淋漓尽致。跟Tanenbaum的“伪现代”比,这个是“真现代”——以如日中天的AArch64作为底层机制,直通操作系统研究前沿,现代到有些部分标上了辣眼睛的“辣椒”,都是货真价实的干货。(节选自知乎“世界上最牛气的操作系统教材是什么?https://zhuanlan.zhihu.com/p/266871840。)




—— 蒋炎岩(南京大学助理研究员,讲授“操作系统”课程)





本书的作者陈海波教授多年以来一直坚守在操作系统研究与工业实践的第一线,取得了突出的研究成果并对产业界产生了重大影响,是国际计算机领域的知名青年学者。我很高兴看到他和其他作者一道,将他们对操作系统的深入理解、多年来的科研体会与一线的教学实践加以总结,撰写了这本操作系统的书籍。(节选自本书序言二。)


—— 金海(华中科技大学教授,中国计算机学会会士,IEEE Fellow)





通过这门课程的学习,学生们可以建立起操作系统的完整知识体系,为后续在计算机系统方向进行更深入的学习和研究奠定基础。已有的教学实践表明,这是一本值得操作系统相关领域的研究人员、学生与工业界实践者保有的学习和参考书籍。(节选自本书序言一。)


—— 梅宏(中国科学院院士,中国计算机学会理事长)





操作系统是计算机系统的灵魂,也是计算机科学的核心领域之一。陈海波教授和夏虞斌教授两位计算机系统方向的国际顶级专家及一线教学实践者所著的《现代操作系统:原理与实现》,完美结合了两位多年来在一线教学的第一手资料和丰富经验、超凡的系统研究造诣及其在工业界的实践感悟,融合了国际学术界的前沿研究成果,堪称这一领域不可多得的佳作。这本书既涵盖了操作系统的经典原理、理念,诠释了系统思维方式,又展示了这一领域最前沿的研究方向和成果,对这一领域的教学、科研和实践都有重要的指导意义。


—— 周礼栋(微软亚洲研究院常务副院长,微软杰出首席科学家)




丰富的配套资源



本书在“好大学在线”设置了MOOC课程;建设了课程网站,提供了与课程教学配套的讲义PPT与授课视频;搭建了在线社区,供大家讨论与答疑。

 

扫码加入本书读者交流群。

 

目录

序言一

序言二

前言

第一部分 操作系统基础

第1章 操作系统概述  2

1.1 简约但不简单:从Hello World说起  2

1.2 什么是操作系统  3

1.3 操作系统简史  6

1.3.1 GM-NAA I/O:第一个(批处理)操作系统  6

1.3.2 OS/360:从专用走向通用  6

1.3.3 Multics/UNIX/Linux:分时与多任务  7

1.3.4 macOS/Windows:以人为本的人机交互  8

1.4 操作系统接口  9

1.5 ChCore:一个简单的实验操作系统  11

参考文献  12

第2章 硬件结构  13

2.1 CPU与指令集架构  14

2.1.1 指令集  14

2.1.2 特权级  15

2.1.3 寄存器  17

2.2 物理内存与CPU缓存  17

2.2.1 缓存结构  18

2.2.2 缓存寻址  19

2.3 设备与中断  20

2.3.1 内存映射输入输出  20

2.3.2 轮询与中断  21

2.4 思考题  22

参考文献  22

第3章 操作系统结构  23

3.1 操作系统的机制与策略  24

3.2 操作系统复杂度管理方法  25

3.3 操作系统内核架构  27

3.3.1 简要结构  27

3.3.2 宏内核架构  28

3.3.3 微内核架构  30

3.3.4 外核架构  32

3.3.5 其他操作系统内核架构  34

3.4 操作系统框架结构  35

3.4.1 Android系统框架  35

3.4.2 ROS系统框架  37

3.5 思考题  39

参考文献  40

第4章 内存管理  42

4.1 虚拟地址与物理地址  43

4.1.1 初识物理地址与虚拟地址  43

4.1.2 使用虚拟地址访问物理内存  44

4.1.3 分段与分页机制  44

4.2 基于分页的虚拟内存  46

4.2.1 AArch64架构下的4级页表  47

4.2.2 加速地址翻译的重要硬件:TLB  49

4.2.3 换页与缺页异常  52

4.2.4 页替换策略  54

4.2.5 工作集模型  57

4.3 虚拟内存功能  58

4.3.1 共享内存  58

4.3.2 写时拷贝  58

4.3.3 内存去重  60

4.3.4 内存压缩  60

4.3.5 大页  61

4.4 物理内存分配与管理  62

4.4.1 目标与评价维度  62

4.4.2 伙伴系统  63

4.4.3 SLAB分配器  65

4.4.4 常用的空闲链表  66

4.4.5 物理内存与CPU缓存  68

4.5 案例分析:ChCore内存管理机制  70

4.6 思考题  73

参考文献  74

第5章 进程与线程  76

5.1 进程  76

5.1.1 进程的状态  76

5.1.2 进程的内存空间布局  78

5.1.3 进程控制块和上下文切换  79

5.2 案例分析:Linux的进程操作  80

5.2.1 进程的创建:fork  80

5.2.2 进程的执行:exec  84

5.2.3 进程管理  85

5.2.4 讨论:fork过时了吗  89

5.3 线程  92

5.3.1 多线程的地址空间布局  93

5.3.2 用户态线程与内核态线程  93

5.3.3 线程控制块与线程本地存储  94

5.3.4 线程的基本接口:以POSIX线程库为例  95

5.4 案例分析:ChCore的线程上下文  99

5.4.1 线程的上下文和TCB  99

5.4.2 ChCore中上下文切换的实现  100

5.5 纤程  102

5.5.1 对纤程的需求:一个简单的例子  103

5.5.2 POSIX的纤程支持:ucontext  103

5.5.3 纤程的上下文切换  105

5.6 思考题  106

参考文献  107

第6章 操作系统调度  108

6.1 计算机调度简介  108

6.1.1 操作系统调度  110

6.1.2 调度指标  111

6.2 调度机制  113

6.2.1 长期、中期与短期调度  114

6.2.2 任务调度总览  116

6.3 单核调度策略  117

6.3.1 经典调度  118

6.3.2 优先级调度  122

6.3.3 公平共享调度  127

6.3.4 实时调度  133

6.3.5 其他调度  138

6.4 多核调度策略  141

6.4.1 负载分担  141

6.4.2 协同调度  142

6.4.3 两级调度  144

6.4.4 负载追踪与负载均衡  145

6.4.5 能耗感知调度  148

6.5 调度进阶机制  151

6.5.1 处理器亲和性  152

6.5.2 调度策略设置  153

6.6 案例分析:现代调度器  155

6.6.1 Linux调度器  155

6.6.2 macOS/iOS调度器  160

6.7 思考题  162

参考文献  163

第7章 进程间通信  165

7.1 进程间通信基础  165

7.1.1 一个简单的进程间通信设计  166

7.1.2 数据传递  167

7.1.3 控制流转移  169

7.1.4 单向和双向  170

7.1.5 同步和异步  170

7.1.6 超时机制  171

7.1.7 通信连接管理  172

7.1.8 权限检查  173

7.1.9 命名服务  174

7.2 宏内核进程间通信  175

7.2.1 管道进程间通信  175

7.2.2 System V消息队列  178

7.2.3 System V信号量  179

7.2.4 System V共享内存  180

7.2.5 信号进程间通信  181

7.2.6 套接字进程间通信  185

7.3 微内核进程间通信  186

7.3.1 Mach:早期的微内核进程间通信设计  186

7.3.2 L4:围绕进程间通信优化而设计的微内核系统  188

7.3.3 LRPC:迁移线程模型  193

7.4 案例分析:Android Binder  195

7.4.1 背景  195

7.4.2 Binder IPC总览  196

7.4.3 Binder IPC内核设计  196

7.4.4 匿名共享内存  199

7.5 案例分析:ChCore 进程间通信机制  201

7.6 思考题  203

参考文献  203

第8章 同步原语  206

8.1 互斥锁  209

8.1.1 临界区问题  209

8.1.2 硬件实现:关闭中断  211

8.1.3 软件实现:皮特森算法  211

8.1.4 软硬件协同:使用原子操作实现互斥锁  213

8.2 条件变量  219

8.2.1 条件变量的使用  219

8.2.2 条件变量的实现  222

8.3 信号量  223

8.3.1 信号量的使用  224

8.3.2 信号量的实现  225

8.4 读写锁  229

8.4.1 读写锁的使用  229

8.4.2 读写锁的实现  230

8.5 RCU  233

8.5.1 订阅/发布机制  234

8.5.2 宽限期  236

8.6 管程  237

8.7 同步带来的问题  239

8.7.1 死锁  239

8.7.2 活锁  245

8.7.3 优先级反转  246

8.8 案例分析:Linux中的futex  249

8.9 案例分析:ChCore中的同步原语  251

8.10 思考题  252

参考文献  254

第9章 文件系统  256

9.1 基于inode的文件系统  257

9.1.1 inode与文件  258

9.1.2 文件名与目录  260

9.1.3 硬链接与符号链接  263

9.1.4 存储布局  264

9.2 虚拟文件系统  266

9.2.1 面向文件系统的接口  266

9.2.2 面向应用程序的接口  270

9.2.3 页缓存、直接I/O与内存映射  277

9.2.4 多种文件系统的组织和管理  280

9.2.5 伪文件系统  282

9.3 其他文件系统  284

9.3.1 FAT文件系统  284

9.3.2 NTFS  288

9.3.3 FUSE与用户态文件系统  292

9.4 案例分析:ChCore文件系统  294

9.4.1 ChCore的文件系统架构  294

9.4.2 内存文件系统  295

9.5 思考题  296

参考文献  297

第10章 设备管理  299

10.1 计算机设备的连接和通信  300

10.1.1 设备的连接:总线  300

10.1.2 可编程I/O  301

10.1.3 高效数据传输:DMA  301

10.1.4 设备地址翻译:IOMMU  302

10.2 设备的识别  303

10.2.1 设备树  303

10.2.2 ACPI  304

10.3 设备的中断处理  305

10.3.1 中断控制器  305

10.3.2 中断的基本概念  306

10.3.3 中断处理:以Linux上下半部的机制为例  308

10.4 设备驱动与设备驱动模型  313

10.4.1 设备驱动  313

10.4.2 设备驱动模型  315

10.5 案例分析:Linux设备驱动模型  315

10.5.1 Linux的设备抽象  315

10.5.2 Linux的设备驱动模型  318

10.5.3 Linux驱动的动态管理  319

10.5.4 Linux的sysfs文件系统  321

10.6 案例分析:L4设备驱动模型  322

10.7 案例分析:Linux的用户态驱动框架  323

10.8 思考题  327

参考文献  327

第11章 系统虚拟化  329

11.1 系统虚拟化技术概述  330

11.1.1 系统虚拟化及其组成部分  330

11.1.2 虚拟机监控器的类型  331

11.2 CPU虚拟化  332

11.2.1 下陷和模拟  333

11.2.2 可虚拟化架构与不可虚拟化架构  333

11.2.3 解释执行  334

11.2.4 动态二进制翻译  335

11.2.5 扫描和翻译  336

11.2.6 半虚拟化技术  337

11.2.7 硬件虚拟化技术  338

11.2.8 小结  340

11.3 内存虚拟化  341

11.3.1 影子页表机制  343

11.3.2 影子页表的缺页异常处理流程  345

11.3.3 直接页表映射机制  345

11.3.4 两阶段地址翻译机制  346

11.3.5 换页和内存气球机制  349

11.3.6 小结  351

11.4 I/O虚拟化  351

11.4.1 软件模拟方法  352

11.4.2 半虚拟化方法  354

11.4.3 设备直通:IOMMUSR-IOV  356

11.4.4 小结  359

11.5 中断虚拟化  360

11.6 案例分析:QEMU/KVM  361

11.6.1 KVM API和一个简单的虚拟机监控器  362

11.6.2 KVM与QEMU  364

11.6.3 KVM内部实现简介  366

11.7 思考题  367

参考文献  367

缩略语  369

在线章节一

第二部分 操作系统进阶

第12章 多核与多处理器

第13章 文件系统崩溃一致性

第14章 网络协议栈与系统

第15章 轻量级虚拟化

第16章 操作系统安全

第17章 操作系统调测

第18章 形式化证明

第三部分 ChCore课程实验

第19章 实验1:机器启动

第20章 实验2:内存管理

第21章 实验3:用户进程与异常处理

第22章 实验4:多核处理

第23章 实验5:文件系统与Shell

第24章 实验6:进阶实践


上下滑动查看


==留言赠书== 


活动说明本次活动由【机械工业出版社华章公司】赞助,送出  2 本 《现代操作系统:原理与实现》。
送书规则留言说出你想要本书的理由,或者谈谈对现代操作系统的理解或实践心得( 至少100个字 ), 留言最为真诚、迫切想要的 2 名  可获得本书。
截止日期明天  11.16日下午18:00 截止
特别注意留言
至少要100字 ,并且要满足1)想要书的理由,或者 2)谈对现代操作系统的理解,其中任何一条都可以,最主要的就是要真诚,表现出你的想要。

没中奖的读者,或者不打算参与,而又对此书感兴趣的同学,可以直接通过下面的链接购买。



后台回复“加群”,带你进入高手如云交流群


推荐阅读:

网络故障排除的5款软件

一文吃透Linux提权

鸿蒙和安卓,到底有什么区别?

Linux的文件系统及文件缓存

Linux系统常用命令速查手册

Linux经典的几款收包引擎

这几个 IPv6 问题,你懂了吗

图解一致性哈希算法,看这文就够了!

网络故障排除工具 | 快速定位网络故障

一文详解 FTP、FTPS 与 SFTP 的原理

一文读懂容器网络发展

5 分钟看懂 HTTP 3

一文搞懂CDN加速原理

Linux used 内存到底哪里去了?

免费下载!《阿里工程师的自我修养》

阿里云深入浅出K8s与CDN排坑指南免费领取

5分钟给你讲清楚Kubernetes

容易被遗忘的10个Linux命令,很实用!

经典!服务端TCP连接的TIME_WAIT过多

8 个问题彻底搞透 DNS 协议

三张图彻底搞懂iptables和netfilter

故障排查:K8s中Pod无法正常解析域名

网络排错大讲解~

HTTP/3 原理实战

OVS 和 OVS-DPDK 对比

微软出品的最新K8S学习指南3.0下载



喜欢,就给我一个“在看”



10T 技术资源大放送!包括但不限于:云计算、虚拟化、微服务、大数据、网络、Linux、Docker、Kubernetes、Python、Go、C/C++、Shell、PPT 等。在公众号内回复「1024,即可免费获取!!

本文分享自微信公众号 - Linux云计算网络(cloud_dev)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部