实时系统与编程语言(原书第3版)
作者 : (美)Alan Burns,Andy Wellings
译者 : 王振宇 陈利 等
丛书名 : 计算机科学丛书
出版日期 : 2004-04-14
ISBN : 7-111-13987-9
定价 : 59.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 596
开本 : 16开
原书名 : Real-Time Systems and Programming Languages
原出版社: Pearson Education,Inc.
属性分类: 教材
包含CD :
绝版 : 已绝版
图书简介

本书全面论述实时系统、嵌入式系统和分布式系统的特征,深入分析设计和实现实时嵌入式系统的需求,并讨论了当前的编程语言和操作系统如何满足这些需求,重点介绍Ada 95、实时Java和实时POSIX。本书还覆盖了在实时领域的最新成果,包括实时CORBA。
  本书在国外是实时系统方面的畅销教材,涵盖的内容广泛,适合作为高等院校计算机专业的教材,供高年级本科生和研究生使用。

图书特色

图书前言

1981年,一个软件错误导致一个静止的机器人突然移动,并以极快的速度冲到操作区的边缘,附近的一个工人被撞死。这只是嵌入式实时系统灾难的一个例子。但是这并非一个孤立的意外事件。每个月,  《Software Engineering Notes》(软件工程通讯)都有几页关于实时系统的故障将公众或环境推入危险境地的例子。这些认真描述的事件证明了需要对嵌入式系统有一个系统范围的观点。确实,有人主张说现在需要将实时系统作为一个单独的工程学科来认识。本书就是要为建立这个学科做出贡献。当然,它不可能覆盖有关实时系统工程研究的所有问题,然而,它确实提供了对在此领域使用的编程语言和操作系统标准的全面描述和评估。特别强调的重点是语言原语及其在产生可靠、安全、可依赖软件中的作用。

本书面向的读者
  本书针对计算机科学和相关专业高年级本科生和硕士研究生,也适合于专业软件工程师和实时系统工程师。本书假设读者具有像Pascal这种顺序编程语言的知识,并熟悉软件工程的基本原则。书中所用材料是作者过去多年里在各种大学和相关行业所开课程的内容,这些课程都是专门讲述实时系统和编程语言的。

结构和内容
  为了各章的连贯性,本书详细地研究了4种编程语言:Ada、Java、occam2和C。之所以选中这些语言,是因为软件生产中真正使用这些语言。由于C是一个顺序语言,它要连同POSIX操作系统的接口一起使用(尤其是实时扩展)。本书也讨论其他的理论性或实验性语言,只要它们提供核心语言中没有的原语。这些语言的实践人员应当可找到他们需要的足够材料。作者相信,像对Ada或Java这样的语言的全面评价只能通过对它们进行比较性研究才能得出。
  本书总共有18章,前13章分成五部分。第1章至第4章是一个深入的引言,提出了实时系统的特征和需求,然后给出此类系统的设计概述。设计不是本书的关注重点,然而它对于在适宜的环境中讨论实现问题是很重要的—第2章提供这样的背景。这一章还研究语言评估的一般标准。第3章和第4章通过关于小型编程和大型编程的讨论研究基本语言结构。这些章还介绍Ada、Java、occam2和C。熟悉这些语言和实时系统基本特性的读者可以快速地浏览这开头的四章。对于其他读者,这些材料有助于使本书更加自成体系。
  第5章和第6章讨论可靠软件部件的生产问题。虽然考虑到了故障预防,但重点主要集中在容错,研究了向前和向后两种出错恢复技术。第6章讨论异常处理,描述恢复和终止两种模型,以及在Ada、Java、CHILL、CLU、C++和Mesa中的语言原语。
  实时系统的固有特征是并发,所以研究编程语言的这个方面是很重要的。第7章介绍进程的概念并概述语言和操作系统设计者使用的许多不同模型。在接下来的两章中研究进程之间的通信,首先描述共享变量方法,包括信号量、管程、互斥锁和保护对象的使用。在现代编程语言中,基于消息的模型也是很重要的,按它们进行通信和同步予以组合。第9章涵盖这些模型,并特别关注Ada和occam2的会合原语。
  对于在此书中是应当首先研究可靠性还是研究并发性的问题是有争论的。两位作者都试着反转次序,发现在这两种方法之间很难选择。事实上,这本书可以以任一种方式使用,只有一、两个主题是“不合适”的。首先讲解可靠性的决定反映了作者关于安全性是实时系统的根本需求的信念。
  下一部分包括第10章和第11章。通常将系统进程之间的关系描述为合作关系(实现一个共同目标)或竞争关系(获得共享资源)。第10章通过描述如何将可靠的进程合作进行编程扩展了前面关于容错的讨论。这个讨论的核心是原子动作的概念和异步事件处理技术。接下来的一章研究竞争进程,评价了各种语言特征。这里的一个重要问题是并发模型里的条件同步和回避同步之间的区别。
  时间性需求是实时系统的区别性特征。第12章和第13章详细讨论这些需求和用以满足需求的语言设施以及实现策略。硬实时系统的时间性约束是必须满足的;软实时系统可以偶尔不满足。二者都是在时限调度的背景下讨论的。优先级概念是同基于抢占式优先级系统的可调度性分析一起讨论的。
  剩下的几章本质上是独立的。近期在硬件和通信技术方面的进展已经使分布式计算机系统在嵌入式应用领域成为单处理器和集中式系统的可行的替代品。虽然在某些方面,分布可被看作是实现问题;然而,当应用被分布时,出现的问题提出了超出实现细节的基础性问题。第14章研究相关的四个方面:语言支持、处理器和通信失效情况下的可靠性、分布式控制算法和分布式调度。把这些内容独立成章,目的是使上短期课程的学生可以跳过它。
  许多实时系统的一个重要需求是加进来的外部设备必须作为应用软件的一部分编程(也就是说必须予以控制)。这种低级编程同作为软件工程特征的软件生产的抽象方法很不相同。第15章研究低级设施能够被成功地并入高级语言的方式。
  对于实时系统的一个普遍错误概念是认为它们必须是高效的,这本身是不对的。实时系统必须满足时间约束(和可靠性需求);高效的实现是扩展可能性范围的一种手段,但其本身不是目的。第16章概述了执行环境在获得高效可预测的实现中的作用。
  本书最后的一章是用Ada实现的一个个案研究,使用了矿井控制系统的例子。一个经过裁减的个案研究不可能说明前面各章涵盖的所有问题,特别是没有涉及大小和复杂性等因素。然而,这个个案研究确实覆盖了实时系统的许多重要方面。
  各章都有小结和相关阅读材料清单,多数章还有练习。选择这些练习是为了帮助读者巩固对每一章内容的理解。它们大体上代表了作者进行评估所使用过的练习。

Ada、Java、occam2和C
  本书中Ada 95的例子符合ISO/ANSI标准。Java例子符合Java 2平台和Java扩展的实时规格说明(在本书中称为实时Java)。occam2例子符合INMOS给出的occam2定义。C例子符合ANSI C,POSIX原语是在POSIX.1、POSIX.1b、POSIX.1c、POSIX.1d和POSIX.13定义中给出的原语。
  为方便四种语言的识别,使用了不同的表现风格。Ada使用加粗小写字母的关键字,程序标识符则以大小写混合方式给出。occam2的关键字用不加粗大写字母,标识符用混合大小写字母。C的关键字不加粗,标识符用小写字母。为将Java同C区分,Java关键字是加粗的,标识符是混合大小写字母。

对第2版的修改
  在第2版中,我们从Ada 83移到Ada 95,从Modula-2移到了C和POSIX。第3版根据实时领域的下列发展进行了改进:
  Java通过实时Java扩展成为一个实时语言。因此本书将Java作为核心语言之一对待。
  POSIX标准中补充的新实时功能,尤其是执行时间监控(Execution Time Monitoring)和偶发服务器(Sporadic Server)。第12章和第13章的更新反映了标准的这些修改。
  为解决实时问题对COBRA的建议扩展。CORBA显然有理由成为一个主要议题,但详细讨论它超出了本书的范围。然而,第14章的更新还是反映了CORBA方法。
  我们已经接受了使用本书教学的读者关于包含更多调度方面材料的建议。

教学辅助材料
  从下列网站可得到本教科书的更多支持材料:http://www.booksites.net/burns。本书许多部分有投影胶片可用,还提供许多练习的答案。我们将随时添加更多的练习、适当的新例子和补充教学材料。使用本书的教师/讲师帮助完成了这些网页。

关于约克大学的实时系统研究
  Alan Burns和Andy Wellings是英国约克大学计算机系实时系统研究组的成员。这个小组对实时系统的设计、实现和分析的所有方面进行研究。这个小组尤其致力于:形式化和结构化开发方法、调度理论、重用、语言设计、内核设计、通信协议、分布和并行体系结构、程序代码分析。这个研究组的宗旨是进行基础性研究,并将现代技术、方法和工具带入工程实践。研究组的应用领域包括空间和航空电气系统、引擎控制器、汽车控制和多媒体系统。可通过http://www.cs.york.ac.uk/rts/找到这个小组活动的进一步信息。

译者简介

王振宇 陈利 等:暂无简介

译者序

Alan Burns 和Andy Wellings的这本《实时系统与编程语言》于1989年出第1版,1997年出第2版,2001年出第3版,2003年则是第3版的第3次印刷,可见它是一本受欢迎的书。Alan Burns 和Andy Wellings 都在英国约克(York)大学计算机科学系工作。Burns教授是IEEE实时系统委员会的主席(2001-2003)。Andy Wellings 教授是Software Practice and Experience杂志的欧洲主编。
  书中全面论述了实时系统、嵌入式系统和分布式系统的特征,深入分析了设计和实现实时嵌入式系统的需求,批判性地介绍了几种编程语言和操作系统对设计和实现实时系统的支持,重点是Ada 95、实时Java和实时POSIX。书中覆盖了此领域的最新成果,包括实时CORBA。
  在这本书的翻译过程中,关于若干术语的译法碰到不少问题。这一方面是由于国外一些作者和机构对这些术语的用法历来就有不同,另一方面是由于中西文化背景的差异。我们的原则是这本书中的译法要尽可能统一,不致使读者混淆,并在必要时加注原文。另外,做到“信、达、雅”全面兼顾,当然很好,但由于种种原因无法兼顾的时候,只有牺牲“雅”了。相信翻译过科技著作的人会同意这种取舍。
原书作者针对第3版给出了勘误表,见:
http://www.booksites.net/burns译文已据此做了相应更改。遗憾的是还发现另外一些错误,译文中也改正了。
  参加本书翻译工作的除封面署名外还有:王志海(武汉理工大学)、张立(武汉化工学院)、陈靖(中船重工709研究所)、魏非(中船重工709研究所)、余扬(华南理工大学)、徐冠勇(中船重工709研究所)、李扬(中船重工709研究所)、李任(中船重工709研究所)等。

王振宇(中船重工709研究所)
陈利(华中师范大学)
2003年9月1日

图书目录

第1章  实时系统引论 1
1.1  实时系统的定义 1
1.2  实时系统的例子 2
1.2.1  过程控制 2
1.2.2  制造业 3
1.2.3  通信、指挥与控制 4
1.2.4  广义嵌入式计算机系统 5
1.3  实时系统的特征 5
1.3.1  大且复杂 5
1.3.2  实数处理 6
1.3.3  极其可靠和安全 7
1.3.4  独立系统部件的并发控制 7
1.3.5  实时设施 8
1.3.6  同硬件接口的交互 8
1.3.7  高效的实现和执行环境 9
小结 9
相关阅读材料 9
第2章  设计实时系统 11
2.1  记号系统的级别 12
2.2  需求规格说明 12
2.3  设计活动 13
2.3.1  封装 13
2.3.2  内聚和耦合 14
2.3.3  形式化方法 14
2.4  设计方法 15
2.4.1  JSD 16
2.4.2  Mascot3 17
2.4.3  HRT-HOOD 18
2.4.4  统一建模语言(UML) 19
2.5  实现 19
2.5.1  汇编语言 20
2.5.2  顺序系统实现语言 20
2.5.3  高级并发编程语言 20
2.5.4  通用语言设计标准 21
2.6  测试 22
2.7  原型建造 23
2.8  人机交互 24
2.9  设计的管理 25
小结 26
相关阅读材料 27
练习 27
第3章  小型编程 29
3.1  Ada、Java、C和occam2概述 29
3.2  词法约定 29
3.3  整体风格 30
3.4  数据类型 31
3.4.1  离散类型 32
3.4.2  实数 33
3.4.3  结构化数据类型 35
3.4.4  动态数据类型和指针 37
3.4.5  文件 39
3.5  控制结构 39
3.5.1  顺序结构 39
3.5.2  判断结构 40
3.5.3  循环结构 43
3.6  子程序 46
3.6.1  参数传递模式和机制 46
3.6.2  过程 47
3.6.3  函数 49
3.6.4  子程序指针 50
3.6.5  插入式展开 51
小结 51
相关阅读材料 52
练习 52
第4章  大型编程 55
4.1  信息隐藏 55
4.2  分别编译 59
4.3  抽象数据类型 60
4.4  面向对象编程 61
4.4.1  OOP和Ada 62
4.4.2  OOP和Java 65
4.4.3  继承和Java 66
4.4.4  对象类 69
4.5  可重用性 70
4.5.1  Ada类属编程 70
4.5.2  Java中的接口 73
小结 75
相关阅读材料 76
练习 76
第5章  可靠性和容错 77
5.1  可靠性、失效和故障 78
5.2  失效模式 79
5.3  故障预防与容错 80
5.3.1  故障预防 80
5.3.2  容错 81
5.3.3  冗余 82
5.4  N版本程序设计 82
5.4.1  表决比较 84
5.4.2  N版本程序设计的主要问题 85
5.5  软件动态冗余 86
5.5.1  出错检测 86
5.5.2  损害隔离和评估 87
5.5.3  出错恢复 88
5.5.4  故障处理和继续服务 90
5.6  软件容错的恢复块方法 90
5.7  N版本程序设计和恢复块的比较 92
5.8  动态冗余和异常 93
5.9  软件可靠性的测量和预测 95
5.10  安全性、可靠性和可依赖性 95
小结 97
相关阅读材料 98
练习 98
第6章  异常和异常处理 101
6.1  老式实时语言中的异常处理 101
6.1.1  反常返回值 101
6.1.2  强迫性分支 102
6.1.3  非局部go to 102
6.1.4  过程变量 103
6.2  现代异常处理 104
6.2.1  异常及其表示 104
6.2.2  异常处理程序的定义域 105
6.2.3  异常传播 107
6.2.4  恢复模型与终止模型的对比 107
6.3  Ada、Java和C中的异常处理 110
6.3.1  Ada 110
6.3.2  Java 117
6.3.3  C 123
6.4  其他语言中的异常处理 124
6.4.1  CHILL 124
6.4.2  CLU 125
6.4.3  Mesa 126
6.4.4  C++ 126
6.5  恢复块和异常 127
小结 129
相关阅读材料 130
练习 130
第7章  并发编程 135
7.1  进程概念 135
7.2  并发执行 138
7.3  进程表示 140
7.3.1  合作例程 140
7.3.2  分叉与汇合 140
7.3.3  cobegin 142
7.3.4  显式进程声明 142
7.3.5  occam2的并发执行 143
7.3.6  Ada的并发执行 144
7.3.7  Java的并发执行 148
7.3.8  Ada、Java和occam2的比较 154
7.3.9  POSIX的并发执行 155
7.4  一个简单的嵌入式系统 159
小结 164
相关阅读材料 165
练习 165
第8章  基于共享变量的同步和通信 169
8.1  互斥和条件同步 169
8.2  忙等待 170
8.3  挂起和恢复 175
8.4  信号量 177
8.4.1  挂起进程 179
8.4.2  实现 180
8.4.3  活性 181
8.4.4  二元信号量和定量信号量 182
8.4.5  Ada信号量编程举例 182
8.4.6  使用C和POSIX的信号量编程 184
8.4.7  对信号量的批评 186
8.5  条件临界区 186
8.6  管程 187
8.6.1  Modula-1 189
8.6.2  Mesa 190
8.6.3  POSIX互斥锁和条件变量 192
8.6.4  嵌套管程调用 194
8.6.5  对管程的批评 194
8.7  保护对象 195
8.7.1  入口调用和屏障 197
8.7.2  保护对象和标记类型 199
8.8  同步方法 200
8.8.1  等待和通知 201
8.8.2  继承和同步 206
小结 208
相关阅读材料 210
练习 210
第9章  基于消息的同步与通信 219
9.1  进程同步 219
9.2  进程指名和消息结构 220
9.3  Ada和occam2的消息传递语义 221
9.3.1  occam2模型 221
9.3.2  Ada模型 222
9.3.3  异常处理和会合 225
9.4  选择性等待 226
9.4.1  occam2的ALT 226
9.4.2  Ada的Select语句 230
9.4.3  不确定性、选择性等待和同步原语 232
9.5  POSIX消息 233
9.6  CHILL语言 236
9.7  远程过程调用 238
小结 239
相关阅读材料 240
练习 240
第10章  原子动作、并发进程和可靠性 247
10.1  原子动作  247
10.1.1  两阶段原子动作 248
10.1.2  原子事务 249
10.1.3  对原子动作的需求 249
10.2  并发语言中的原子动作  250
10.2.1  信号量 251
10.2.2  管程 252
10.2.3  用Ada实现原子动作 253
10.2.4  用Java实现原子动作 254
10.2.5  用occam2实现原子动作 258
10.2.6  原子动作的语言框架 259
10.3  原子动作和向后出错恢复 260
10.3.1  会话 260
10.3.2  对话和会谈 261
10.4  原子动作和向前出错恢复 262
10.4.1  并发引发的异常的分辨 263
10.4.2  异常和内部原子动作 263
10.5  异步通知 264
10.6  POSIX信号 265
10.6.1  阻塞信号 267
10.6.2  处理信号 267
10.6.3  忽略信号 268
10.6.4  生成信号 268
10.6.5  一个POSIX信号的简单例子 268
10.6.6  信号和线程 269
10.6.7  POSIX和原子动作 270
10.7  实时Java中的异步事件处理 271
10.8  Ada中的异步控制转移 272
10.8.1  异常和ATC 274
10.8.2  Ada和原子动作 274
10.9  实时Java中的异步控制转移 281
小结 291
相关阅读材料 292
练习 292
第11章  资源控制 297
11.1  资源控制和原子动作 297
11.2  资源管理 298
11.3  表达能力和易用性 298
11.3.1  请求类型 299
11.3.2  请求顺序 301
11.3.3  服务器状态 301
11.3.4  请求参数 301
11.3.5  请求者优先级 305
11.3.6  小结 306
11.4  重排队设施 306
11.4.1  重排队的语义 309
11.4.2  重排队到其他入口 310
11.5  不对称指名和安全性 312
11.6  资源的使用 313
11.7  死锁 313
11.7.1  死锁发生的必要条件 313
11.7.2  处理死锁的方法 314
小结 316
相关阅读材料 317
练习 317
第12章  实时设施 321
12.1  时间的概念 321
12.2  时钟访问 323
12.2.1  occam2中的TIMER 323
12.2.2  Ada的时钟包 324
12.2.3  实时Java中的时钟 326
12.2.4  C和POSIX中的时钟 329
12.3  进程延迟 330
12.3.1  相对延迟 330
12.3.2  绝对延迟 330
12.4  超时的编程 332
12.4.1  共享变量通信和超时 332
12.4.2  消息传递和超时 333
12.4.3  动作上的超时 337
12.5  规定时间性需求 339
12.6  时序作用域 340
12.7  时序作用域的语言支持 342
12.7.1  Ada、occam2和C/POSIX 343
12.7.2  实时Euclid和Pearl 344
12.7.3  实时Java 346
12.7.4  DPS 349
12.7.5  Esterel 350
12.8  容错 351
12.8.1  时间性错误检测和向前出错恢复 352
12.8.2  时间性错误检测和向后出错恢复 358
12.8.3  模式改变和基于事件的重配置 359
小结 361
相关阅读材料 362
练习 363
第13章  调度 365
13.1  简单进程模型 365
13.2  循环执行方法 366
13.3  基于进程的调度 368
13.3.1  调度方法 368
13.3.2  抢占和非抢占 368
13.3.3  FPS和速率单调优先级分配 368
13.4  基于利用率的可调度性测试 369
13.5  FPS的响应时间分析 372
13.6  EDF的响应时间分析 375
13.7  最坏情况执行时间 376
13.8  偶发和非周期进程 377
13.8.1  硬进程和软进程 377
13.8.2  非周期进程和固定优先级服务器 378
13.8.3  非周期进程和EDF服务器 378
13.9  D<T的进程系统 379
13.10  进程交互和阻塞 380
13.11  高限优先级协议 383
13.11.1  立即高限优先级协议 385
13.11.2  高限协议、互斥和死锁 385
13.11.3  阻塞和EDF 386
13.12  一个可扩充的进程模型 386
13.12.1  合作调度 386
13.12.2  启动抖动 387
13.12.3  任意的时限 389
13.12.4  容错 390
13.12.5  引入偏移量 390
13.12.6  优先级分配 392
13.13  动态系统和联机分析 392
13.14  基于优先级系统的编程 393
13.14.1  Ada 394
13.14.2  POSIX 397
13.14.3  实时Java 399
13.14.4  实时Java的其他设施 402
小结 402
相关阅读材料 403
练习 404
第14章  分布式系统 409
14.1  分布式系统的定义 409
14.2  论题一览 411
14.3  语言支持 412
14.3.1  远程过程调用 412
14.3.2  分布式对象模型 413
14.4  分布式编程系统和环境 413
14.4.1  occam2 414
14.4.2  Ada 416
14.4.3  Java 419
14.4.4  CORBA 421
14.5  可靠性 423
14.5.1  开放系统互连 424
14.5.2  TCP/IP层 426
14.5.3  轻量级协议和局域网 426
14.5.4  组通信协议 427
14.5.5  处理器失效 428
14.6  分布式算法 432
14.6.1  分布式环境中的事件排序 432
14.6.2  全局时间的实现 433
14.6.3  实现稳定存储 434
14.6.4  故障性进程出现时达成一致 435
14.7  分布式环境中的时限调度 437
14.7.1  分配 437
14.7.2  调度对通信链路的访问 439
14.7.3  整体调度 441
小结 442
相关阅读材料 444
练习 444
第15章  低级编程 447
15.1  硬件输入/输出机制 447
15.1.1  状态驱动 448
15.1.2  中断驱动 448
15.1.3  中断驱动设备所需的要素 449
15.1.4  一个简单的I/O系统的例子 451
15.2  语言要求 452
15.2.1  模块性和封装设施 452
15.2.2  设备处理的抽象模型 453
15.3  Modula-1 454
15.3.1  设备寄存器的寻址和操纵 454
15.3.2  中断处理 455
15.3.3  一个终端驱动程序的例子 456
15.3.4  Modula-1设备驱动方法的问题 459
15.4  Ada 460
15.4.1  设备寄存器的寻址和操作 460
15.4.2  中断处理 462
15.4.3  一个简单的驱动程序的例子 464
15.4.4  通过特别指令访问I/O设备 467
15.5  实时Java 468
15.5.1  设备寄存器的寻址和操纵 468
15.5.2  中断处理 470
15.6  occam2 470
15.6.1  一个设备驱动程序的例子 472
15.6.2  occam2设备驱动的困难 476
15.7  C和老式实时语言 476
15.8  设备驱动程序的调度 477
15.9  存储管理 479
15.9.1  堆管理 479
15.9.2  栈管理 484
小结 484
相关阅读材料 485
练习 485
第16章  执行环境 491
16.1  执行环境的作用 491
16.2  剪裁执行环境 493
16.2.1  Ada中的受限任务 493
16.2.2  POSIX 495
16.3  调度模型 495
16.3.1  非微小的上下文切换时间的建模 496
16.3.2  偶发进程的建模 497
16.3.3  实时时钟处理程序的建模 497
16.3.4  高速缓存对最坏情况执行时间分
析的影响 499
16.4  硬件支持 499
16.4.1  传输机和occam2 500
16.4.2  ATAC和Ada 500
小结 501
相关阅读材料 501
练习 502
第17章  Ada案例研究 503
17.1  矿井排水 503
17.1.1  功能需求 503
17.1.2  非功能需求 504
17.2  HRT-HOOD设计方法 506
17.3  逻辑体系结构设计 506
17.3.1  第一级分解 507
17.3.2  水泵控制器 507
17.3.3  环境监控器 509
17.3.4  数据记录器和操作员控制台 509
17.4  物理体系结构设计 509
17.5  翻译到Ada 511
17.5.1  水泵控制器对象 512
17.5.2  环境监控 520
17.5.3  气流传感器处理对象 523
17.5.4  CO传感器处理对象 524
17.5.5  数据记录器 525
17.5.6  操作员控制台 526
17.6  容错和分布 526
17.6.1  设计错误 526
17.6.2  处理器和通信失效 527
17.6.3  其他硬件失效 527
小结 528
相关阅读材料 528
练习 528
第18章  结论 529
附录  实时Java规格说明 533
参考文献 553
索引 565

教学资源推荐
作者: 刘建舟 徐承志 陈荆亮 吴奕 编著 邵雄凯 主审
作者: (美)Y.Daniel Liang 著 阿姆斯特朗亚特兰大州立大学
作者: 郭文夷 等编著
参考读物推荐
作者: Leigh Edwards; Richard Barker 等
作者: (法)Yves Savourel
作者: 邹均 张海宁 唐屹 李磊  等著