本书既是关于操作系统概念、结构和机制的教材,目的是尽可能清楚和全面地展示现代操作系统的本质和特点;也是讲解操作系统的经典教材,不仅系统地讲述了操作系统的基本概念、原理和方法,而且以当代最流行的操作系统Windows 8、UNIX、Android、Linux为例,展现了当代操作系统的本质和特点。
本书既是关于操作系统概念、结构和机制的教材,目的是尽可能清楚和全面地展示现代操作系统的本质和特点;也是讲解操作系统的经典教材,不仅系统地讲述了操作系统的基本概念、原理和方法,而且以当代最流行的操作系统Windows 8、UNIX、Android、Linux为例,展现了当代操作系统的本质和特点。
全书共分背景知识、进程、内存、调度、输入/输出和文件、嵌入式系统六部分,内容包括计算机系统概述、操作系统概述、进程描述和控制、线程、并发性:互斥和同步、并发:死锁和饥饿、内存管理、虚拟内存、单处理器调度、多处理器和实时调度、I/O管理和磁盘调度、文件管理、嵌入式操作系统、虚拟机、计算机安全技术、分布式处理、客户/服务器和集群等。此外,本书配套网站提供了及时、生动的材料。
目录
- 第0章 读者与教师指南 1
- 0.1 本书概述 1
- 0.2 实例系统 1
- 0.3 读者和教师的路线图 2
- 0.4 互联网和网站资源 3
- 第一部分 背景知识
- 第1章 计算机系统概述 6
- 1.1 基本构成 6
- 1.2 微处理器的发展 7
- 1.3 指令的执行 8
- 1.4 中断 10
- 1.4.1 中断和指令周期 11
- 1.4.2 中断处理 12
- 1.4.3 多个中断 14
- 1.5 存储器的层次结构 15
- 1.6 高速缓存 17
- 1.6.1 动机 18
- 1.6.2 高速缓存原理 18
- 1.6.3 高速缓存设计 19
- 1.7 直接内存存取 20
- 1.8 多处理器和多核计算机组织结构 21
- 1.8.1 对称多处理器 21
- 1.8.2 多核计算机 23
- 1.9 推荐读物 23
- 1.10 关键术语、复习题和习题 24
- 1.10.1 关键术语 24
- 1.10.2 复习题 24
- 1.10.3 习题 24
- 附录1A 两级存储器的性能特征 26
- 第2章 操作系统概述 31
- 2.1 操作系统的目标和功能 31
- 2.1.1 作为用户/计算机接口的
- 操作系统 31
- 2.1.2 作为资源管理器的操作系统 32
- 2.1.3 操作系统的易扩展性 33
- 2.2 操作系统的发展史 34
- 2.2.1 串行处理 34
- 2.2.2 简单批处理系统 34
- 2.2.3 多道批处理系统 36
- 2.2.4 分时系统 38
- 2.3 主要成就 40
- 2.3.1 进程 40
- 2.3.2 内存管理 42
- 2.3.3 信息保护和安全 43
- 2.3.4 调度和资源管理 44
- 2.4 现代操作系统的特征 45
- 2.5 容错性 47
- 2.5.1 基本概念 47
- 2.5.2 错误 48
- 2.5.3 操作系统机制 48
- 2.6 多处理器和多核操作系统
- 设计考虑因素 49
- 2.6.1 对称多处理器操作系统设计
- 考虑因素 49
- 2.6.2 多核操作系统设计考虑因素 49
- 2.7 微软Windows系统简介 51
- 2.7.1 背景 51
- 2.7.2 体系结构 51
- 2.7.3 客户-服务器模型 53
- 2.7.4 线程和SMP 54
- 2.7.5 Windows对象 54
- 2.8 传统的UNIX系统 55
- 2.8.1 历史 55
- 2.8.2 描述 56
- 2.9 现代UNIX系统 57
- 2.9.1 System V Release 4(SVR4) 58
- 2.9.2 BSD 58
- 2.9.3 Solaris 10 58
- 2.10 Linux操作系统 58
- 2.10.1 历史 58
- 2.10.2 模块结构 59
- 2.10.3 内核组件 60
- 2.11 Android 62
- 2.11.1 Android软件体系结构 63
- 2.11.2 Android系统体系结构 64
- 2.11.3 活动 65
- 2.11.4 电源管理 65
- 2.12 推荐读物和动画 66
- 2.13 关键术语、复习题和习题 67
- 2.13.1 关键术语 67
- 2.13.2 复习题 67
- 2.13.3 习题 67
- 第二部分 进程
- 第3章 进程描述和控制 70
- 3.1 什么是进程 70
- 3.1.1 背景 70
- 3.1.2 进程和进程控制块 71
- 3.2 进程状态 72
- 3.2.1 两状态进程模型 73
- 3.2.2 进程的创建和终止 74
- 3.2.3 五状态模型 75
- 3.2.4 被挂起的进程 78
- 3.3 进程描述 81
- 3.3.1 操作系统的控制结构 82
- 3.3.2 进程控制结构 82
- 3.4 进程控制 86
- 3.4.1 执行模式 86
- 3.4.2 进程创建 87
- 3.4.3 进程切换 88
- 3.5 操作系统的执行 90
- 3.5.1 无进程内核 90
- 3.5.2 在用户进程内运行 90
- 3.5.3 基于进程的操作系统 91
- 3.6 UNIX SVR4进程管理 91
- 3.6.1 进程状态 92
- 3.6.2 进程描述 93
- 3.6.3 进程控制 94
- 3.7 小结 95
- 3.8 推荐读物和动画 95 [1]
- 3.9 关键术语、复习题和习题 95
- 3.9.1 关键术语 95
- 3.9.2 复习题 96
- 3.9.3 习题 96
- 第4章 线程 99
- 4.1 进程和线程 99
- 4.1.1 多线程 99
- 4.1.2 线程的功能 102
- 4.2 线程分类 103
- 4.2.1 用户级和内核级线程 103
- 4.2.2 其他方案 106
- 4.3 多核和多线程 107
- 4.3.1 多核系统上的软件性能 107
- 4.3.2 应用示例:Valve游戏软件 109
- 4.4 Windows 8的进程和线程管理 110
- 4.4.1 Windows 8中的变化 111
- 4.4.2 Windows进程 111
- 4.4.3 进程对象和线程对象 112
- 4.4.4 多线程 113
- 4.4.5 线程状态 113
- 4.4.6 对操作系统子系统的支持 114
- 4.5 Solaris的线程和SMP管理 114
- 4.5.1 多线程体系结构 114
- 4.5.2 动机 115
- 4.5.3 进程结构 115
- 4.5.4 线程的执行 116
- 4.5.5 把中断当作线程 117
- 4.6 Linux的进程和线程管理 118
- 4.6.1 Linux任务 118
- 4.6.2 Linux线程 119
- 4.6.3 Linux命名空间 120
- 4.7 Android的进程和线程管理 121
- 4.7.1 安卓应用 121
- 4.7.2 活动 121
- 4.7.3 进程和线程 122
- 4.8 Mac OS X的GCD技术 123
- 4.9 小结 124
- 4.10 推荐读物 125
- 4.11 关键术语、复习题和习题 125
- 4.11.1 关键术语 125
- 4.11.2 复习题 125
- 4.11.3 习题 125
- 第5章 并发性:互斥和同步 129
- 5.1 并发的原理 130
- 5.1.1 一个简单的例子 130
- 5.1.2 竞争条件 132
- 5.1.3 操作系统关注的问题 132
- 5.1.4 进程的交互 133
- 5.1.5 互斥的要求 135
- 5.2 互斥:硬件的支持 136
- 5.2.1 中断禁用 136
- 5.2.2 专用机器指令 136
- 5.3 信号量 138
- 5.3.1 互斥 141
- 5.3.2 生产者/消费者问题 142
- 5.3.3 信号量的实现 146
- 5.4 管程 147
- 5.4.1 使用信号的管程 147
- 5.4.2 使用通知和广播的管程 149
- 5.5 消息传递 151
- 5.5.1 同步 151
- 5.5.2 寻址 152
- 5.5.3 消息格式 153
- 5.5.4 排队原则 154
- 5.5.5 互斥 154
- 5.6 读者/写者问题 155
- 5.6.1 读者优先 156
- 5.6.2 写者优先 156
- 5.7 小结 158
- 5.8 推荐读物和动画 159
- 5.9 关键术语、复习题和习题 160
- 5.9.1 关键术语 160
- 5.9.2 复习题 160
- 5.9.3 习题 160
- 第6章 并发:死锁和饥饿 170
- 6.1 死锁原理 170
- 6.1.1 可重用资源 173
- 6.1.2 可消耗资源 174
- 6.1.3 资源分配图 174
- 6.1.4 死锁的条件 175
- 6.2 死锁预防 176
- 6.2.1 互斥 176
- 6.2.2 占有且等待 176
- 6.2.3 不可抢占 176
- 6.2.4 循环等待 177
- 6.3 死锁避免 177
- 6.3.1 进程启动拒绝 177
- 6.3.2 资源分配拒绝 178
- 6.4 死锁检测 181
- 6.4.1 死锁检测算法 181
- 6.4.2 恢复 182
- 6.5 一种综合的死锁策略 182
- 6.6 哲学家就餐问题 183
- 6.6.1 基于信号量的解决方案 183
- 6.6.2 基于管程的解决方案 184
- 6.7 UNIX并发机制 185
- 6.7.1 管道 186
- 6.7.2 消息 186
- 6.7.3 共享内存 186
- 6.7.4 信号量 186
- 6.7.5 信号 187
- 6.8 Linux内核并发机制 187
- 6.8.1 原子操作 188
- 6.8.2 自旋锁 189
- 6.8.3 信号量 190
- 6.8.4 屏障 191
- 6.9 Solaris线程同步原语 192
- 6.9.1 互斥锁 193
- 6.9.2 信号量 193
- 6.9.3 多读者/单写者锁 193
- 6.9.4 条件变量 193
- 6.10 Windows 7的并发机制 194
- 6.10.1 等待函数 194
- 6.10.2 分派器对象 194
- 6.10.3 临界区 195
- 6.10.4 轻量级读写锁和条件变量 195
- 6.10.5 锁无关同步机制 196
- 6.11 Android进程间通信 196
- 6.12 小结 197
- 6.13 推荐读物和动画 197
- 6.14 关键术语、复习题和习题 198
- 6.14.1 关键术语 198
- 6.14.2 复习题 198
- 6.14.3 习题 198