上海交大陈海波、夏虞斌新作上市!微内核架构操作系统ChCore全新升级

C语言与CPP编程 2023-03-19 08:30


你好,我是飞宇。

运营这个公众号其实要花我每天一些精力,包括写文、编辑、推送、互动,或多或少都会花我一些精力,我的主业是做后端开发,我目前是在字节跳动某基架部门做后端研发,主要技术栈为C/C++、Golang。

或许你听过一句话:“心脏与字节只能一个跳动”,所以日常主业就挺忙的,所以在运营这个公众号之余也会接一些推广广告来止止血,给自己一些继续走下去的动力,一定程度上可以继续分享技术保持这个公众号的日常更新。

既然恰了烂钱也就拿出一部分给兄弟们搞点福利,所以以后可能每1-2周都会做一些赠书活动,我会定期挑选出一些不错的书籍包邮送给本号的读者。

本期就赠送最近看到的一本新书《操作系统:原理与实现》,挺好的,下面是本文介绍,送书方式在文末,不愿意看我唠叨的可以直接拉到底部参与活动

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


创作背景


操作系统是现代计算平台的基础与核心支撑系统,负责管理硬件资源、控制程序运行、改善人机交互以及为应用软件提供运行环境等。长期以来,我国信息产业处于“缺芯少魂”的状态,作为信息产业之“魂”的操作系统是释放硬件能力、构筑应用生态的基础,也是关键的“卡脖子”技术之一。当前,以华为海思麒麟与鲲鹏处理器、银河飞腾处理器等为代表的ARM平台在智能终端、服务器等应用场景的崛起,以及以开源为特色的RISC-V指令集架构的出现及其生态的蓬勃发展,逐步改变了x86处理器一统天下的局面。因此,需要结合ARM等指令集架构与体系结构来构筑新的操作系统或深入优化现有操作系统,从而充分发挥硬件资源的能力并给用户提供更流畅的体验。


操作系统是一个不断发展的学科。随着云计算、大数据、AIoT等新应用场景的兴起,以及非易失性内存、智能设备、各类加速器等新硬件的广泛应用,我国对操作系统人才的需求进一步扩大。我国对操作系统人才的需求进一步扩大,然而操作系统课程的内容却普遍相对陈旧,许多知识点和教授的方式还停留在上世纪90年代,教学与实际工业界研发脱节严重,高校毕业的应届生难以直接参与操作系统一线研发工作。因此,操作系统的教学亟需与时俱进的改革。

首先,操作系统教材需要体现操作系统的核心原理与设计,从而帮助读者建立对操作系统的系统性认识;其次,操作系统教材需要反映国际的研究前沿,当前操作系统技术仍在迅猛发展,很多新的问题随着新处理器、新加速器架构、新应用场景的出现而不断涌现,同样,很多经典的问题也会出现新的解决方法,这些都给操作系统的设计与实现提供了新的思路;最后,操作系统教材需要反映工业界实践,操作系统是一门系统性与实践性非常强的学科,脱离实现来谈设计很容易陷入纸上谈兵的陷阱。当前操作系统领域的前沿研究与工业界实践结合得越来越紧密,在工业界新应用场景与需求的推动下,研究人员将前沿研究应用到工业界实践,再由工业界实践反馈进一步推动前沿研究,从而形成了良好的循环,并且循环的速度越来越快。


独创性


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


新书主要增强了原理与实现的解耦,先基于“第一性原理”,从具体问题“自然导出”抽象概念,然后再介绍具体实现。在原理方面,增加了微内核设计思想对不同抽象的影响;在实现方面,加强了教材与ChCore代码的对应。在配套实验方面,对实验做了同步调整,增加了在树莓派上实现硬件启动的实验。

作者:陈海波 夏虞斌 

书号: 978-7-111-72248-9


作为操作系统教材的新尝试,该书融合了作者的教学经验与工业实践经验,以三个“面向”为导向,即面向经典基础理论与方法,面向国际前沿研究,面向最新工业界实践,深入浅出地介绍操作系统的理论、架构、设计方法与具体实现。本书将原理与实现解耦,从具体问题导出抽象概念,然后分析实现方法。全书内容以ARM架构为主,x86架构为辅;以微内核架构为主,同时兼顾宏内核与外核等架构。

除纸质版教材外,本书还配有网络章节、在线社区和课程实验。与本书配套的微内核架构教学操作系统ChCore由上海交通大学并行与分布式系统研究所设计并实现,通过ChCore相关实验,读者可在动手实践中获得第一手经验。



专家推荐


软件是计算系统的“灵魂”,而操作系统则是软件运行和支撑技术的核心,“CPU+操作系统”更是成为信息产业生态的核心、信息时代安全的基石。自1956年第一个实用操作系统诞生以来,操作系统已历经60多年的发展。它的发展一方面伴随着以CPU为代表的硬件及其组成结构的发展,另一方面是为了支持多机、分布式和网络环境,以及满足新型计算模式和新型应用的需求。迄今,以20年左右为周期,操作系统已出现从主机计算时代到个人计算时代,再到移动计算时代的两次重大变迁,每次变迁均涉及计算设备及其用户两方面的数量级的跃升,同时诞生了新的“CPU+操作系统”生态。当然,从技术的本质来看,操作系统“向下管理各种计算资源,向上为应用程序提供运行环境和开发支撑,为用户提供交互界面”的角色定位未变。


当前,万物互联、人机物融合计算的泛在计算时代正在开启。以云计算、大数据、人工智能和物联网等为代表的新型应用场景,多种不同架构的CPU、GPU和加速器、以新型存储、传感设备等为代表的新型硬件,以及嵌入式、移动计算、边缘计算、云计算等不同规模的计算系统,使得操作系统的内涵和外延均发生了重大变化,新一轮的重大变迁正在孕育中。我以为,支撑泛在计算的“泛在操作系统”将成为新的操作系统形态,并催生新的“CPU+操作系统”生态。这一轮变迁将促进新的操作系统研究与实践,在带来新机遇的同时,也会产生新的挑战和更激烈的竞争。


操作系统的发展离不开一代又一代科技工作者的接力付出,因此,操作系统人才培养与操作系统研发处于同样重要的地位!人才培养的根基就在于大学阶段的操作系统教学。考察已有的操作系统教材,面对新的计算时代所带来的新要求和新挑战,它们还存在若干需要改进之处。


首先,在新的泛在计算环境下,主流的计算设备不仅包括x86平台,还包括以ARM为代表的移动计算平台,未来还可能诞生以RISC-V为代表的物联计算平台,计算系统的规模和架构也趋于多样化。因此,需要思考和探索适合新型计算设备和系统的操作系统架构,改变传统操作系统教材以x86指令集为主、面向单机平台、以宏内核架构为实例进行讲解的模式,增加对微内核等新型操作系统架构、分布式和云计算平台、移动计算平台乃至物联计算平台等相关内容的讲解。


其次,随着计算平台与环境的扩展和泛化,在计算机系统上运行的应用形态也趋于多样化,而传统操作系统的教学更多关注底层运行机理,对上层应用的支持关注较少。在拥有众多新的应用场景的新一代计算环境下,操作系统的研究和教学不仅要关注底层设备和资源的管理,以及计算机系统的运行机制,同时也要关注运行在操作系统之上的新型应用的开发、运行和管理支撑平台与技术。


最后,操作系统教学的特点是层次多、内容杂,拥有很多的理论和技术知识点,要想帮助学生全面掌握这些技术的来龙去脉,就必须在操作系统教学中强调理论与实践相结合。早期的操作系统教材更多强调理论与方法,而不讲解实际系统的设计与实现,导致学生无法将所学的知识映射到真实系统,从而不能很好地解决实际问题。而过多关注某个实际系统的实现,则可能将大量的时间花费在各种细节上,导致学生缺乏对全局与原理的整体把握,形成思维定式而难以举一反三。


我非常高兴地看到,陈海波教授等编写的这本教材在上述很多方面进行了新的尝试。其一,本书以ARM64体系结构为主,面向多种体系结构,主要介绍微内核架构,同时兼顾宏内核与外核等架构,体现了操作系统的“现代性”。其二,本书采用“问题驱动”的思路,通过实际问题引出设计原理与实现方法;对同一问题,讨论多种设计的优缺点以及不同的适用场景,使读者不但“知其然”,而且“知其所以然”。其三,本书在平衡理论与实践方面做了很有益的尝试,针对教学与科研的需求,专门设计与实现了一个微内核操作系统,将理论内容与代码实现相融合;在此基础上设计了一套课程实验,读者可以通过动手实践,进一步加深对操作系统的理解。当然,也需指出,本书还只是针对移动计算环境的改进和加强,目前尚未涉及物联计算环境。


本书作者长期从事操作系统领域的研究工作,不仅在操作系统研究领域取得了较为突出的成果,还在工业界开展了深入实践。


本书基于作者多年来在复旦大学和上海交通大学讲授“操作系统”课程的经验,经过提炼与整理,结合操作系统的经典理论、研究前沿和工业界实践,为深入理解操作系统的原理与实现提供了较为翔实的学习资料与实践平台。通过这门课程的学习,学生可以建立起操作系统的完整知识体系,为后续在计算机系统方向进行更深入的学习和研究奠定基础。已有的教学实践表明,这是一本值得高等院校计算机专业学生以及操作系统相关领域的研究人员和工业界实践者学习和参考的书籍。


我国正在全面推进经济和社会的数字化转型、网络化重构和智能化提升,加快建设数字中国、发展数字经济。无疑,操作系统等基础软件的自主可控将是这一深度信息化进程的关键。目前,我国操作系统受制于人的问题仍然非常突出。要想改变这一现状,我们不仅需要把握新的泛在计算时代带来的机遇,应对设计和实现一个完整的操作系统所面临的众多技术挑战,更重要的是要构建操作系统开发和运行的生态,让更多的人融入操作系统生态的开发、维护和发展中。要破解这个难题,需要我国学术界和产业界的协同,需要更多从业人员的参与和合作,更需要源源不断的人才供给,特别是青年学生这个源头。衷心希望本书能够为我国操作系统的教学和人才培养做出实质性贡献。


梅宏

中国科学院院士

中国计算机学会理事长

2022年9月于北京


以5G、人工智能、云计算与物联网等为代表的新一轮科技革命与产业变革正在重新定义我们的信息社会。构建新型信息社会的一个关键因素是坚实的计算机基础设施,这对计算机系统能力培养提出了新的要求,需要广大信息产业从业人员具有良好的系统分析、设计与验证能力。


操作系统被誉为信息产业之魂,它向下承载着对物理硬件的抽象与管理,向上提供并管理着应用的执行环境,是连接硬件与应用的纽带,也是构筑信息社会的基石。数据的爆炸式增长、计算形态的变迁、存储层次的变化、新型硬件的涌现,给操作系统带来了新的机遇与挑战,也使得操作系统的教学成为计算机系统能力培养中的关键。这需要学生不仅能理解操作系统的基础理论,理解真实操作系统的设计与实现,而且能够通过动手实现一个操作系统来获得第一手经验。


本书的作者陈海波教授多年以来一直坚守在操作系统研究与工业实践的第一线,取得了突出的研究成果并对产业界产生了重大影响,是国际计算机领域的知名青年学者。他从2009年开始先后在复旦大学、上海交通大学从事操作系统的教学工作,致力于将前沿研究与工业实践传递到人才培养与课堂教学中,得到了广大学生的好评,培养了一批又一批在学术界与工业界崭露头角的青年计算机从业者。我很高兴看到他和其他作者一道,将他们对操作系统的深入理解、多年来的科研体会与一线的教学实践加以总结,撰写了这本新的操作系统教材。


本书的一个重要特色是较好地结合了经典基础理论方法、国际前沿研究与最新工业界实践。之前的操作系统教材往往将重心放在经典理论方法上,面向x86架构并以宏内核(Monolithic Kernel)为中心,基本上是PC时代前期的内容。本书则重点围绕当前在移动端和服务器端广泛使用的ARM架构进行介绍,而将x86架构作为辅助内容。并且,本书不仅介绍典型 Linux 操作系统的设计与实现,还介绍微内核(Microkernel)、外核(Exokernel)与多内核(Multikernel)等多种操作系统架构。此外,本书还与国际前沿研究紧密结合,介绍了许多面向新型应用、基于新型硬件的新问题与新思路。


本书的另一个重要特色是试图为操作系统的教学与人才培养提供完整的配套体系:在教材之外,作者提供了课程课件、授课视频、课程作业等丰富的教辅材料。作者所在的上海交通大学并行与分布式系统研究所还设计与实现了一个面向教学与科研的微内核架构操作系统ChCore,并提供了一整套课程实验与相应的测试用例,以帮助读者从头实现一个可以运行在ARM开发板上的操作系统。


相信这本书可以为我国基础软件人才培养与计算机系统能力培养提供有力支持!

金海

华中科技大学教授

中国计算机学会会士

IEEE Fellow

2022年9月




作者简介

 

目录

目  录

丛书序言

序言一

序言二

前言

第一部分 操作系统基础

第1章 操作系统概述  2

1.1 简约不简单:从Hello World

说起  2

1.2 什么是操作系统  3

1.3 操作系统简史  5

1.3.1 GM-NAA I/O:第一个

(批处理)操作系统  5

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

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

1.3.4 macOS/Windows:以人

为本的人机交互  7

1.3.5 iOS/Android:移动互联网

时代的操作系统  8

1.4 操作系统接口  10

1.5 思考题  12

参考文献  12

第2章 操作系统结构  13

2.1 操作系统的机制与策略  14

2.2 操作系统复杂性的管理方法  15

2.3 操作系统内核架构  17

2.3.1 简要结构  18

2.3.2 宏内核  18

2.3.3 微内核  20

2.3.4 外核  22

2.3.5 其他操作系统内核架构  24

2.4 操作系统框架结构  26

2.4.1 Android系统框架  26

2.4.2 ROS系统框架  28

2.5 操作系统设计:Worse is better?  29

2.6 ChCore:教学科研型微内核操作系统  31

2.7 思考题  32

参考文献  32

第3章 硬件环境与软件抽象  35

3.1 应用程序的硬件运行环境  35

3.1.1 程序的运行:用指令序列

控制处理器  36

3.1.2 处理数据:寄存器、运算和访存  38

3.1.3 条件结构:程序分支和

条件码  43

3.1.4 函数的调用、返回与栈  46

3.1.5 函数的调用惯例  50

3.1.6 小结:应用程序依赖的

处理器状态  52

3.2 操作系统的硬件运行环境  54

3.2.1 特权级别与系统ISA  54

3.2.2 异常机制与异常向量表  57

3.2.3 案例分析:ChCore启动与

异常向量表初始化  60

3.2.4 用户态与内核态的切换  61

3.2.5 系统调用  64

3.2.6 系统调用的优化  66

3.3 操作系统提供的基本抽象与

接口  67

3.3.1 进程:对处理器的抽象  69

3.3.2 案例分析:使用POSIX

进程接口实现shell  70

3.3.3 虚拟内存:对内存的

抽象  73

3.3.4 进程的虚拟内存布局  75

3.3.5 文件:对存储设备的

抽象  77

3.3.6 文件:对所有设备的

抽象  79

3.4 思考题  80

3.5 练习答案  81

参考文献  82

第4章 虚拟内存管理  83

4.1 CPU的职责:内存地址翻译  84

4.1.1 地址翻译  84

4.1.2 分页机制  85

4.1.3 多级页表  87

4.1.4 页表项与大页  91

4.1.5 TLB:页表的缓存  93

4.2 操作系统的职责:管理页表映射  96

4.2.1 操作系统为自己配置页表  96

4.2.2 如何填写进程页表  97

4.2.3 何时填写进程页表:立即映射  101

4.2.4 何时填写进程页表:延迟映射  104

4.2.5 常见的改变虚拟内存区域的接口  108

4.2.6 虚拟内存扩展功能  109

4.3 案例分析:ChCore虚拟内存

管理  112

4.3.1 ChCore内核页表初始化  112

4.3.2 ChCore内存管理  115

4.4 思考题  118

4.5 练习答案  119

参考文献  121

第5章 物理内存管理  122

5.1 操作系统的职责:管理物理

内存资源  122

5.1.1 目标与评价维度  122

5.1.2 基于位图的连续物理页

分配方法  123

5.1.3 伙伴系统原理  126

5.1.4 案例分析:ChCore中伙伴

系统的实现  127

5.1.5 SLAB分配器的基本设计  131

5.1.6 常用的空闲链表  133

5.2 操作系统如何获得更多物理内存资源  134

5.2.1 换页机制  134

5.2.2 页替换策略  137

5.2.3 页表项中的访问位与

页替换策略实现  140

5.2.4 工作集模型  141

5.2.5 利用虚拟内存抽象节约物理内存资源  142

5.3 性能导向的内存分配扩展机制  143

5.3.1 物理内存与CPU缓存  144

5.3.2 物理内存分配与CPU

缓存  146

5.3.3 多核与内存分配  147

5.3.4 CPU缓存的硬件划分  147

5.3.5 非一致内存访问

(NUMA架构)  149

5.3.6 NUMA架构与内存分配  150

5.4 思考题  151

5.5 练习答案  152

参考文献  152

第6章 进程与线程  154

6.1 进程的内部表示与管理接口  154

6.1.1 进程的内部表示—

PCB  154

6.1.2 进程创建的实现  155

6.1.3 进程退出的实现  159

6.1.4 进程等待的实现  160

6.1.5 exit与waitpid之间的信息传递  162

6.1.6 进程等待的范围与父子

进程关系  164

6.1.7 进程睡眠的实现  166

6.1.8 进程执行状态及其管理  166

6.2 案例分析:ChCore微内核的

进程管理  169

6.2.1 进程管理器与分离式

PCB  169

6.2.2 ChCore的进程操作:

以进程创建为例  170

6.3 案例分析:Linux的进程创建  172

6.3.1 经典的进程创建方法:

fork  172

6.3.2 其他进程创建方法  175

6.4 进程切换  179

6.4.1 进程的处理器上下文  180

6.4.2 进程的切换节点  180

6.4.3 进程切换的全过程  181

6.4.4 案例分析:ChCore的

进程切换实现  182

6.5 线程及其实现  191

6.5.1 为什么需要线程  191

6.5.2 用户视角看线程  192

6.5.3 线程的实现:内核数据

结构  194

6.5.4 线程的实现:管理接口  195

6.5.5 线程切换  200

6.5.6 内核态线程与用户态

线程  200

6.6 纤程  202

6.6.1 对纤程的需求:一个简单的例子  203

6.6.2 POSIX的纤程支持:ucontext  204

6.6.3 纤程切换  206

6.7 思考题  207

6.8 练习答案  208

参考文献  209

第7章 处理器调度  210

7.1 处理器调度机制  210

7.1.1 处理器调度对象  211

7.1.2 处理器调度概览  211

7.2 处理器调度指标  214

7.3 经典调度策略  216

7.3.1 先到先得  216

7.3.2 最短任务优先  218

7.3.3 最短完成时间优先  219

7.3.4 时间片轮转  220

7.3.5 经典调度策略的比较  221

7.4 优先级调度策略  222

7.4.1 高响应比优先  223

7.4.2 多级队列与多级反馈

队列  223

7.4.3 优先级调度策略的比较  229

7.5 公平共享调度策略  229

7.5.1 彩票调度  231

7.5.2 步幅调度  233

7.5.3 份额与优先级的比较  235

7.6 多核处理器调度机制  236

7.6.1 运行队列  236

7.6.2 负载均衡与负载追踪  237

7.6.3 处理器亲和性  238

7.7 案例分析:Linux调度器  239

7.7.1 O(N)调度器  240

7.7.2 O(1)调度器  241

7.7.3 完全公平调度器  242

7.7.4 Linux的细粒度负载

追踪  244

7.7.5 Linux的NUMA感知

调度  245

7.8 思考题  246

7.9 练习答案  247

参考文献  248

第8章 进程间通信  249

8.1 进程间通信基础  250

8.1.1 进程间通信接口  250

8.1.2 一个简单的进程间通信

设计  253

8.1.3 数据传递  255

8.1.4 通知机制  257

8.1.5 单向和双向  257

8.1.6 同步和异步  258

8.1.7 超时机制  259

8.1.8 通信连接  260

8.1.9 权限检查  261

8.1.10 命名服务  262

8.1.11 总结  263

8.2 文件接口IPC:管道  264

8.2.1 Linux管道使用案例  265

8.2.2 Linux中管道进程间通信的实现  267

8.2.3 命名管道和匿名管道  269

8.3 内存接口IPC:共享内存  270

8.3.1 共享内存  270

8.3.2 基于共享内存的进程间

通信  272

8.4 消息接口IPC:消息队列  273

8.4.1 消息队列的结构  274

8.4.2 基本操作  274

8.5 案例分析:L4微内核的IPC

优化  275

8.5.1 L4消息传递  275

8.5.2 L4控制流转移  277

8.5.3 L4通信连接  279

8.5.4 L4通信控制(权限

检查)  279

8.6 案例分析:LRPC的迁移线程

模型  280

8.6.1 迁移线程模型  281

8.6.2 LRPC设计  281

8.7 案例分析:ChCore进程间

通信机制  283

8.8 案例分析:Binder IPC  285

8.8.1 总览  286

8.8.2 Binder IPC内核

设计  286

8.8.3 匿名共享内存  290

8.9 思考题  291

8.10 练习答案  292

参考文献  292

第9章 并发与同步  294

9.1 同步场景  295

9.1.1 一个例子:多线程

计数器  295

9.1.2 同步的典型场景  297

9.2 同步原语  299

9.2.1 互斥锁  300

9.2.2 读写锁  302

9.2.3 条件变量  304

9.2.4 信号量  313

9.2.5 同步原语的比较  316

9.3 死锁  318

9.3.1 死锁的定义  318

9.3.2 死锁检测与恢复  320

9.3.3 死锁预防  321

9.3.4 死锁避免  322

9.3.5 哲学家问题  325

9.4 活锁  326

9.5 思考题  327

9.6 练习答案  330

参考文献  335

第10章 同步原语的实现  336

10.1 互斥锁的实现  336

10.1.1 临界区问题  336

10.1.2 硬件实现:关闭中断  337

10.1.3 软件实现:皮特森

算法  337

10.1.4 软硬件协同:使用原子

操作实现互斥锁  340

10.2 条件变量的实现  345

10.3 信号量的实现  346

10.3.1 非阻塞信号量  347

10.3.2 阻塞信号量  348

10.4 读写锁的实现  352

10.4.1 偏向读者的读写锁  353

10.4.2 偏向写者的读写锁  354

10.5 案例分析:Linux中的futex  356

10.6 案例分析:微内核中的同步

原语  360

10.7 思考题  361

10.8 练习答案  364

参考文献  364

第11章 文件系统  366

11.1 基于inode的文件系统  367

11.1.1 一个不用inode的简单

文件系统  367

11.1.2 inode与文件  368

11.1.3 多级inode  370

11.1.4 文件名与目录  374

11.1.5 存储布局  377

11.1.6 从文件名到链接  378

11.1.7 符号链接(软链接)  381

11.2 基于表的文件系统  382

11.2.1 FAT文件系统  382

11.2.2 NTFS  386

11.3 虚拟文件系统  392

11.3.1 文件系统的内存结构  392

11.3.2 面向文件系统的接口  394

11.3.3 多文件系统的组织和

管理  398

11.3.4 伪文件系统  400

11.4 VFS与缓存  402

11.4.1 访问粒度不一致问题和

一些优化  402

11.4.2 读缓存  403

11.4.3 写缓冲区与写合并  403

11.4.4 页缓存  403

11.4.5 直接I/O和缓存I/O  404

11.4.6 内存映射  405

11.5 用户态文件系统  405

11.5.1 为什么需要用户态文件系统  406

11.5.2 FUSE  406

11.5.3 ChCore的文件系统

架构  407

11.6 思考题  410

11.7 练习答案  411

参考文献  412

第12章 文件系统崩溃一致性  414

12.1 崩溃一致性  415

12.2 同步写入与文件系统一致性

检查  417

12.2.1 同步写入  417

12.2.2 文件系统一致性检查  418

12.2.3 fsck的局限和问题  420

12.3 原子更新技术:日志  421

12.3.1 日志机制的原理  421

12.3.2 日志的批量化与合并

优化  423

12.3.3 日志应用实例:JBD2  423

12.3.4 讨论和小结  427

12.4 原子更新技术:写时拷贝  427

12.4.1 写时拷贝的原理  428

12.4.2 写时拷贝在文件系统

中的应用  429

12.4.3 写时拷贝的问题与

优化  430

12.4.4 讨论和小结  430

12.5 Soft updates  431

12.5.1 Soft updates的三条

规则  432

12.5.2 依赖追踪  434

12.5.3 撤销和重做  435

12.5.4 文件系统恢复  437

12.5.5 讨论和小结  437

12.6 案例分析:日志结构文件系统  438

12.6.1 基本概念与空间布局  438

12.6.2 数据访问与操作  439

12.6.3 基于段的空间管理  441

12.6.4 检查点和前滚  444

12.6.5 小结  446

12.7 思考题  446

参考文献  447

第13章 设备管理  449

13.1 硬件设备基础  450

13.1.1 总线互联  451

13.1.2 设备的硬件接口  452

13.1.3 几种常见的设备  452

13.2 设备发现与交互  457

13.2.1 CPU与设备的交互方式概览  458

13.2.2 设备发现  460

13.2.3 设备寄存器的访问  463

13.2.4 中断  466

13.2.5 直接内存访问  470

13.3 设备管理的共性功能  475

13.3.1 设备的文件抽象  475

13.3.2 设备的逻辑分类  477

13.3.3 设备的缓冲区管理  478

13.3.4 设备的使用接口  482

13.4 应用I/O框架  484

13.4.1 应用层I/O库  484

13.4.2 用户态I/O  486

13.5 案例分析:Android操作系统的

硬件抽象层  488

13.6 思考题  490

13.7 练习答案  491

参考文献  491

第14章 系统虚拟化  493

14.1 系统虚拟化技术概述  494

14.1.1 系统虚拟化及其组成

部分  494

14.1.2 虚拟机监控器的类型  495

14.2 “下陷-模拟”方法  496

14.2.1 版本零:用进程模拟

虚拟机内核态  497

14.2.2 版本一:模拟时钟

中断  498

14.2.3 版本二:模拟用户态与

系统调用  500

14.2.4 版本三:虚拟机内支持

多个用户态线程  501

14.2.5 版本四:用线程模拟

多个vCPU  502

14.2.6 小结  504

14.3 CPU虚拟化  505

14.3.1 可虚拟化架构与不可

虚拟化架构  505

14.3.2 解释执行  506

14.3.3 动态二进制翻译  507

14.3.4 扫描-翻译  508

14.3.5 半虚拟化技术  509

14.3.6 硬件虚拟化技术  509

14.3.7 小结  512

14.4 内存虚拟化  513

14.4.1 影子页表机制  514

14.4.2 直接页表映射机制  517

14.4.3 两阶段地址翻译机制  518

14.4.4 换页和气球机制  521

14.4.5 小结  523

14.5 I/O虚拟化  523

14.5.1 软件模拟方法  524

14.5.2 半虚拟化方法  526

14.5.3 设备直通方法:IOMMU

和SR-IOV  528

14.5.4 小结  531

14.6 中断虚拟化  532

14.7 案例分析:QEMU/KVM  534

14.7.1 KVM API和一个简单的

虚拟机监控器  534

14.7.2 KVM和QEMU  536

14.7.3 KVM内部实现简介  538

14.8 思考题  539

参考文献  540

缩略语  541

在线章节

第二部分 操作系统进阶

第15章 多核与多处理器

第16章 可扩展同步原语

第17章 多场景文件系统

第18章 存储系统

第19章 轻量级虚拟化

第20章 网络与系统

第21章 操作系统安全

第22章 操作系统调测

第23章 形式化证明

第24章 云操作系统

第三部分 ChCore课程实验

实验1:机器启动

实验2:内存管理

实验3:进程与线程、异常处理

实验4:多核、多进程、调度与IPC

实验5:文件系统与shell

实验6:设备驱动与持久化

实验7:进阶实践



上下滑动查看



丰富的配套资源


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

 

扫码备注“操作系统”,加入本书读者交流群。


  • 本文来源:IT阅读排行榜,图片来源:原创

  • 责任编辑:王莹,部门领导:卢志坚

  • 发布人:白钰


点击阅读原文购买

赠书方式

本来打算采用留言点赞送书的方式,可飞宇听说貌似又一些刷赞团体专门组团刷赞来白嫖书籍的,所以为了让这些有价值的书被真心爱学习的小伙伴抽中,现在决定采用朋友圈点赞送书的形式。

次一共包邮送出4本下一个幸运儿就是你~不打算参加抽奖的小伙伴也可以自行购买

稍后我会在自己的朋友圈发布一条动态,点赞即可,今晚六点开奖,如果你没有我的好友欢迎你扫描下方二维码添加我,我也会经常在朋友圈分享一些技术和个人感悟,欢迎围观。


C语言与CPP编程 C语言/C++开发,C语言/C++基础知识,C语言/C++学习路线,C语言/C++进阶,数据结构;算法;python;计算机基础等
评论 (0)
  • 想不到短短几年时间,华为就从“技术封锁”的持久战中突围,成功将“被卡脖子”困境扭转为科技主权的主动争夺战。众所周知,前几年技术霸权国家突然对华为发难,导致芯片供应链被强行掐断,海外市场阵地接连失守,恶意舆论如汹涌潮水,让其瞬间陷入了前所未有的困境。而最近财报显示,华为已经渡过危险期,甚至开始反击。2024年财报数据显示,华为实现全球销售收入8621亿元人民币,净利润626亿元人民币;经营活动现金流为884.17亿元,同比增长26.7%。对比来看,2024年营收同比增长22.42%,2023年为7
    用户1742991715177 2025-05-02 18:40 210浏览
  • 文/郭楚妤编辑/cc孙聪颖‍相较于一众措辞谨慎、毫无掌舵者个人风格的上市公司财报,利亚德的财报显得尤为另类。利亚德光电集团成立于1995年,是一家以LED显示、液晶显示产品设计、生产、销售及服务为主业的高新技术企业。自2016年年报起,无论业绩优劣,董事长李军每年都会在财报末尾附上一首七言打油诗,抒发其对公司当年业绩的感悟。从“三年翻番顺大势”“智能显示我第一”“披荆斩棘幸从容”等词句中,不难窥见李军的雄心壮志。2012年,利亚德(300296.SZ)在深交所创业板上市。成立以来,该公司在细分领
    华尔街科技眼 2025-05-07 19:25 161浏览
  • 浪潮之上:智能时代的觉醒    近日参加了一场课题的答辩,这是医疗人工智能揭榜挂帅的国家项目的地区考场,参与者众多,围绕着医疗健康的主题,八仙过海各显神通,百花齐放。   中国大地正在发生着激动人心的场景:深圳前海深港人工智能算力中心高速运转的液冷服务器,武汉马路上自动驾驶出租车穿行的智慧道路,机器人参与北京的马拉松竞赛。从中央到地方,人工智能相关政策和消息如雨后春笋般不断出台,数字中国的建设图景正在智能浪潮中徐徐展开,战略布局如同围棋
    广州铁金刚 2025-04-30 15:24 387浏览
  • 多功能电锅长什么样子,主视图如下图所示。侧视图如下图所示。型号JZ-18A,额定功率600W,额定电压220V,产自潮州市潮安区彩塘镇精致电子配件厂,铭牌如下图所示。有两颗螺丝固定底盖,找到合适的工具,拆开底盖如下图所示。可见和大部分市场的加热锅一样的工作原理,手绘原理图,根据原理图进一步理解和分析。F1为保险,250V/10A,185℃,CPGXLD 250V10A TF185℃ RY 是一款温度保险丝,额定电压是250V,额定电流是10A,动作温度是185℃。CPGXLD是温度保险丝电器元件
    liweicheng 2025-05-05 18:36 273浏览
  • 某国产固态电解的2次和3次谐波失真相当好,值得一试。(仅供参考)现在国产固态电解的性能跟上来了,值得一试。当然不是随便搞低端的那种。电容器对音质的影响_电子基础-面包板社区  https://mbb.eet-china.com/forum/topic/150182_1_1.html (右键复制链接打开)电容器对音质的影响相当大。电容器在音频系统中的角色不可忽视,它们能够调整系统增益、提供合适的偏置、抑制电源噪声并隔离直流成分。然而,在便携式设备中,由于空间、成本的限
    bruce小肥羊 2025-05-04 18:14 236浏览
  • 后摄像头是长这个样子,如下图。5孔(D-,D+,5V,12V,GND),说的是连接线的个数,如下图。4LED,+12V驱动4颗LED灯珠,给摄像头补光用的,如下图。打开后盖,发现里面有透明白胶(防水)和白色硬胶(固定),用合适的工具,清理其中的胶状物。BOT层,AN3860,Panasonic Semiconductor (松下电器)制造的,Cylinder Motor Driver IC for Video Camera,如下图。TOP层,感光芯片和广角聚焦镜头组合,如下图。感光芯片,看着是玻
    liweicheng 2025-05-07 23:55 98浏览
  • 2024年初,OpenAI公布的Sora AI视频生成模型,震撼了国产大模型行业。随后国产厂商集体发力视频大模型,快手发布视频生成大模型可灵,字节跳动发布豆包视频生成模型,正式打响了国内AI视频生成领域第一枪。众多企业匆忙入局,只为在这片新兴市场中抢占先机,却往往忽视了技术成熟度与应用规范的打磨。以社交平台上泛滥的 AI 伪造视频为例,全红婵家人被恶意仿冒博流量卖货,明星们也纷纷中招,刘晓庆、张馨予等均曾反馈有人在视频号上通过AI生成视频假冒她。这些伪造视频不仅严重侵犯他人权
    用户1742991715177 2025-05-05 23:08 85浏览
  • UNISOC Miracle Gaming奇迹手游引擎亮点:• 高帧稳帧:支持《王者荣耀》等主流手游90帧高画质模式,连续丢帧率最高降低85%;• 丝滑操控:游戏冷启动速度提升50%,《和平精英》开镜开枪操作延迟降低80%;• 极速网络:专属游戏网络引擎,使《王者荣耀》平均延迟降低80%;• 智感语音:与腾讯GVoice联合,弱网环境仍能保持清晰通话;• 超高画质:游戏画质增强、超级HDR画质、游戏超分技术,优化游戏视效。全球手游市场规模日益壮大,游戏玩家对极致体验的追求愈发苛刻。紫光展锐全新U
    紫光展锐 2025-05-07 17:07 195浏览
  • 二位半 5线数码管的驱动方法这个2位半的7段数码管只用5个管脚驱动。如果用常规的7段+共阳/阴则需要用10个管脚。如果把每个段看成独立的灯。5个管脚来点亮,任选其中一个作为COM端时,另外4条线可以单独各控制一个灯。所以实际上最多能驱动5*4 = 20个段。但是这里会有一个小问题。如果想点亮B1,可以让第3条线(P3)置高,P4 置低,其它阳极连P3的灯对应阴极P2 P1都应置高,此时会发现C1也会点亮。实际操作时,可以把COM端线P3设置为PP输出,其它线为OD输出。就可以单独控制了。实际的驱
    southcreek 2025-05-07 15:06 223浏览
  • 5小时自学修好BIOS卡住问题  更换硬盘故障现象:f2、f12均失效,只有ESC和开关机键可用。错误页面:经过AI的故障截图询问,确定是机体内灰尘太多,和硬盘损坏造成,开机卡在BIOS。经过亲手拆螺丝和壳体、排线,跟换了新的2.5寸硬盘,故障排除。理论依据:以下是针对“5小时自学修好BIOS卡住问题+更换硬盘”的综合性解决方案,结合硬件操作和BIOS设置调整,分步骤说明:一、判断BIOS卡住的原因1. 初步排查     拔掉多余硬件:断开所有外接设备(如
    丙丁先生 2025-05-04 09:14 118浏览
  • Matter协议是一个由Amazon Alexa、Apple HomeKit、Google Home和Samsung SmartThings等全球科技巨头与CSA联盟共同制定的开放性标准,它就像一份“共生契约”,能让原本相互独立的家居生态在应用层上握手共存,同时它并非另起炉灶,而是以IP(互联网协议)为基础框架,将不同通信协议下的家居设备统一到同一套“语义规则”之下。作为应用层上的互通标准,Matter协议正在重新定义智能家居行业的运行逻辑,它不仅能向下屏蔽家居设备制造商的生态和系统,让设备、平
    华普微HOPERF 2025-05-08 11:40 86浏览
  • 随着智能驾驶时代到来,汽车正转变为移动计算平台。车载AI技术对存储器提出新挑战:既要高性能,又需低功耗和车规级可靠性。贞光科技代理的紫光国芯车规级LPDDR4存储器,以其卓越性能成为国产芯片产业链中的关键一环,为智能汽车提供坚实的"记忆力"支持。作为官方授权代理商,贞光科技通过专业技术团队和完善供应链,让这款国产存储器更好地服务国内汽车厂商。本文将探讨车载AI算力需求现状及贞光科技如何通过紫光国芯LPDDR4产品满足市场需求。 车载AI算力需求激增的背景与挑战智能驾驶推动算力需求爆发式
    贞光科技 2025-05-07 16:54 147浏览
  • 这款无线入耳式蓝牙耳机是长这个样子的,如下图。侧面特写,如下图。充电接口来个特写,用的是卡座卡在PCB板子上的,上下夹紧PCB的正负极,如下图。撬开耳机喇叭盖子,如下图。精致的喇叭(HY),如下图。喇叭是由电学产生声学的,具体结构如下图。电池包(AFS 451012  21 12),用黄色耐高温胶带进行包裹(安规需求),加强隔离绝缘的,如下图。451012是电池包的型号,聚合物锂电池+3.7V 35mAh,详细如下图。电路板是怎么拿出来的呢,剪断喇叭和电池包的连接线,底部抽出PCB板子
    liweicheng 2025-05-06 22:58 333浏览
  • ‌一、高斯计的正确选择‌1、‌明确测量需求‌‌磁场类型‌:区分直流或交流磁场,选择对应仪器(如交流高斯计需支持交变磁场测量)。‌量程范围‌:根据被测磁场强度选择覆盖范围,例如地球磁场(0.3–0.5 G)或工业磁体(数百至数千高斯)。‌精度与分辨率‌:高精度场景(如科研)需选择误差低于1%的仪器,分辨率需匹配微小磁场变化检测需求。2、‌仪器类型选择‌‌手持式‌:便携性强,适合现场快速检测;‌台式‌:精度更高,适用于实验室或工业环境。‌探头类型‌:‌横向/轴向探头‌:根据磁场方向选择,轴向探头适合
    锦正茂科技 2025-05-06 11:36 389浏览
  • 你是不是也有在公共场合被偷看手机或笔电的经验呢?科技时代下,不少现代人的各式机密数据都在手机、平板或是笔电等可携式的3C产品上处理,若是经常性地需要在公共场合使用,不管是工作上的机密文件,或是重要的个人信息等,民众都有防窃防盗意识,为了避免他人窥探内容,都会选择使用「防窥保护贴片」,以防止数据外泄。现今市面上「防窥保护贴」、「防窥片」、「屏幕防窥膜」等产品就是这种目的下产物 (以下简称防窥片)!防窥片功能与常见问题解析首先,防窥片最主要的功能就是用来防止他人窥视屏幕上的隐私信息,它是利用百叶窗的
    百佳泰测试实验室 2025-04-30 13:28 643浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦