描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111722489丛书名: 计算机类专业系统能力培养系列教材
内容简介
操作系统目前已成为我国“卡脖子”的关键技术之一,这对操作系统的教材建设提出了新的要求。首先,教材需要体现操作系统的核心原理与设计,帮助读者构筑系统性的认识;其次,教材需要反映国际研究前沿,帮助读者开拓新思路;*后,教材需要反映工业界实践,不可陷入纸上谈兵的陷阱。
作为操作系统教材的新尝试,本书融合了作者的教学经验与工业实践经验,以三个“面向”为导向,即面向经典基础理论与方法,面向国际前沿研究,面向*新工业界实践,深入浅出地介绍操作系统的理论、架构、设计方法与具体实现。本书将原理与实现解耦,从具体问题导出抽象概念,然后分析实现方法。全书内容以ARM架构为主,x86架构为辅;以微内核架构为主,同时兼顾宏内核与外核等架构。
除纸质版教材外,本书还配有网络章节、在线社区和课程实验。与本书配套的微内核架构教学操作系统ChCore由上海交通大学并行与分布式系统研究所设计并实现,通过ChCore相关实验,读者可在动手实践中获得第一手经验。
目 录
CONTENTS
目 录
丛书序言
序言一
序言二
前言
第一部分 操作系统基础
第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 对纤
目 录
丛书序言
序言一
序言二
前言
第一部分 操作系统基础
第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 对纤
前 言
PREFACE
前 言
为什么又要写一本操作系统的书
操作系统是现代计算平台的基础与核心支撑系统,负责管理硬件资源、控制程序运行、改善人机交互以及为应用软件提供运行环境等。长期以来,我国信息产业处于“缺芯少魂”的状态,作为信息产业之“魂”的操作系统是释放硬件能力、构筑应用生态的基础,也是关键的“卡脖子”技术之一。当前,以华为海思麒麟与鲲鹏处理器、银河飞腾处理器等为代表的ARM平台在智能终端、服务器等应用场景的崛起,以及以开源为特色的RISC-V指令集架构的出现及其生态的蓬勃发展,逐步改变了x86处理器一统天下的局面。因此,需要结合ARM等指令集架构与体系结构来构筑新的操作系统或深入优化现有操作系统,从而充分发挥硬件资源的能力并给用户提供更流畅的体验。
操作系统自20世纪50年代诞生以来,经历了从专用操作系统(每个主机与应用场景均需要一个新的操作系统)到通用操作系统(如Windows、UNIX、Linux等,即一个操作系统覆盖很多场景)的转变。在PC时代,由于Windows操作系统的广泛应用与部署,微软于20世纪90年代成为全球市值 高的公司,苹果研制的Mac OS也支撑苹果一度成为全球 赚钱的科技公司。在数据中心时代,在IBM、Intel等企业的支持下,Linux操作系统又逐步在服务器等场景占据主体地位。在移动互联网时代,苹果在乔布斯回归后基于NeXTSTEP操作系统构筑的iOS、新型macOS、iPadOS、watchOS、tvOS等操作系统支撑苹果成为全球市值 高的科技公司。谷歌于2005年收购了Andrew Rubin于2003年创立的Android公司,并通过持续不断的压强式投入逐步将Android打造成世界上发行量 的移动智能操作系统。
当前,随着智能终端的多样化,5G带来的大连接、低时延、高吞吐,以及异构硬件设备的繁荣发展,我们正在逐步进入万物互联的智能世界,用单一操作系统覆盖所有场景已经很难发挥出硬件的处理能力,也难以满足应用越来越高的极限需求。当前,华为、阿里巴巴、微软、谷歌、Meta(Facebook)等各大企业纷纷在操作系统领域投入重兵。例如,微软在Windows 10之后开始研制Windows CoreOS,谷歌从2016年开始投入Fuchsia项目,Facebook从2019年开始研制面向AR/VR等的新OS,华为也于2019年发布鸿蒙操作系统并与合作伙伴一起构建了openEuler、OpenHarmony开源社区和华为移动服务(HMS)生态。
操作系统的复兴也对教学科研与产业实践提出了新的要求。首先,操作系统教材需要体现操作系统的核心原理与设计,从而帮助读者建立系统性的认识。其次,操作系统教材需要反映国际研究前沿。当前操作系统技术仍在迅猛发展,很多新的问题随着新处理器、新加速器架构、新应用场景的出现而不断出现,同时,很多经典的问题也出现了新的解决方法,这些都给操作系统的设计与实现提供了新的思路。 后,操作系统教材要反映工业实践。操作系统是一门系统性与实践性非常强的学科,脱离实现来谈设计很容易陷入纸上谈兵的陷阱。当前操作系统领域的前沿研究与工业界实践的结合越来越紧密,在工业界新应用场景与需求的推动下,研究人员将前沿研究应用到工业实践,再由工业实践反馈进一步推动前沿研究,形成了良好的循环,并且循环的速度越来越快。
当前国内外已经出版了一系列优秀的操作系统教材,例如美国威斯康星大学麦迪逊分校的Remzi H. Arpaci-Dusseau和Andrea C. Arpaci-Dusseau两位教授的Operating Systems: Three Easy Pieces[1],Abraham Silberschatz、Peter B. Galvin和Greg Gagne的Operating System Concepts[2]。然而,从当前学术研究前沿和工业界实践的角度来看,一些经典的教材缺乏对当前研究前沿的体现,另一些教材仅关注操作系统的概念而缺乏充分的实践环节。此外,大部分教材是以x86体系结构为主导的,缺乏对当前已广泛流行的ARM等体系结构的描述?;这些教材也基本以Linux/UNIX等宏内核架构的操作系统为主,缺乏对当前新兴而又经典的微内核架构的操作系统的深入介绍。
本书以三个“面向”为导向,即面向经典基础理论与方法,面向国际前沿研究,面向 新工业界实践,深入浅出地介绍操作系统的理论、架构、设计方法与具体实现。对于每项要介绍的内容,本书将从一个具体的操作系统设计问题出发,解释这个问题背后的挑战,给出当前的经典设计,并介绍当前的一些工业实践与前沿研究。本书不仅介绍典型的Linux操作系统的设计与实现,还将介绍微内核(Microkernel)、外核(Exokernel)等操作系统架构。为此,上海交通大学并行与分布式系统研究所专门实现了一个小型但具有较完整基础功能的微内核架构教学操作系统ChCore,用真实的代码片段帮助读者更好地理解操作系统原理,并基于ChCore设计了一系列课程实验,以使读者通过动手实践的方式获得操作系统设计与实现的第一手经验。
2020年10月,本书作者撰写的《现代操作系统:原理与实现》出版,两个月内三次印刷,当年即获得了51CTO“年度 受读者喜爱的IT图书”Top5,并被多所高校与科研院所选为教材用于教学。两年来,在教学实践与反馈的基础上,本书作者对教材的结构和内容都做了较大幅度的修改,并
前 言
为什么又要写一本操作系统的书
操作系统是现代计算平台的基础与核心支撑系统,负责管理硬件资源、控制程序运行、改善人机交互以及为应用软件提供运行环境等。长期以来,我国信息产业处于“缺芯少魂”的状态,作为信息产业之“魂”的操作系统是释放硬件能力、构筑应用生态的基础,也是关键的“卡脖子”技术之一。当前,以华为海思麒麟与鲲鹏处理器、银河飞腾处理器等为代表的ARM平台在智能终端、服务器等应用场景的崛起,以及以开源为特色的RISC-V指令集架构的出现及其生态的蓬勃发展,逐步改变了x86处理器一统天下的局面。因此,需要结合ARM等指令集架构与体系结构来构筑新的操作系统或深入优化现有操作系统,从而充分发挥硬件资源的能力并给用户提供更流畅的体验。
操作系统自20世纪50年代诞生以来,经历了从专用操作系统(每个主机与应用场景均需要一个新的操作系统)到通用操作系统(如Windows、UNIX、Linux等,即一个操作系统覆盖很多场景)的转变。在PC时代,由于Windows操作系统的广泛应用与部署,微软于20世纪90年代成为全球市值 高的公司,苹果研制的Mac OS也支撑苹果一度成为全球 赚钱的科技公司。在数据中心时代,在IBM、Intel等企业的支持下,Linux操作系统又逐步在服务器等场景占据主体地位。在移动互联网时代,苹果在乔布斯回归后基于NeXTSTEP操作系统构筑的iOS、新型macOS、iPadOS、watchOS、tvOS等操作系统支撑苹果成为全球市值 高的科技公司。谷歌于2005年收购了Andrew Rubin于2003年创立的Android公司,并通过持续不断的压强式投入逐步将Android打造成世界上发行量 的移动智能操作系统。
当前,随着智能终端的多样化,5G带来的大连接、低时延、高吞吐,以及异构硬件设备的繁荣发展,我们正在逐步进入万物互联的智能世界,用单一操作系统覆盖所有场景已经很难发挥出硬件的处理能力,也难以满足应用越来越高的极限需求。当前,华为、阿里巴巴、微软、谷歌、Meta(Facebook)等各大企业纷纷在操作系统领域投入重兵。例如,微软在Windows 10之后开始研制Windows CoreOS,谷歌从2016年开始投入Fuchsia项目,Facebook从2019年开始研制面向AR/VR等的新OS,华为也于2019年发布鸿蒙操作系统并与合作伙伴一起构建了openEuler、OpenHarmony开源社区和华为移动服务(HMS)生态。
操作系统的复兴也对教学科研与产业实践提出了新的要求。首先,操作系统教材需要体现操作系统的核心原理与设计,从而帮助读者建立系统性的认识。其次,操作系统教材需要反映国际研究前沿。当前操作系统技术仍在迅猛发展,很多新的问题随着新处理器、新加速器架构、新应用场景的出现而不断出现,同时,很多经典的问题也出现了新的解决方法,这些都给操作系统的设计与实现提供了新的思路。 后,操作系统教材要反映工业实践。操作系统是一门系统性与实践性非常强的学科,脱离实现来谈设计很容易陷入纸上谈兵的陷阱。当前操作系统领域的前沿研究与工业界实践的结合越来越紧密,在工业界新应用场景与需求的推动下,研究人员将前沿研究应用到工业实践,再由工业实践反馈进一步推动前沿研究,形成了良好的循环,并且循环的速度越来越快。
当前国内外已经出版了一系列优秀的操作系统教材,例如美国威斯康星大学麦迪逊分校的Remzi H. Arpaci-Dusseau和Andrea C. Arpaci-Dusseau两位教授的Operating Systems: Three Easy Pieces[1],Abraham Silberschatz、Peter B. Galvin和Greg Gagne的Operating System Concepts[2]。然而,从当前学术研究前沿和工业界实践的角度来看,一些经典的教材缺乏对当前研究前沿的体现,另一些教材仅关注操作系统的概念而缺乏充分的实践环节。此外,大部分教材是以x86体系结构为主导的,缺乏对当前已广泛流行的ARM等体系结构的描述?;这些教材也基本以Linux/UNIX等宏内核架构的操作系统为主,缺乏对当前新兴而又经典的微内核架构的操作系统的深入介绍。
本书以三个“面向”为导向,即面向经典基础理论与方法,面向国际前沿研究,面向 新工业界实践,深入浅出地介绍操作系统的理论、架构、设计方法与具体实现。对于每项要介绍的内容,本书将从一个具体的操作系统设计问题出发,解释这个问题背后的挑战,给出当前的经典设计,并介绍当前的一些工业实践与前沿研究。本书不仅介绍典型的Linux操作系统的设计与实现,还将介绍微内核(Microkernel)、外核(Exokernel)等操作系统架构。为此,上海交通大学并行与分布式系统研究所专门实现了一个小型但具有较完整基础功能的微内核架构教学操作系统ChCore,用真实的代码片段帮助读者更好地理解操作系统原理,并基于ChCore设计了一系列课程实验,以使读者通过动手实践的方式获得操作系统设计与实现的第一手经验。
2020年10月,本书作者撰写的《现代操作系统:原理与实现》出版,两个月内三次印刷,当年即获得了51CTO“年度 受读者喜爱的IT图书”Top5,并被多所高校与科研院所选为教材用于教学。两年来,在教学实践与反馈的基础上,本书作者对教材的结构和内容都做了较大幅度的修改,并
评论
还没有评论。