实时系统与编程语言(原书第3版)
|
|
| 新书城图书编号:662 |
| 图书ISBN:7111139879 |
| 出版时间:2004-4-14 |
| 出版社:机械工业出版社 |
| 作者:(英)波恩斯,(英)威林斯 著,王振宇 等译 |
|
市场价格:¥59 |
|
普通会员:¥47.2
|
80折 |
|
VIP会员:¥44.25
|
75折 |
|
|
|
|
|
|
|
【图书简介】
|
本书全面论述实时系统、嵌入式系统和分布式系统的特征,深入分析设计和实现实时嵌入式系统的需求,并讨论了当前的编程语言和操作系统如何满足这些需求,重点介绍Ada 95、实时Java和实时POSIX。本书还覆盖了在实时领域的最新成果,包括实时CORBA。 本书在国外是实时系统方面的畅销教材,涵盖的内容广泛,适合作为高等院校计算机专业的教材,供高年级本科生和研究生使用。
|
|
|
|
【图书目录】
|
第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
|
|
|
|