
本书是普通高等教育"十一五”国家级规划教材、北京高等教育精品教材,全面系统地介绍现代操作系统的基本理论和最新技术。全书共12章:第1章概述操作系统的定义、功能、特征、发展历程和结构;第2章至第8章分别讲述进程和线程管理、调度、存储管理、文件系统、输入/输出管理、用户接口服务和死锁;第9章介绍嵌入式系统;第10章讲述分布式系统和云计算;第11章讲述安全和保护机制;第12章为实验操作。附录分别给出了Linux常用系统调用和库函数,以及各章习题的解答视频。本书为任课教师提供电子教案。 本书可作为大学本科及专科计算机专业教材或考研参考书,也可作为计算机工作者的自学用书。
前 言 本书是普通高等教育“十一五”国家级规划教材、北京高等教育精品教材。 本书第3版经过4年的使用,受到众多兄弟院校师生和读者的好评,充分肯定了本书的系统性、先进性和适用性,也提出了很好的建设性意见。在此我们表示衷心感谢。我们在教学研讨中讨论了国内外近年来操作系统理论、技术和应用的最新发展,结合实际授课和实验教学中的体会,并综合和吸纳各方的有益建议,决定对本书进行深入修订,主要包括以下几方面: (1)梳理章节安排,把中心内容放在本书的前面。第1章概述,第2章至第7章分别讲述操作系统的各种基本功能。“死锁”内容放到第8章。原后面3章顺序不变。这样有利于读者对操作系统概念、原理、基本技术的理解,达到重点、要点知识“先入为主”的效果。 (2)相近知识放在同一章中介绍,便于读者全面了解和比较。“管道文件”放到进程通信节中介绍,然后是“信号机制”。这样与前面的“进程同步”关联,集中介绍了进程的简单通信和高级通信。“中断处理”放到“输入/输出管理”章中,有利于理解。 (3)大大加强了对操作系统中许多抽象概念的讲解。加入对操作系统特征之一——“抽象性”的说明,更新了对“虚拟机”结构和CPU到进程的抽象、物理内存到地址空间(虚拟内存)的抽象、I/O设备和磁盘到文件的抽象等的介绍,有利于提升读者思考和处理问题的能力。 (4)第1章中增加了国产操作系统发展的介绍,第9章中增加了华为鸿蒙操作系统的介绍,旨在提高读者对自主知识产权操作系统的认知和信心。 (5)为了配合学生上机实验,对原“附录A 实验指导”做了修订,改为“第12章 实验操作”,同时增加了“附录A Linux常用系统调用和库函数”,方便读者查看和学习。 (6)鉴于师生对课后习题的关注,希望给出习题解答,因而教学团队制作了每章习题的解答视频,不只是简单给出了各章的部分习题(涉及重点、难点问题)的参考答案。其出发点是便于读者自学自测,提高能力。诚望师生合理使用这部分资料,自觉主动学习,避免对它的依赖性。所谓“书山有路勤为径,学海无涯苦作舟”。 (7)对原书中不妥、不确、不明的表述做了修订。 本书正文共12章:第1章概述操作系统的定义、功能、特征、发展历程和结构;第2章至第8章分别讲述进程和线程管理、调度、存储管理、文件系统、输入/输出管理、用户接口服务和死锁;第9章介绍嵌入式系统;第10章讲述分布式系统和云计算系统;第11章讲述系统安全和保护机制;第12章为实验操作。 书后附录分别给出了Linux常用系统调用和库函数、习题答疑视频。 本书为任课教师负责提供电子教案,可登录华信教育资源网http://www.hxedu.com.cn,注册后进行下载。 由于各学校课程设置、学时安排及学生程度等方面存在差异,在应用本教材授课时,任课教师可以对内容酌情进行取舍。下面列出的理论课学时(实验课时自行安排)分配建议是我们多年授课的体会,仅供参考。 理论学时安排(建议) 总 学时 课时分配 第1章 第2章 第3章 第4章 第5章 第6章 第7章 第8章 第9章 第10章 第11章 48 4 10 5 12 6 6 1 4 0 0 0 56 5 10 5 12 7 6 2 4 1 2 2 64 6 12 6 12 8 6 3 5 2 2 2 本书可以作为高等院校(本科、职业本科和高职层次)计算机学科相关专业的教科书或考研参考书,也可以作为IT领域相关从业人员的自学用书。 本次修订得到电子工业出版社编辑们的大力支持,在此表示衷心感谢。 对使用本书的众多师生提出的中肯意见,再次表示诚恳谢意,并望继续给出多方建议。 本次修订主要由孟庆昌、张志华执笔,参加编写、整理工作的还有牛欣源、路旭强、刘振英、孟欣等。 由于编者水平有限,时间又很紧,对广大读者的需求尚缺乏广泛深入的了解,书中难免存在不妥甚至错误之处,恳请资深专家和广大读者批评指正,并诚望及时反馈用书信息。 读者反馈:zhang_zh@bistu.edu.cn或者192910558(QQ群)。 作 者
目 录 第1章 操作系统引论 1 1.1 计算机硬件结构 2 1.1.1 处理器 2 1.1.2 存储器 3 1.1.3 I/O设备 4 1.1.4 总线 4 1.2 什么是操作系统 5 1.2.1 操作系统的概念 5 1.2.2 操作系统主要功能 7 1.2.3 操作系统的地位 10 1.3 操作系统的发展历程 11 1.3.1 操作系统的形成 11 1.3.2 操作系统的发展 14 1.3.3 推动操作系统发展的动力 14 1.4 操作系统类型 15 1.4.1 批处理系统 15 1.4.2 分时系统 17 1.4.3 实时系统 18 1.4.4 网络操作系统 20 1.4.5 分布式操作系统 21 1.4.6 其他操作系统 22 1.5 操作系统的特征 24 1.6 操作系统结构 24 1.6.1 单体系统 25 1.6.2 层次式系统 26 1.6.3 虚拟机 26 1.6.4 微内核 28 1.6.5 客户—服务器系统 29 1.7 系统初启过程 29 1.8 国产操作系统的发展状况和趋势 30 本章小结 31 习题1 32 第2章 进程和线程 34 2.1 进程 35 2.1.1 多道程序设计 35 2.1.2 进程的概念 37 2.2 进程的状态和组成 39 2.2.1 进程的状态及其转换 39 2.2.2 进程描述 42 2.2.3 进程队列 44 2.3 进程管理 46 2.3.1 进程图 46 2.3.2 进程创建 47 2.3.3 进程终止 49 2.3.4 进程阻塞 50 2.3.5 进程唤醒 50 2.4 线程 51 2.4.1 线程概念 51 2.4.2 线程的实现 54 2.5 进程的同步和互斥 55 2.5.1 竞争条件 56 2.5.2 临界资源和临界区 57 2.5.3 进程互斥和进程同步 58 2.5.4 互斥方式 59 2.5.5 信号量 61 2.5.6 信号量的一般应用 64 2.6 经典进程同步问题 65 2.7 管程 71 2.8 进程通信 72 2.8.1 共享内存 72 2.8.2 消息传递 72 2.8.3 管道文件 75 2.9 信号机制 76 2.9.1 信号机制概念 76 2.9.2 信号的分类、产生和传送 77 2.9.3 信号的处理方式 78 2.9.4 信号的检测和处理 79 2.10 客户—服务器系统中的通信 79 本章小结 81 习题2 82 第3章 调度 85 3.1 调度类型 86 3.2 作业调度 87 3.2.1 作业状态 87 3.2.2 作业控制块和作业调度的功能 88 3.3 进程调度 89 3.4 调度准则 91 3.4.1 影响调度算法选择的主要因素 91 3.4.2 调度性能评价准则 92 3.5 调度算法 93 3.5.1 先来先服务法 93 3.5.2 短作业优先法 94 3.5.3 最短剩余时间优先法 95 3.5.4 优先级法 96 3.5.5 轮转法 97 3.5.6 多级队列法 98 3.5.7 多级反馈队列法 99 3.5.8 高响应比优先法 100 3.5.9 公平共享法 101 3.5.10 常用调度算法的比较 101 3.6 实时调度 102 3.6.1 实时任务类型 102 3.6.2 实时调度算法 102 3.7 线程调度 103 3.8 多处理器调度 104 3.8.1 多处理器系统的类型 104 3.8.2 多处理器调度方法 105 3.9 UNIX/Linux进程调度 106 3.9.1 UNIX进程调度 106 3.9.2 Linux进程调度 107 本章小结 108 习题3 109 第4章 存储管理 111 4.1 引言 112 4.1.1 用户程序的地址空间 112 4.1.2 重定位 114 4.1.3 覆盖技术 116 4.1.4 对换技术 117 4.2 分区法 118 4.2.1 固定分区法 118 4.2.2 动态分区法 119 4.2.3 可重定位分区分配 122 4.3 分页技术 124 4.3.1 分页存储管理的基本概念 124 4.3.2 分页系统中的地址映射 125 4.3.3 页尺寸 126 4.3.4 硬件支持 127 4.3.5 保护方式 128 4.3.6 页表的构造 129 4.3.7 页共享 132 4.4 分段技术 133 4.4.1 分段存储管理的基本概念 134 4.4.2 段地址转换 135 4.4.3 段的共享和保护 136 4.5 段页式技术 137 4.5.1 段页式存储管理的基本原理 137 4.5.2 地址转换过程 138 4.6 虚拟存储器 139 4.6.1 虚拟存储器的概念 139 4.6.2 虚拟存储器的特征 140 4.7 请求分页技术 140 4.7.1 请求分页存储管理的基本思想 140 4.7.2 硬件支持及缺页处理 141 4.8 页置换算法 144 4.8.1 页置换 144 4.8.2 先进先出法 145 4.8.3 最佳置换法 146 4.8.4 最近最久未使用置换法 147 4.8.5 第二次机会置换法 148 4.8.6 时钟置换法 148 4.8.7 最近未使用法 149 4.8.8 最不经常使用法 149 4.8.9 页缓冲法 150 4.9 内存块的分配和抖动问题 150 4.9.1 内存块的分配 151 4.9.2 抖动问题 153 4.10 请求分段技术 155 4.11 Linux系统的存储管理 156 4.11.1 Linux的多级页表结构 156 4.11.2 内存页的分配与释放 157 4.11.3 内存交换 159 本章小结 159 习题4 161 第5章 文件系统 164 5.1 文件概述 165 5.1.1 文件及其分类 165 5.1.2 文件命名 166 5.1.3 文件属性 168 5.1.4 文件存取方法 168 5.1.5 文件结构 170 5.2 文件系统的功能和结构 172 5.2.1 文件系统的功能 172 5.2.2 文件系统的结构 172 5.3 目录结构和目录查询 173 5.3.1 文件控制块和目录 173 5.3.2 单级目录结构 175 5.3.3 二级目录结构 176 5.3.4 树形目录结构 177 5.3.5 非循环图目录结构 179 5.3.6 目录查询方法 179 5.4 文件操作和目录操作 180 5.4.1 文件操作 180 5.4.2 目录操作 183 5.4.3 UNIX系统的文件操作示例 184 5.5 文件系统的实现 186 5.5.1 文件系统的格式 186 5.5.2 文件存储分配 188 5.5.3 空闲存储空间的管理 193 5.6 文件系统的可靠性 196 5.6.1 磁盘坏块管理 197 5.6.2 备份 197 5.6.3 文件系统和一致性 198 本章小结 200 习题5 201 第6章 输入和输出 203 6.1 I/O管理概述 204 6.1.1 外部设备分类和标识 204 6.1.2 I/O结构 206 6.1.3 设备控制器 206 6.1.4 I/O系统的控制方式 208 6.1.5 I/O管理的功能 212 6.2 中断处理 214 6.2.1 中断概述 214 6.2.2 中断的处理过程 215 6.2.3 中断优先级和多重中断 219 6.3 设备分配 221 6.3.1 与设备分配相关的因素 221 6.3.2 设备分配技术 222 6.3.3 设备分配算法 223 6.3.4 SPOOLing技术 223 6.4 I/O软件的层次 224 6.4.1 中断处理程序 225 6.4.2 设备驱动程序 225 6.4.3 与设备无关的操作系统I/O软件 229 6.4.4 用户级I/O软件 232 6.5 磁盘调度和管理 232 6.5.1 磁盘调度 232 6.5.2 磁盘管理 236 本章小结 239 习题6 240 第7章 用户接口 241 7.1 用户接口的发展 242 7.2 系统调用 242 7.2.1 系统调用和库函数 243 7.2.2 系统调用使用方式 244 7.2.3 系统调用的处理方式 247 7.3 命令行接口 249 7.3.1 命令的一般使用方式 250 7.3.2 命令解释程序 251 7.3.3 shell程序设计 252 7.4 图形用户界面 254 本章小结 258 习题7 258 第8章 死锁 260 8.1 资源 261 8.1.1 资源使用模式 261 8.1.2 可抢占资源与不可抢占资源 261 8.2 死锁概念 262 8.2.1 什么是死锁 262 8.2.2 死锁的必要条件 264 8.2.3 资源分配图 265 8.2.4 处理死锁的方法 266 8.3 死锁的预防 267 8.3.1 破坏互斥条件 267 8.3.2 破坏占有且等待条件 267 8.3.3 破坏非抢占条件 268 8.3.4 破坏循环等待条件 268 8.4 死锁的避免 269 8.4.1 安全状态 269 8.4.2 资源分配图算法 271 8.4.3 银行家算法 271 8.5 死锁的检测和恢复 274 8.5.1 对单体资源类的死锁检测 274 8.5.2 对多体资源类的死锁检测 274 8.5.3 从死锁中恢复 276 8.6 处理死锁的综合方式 277 8.7 饥饿和活锁 279 本章小结 280 习题8 281 第9章 嵌入式操作系统 283 9.1 嵌入式系统概述 284 9.1.1 嵌入式系统的组成 284 9.1.2 嵌入式系统的特点 285 9.2 实时内核及其实现 288 9.2.1 任务管理与调度 288 9.2.2 中断和时间管理 289 9.2.3 任务的同步和通信 290 9.2.4 内存管理 293 9.2.5 I/O管理 295 9.3 鸿蒙操作系统 295 9.3.1 鸿蒙操作系统的类别 296 9.3.2 鸿蒙不是安卓的仿制品 296 9.3.3 鸿蒙2.0架构 297 9.3.4 鸿蒙操作系统的影响 298 本章小结 299 习题9 299 第10章 分布式系统和云计算系统 300 10.1 分布式系统概述 301 10.1.1 分布式系统的特性 301 10.1.2 分布式系统的优点和不足 301 10.1.3 分布式系统的设计目标 302 10.2 分布式系统的实现模型 304 10.2.1 进程管理 305 10.2.2 通信问题 307 10.2.3 死锁问题 308 10.2.4 文件系统 309 10.3 中间件模型 310 10.3.1 中间件的概念 311 10.3.2 中间件的结构 311 10.4 各多机系统的比较 312 10.5 云计算系统 314 10.5.1 云计算概述 314 10.5.2 云操作系统简述 316 本章小结 317 习题10 318 第11章 系统安全和保护机制 319 11.1 安全问题 320 11.1.1 信息安全概述 320 11.1.2 环境安全 320 11.2 攻击点、网络威胁和病毒 322 11.2.1 常见的攻击点 322 11.2.2 网络威胁 322 11.2.3 计算机病毒 323 11.3 安全防护 326 11.3.1 安全措施 326 11.3.2 安全体系参考模型 326 11.4 保护机制 328 11.4.1 保护域 328 11.4.2 存取控制表 330 11.4.3 权能表 331 11.4.4 可信系统 332 11.4.5 安全性能评测标准 335 本章小结 335 习题11 336 第12章 实验操作 337 12.1 实验一:进程同步和互斥 338 12.2 实验二:进程及其资源管理 340 12.3 实验三:存储管理 344 12.4 实验四:页面置换算法 346 12.5 实验五:进程调度 347 12.6 实验六:银行家算法 347 12.7 实验七:磁盘调度算法 349 12.8 实验八:设备处理程序设计 349 12.9 实验九:文件系统 350 附录A Linux常用系统调用和库函数 353 A.1 有关文件操作的系统调用 354 A.2 有关进程控制的系统调用 355 A.3 有关进程通信的函数 356 A.4 有关内存管理的函数 357 附录B 习题答疑 358 参考文献 359