书籍目录
封面
书名
版权
前言
目录
第一部分 概论/2
第1章 导论/2
1.1 操作系统的功能/2
1.1.1 用户视角/2
1.1.2 系统视角/3
1.1.3 操作系统的定义/4
1.2 计算机系统的组成/4
1.2.1 计算机系统的运行/5
1.2.2 存储结构/6
1.2.3 I/O结构/8
1.3 计算机系统的体系结构/9
1.3.1 单处理器系统/9
1.3.2 多处理器系统/10
1.3.3 集群系统/12
1.4 操作系统的结构/13
1.5 操作系统的执行/14
1.5.1 双重模式与多重模式的执行/15
1.5.2 定时器/16
1.6 进程管理/17
1.7 内存管理/18
1.8 存储管理/18
1.8.1 文件系统管理/18
1.8.2 大容量存储器管理/19
1.8.3 高速缓存/19
1.8.4 I/O系统/21
1.9 保护与安全/21
1.10 内核数据结构/22
1.10.1 列表、堆栈及队列/22
1.10.2 树/23
1.10.3 哈希函数与哈希表/23
1.10.4 位图/24
1.11 计算环境/24
1.11.1 传统计算/24
1.11.2 移动计算/25
1.11.3 分布计算/26
1.11.4 客户机-服务器计算/26
1.11.5 对等计算/27
1.11.6 虚拟化/28
1.11.7 云计算/29
1.11.8 实时嵌入式系统/30
1.12 开源操作系统/31
1.12.1 历史/31
1.12.2 Linux/31
1.12.3 BSD UNIX/32
1.12.4 Solaris/32
1.12.5 用作学习的开源操作系统/33
1.13 小结/33
习题/35
推荐读物/36
参考文献/36
第2章 操作系统结构/38
2.1 操作系统的服务/38
2.2 用户与操作系统的界面/40
2.2.1 命令解释程序/40
2.2.2 图形用户界面/41
2.2.3 界面的选择/42
2.3 系统调用/43
2.4 系统调用的类型/46
2.4.1 进程控制/46
2.4.2 文件管理/49
2.4.3 设备管理/50
2.4.4 信息维护/50
2.4.5 通信/50
2.4.6 保护/51
2.5 系统程序/51
2.6 操作系统的设计与实现/52
2.6.1 设计目标/52
2.6.2 机制与策略/53
2.6.3 实现/53
2.7 操作系统的结构/54
2.7.1 简单结构/54
2.7.2 分层方法/55
2.7.3 微内核/56
2.7.4 模块/57
2.7.5 混合系统/58
2.8 操作系统的调试/60
2.8.1 故障分析/60
2.8.2 性能优化/60
2.8.3 DTrace/61
2.9 操作系统的生成/63
2.10 系统引导/64
2.11 小结/64
习题/65
编程题/66
编程项目/66
推荐读物/69
参考文献/69
第二部分 进程管理/72
第3章 进程/72
3.1 进程概念/72
3.1.1 进程/72
3.1.2 进程状态/73
3.1.3 进程控制块/73
3.1.4 线程/74
3.2 进程调度/75
3.2.1 调度队列/75
3.2.2 调度程序/77
3.2.3 上下文切换/78
3.3 进程运行/79
3.3.1 进程创建/79
3.3.2 进程终止/82
3.4 进程间通信/83
3.4.1 共享内存系统/85
3.4.2 消息传递系统/86
3.5 IPC系统例子/89
3.5.1 例子:POSIX共享内存/89
3.5.2 例子:Mach/91
3.5.3 例子:Windows/92
3.6 客户机/服务器通信/93
3.6.1 套接字/93
3.6.2 远程过程调用/96
3.6.3 管道/98
3.7 小结/102
习题/103
编程题/105
编程项目/107
推荐读物/110
参考文献/110
第4章 多线程编程/112
4.1 概述/112
4.1.1 动机/112
4.1.2 优点/113
4.2 多核编程/114
4.2.1 编程挑战/115
4.2.2 并行类型/115
4.3 多线程模型/116
4.3.1 多对一模型/116
4.3.2 一对一模型/116
4.3.3 多对多模型/116
4.4 线程库/117
4.4.1 Pthreads/118
4.4.2 Windows线程/119
4.4.3 Java线程/121
4.5 隐式多线程/122
4.5.1 线程池/123
4.5.2 OpenMP/124
4.5.3 大中央调度/125
4.5.4 其他方法/125
4.6 多线程问题/125
4.6.1 系统调用fork()和exec()/125
4.6.2 信号处理/126
4.6.3 线程撤销/127
4.6.4 线程本地存储/128
4.6.5 调度程序激活/128
4.7 操作系统例子/129
4.7.1 Windows线程/129
4.7.2 Linux线程/130
4.8 小结/131
习题/131
编程题/133
编程项目/134
推荐读物/136
参考文献/136
第5章 进程调度/138
5.1 基本概念/138
5.1.1 CPU-I/O执行周期/138
5.1.2 CPU调度程序/139
5.1.3 抢占调度/139
5.1.4 调度程序/140
5.2 调度准则/140
5.3 调度算法/141
5.3.1 先到先服务调度/141
5.3.2 最短作业优先调度/142
5.3.3 优先级调度/144
5.3.4 轮转调度/145
5.3.5 多级队列调度/147
5.3.6 多级反馈队列调度/148
5.4 线程调度/149
5.4.1 竞争范围/149
5.4.2 Pthreads调度/149
5.5 多处理器调度/151
5.5.1 多处理器调度的方法/151
5.5.2 处理器亲和性/151
5.5.3 负载平衡/152
5.5.4 多核处理器/152
5.6 实时CPU调度/154
5.6.1 最小化延迟/154
5.6.2 优先权调度/155
5.6.3 单调速率调度/156
5.6.4 最早截止期限优先调度/157
5.6.5 比例分享调度/158
5.6.6 POSIX实时调度/158
5.7 操作系统例子/160
5.7.1 例子:Linux调度/160
5.7.2 例子:Windows调度/162
5.7.3 例子:Solaris调度/164
5.8 算法评估/165
5.8.1 确定性模型/166
5.8.2 排队模型/167
5.8.3 仿真/167
5.8.4 实现/168
5.9 小结/169
习题/170
推荐读物/172
参考文献/173
第6章 同步/175
6.1 背景/175
6.2 临界区问题/177
6.3 Peterson解决方案/178
6.4 硬件同步/179
6.5 互斥锁/181
6.6 信号量/181
6.6.1 信号量的使用/182
6.6.2 信号量的实现/182
6.6.3 死锁与饥饿/184
6.6.4 优先级的反转/184
6.7 经典同步问题/185
6.7.1 有界缓冲问题/185
6.7.2 读者-作者问题/186
6.7.3 哲学家就餐问题/187
6.8 管程/188
6.8.1 使用方法/189
6.8.2 哲学家就餐问题的管程解决方案/190
6.8.3 采用信号量的管程实现/191
6.8.4 管程内的进程重启/192
6.9 同步例子/193
6.9.1 Windows同步/193
6.9.2 Linux同步/194
6.9.3 Solaris同步/195
6.9.4 Pthreads同步/196
6.10 替代方法/197
6.10.1 事务内存/198
6.10.2 OpenMP/199
6.10.3 函数式编程语言/199
6.11 小结/200
习题/200
编程题/204
编程项目/205
推荐读物/209
参考文献/210
第7章 死锁/212
7.1 系统模型/212
7.2 死锁特征/213
7.2.1 必要条件/214
7.2.2 资源分配图/215
7.3 死锁处理方法/216
7.4 死锁预防/217
7.4.1 互斥/217
7.4.2 持有且等待/217
7.4.3 无抢占/218
7.4.4 循环等待/218
7.5 死锁避免/220
7.5.1 安全状态/220
7.5.2 资源分配图算法/221
7.5.3 银行家算法/222
7.6 死锁检测/224
7.6.1 每种资源类型只有单个实例/224
7.6.2 每种资源类型可有多个实例/225
7.6.3 应用检测算法/226
7.7 死锁恢复/227
7.7.1 进程终止/227
7.7.2 资源抢占/227
7.8 小结/228
习题/228
编程题/230
编程项目/230
推荐读物/231
参考文献/232
第三部分 内存管理/234
第8章 内存管理策略/234
8.1 背景/234
8.1.1 基本硬件/234
8.1.2 地址绑定/236
8.1.3 逻辑地址空间与物理地址空间/236
8.1.4 动态加载/237
8.1.5 动态链接与共享库/238
8.2 交换/238
8.2.1 标准交换/238
8.2.2 移动系统的交换/239
8.3 连续内存分配/240
8.3.1 内存保护/240
8.3.2 内存分配/241
8.3.3 碎片/242
8.4 分段/242
8.4.1 基本方法/243
8.4.2 分段硬件/243
8.5 分页/244
8.5.1 基本方法/245
8.5.2 硬件支持/247
8.5.3 保护/250
8.5.4 共享页/251
8.6 页表结构/252
8.6.1 分层分页/252
8.6.2 哈希页表/254
8.6.3 倒置页表/254
8.6.4 Oracle SPARC Solaris/255
8.7 例子:Intel 32位与64位体系结构/256
8.7.1 IA-32架构/256
8.7.2 x86-64/258
8.8 例子:ARM架构/259
8.9 小结/259
习题/260
编程题/262
推荐读物/262
参考文献/263
第9章 虚拟内存管理/264
9.1 背景/264
9.2 请求调页/266
9.2.1 基本概念/266
9.2.2 请求调页的性能/269
9.3 写时复制/271
9.4 页面置换/272
9.4.1 基本页面置换/273
9.4.2 FIFO 页面置换/275
9.4.3 最优页面置换/276
9.4.4 LRU页面置换/276
9.4.5 近似LRU页面置换/278
9.4.6 基于计数的页面置换/279
9.4.7 页面缓冲算法/280
9.4.8 应用程序与页面置换/280
9.5 帧分配/280
9.5.1 帧的最小数/281
9.5.2 分配算法/282
9.5.3 全局分配与局部分配/282
9.5.4 非均匀内存访问/283
9.6 系统抖动/283
9.6.1 系统抖动的原因/284
9.6.2 工作集模型/285
9.6.3 缺页错误频率/286
9.6.4 结束语/287
9.7 内存映射文件/287
9.7.1 基本机制/287
9.7.2 共享内存Windows API/288
9.7.3 内存映射I/O/290
9.8 分配内核内存/291
9.8.1 伙伴系统/291
9.8.2 slab分配/292
9.9 其他注意事项/293
9.9.1 预调页面/293
9.9.2 页面大小/293
9.9.3 TLB范围/294
9.9.4 倒置页表/295
9.9.5 程序结构/295
9.9.6 I/O联锁与页面锁定/296
9.10 操作系统例子/297
9.10.1 Windows/297
9.10.2 Solaris/298
9.11 小结/299
习题/300
编程题/303
编程项目/304
推荐读物/306
参考文献/306
第四部分 存储管理/310
第10章 文件系统/310
10.1 文件概念/310
10.1.1 文件属性/310
10.1.2 文件操作/311
10.1.3 文件类型/315
10.1.4 文件结构/316
10.1.5 内部文件结构/316
10.2 访问方法/316
10.2.1 顺序访问/317
10.2.2 直接访问/317
10.2.3 其他访问方法/318
10.3 目录与磁盘的结构/319
10.3.1 存储结构/319
10.3.2 目录概述/320
10.3.3 单级目录/320
10.3.4 两级目录/321
10.3.5 树形目录/322
10.3.6 无环图目录/323
10.3.7 通用图目录/325
10.4 文件系统安装/326
10.5 文件共享/327
10.5.1 多用户/327
10.5.2 远程文件系统/328
10.5.3 一致性语义/330
10.6 保护/331
10.6.1 访问类型/331
10.6.2 访问控制/331
10.6.3 其他保护方式/333
10.7 小结/334
习题/334
推荐读物/335
参考文献/335
第11章 文件系统实现/337
11.1 文件系统结构/337
11.2 文件系统实现/338
11.2.1 概述/338
11.2.2 分区与安装/341
11.2.3 虚拟文件系统/341
11.3 目录实现/343
11.3.1 线性列表/343
11.3.2 哈希表/343
11.4 分配方法/344
11.4.1 连续分配/344
11.4.2 链接分配/345
11.4.3 索引分配/347
11.4.4 性能/348
11.5 空闲空间管理/349
11.5.1 位向量/349
11.5.2 链表/350
11.5.3 组/350
11.5.4 计数/350
11.5.5 空间图/351
11.6 效率与性能/351
11.6.1 效率/351
11.6.2 性能/352
11.7 恢复/354
11.7.1 一致性检查/354
11.7.2 基于日志的文件系统/354
11.7.3 其他解决方法/355
11.7.4 备份和恢复/356
11.8 NFS/356
11.8.1 概述/357
11.8.2 安装协议/358
11.8.3 NFS协议/358
11.8.4 路径名称转换/359
11.8.5 远程操作/360
11.9 例子:WAFL文件系统/360
11.10 小结/362
习题/363
编程题/364
推荐读物/365
参考文献/365
第12章 大容量存储结构/367
12.1 大容量存储结构概述/367
12.1.1 磁盘/367
12.1.2 固态磁盘/368
12.1.3 磁带/368
12.2 磁盘结构/369
12.3 磁盘连接/369
12.3.1 主机连接存储/369
12.3.2 网络连接存储/370
12.3.3 存储区域网络/370
12.4 磁盘调度/371
12.4.1 FCFS调度/371
12.4.2 SSTF调度/371
12.4.3 SCAN调度/372
12.4.4 C-SCAN调度/373
12.4.5 LOOK调度/373
12.4.6 磁盘调度算法的选择/373
12.5 磁盘管理/374
12.5.1 磁盘格式化/374
12.5.2 引导块/375
12.5.3 坏块/376
12.6 交换空间管理/377
12.6.1 交换空间的使用/377
12.6.2 交换空间位置/377
12.6.3 交换空间管理:例子/378
12.7 RAID结构/378
12.7.1 通过冗余提高可靠性/379
12.7.2 通过并行处理提高性能/380
12.7.3 RAID级别/380
12.7.4 RAID级别的选择/383
12.7.5 扩展/384
12.7.6 RAID的问题/384
12.8 稳定存储实现/385
12.9 小结/386
习题/387
编程题/388
推荐读物/388
参考文献/389
第13章 I/O系统/390
13.1 概述/390
13.2 I/O硬件/390
13.2.1 轮询/392
13.2.2 中断/393
13.2.3 直接内存访问/396
13.2.4 I/O硬件小结/397
13.3 应用程序I/O接口/397
13.3.1 块与字符设备/399
13.3.2 网络设备/400
13.3.3 时钟与定时器/400
13.3.4 非阻塞与异步I/O/401
13.3.5 向量I/O/402
13.4 内核I/O子系统/402
13.4.1 I/O调度/402
13.4.2 缓冲/403
13.4.3 缓存/404
13.4.4 假脱机与设备预留/405
13.4.5 错误处理/405
13.4.6 I/O保护/405
13.4.7 内核数据结构/406
13.4.8 内核I/O子系统小结/406
13.5 I/O请求转成硬件操作/407
13.6 流/409
13.7 性能/410
13.8 小结/412
习题/413
推荐读物/414
参考文献/414
第五部分 保护与安全/416
第14章 系统保护/416
14.1 保护目标/416
14.2 保护原则/417
14.3 保护域/417
14.3.1 域结构/418
14.3.2 例子:UNIX/419
14.3.3 例子:MULTICS/420
14.4 访问矩阵/421
14.5 访问矩阵的实现/423
14.5.1 全局表/423
14.5.2 对象的访问列表/423
14.5.3 域的能力列表/424
14.5.4 锁-钥匙机制/424
14.5.5 比较/424
14.6 访问控制/425
14.7 访问权限的撤回/426
14.8 基于能力的系统/427
14.8.1 例子:Hydra/427
14.8.2 例子:剑桥CAP系统/428
14.9 基于语言的保护/428
14.9.1 基于编译程序的实现/429
14.9.2 Java的保护/430
14.10 小结/432
习题/432
推荐读物/433
参考文献/433
第15章 系统安全/436
15.1 安全问题/436
15.2 程序威胁/438
15.2.1 特洛伊木马/438
15.2.2 后门/439
15.2.3 逻辑炸弹/440
15.2.4 堆栈和缓冲区溢出/440
15.2.5 病毒/442
15.3 系统和网络的威胁/444
15.3.1 蠕虫/445
15.3.2 端口扫描/447
15.3.3 拒绝服务/448
15.4 作为安全工具的密码术/448
15.4.1 加密/449
15.4.2 密码术的实现/454
15.4.3 例子:SSL/454
15.5 用户认证/456
15.5.1 密码/456
15.5.2 密码漏洞/456
15.5.3 密码安全/457
15.5.4 一次性密码/458
15.5.5 生物识别技术/458
15.6 实现安全防御/459
15.6.1 安全策略/459
15.6.2 漏洞评估/459
15.6.3 入侵检测/460
15.6.4 病毒防护/462
15.6.5 审计、记账和日志/464
15.7 保护系统和网络的防火墙/464
15.8 计算机安全等级/465
15.9 例子:Windows 7/466
15.10 小结/468
习题/468
推荐读物/469
参考文献/470
第六部分 案例研究/474
第16章 Linux系统/474
16.1 Linux历史/474
16.1.1 Linux内核/475
16.1.2 Linux系统/476
16.1.3 Linux发行/476
16.1.4 Linux许可/477
16.2 设计原则/477
16.3 内核模块/479
16.3.1 模块管理/480
16.3.2 驱动程序注册/480
16.3.3 冲突解决/481
16.4 进程管理/481
16.4.1 fork()/exec()进程模型/481
16.4.2 进程与线程/483
16.5 调度/484
16.5.1 进程调度/484
16.5.2 实时调度/485
16.5.3 内核同步/486
16.5.4 对称多处理/487
16.6 内存管理/488
16.6.1 物理内存管理/488
16.6.2 虚拟内存/490
16.6.3 执行与加载用户程序/492
16.7 文件系统/494
16.7.1 虚拟文件系统/494
16.7.2 Linux ext3文件系统/495
16.7.3 日志/497
16.7.4 Linux进程文件系统/497
16.8 输入与输出/498
16.8.1 块设备/499
16.8.2 字符设备/500
16.9 进程间通信/500
16.9.1 同步与信号/500
16.9.2 进程间的数据传递/501
16.10 网络结构/501
16.11 安全/503
16.11.1 认证/503
16.11.2 访问控制/503
16.12 小结/504
习题/505
推荐读物/506
参考文献/506
第17章 Windows 7/507
17.1 历史/507
17.2 设计原则/509
17.2.1 安全性/509
17.2.2 可靠性/509
17.2.3 Windows和POSIX应用程序兼容性/510
17.2.4 高性能/511
17.2.5 可扩展性/512
17.2.6 可移植性/512
17.2.7 国际化支持/513
17.2.8 电源效率/513
17.2.9 动态设备支持/513
17.3 系统组件/513
17.3.1 硬件抽象层/514
17.3.2 内核/514
17.3.3 执行体/518
17.4 终端服务与快速用户切换/531
17.5 文件系统/532
17.5.1 NTFS内部布局/532
17.5.2 恢复/534
17.5.3 安全/535
17.5.4 卷管理和容错/535
17.5.5 压缩/536
17.5.6 安装点、符号链接和硬链接/536
17.5.7 变更日志/537
17.5.8 卷的影子副本/537
17.6 网络/537
17.6.1 网络接口/537
17.6.2 协议/537
17.6.3 重定向器与服务器/539
17.6.4 域/540
17.6.5 活动目录/540
17.7 程序员接口/540
17.7.1 访问内核对象/541
17.7.2 进程间共享对象/541
17.7.3 进程管理/542
17.7.4 使用Windows消息传递的进程间通信/545
17.7.5 内存管理/546
17.8 小结/547
习题/548
推荐读物/548
参考文献/549
第18章 有影响的操作系统/550
18.1 特征迁移/550
18.2 早期系统/551
18.2.1 专用计算机系统/551
18.2.2 共享计算机系统/552
18.2.3 重叠I/O/554
18.3 Atlas/555
18.4 XDS-940/556
18.5 THE/556
18.6 RC 4000/557
18.7 CTSS/558
18.8 MULTICS/558
18.9 IBM OS/360/558
18.10 TOPS-20/559
18.11 CP/M与MS/DOS/560
18.12 Macintosh OS与Windows/560
18.13 Mach/561
18.14 其他系统/562
习题/562
推荐读物/562
参考文献/563
索引/565
没有回复内容