
本书采用了理论与实践相结合的方式,全面系统地介绍了现代操作系统的基本理论和最新技术。全书共分为8章,第1章介绍了操作系统的概念、功能和特点、发展历史以及操作系统结构和设计的相关问题;第2章介绍了操作系统的生成及操作系统向用户提供的接口;第3、4章详细介绍了进程和线程的概念、同步和通信机制、调度与死锁;第5、6、7章分别介绍了操作系统的存储管理、文件管理和设备管理功能;第8章介绍了操作系统的安全和保护的问题。
本书可作为计算机科学与技术、软件工程、信息管理等专业本、专科生教材和考研、考证参考书,也可以作为从事计算机工作的科技人员进行学习和开发的参考书。
本书每章中的教学课件可以到http://www.tupwk.com.cn/downpage/index.asp网站下载。
前 言
操作系统是计算机科学与技术专业的一门专业基础课,是计算机相关专业学生的必修课程。在知识经济蓬勃发展的今天,软件产业占据着核心地位,而操作系统是所有软件的基础,是软件的根本,是计算机系统中的核心系统软件,用于控制和管理计算机系统中的各种软硬件资源,提供了用户与计算机之间的接口,其性能直接影响到计算机系统的工作效率,所以,操作系统是计算机领域中最活跃的学科之一,其发展极为迅速。然而,正是由于操作系统在计算机中所处的特殊地位,使得这门课程的学习具有相当的难度,主要原因如下:
(1) 操作系统是一个庞大的系统软件,从而导致本课程的内容非常复杂,涉及计算机软、硬件的诸多方面。
(2) 课程内容较抽象。尽管很多用户使用计算机时都要与操作系统打交道,但是对于什么是操作系统、操作系统应有哪些功能、这些功能如何实现等问题并不是很清楚,因而对操作系统的内容倍感抽象、费解。
(3) 发展变化快。操作系统课程随着计算机的发展而不断发展,是计算机软件中变异、更新最快的软件,因而更加重了学生的学习难度。
为了解决这些问题,提高操作系统课程的教学质量,在广泛汲取国内外优秀教材和研究成果的基础上,借鉴、参照ACM/IEEE-CS2002和CCC2002中操作系统课程教学的相关内容,结合自己多年的操作系统课程的教学经验,笔者编写了本教材。整个教材根据课程的特点,结合实例来讲解理论,培养学生的实践能力和创新能力。
具体来说,本教程具有以下特点:
(1) 理论联系实际。本教材把操作系统原理和实际的操作系统实现结合起来讲解,在讲解原理之后给出实例,从而把理论与实践有机地结合起来,使抽象的理论更利于读者进行理解和消化,提高学生的学习兴趣。
(2) 实用性强。本教程结合教学内容,提供了相关的编程实例和技术,并精选了部分与课程内容相关的实验项目,每个实验项目还给出了相关的背景知识。读者通过阅读这些背景知识,基本可以完成这些项目。这些实验可以加深读者对操作系统原理的理解,另一方面也可以培养学生进行系统程序设计和分析的能力。
(3) 内容新颖。本教材在选材的过程中,根据现代操作系统的发展要求,选择最近几年出现的新思想、新概念、新技术补充到教材中,在一定程度上反映了操作系统的发展方向,从而提高学生适应迅速变化的操作系统发展的能力,了解操作系统的发展趋势,培养学生的创新能力。
(4) 适用面广。本教材做到了理论与实践的有机结合,既讲述了操作系统的基本原理,又介绍了相关的编程知识,因此,本书既可以作为教材使用,也可以作为其他工程人员的参考书。
(5) 每章的章首给出本章的教学内容和要求,并给出了相关的学习建议,利于教学也利于学生的学习。
全书共分8章,基本上涵盖了现代操作系统的主要内容。第1章介绍了操作系统的概念、功能、特征、发展历史和结构;第2章分析了操作系统的生成和启动以及操作系统提供的服务和接口;第3~7章分别介绍了处理器管理与调度、进程同步和死锁、存储管理、文件管理和I/O管理;第8章叙述了操作系统与计算机系统安全和保护问题。
本书可作为普通高校计算机科学与技术及其相关专业本、专科学生的教材,也可以作为自学参考书和考研参考书。由于各高校的不同专业教学安排要求和教学时间有一定的差别,因此,在教学内容上可酌情进行取舍。如果课时较充分,可以讲授全部内容,并安排上机实践来完成实验项目。如果课时较少,可讲授每章的基本内容,实验项目可作为学生的作业。另外,为检查学习效果,每章后面留有作业和相应的实验项目,读者可根据实际情况有选择的使用。
本书主要由周湘贞和曾宪权编写,其中,第1章由周湘贞编写,其余章节(第2~8章)由曾宪权编写,李晓利等8人对文稿进行了认真阅读并提出了自己宝贵的意见。在教材的编写和出版过程中,赵树升给予了大力的支持和帮助,并提出了指导意见,在此表示衷心感谢。刘春丽参与了部分内容的校对工作,另外,邬治国、乔丹丹、朱金玲、郑立艳、胡琼怡、许成琳、孙芳、张志云和韩垒等参加了材料收集和制作,在此表示感谢。
当然,由于编者水平有限,时间紧张,疏漏和错误在所难免。真诚希望各位读者批评和指正,我们将不胜感激。我们的信箱:huchenhao@263.net。
作 者
2006年5月
目 录
第1章 操作系统概论 1
1.1 操作系统的概念 1
1.1.1 计算机系统的层次结构 1
1.1.2 操作系统的作用 2
1.1.3 操作系统的主要特征 4
1.1.4 操作系统的功能 5
1.2 操作系统的形成和发展 7
1.2.1 人工操作阶段 8
1.2.2 管理程序阶段——操作
系统的雏形 8
1.2.3 多道批处理——现代意义
上的操作系统出现 9
1.2.4 分时系统与实时系统的出现
——操作系统步入实用化 10
1.2.5 操作系统的进一步发展 11
1.3 操作系统的结构 15
1.3.1 操作系统的设计 15
1.3.2 操作系统的结构 16
1.4 Windows Server 2003和
Linux系统模型 21
1.4.1 Windows Server 2003
操作系统模型 21
1.4.2 Linux系统的结构 22
1.5 小结 23
1.6 思考练习 23
第2章 操作系统的界面 25
2.1 系统的生成与启动 25
2.1.1 系统的生成 25
2.1.2 系统的启动 26
2.1.3 实例分析:
Linux系统启动 27
2.2 操作系统提供的服务
和用户接口 29
2.2.1 操作系统提供的基本服务 29
2.2.2 命令接口 30
2.2.3 图形用户接口 32
2.2.4 程序接口——系统调用 34
2.3 小结 39
2.4 思考练习 40
2.5 实验室项目——操作系统的
生成和接口的使用 40
第3章 处理器管理 42
3.1 进程的概念 42
3.1.1 程序的执行方式 42
3.1.2 进程的概念 43
3.1.3 进程的状态 45
3.1.4 进程描述——进程控制块 48
3.2 进程控制 52
3.2.1 进程控制机构 52
3.2.2 进程控制 53
3.3 线程 59
3.3.1 线程的概念 59
3.3.2 线程的实现 60
3.3.3 多线程模型 61
3.3.4 线程池 62
3.4 处理器调度 66
3.4.1 处理器调度的层次 67
3.4.2 进程调度 68
3.4.3 选择调度算法的准则 69
3.5 调度算法 70
3.5.1 先来先服务 70
3.5.2 短作业(进程)优先 71
3.5.3 优先级调度 71
3.5.4 轮转法调度 72
3.5.5 多级队列调度 73
3.5.6 多级反馈队列调度 74
3.5.7 高响应比优先调度 75
3.6 多处理器调度和实时调度 76
3.6.1 多处理器调度 76
3.6.2 实时调度 76
3.7 小结 82
3.8 思考练习 83
3.9 实验室项目二 Shell编程 84
3.10 实验室项目三 Windows
多线程控制台程序 87
第4章 进程同步机制与死锁 92
4.1 进程的同步和互斥 92
4.1.1 进程的同步 93
4.1.2 进程互斥 93
4.1.3 信号量机制 95
4.2 经典同步问题 103
4.2.1 生产者——消费者问题
(有限缓冲区问题) 103
4.2.2 读者--写者问题 105
4.2.3 哲学家进餐问题 106
4.2.4 理发师问题 107
4.3 管程 109
4.3.1 管程的基本概念 109
4.3.2 条件变量 111
4.3.3 利用管程解决生产者
--消费者问题 111
4.4 操作系统同步模型 113
4.4.1 Windows Server 2003
中的进程同步 113
4.4.2 Linux中的进程同步 114
4.5 进程通信 116
4.5.1 进程通信的方式 116
4.5.2 消息传递系统 117
4.5.3 消息缓冲队列通信机制 120
4.5.4 客户—— 服务器系统通信 122
4.6 死锁概述 134
4.6.1 死锁的概念 134
4.6.2 死锁产生的原因和
必要条件 135
4.6.3 死锁的描述——
资源分配图 137
4.6.4 处理死锁的方法 139
4.7 死锁的预防和避免 139
4.7.1 死锁的预防 139
4.7.2 死锁的避免 141
4.8 死锁的检测和解除 146
4.8.1 死锁的检测 146
4.8.2 死锁的解除 149
4.9 小结 150
4.10 思考练习 151
4.11 实验室项目四
有限缓冲区问题 153
第5章 存储管理 160
5.1 存储管理的概念 160
5.1.1 用户程序的处理过程 161
5.1.2 存储管理的功能 163
5.2 连续内存分配 167
5.2.1 分区管理基本原理 168
5.2.2 分区的分配与回收 170
5.2.3 碎片问题 172
5.3 内存不足时的管理 173
5.3.1 覆盖 173
5.3.2 交换 174
5.4 分页存储管理 176
5.4.1 分页存储管理的
基本原理 176
5.4.2 地址映射 178
5.4.3 页表的结构 180
5.4.4 页面的共享 182
5.5 分段存储管理 182
5.5.1 分段存储管理的
基本原理 183
5.5.2 地址转换 184
5.5.3 段的共享和保护 185
5.5.4 段页式存储管理 186
5.6 虚拟存储器 190
5.6.1 虚拟内存的概念 190
5.6.2 虚拟内存的特征 192
5.7 请求分页存储管理技术 192
5.7.1 请求分页存储管理
基本思想 192
5.7.2 页面置换算法 194
5.7.3 请求分页系统内存块
的分配 201
5.8 存储管理实例研究 203
5.8.1 Windows Server 2003
内存管理 203
5.8.2 Linux系统的存储管理 207
5.9 小结 214
5.10 思考练习 215
第6章 文件管理 218
6.1 文件的概念 218
6.1.1 文件及其分类 218
6.1.2 文件的属性 220
6.1.3 文件的组织 221
6.1.4 文件的访问方法 222
6.2 结构 224
6.2.1 文件控制块和文件 224
6.2.2 单级 226
6.2.3 二级 226
6.2.4 树形 227
6.2.5 的实现 230
6.3 文件和操作 231
6.3.1 文件操作 231
6.3.2 操作 237
6.4 文件系统的实现 238
6.4.1 文件系统的结构 238
6.4.2 文件系统的实现 240
6.4.3 文件存储空间的分配 241
6.4.4 空闲空间的管理 245
6.5 文件的共享和保护 248
6.5.1 文件的共享 248
6.5.2 文件的保护 250
6.5.3 文件系统的可靠性 252
6.6 实例研究:Windows和
Linux的文件系统 252
6.6.1 Windows Server 2003
文件管理 252
6.6.2 Linux文件管理的实现 260
6.7 小结 265
6.8 思考练习 266
6.9 实验室项目五
简单文件系统的实现 267
第7章 设备管理 272
7.1 设备管理的概念 272
7.1.1 设备的分类 272
7.1.2 设备管理的功能和任务 273
7.1.3 I/O系统结构 274
7.1.4 设备控制器 275
7.2 I/O控制方式 276
7.2.1 轮询(polling)方式 276
7.2.2 中断方式 277
7.2.3 DMA方式 279
7.2.4 通道控制方式 281
7.3 中断技术 283
7.3.1 中断的基本概念 283
7.3.2 中断的分类与优先级 284
7.3.3 软中断 284
7.3.4 中断处理过程 285
7.4 缓冲技术 287
7.4.1 缓冲的引入 287
7.4.2 缓冲的种类 287
7.4.3 缓冲池的管理 288
7.5 设备分配 290
7.5.1 设备分配用数据结构 290
7.5.2 设备分配的原则 292
7.5.3 设备分配技术 294
7.5.4 SPOOLing系统 294
7.6 I/O软件原理 296
7.6.1 I/O软件的设计
目标和原则 296
7.6.2 I/O中断处理程序 296
7.6.3 设备驱动程序 297
7.6.4 与硬件无关的I/O软件 298
7.6.5 用户空间的I/O软件 300
7.7 磁盘调度和管理 301
7.7.1 磁盘的结构 301
7.7.2 磁盘调度 302
7.7.3 磁盘管理 306
7.8 小结 314
7.9 思考练习 315
7.10 实验室项目六
软盘驱动程序 316
第8章 操作系统的安全和保护 323
8.1 操作系统和计算机系统安全 323
8.1.1 计算机系统安全概述 323
8.1.2 操作系统安全是
系统安全的基础 324
8.1.3 安全威胁及其分类 325
8.2 操作系统安全策略 327
8.2.1 安全策略和机制 327
8.2.2 身份认证机制 328
8.2.3 授权机制 330
8.2.4 加密机制 330
8.2.5 审计 331
8.3 操作系统的内部保护机制 331
8.3.1 操作系统保护层次 331
8.3.2 内存储器的保护 332
8.3.3 面向用户的访问控制 332
8.3.4 面向数据的访问控制 333
8.4 访问控制机制 333
8.4.1 保护域 334
8.4.2 访问矩阵 335
8.4.3 访问矩阵的实现 336
8.5 小结 337
8.6 思考练习 338
参考文献 339