这书创作者授课分布式系统课程内容超出十年,方知传统式教学策略的堡垒和教材内容的局限。因此,这书在两大层面切实自主创新:跨学科,注重全局性视角和系统思维;重实践,配备行得通方式 和常用工具。书中为新手和程序猿铺装了不一样的学习培训途径,基础知识和实例主题活动交叉井然有序,练习题及解释、源码和模拟仿真专用工具配备齐备。这书在美国多家高等院校的课堂教学实践中广受五星好评,针对中国电脑课程的有关课程内容也极具效仿使用价值。
这书特点
四个视角,一套管理体系。从“系统进程、通讯、資源、系统架构”四个视角创建大局观,以系统思维摆脱课程界线,将计算机网、电脑操作系统、分布式系统、中国科学技术大学等单一技术专业的专业知识集成化起來,从最底层基本到高层构架,明白解读分布式应用的开发方法,塑造控制系统设计工作能力。
课堂教学有方,实践有道。主实例井字棋手机游戏围绕全部视角,最终2个综合性实例融会贯通本书专业知识,深层探寻应用程序开发的项目生命周期,着重强调系统软件的“相容性”。每一视角都包括精心策划的实践主题活动,操作流程、模拟仿真专用工具、結果剖析皆细腻清楚,多方位提高实践教学水平。
完全免费教辅书,独立升阶。Workbench手机软件致力于这书打造出,可开展生产调度优化算法、TCP协议书和死锁等模拟仿真试验,日常动态展现系统软件的繁杂特点。其配备灵便且不用撰写最底层编码的特性,合适不一样层级的用户订制人性化课程学习,除此之外,还出示C++、Java、C#三种言语的范例编码。
理查德·罗伯特·安东尼(Richard John Anthony) 博士大学毕业于英国约克大学软件工程专业,有着20很多年的教育科研和技术性产品研发工作经验。现任教于格林威治大学测算与信息管理系统系,还曾做为技术工程师和系统软件开发者从业商业服务新项目的产品研发和管理方面。
张经常出现 博士大学毕业于北理工软件工程专业。新任中科院手机软件研究室研究者,关键研究内容为并行处理与分布式系统、智能化网络信息等。
目录
- 出版者的话
- 译者序
- 前言
- 第1章 绪论1
- 1.1 基本原理1
- 1.1.1 计算机科学的传统讲授方法1
- 1.1.2 本书采用的系统方法2
- 1.2 网络和分布式系统在现代计算中的重要性—简明历史回顾4
- 1.3 分布式系统简介6
- 1.3.1 分布式系统的优势和挑战6
- 1.3.2 分布的本质7
- 1.3.3 分布式应用程序的软件体系结构8
- 1.3.4 分布式系统与应用的质量度量指标9
- 1.3.5 透明性简介9
- 1.4 案例研究简介10
- 1.4.1 主案例研究(分布式游戏)11
- 1.4.2 附加案例研究11
- 1.5 教辅材料和练习简介12
- 1.6 交互式教学工具Workbench套件14
- 1.7 示例代码和相关练习14
- 第2章 进程视角16
- 2.1 基本原理和概述16
- 2.2 进程16
- 2.2.1 基本概念16
- 2.2.2 创建进程16
- 2.3 进程调度21
- 2.4 实时系统调度46
- 2.5 在现代操作系统中使用的特定调度算法及其变体56
- 2.6 进程间通信57
- 2.7 线程:导论62
- 2.7.1 一般概念62
- 2.7.2 线程实现62
- 2.7.3 线程调度方法63
- 2.7.4 同步(顺序的)与异步(并发的)线程操作64
- 2.7.5 线程带来的额外复杂性68
- 2.7.6 多线程IPC举例70
- 2.8 操作系统的其他角色77
- 2.9 程序中使用定时器77
- 2.10 进程视角的透明性80
- 2.11 进程视角的案例研究80
- 2.11.1 调度要求80
- 2.11.2 定时器的使用81
- 2.11.3 多线程需求81
- 2.11.4 IPC、端口和套接字81
- 2.12 章末练习82
- 2.12.1 问题82
- 2.12.2 基于Workbench的练习83
- 2.12.3 编程练习87
- 2.12.4 章末问题答案88
- 2.12.5 本章活动列表88
- 2.12.6 配套资源列表89
- 第3章 通信视角90
- 3.1 基本原理和概述90
- 3.2 通信视角90
- 3.3 通信技术91
- 3.3.1 单向通信91
- 3.3.2 请求-应答通信96
- 3.3.3 双向数据传输100
- 3.3.4 寻址方法100
- 3.3.5 远程过程调用103
- 3.3.6 远程方法调用105
- 3.4 通信的分层模型107
- 3.4.1 OSI模型109
- 3.4.2 TCP/IP模型110
- 3.5 TCP/IP协议簇111
- 3.5.1 IP112
- 3.5.2 TCP113
- 3.5.3 TCP连接115
- 3.5.4 UDP116
- 3.5.5 TCP和UDP的比较118
- 3.5.6 TCP和UDP的选择119
- 3.6 地址119
- 3.6.1 扁平与分级编址120
- 3.6.2 链路层地址120
- 3.6.3 网络层地址121
- 3.6.4 传输层地址(端口)123
- 3.6.5 熟知端口号124
- 3.7 套接字125
- 3.7.1 套接字API:概述126
- 3.7.2 套接字API:UDP原语序列126
- 3.7.3 套接字API:TCP原语序列130
- 3.7.4 绑定(进程到端口)132
- 3.8 阻塞和非阻塞套接字行为135
- 3.8.1 非阻塞套接字行为的处理138
- 3.8.2 通信死锁138
- 3.9 错误检测与校正140
- 3.10 应用特定协议142
- 3.11 面向业务逻辑的通信整合143
- 3.12 帮助组件相互定位的技术144
- 3.13 通信视角的透明性需求145
- 3.14 通信视角的案例研究146
- 3.15 章末练习154
- 3.15.1 问题154
- 3.15.2 基于Workbench的练习154
- 3.15.3 编程练习157
- 3.15.4 章末问题答案157
- 3.15.5 Workbench练习的答案/结果158
- 3.15.6 本章活动列表159
- 3.15.7 配套资源列表159
- 第4章 资源视角169
- 4.1 基本原理和概述169
- 4.2 CPU资源169
- 4.3 通信中的存储器资源170
- 4.4 内存管理175
- 4.5 资源管理185
- 4.5.1 私有存储空间资源的静态分配与动态分配185
- 4.5.2 共享资源189
- 4.5.3 事务190
- 4.5.4 锁190
- 4.5.5 死锁193
- 4.5.6 资源复制196
- 4.6 网络资源197
- 4.6.1 网络带宽197
- 4.6.2 数据压缩技术202
- 4.6.3 消息格式205
- 4.6.4 序列化206
- 4.6.5 网络链路序列209
- 4.6.6 路由器与路由210
- 4.6.7 通信额外开销215
- 4.6.8 恢复机制及其与网络拥塞的相互作用215
- 4.7 虚拟资源217
- 4.7.1 套接字218
- 4.7.2 端口218
- 4.7.3 网络地址218
- 4.7.4 资源名称219
- 4.8 分布式应用程序设计对网络效率的影响220
- 4.9 资源视角的透明性220
- 4.10 资源视角的案例研究220
- 4.11 章末练习223
- 4.11.1 问题223
- 4.11.2 基于Workbench的练习223
- 4.11.3 编程练习226
- 4.11.4 章末问题答案226
- 4.11.5 Workbench练习的答案/结果227
- 4.11.6 本章活动列表228
- 4.11.7 配套资源列表228
- 第5章 体系结构视角229
- 5.1 基本原理和概述229
- 5.2 体系结构视角229
- 5.2.1 关注点分离230
- 5.2.2 网络化与分布性230
- 5.2.3 分布式系统的复杂性231
- 5.2.4 分层体系结构232
- 5.2.5 层级体系结构234
- 5.3 异构性234
- 5.3.1 异构性的定义和来源235
- 5.3.2 性能异构性235
- 5.3.3 平台异构性236
- 5.3.4 操作系统异构性236
- 5.3.5 异构性影响238
- 5.3.6 软件移植239
- 5.4 硬件和系统级体系结构240
- 5.4.1 紧耦合(硬件)系统240
- 5.4.2 松散耦合(硬件)系统240
- 5.4.3 并行处理241
- 5.5 软件体系结构242
- 5.6 软件体系结构分类法246
- 5.6.1 单层应用程序247
- 5.6.2 双层应用程序247
- 5.6.3 三层应用程序248
- 5.6.4 多层应用程序248
- 5.7 客户端-服务器249
- 5.7.1 客户端和服务器的生命周期249
- 5.7.2 连接的主动方和被动方250
- 5.7.3 CS体系结构模型250
- 5.7.4 CS模型的变体251
- 5.7.5 有状态服务与无状态服务252
- 5.7.6 模块化和层级CS系统253
- 5.8 三层和多层体系结构254
- 5.9 对等体系结构263
- 5.9.1 对等应用程序的特性264
- 5.9.2 对等体系结构连接的复杂性264
- 5.9.3 探索对等行为265
- 5.10 分布式对象268
- 5.11 中间件对软件体系结构的支持270
- 5.12 提供集体资源和计算资源的系统模型271
- 5.12.1 集群272
- 5.12.2 网格272
- 5.12.3 数据中心272
- 5.12.4 云273
- 5.13 软件库273
- 5.13.1 软件库案例275
- 5.13.2 静态链接和动态链接280
- 5.13.3 语言相关的特性:C/C++头文件281
- 5.14 硬件虚拟化283
- 5.14.1 虚拟机283
- 5.14.2 Java虚拟机284
- 5.15 静态和动态配置285
- 5.15.1 静态配置285
- 5.15.2 动态配置286
- 5.15.3 上下文感知286
- 5.16 分布式应用程序的非功能性需求287
- 5.16.1 复制288
- 5.16.2 复制的语义291
- 5.16.3 复制的实现291
- 5.17 分布式应用程序与网络之间的关系299
- 5.18 体系结构视角的透明性300
- 5.19 体系结构视角的案例研究301
- 5.19.1 有状态服务器设计301
- 5.19.2 游戏组件的关注点分离302
- 5.19.3 游戏应用程序的物理和逻辑体系结构302
- 5.19.4 游戏的透明性303
- 5.20 章末练习304
- 5.20.1 问题304
- 5.20.2 编程练习305
- 5.20.3 章末问题答案305
- 5.20.4 本章活动列表307
- 5.20.5 配套资源列表307
- 第6章 分布式系统309
- 6.1 基本原理和概述309
- 6.2 透明性309
- 6.2.1 访问透明性310
- 6.2.2 位置透明性311
- 6.2.3 复制透明性313
- 6.2.4 并发透明性316
- 6.2.5 迁移透明性319
- 6.2.6 故障透明性320
- 6.2.7 规模扩展透明性322
- 6.2.8 性能透明性323
- 6.2.9 分布透明性324
- 6.2.10 实现透明性324
- 6.3 公共服务324
- 6.4 名称服务325
- 6.4.1 名称服务的运行326
- 6.4.2 目录服务327
- 6.4.3 名称服务设计和实现的挑战332
- 6.5 域名系统333
- 6.5.1 域名空间334
- 6.5.2 DNS实现336
- 6.5.3 DNS名称服务器:权威和授权338
- 6.5.4 复制339
- 6.5.5 名称解析的进一步细节340
- 6.5.6 DNS中的缓存341
- 6.5.7 探索地址解析341
- 6.5.8 反向DNS查找344
- 6.6 时间服务344
- 6.6.1 时间服务简介344
- 6.6.2 物理时钟同步346
- 6.6.3 逻辑时钟与同步350
- 6.7 选举算法352
- 6.7.1 操作简介353
- 6.7.2 bully选举算法354
- 6.7.3 ring选举算法355
- 6.7.4 领导者预选356
- 6.7.5 针对一个选举算法的探索356
- 6.8 组通信 362
- 6.9 通知服务363
- 6.10 中间件:机制和操作36