
本书围绕操作系统的处理器管理、存储管理、设备管理和文件管理等重点管理功能,结合作者10余年讲授操作系统的经验,同时引入一些国际上最新的操作系统的研究成果介绍,结合本科生学科知识掌握以及研究生考试的需求,全面阐述操作系统的主要功能、特点等知识。本书的主要特点在于内容翔实、知识相对较新,同时许多重点难点内容深入浅出。读者对象是计算机专业的本科生以及计算机硕士研究生的考试指导书籍。
自从20世纪40年代第一台电子计算机发明与应用以来,计算机器与装备逐步从原先的国家重器进入寻常百姓家。伴随着个人智能手机和穿戴设备的进一步普及,计算机器与装备已经无处不在。它们之所以能够广泛应用,一方面得益于硬件技术的发展,尤其是摩尔定律所表达的CPU性能的快速增长;另一方面也归功于软件技术的飞跃,尤其是操作系统的不断演化。
纵观操作系统的发展历史,不难发现,操作系统的发展是在人与计算机的矛盾中产生的,究其本质,操作系统是计算机器与装备嵌入现实世界的一个界面。从进入太空的人造卫星和太空探索飞船到口袋中的智能手机,从适用于大型机器的作业批处理到适用于个人桌面终端的办公娱乐,从安装在千家万户的电表和水表到上千万分子化合物的模拟,操作系统部署、应用和服务与计算机器一道星罗棋布般地分布在世界的每一个角落,出现在人类社会生活的方方面面。
现代操作系统的一个标志是进程的创建,它为丰富软件与应用生态的繁荣奠定了最关键的基础。抽象出进程的概念和实体,是操作系统领域最重要的发明之一。通过进程,操作系统可以实现统一的程序管理。试想一下,如果没有进程,每个程序其实都是五花八门的,要管理这些程序是很复杂的,甚至是不可能的。基于进程,每个在运行时的程序都有基本的进程状态信息和一个规范的生存周期(从创建到终止),并且都服从统一的调度。
基于进程的概念,现代操作系统将计算机运行时完全映射为一个进程“王国”。读者可以将手边一台正在运行的笔记本电脑想象成一个忙碌的世界,里面同时(并发)运行着成百上千个进程,这些进程共享同样的物理CPU和内存。不难想象,如此众多的进程共处同一个“世界”中,那就一定存在需要相互协调的问题,这些问题即为进程间通信。
操作系统最基础性的功能是对计算机资源的管理,而处理器、内存、设备与文件是计算机中最核心的几类软硬件资源。
处理器管理的本质是时间管理,可以把它转化为围绕进程的处理器时间的调度问题,即在某个时刻应该调度哪个进程运行(占用处理器)。需要强调的一点是,这里提到的“时刻”与我们日常语言中的时刻的内涵有所区别,这里的时刻是以CPU的时钟周期作为最小的计算单位。何时调度,如何调度?这些在具体的实现中,针对不同的侧重点有不同的策略。另外,在处理器调度过程中,进程间无缝和透明地切换是一个技术性要求很高的操作,这可以说是操作系统这个魔法师变的一个戏法。
内存管理的本质是空间(地址)管理。其目标是将一个连续的地址空间合理且有效地划分给多个进程同时使用,一方面要保障内存空间的充分利用,另一方面要确保进程间不会出现相互干扰。朴素的内存管理,无论是分段、分页,或者是段页式内存管理,通常是通过映射将地址空间从一维转换为二维或三维(多维),从而更有效、更精准地管理内存空间。此外,更进一步,为缓解物理内存空间不足的问题,现代操作系统通过虚拟手段,将部分辅助存储空间从逻辑上扩充为内存空间的一部分。当然,这个存储虚拟化过程实现起来技术性也极强,这可以说是操作系统变的第二个戏法。
操作系统领域素来有微内核和单内核的路线之争。如果采用微内核,那么在内核中主要涉及的部分就是处理器管理和内存管理的部分功能。如果采用单内核,那么在内核中还要再包含设备管理和文件管理的内容。
设备管理的关键是如何统一管理类型繁杂、特性各异的设备。设备的类型是非常复杂的,有高速设备,也有低速设备;有块设备,也有字节设备;有共享设备,也有独占设备。操作系统创新地抽象出设备独立软件这一个软件层次,将设备通用与设备特性相关进行分离。与设备特性无关的通用操作包装到这个设备独立软件层次中,而与设备特性相关的操作放到设备驱动模块中,交由设备厂商来处理。设备管理要处理的一个核心问题还包括如何协调高速CPU与低速设备之间的矛盾,这个矛盾一直伴随着计算机的发展,可以说是操作系统面临的主要矛盾之一。事实上,从某种意义上而言,现代操作系统的另一个标志是CPU与设备之间在关系上发生的一场“哥白尼式”的革命。
文件管理的关键是一种透明映射,是将适用于人(用户)的目录和文件管理方式映射到计算机存储设备所擅长处理的串行0与1的码。文件管理主要涉及文件的逻辑结构和物理组织两个大的方面: 逻辑结构是从数据组织的角度讨论文件逻辑组织的方式;物理组织是从物理存储的角度讨论如何将文件存储到存储设备中。此外,一般的文件管理还涉及目录管理与文件命名等问题。
抛开具体的技术细节,操作系统在设计和架构方面的关键是并发、虚拟、抽象与映射。其中,抽象在操作系统中是极其普遍的,包括从进程的抽象到设备的抽象,抽象是操作系统能够处理复杂多变的软件生态的关键;虚拟是操作系统的核心特征之一,将内存从物理内存推动到虚拟内存,还将计算机操作系统的多道程序推动到多操作系统范式(云计算);并发对于操作系统至关重要,它是现代操作系统的标志性特征;映射是操作系统最重要的逻辑,虚拟地址到物理地址需要通过映射,设备操作也是从抽象设备到物理设备的映射。
编者2021年1月
第1章操作系统初识/1
1.1操作系统简介1
1.1.1操作系统的定义1
1.1.2操作系统的功能5
1.1.3操作系统的主要特征8
1.1.4时空与逻辑关系10
1.2操作系统的起源12
1.2.1手工操作阶段12
1.2.2联机批处理系统阶段13
1.2.3脱机批处理系统阶段13
1.2.4执行系统阶段14
1.2.5多道批处理系统阶段14
1.3操作系统的分类17
1.3.1按使用环境与功能特征划分18
1.3.2按体系架构划分19
1.3.3按内核划分20
本章小结21
习题21
第2章操作系统的架构/23
2.1计算机体系架构23
2.1.1冯·诺依曼体系架构23
2.1.2系统的自举26
2.1.3保护模式与实模式28
2.1.4中断31
2.2操作系统的界面36
2.2.1系统调用36
2.2.2内核态(管态)与用户态(目态)38
2.3操作系统的设计39
2.3.1操作系统的设计哲学392.3.2操作系统的逻辑层次40
本章小结41
习题42
操作系统本质第3章进程的抽象/44
3.1多道程序设计与进程的引入44
3.2进程结构与进程控制45
3.2.1进程控制块45
3.2.2进程的创建48
3.2.3进程的终止49
3.3进程状态转换与上下文切换50
3.3.1进程的状态及其转换50
3.3.2上下文切换52
3.4线程54
3.4.1线程的引入54
3.4.2进程与线程的关系55
3.4.3POSIX线程57
本章小结60
习题60
第4章进程的并发/66
4.1并发的问题66
4.2竞争条件67
4.3死锁71
4.4优先级反转77
4.5再谈死锁79
4.5.1产生死锁的必要条件79
4.5.2处理死锁的基本方法80
4.5.3预防死锁81
4.5.4避免死锁82
4.5.5死锁的检测和恢复86
本章小结91
习题92
第5章进程间通信/95
5.1临界区与互斥95
5.1.1禁用中断98
5.1.2锁变量99
5.1.3严格轮转法99
5.1.4Dekker算法101
5.1.5Peterson算法104
5.1.6Dijkstra算法108
5.1.7EisenbergMcGuire算法111
5.1.8Lamport bakery算法114
5.1.9测试与设置锁117
5.1.10POSIX的锁机制118
5.2协作与同步120
5.2.1进程同步问题120
5.2.2条件变量123
5.2.3信号量127
5.3消息传送135
5.3.1管道135
5.3.2FIFO138
5.3.3消息队列141
5.3.4共享内存段144
5.4经典IPC问题151
5.4.1哲学家进餐问题151
5.4.2读者写者问题155
5.4.3理发师睡觉问题159
本章小结163
习题164
第6章处理器管理/171
6.1处理器调度概述171
6.1.1处理器的虚拟化171
6.1.2调度的进程行为172
6.1.3调度决策173
6.2调度层次173
6.2.1高级调度174
6.2.2低级调度175
6.2.3中级调度176
6.2.4调度与进程生命周期177
6.3调度准则与算法178
6.3.1调度准则178
6.3.2先来先服务调度算法181
6.3.3短作业优先调度算法182
6.3.4最短剩余时间优先调度算法183
6.3.5时间片轮转调度算法184
6.3.6多级反馈队列调度算法186
6.3.7其他调度方式190
本章小结192
习题192
第7章内存管理/197
7.1内存管理概述197
7.1.1存储器的层次结构197
7.1.2内存管理需求分析199
7.2无抽象的存储器200
7.3连续内存分配203
7.3.1固定分区分配203
7.3.2动态分区分配204
7.3.3Buddy 系统206
7.4地址空间的抽象213
7.5分段存储管理216
7.6分页存储管理220
7.6.1地址结构221
7.6.2地址变换222
7.6.3页表结构229
7.7段页式存储管理方式232
本章小结236
习题237
第8章设备管理/239
8.1设备管理概述239
8.1.1设备分类239
8.1.2I/O的硬件241
8.1.3CPU与I/O的数据传送方式245
8.1.4缓冲管理249
8.2I/O软件249
8.2.1设计目标和原则249
8.2.2中断处理程序253
8.2.3设备驱动程序253
8.2.4内核I/O子系统257
8.3I/O请求的生命周期261
8.4再谈SPOOLing263
8.4.1SPOOLing介绍263
8.4.2SPOOLing系统的组成264
8.4.3SPOOLing系统的特点265
8.4.4SPOOLing系统的应用(共享打印机)265
本章小结267
习题267
第9章磁盘管理/269
9.1磁盘存储器的管理269
9.1.1磁盘设备270
9.1.2磁盘的访问时间271
9.1.3RAID272
9.1.4磁盘连接方式277
9.2磁盘调度279
9.2.1先来先服务279
9.2.2最短寻道时间优先279
9.2.3扫描算法280
9.2.4循环扫描算法281
9.2.5NStepSCAN和FSCAN调度算法282
9.2.6磁盘调度算法的选择284
9.3存储空间管理285
9.3.1位图法285
9.3.2空闲表法286
9.3.3空闲链表法287
9.3.4成组链接法288
本章小结289
习题290
第10章虚拟存储/293
10.1虚拟存储概述294
10.1.1对换295
10.1.2局部性297
10.1.3虚拟存储器的定义299
10.1.4虚拟存储器的特征300
10.2请求分页存储管理302
10.2.1地址转换机制305
10.2.2内存分配策略和分配算法307
10.2.3调页策略309
10.2.4页面置换算法310
10.3抖动325
10.3.1抖动的原因325
10.3.2工作集模型326
10.3.3基于页面故障频率的页面替换328
本章小结329
习题329
第11章文件管理/331
11.1文件系统概述332
11.1.1文件及文件系统332
11.1.2文件、记录和数据项336
11.1.3文件类型337
11.1.4文件的操作339
11.2文件的逻辑结构343
11.2.1文件逻辑结构的类型344
11.2.2堆345
11.2.3顺序文件346
11.2.4索引顺序文件346
11.2.5索引文件348
11.2.6哈希文件350
11.3文件分配管理351
11.3.1连续分配351
11.3.2链接分配354
11.3.3索引分配355
11.4文件命名359
11.4.1管理359
11.4.2链接362
11.4.3识别文件的其他方式365
本章小结366
习题366
结束语/369
参考文献与扩展阅读/371
A.1一般性文献371
A.2案例研究371
A.3死锁372
A.4同步373
A.5CPU调度373
A.6内存管理374
A.7设备处理374
A.8文件系统375
A.9实现375
陈鹏,副教授,计算机软件与理论专业博士(北京航空航天大学),哲学博士后(中国社会科学院哲学所),近五年来发表论文20余篇,著作3部,专利1项,软件著作权10余项。主讲操作系统课程超过10年。