本书是一本介绍实时Java平台编程的参考书,尽管本书主要是针对RTSJ平台的,但绝不仅仅是RISJ的参考手册。作者从语言闭包、高解析度时间、异步事件、实时线程、领域内存、不朽内存、物理内存等角度介绍了RTSJ平台对实时编程所提供的支持。在介绍每项功能的同时,作者还给出了大量的代码。本书中涉及到的技术、观念广泛、新颖。由于本书的作者亲自参与了RTSJ规范的编写,并且是RTSJ专家组的成员,所以书中的很多见解及提示信息都有其独到之处,很值得学习。另外,书本提供的大量代码都经过了测试,具有很高的实用价值。\r\n 本书适用于大专院校计算机专业高年级本科生和研究。对于从事软件开发、培训工作的管理人员,以及从事嵌入式软件开发、实时系统研制、Java应用编写的开发人员也有重要的参考价值。
译者序\r\n作者序\r\n前言\r\n\r\n第1章 概貌\r\n\r\n1.1 Java技术和实时\r\n1.1.1 实时编程需求\r\n1.1.2 Java和嵌入式实时\r\n1.2 实时的定义\r\n1.2.1 测量的精度\r\n1.2.2 一致性\r\n1.2.3 效用函数曲线图\r\n1.3 Java的问题\r\n1.4 实时Java的问题\r\n1.5 总结\r\n\r\n第2章 Java虚拟机的体系结构\r\n\r\n2.1 对“一经编写、随处运行”的理解\r\n2.2 JVM组件\r\n2.2.1 类加载\r\n2.2.2 字节码解释器\r\n2.2.3 安全管理器\r\n2.2.4 垃圾收集器\r\n2.2.5 线程管理\r\n2.2.6 输入/输出\r\n2.2.7 图形\r\n2.3 解释器实现\r\n2.3.1 标准解释器\r\n2.3.2 优化的解释器\r\n2.3.3 JIT\r\n2.3.4 代码片段\r\n2.3.5 编译成独立的进程\r\n2.3.6 本机方法\r\n2.3.7 编译成本机方法\r\n2.3.8 编译成JIT接口\r\n\r\n第3章 硬件体系结构\r\n\r\n3.1 单条指令执行的最坏情形\r\n3.1.1 最坏情形的场景\r\n3.1.2 实用的度量标准\r\n3.2 易错硬件的管理\r\n3.2.1 管理请求换页\r\n3.2.2 管理DMA\r\n3.2.3 管理高速缓存\r\n3.2.4 管理地址转换高速缓存\r\n3.2.5 管理中断\r\n3.3 对JVM的影响\r\n\r\n第4章 垃圾收集\r\n\r\n4.1 引用计数\r\n4.2 基本的垃圾收集\r\n4.2.1 标记清除\r\n4.2.2 碎片整理\r\n4.3 复制式收集器\r\n4.4 递增式收集\r\n4.5 再生式垃圾收集\r\n4.5.1 代间引用\r\n4.5.2 大对象存储\r\n4.6 实时问题\r\n\r\n第5章 优先级调度\r\n\r\n5.1 调度术语\r\n5.2 执行序列\r\n5.3 抢占\r\n5.4 固定优先级与动态优先级\r\n5.5 优先级逆转\r\n5.6 为什么要32个优先级\r\n5.7 与优先级调度有关的问题\r\n\r\n第6章 利用期限进行调度\r\n\r\n6.1 底层机制\r\n6.2 调度器的作用范围\r\n6.3 一些系统实例\r\n6.3.1 最早期限优先\r\n6.3.2 最小松弛\r\n6.3.3 周期调度\r\n6.3.4 非周期性服务器\r\n6.3.5 处理超负荷的情况\r\n6.4 时间性通常是随机的\r\n\r\n第7章 速率单调分析\r\n\r\n7.1 原理\r\n7.1.1 Liu and Layland原理\r\n7.1.2 图形化方法\r\n7.1.3 Lehoczky、Sha及Ding原理\r\n7.2 限制\r\n7.2.1 独立的任务\r\n7.2.2 期限与周期相同\r\n7.2.3 多处理器系统\r\n\r\n第8章 实时Java平台介绍\r\n\r\n8.1 实时Java简史\r\n8.2 规范的主要特征\r\n8.2.1 线程和调度\r\n8.2.2 垃圾收集\r\n8.2.3 异步事件处理器\r\n8.2.4 异步控制传递\r\n8.2.5 内存分配\r\n8.2.6 内存访问\r\n8.3 实现\r\n8.4 RW版的Hello World\r\n\r\n第9章 闭包\r\n\r\n9.1 语言结构\r\n9.2 Java闭包\r\n9.2.1 闭包结构\r\n9.2.2 RTSJ中的闭包\r\n9.3 闭包的局限性\r\n9.3.1 可读性\r\n9.3.2 局部变量\r\n9.3.3 构造器\r\n9.3.4 嵌套\r\n\r\n第10章 高解析度时间\r\n\r\n10.1 解析度\r\n10.2 “时钟”\r\n10.3 HighResolutionTime基类\r\n10.4 绝对时间\r\n10.5 相对时间\r\n10.6 有理时间\r\n\r\n第11章 异步事件\r\n\r\n11.1 将事体绑定到事件\r\n11.2 基本的异步事件操作\r\n11.3 没有事体的异步事件\r\n11.3.1 时间触发\r\n11.3.2 故障触发\r\n11.3.3 软件事件触发\r\n11.4 关于实现的讨论\r\n\r\n第12章 实时线程\r\n\r\n12.1 创建\r\n12.2 调度\r\n12.2.1 逆转处理\r\n12.2.2 固定优先级\r\n12.2.3 可行性\r\n12.3 无处理器的周期性线程\r\n12.4 有处理器的周期性线程\r\n12.5 与正常线程的交互\r\n12.6 更改调度器\r\n\r\n第13章 无堆内存\r\n\r\n13.1 无堆内存的优点\r\n13.2 分配制度\r\n13.3 规则\r\n13.4 不朽内存中的分配机制\r\n13.5 领域内存中的分配机制\r\n13.5.1 分配时间\r\n13.5.2 创建领域内存\r\n13.5.3 分配机制\r\n13.5.4 终结器\r\n13.6 使用嵌套的领域内存\r\n13.6.1 领域堆栈(树)\r\n13.6.2 DAG\r\n13.6.3 嵌套领域的实际应用\r\n13.6.4 每个嵌套领域都包含两个内存区域\r\n13.6.5 缺陷\r\n13.6.6 使用executeInArea\r\n13.6.7 使用标准类\r\n13.7 使用共享的领域内存\r\n13.7.1 领域堆栈被再次访问\r\n13.7.2 领域端埠\r\n13.8 难懂的条文\r\n13.9 例于\r\n\r\n第14章 无堆访问\r\n\r\n14.1 与调度器之间的交互\r\n14.2 规则\r\n14.3 范例\r\n14.4 最终评述\r\n\r\n第15章 其他异步事件\r\n\r\n15.1 异步事件和调度器\r\n15.2 createReeaseMeters方法\r\n15.3 被绑定的异步事件处理器\r\n15.4 异步事件处理器与无堆内存\r\n15.5 无堆事件处理器与无堆线程\r\n15.6 凋度\r\n15.7 异步事件处理器和线程\r\n15.8 特殊的异步事件\r\n\r\n第16章 复用不朽内存\r\n\r\n16.1 使用固定对象分配器\r\n16.1.1 载体对象\r\n16.1.2 限制\r\n16.2 回收RT线程\r\n16.3 回收异步事件处理器\r\n\r\n第17章 控制的异步传输\r\n\r\n17.1 上下文环境中的线程中断\r\n17.2 异步中断激发\r\n17.2.1 Timed类\r\n17.2.2 interrupt方法\r\n17.2.3 fire方法\r\n17.2.4 小结\r\n17.2.5 置换规则\r\n17.3 异步异常的传播规则\r\n17.3.1 不自觉的捕捉\r\n17.3.2 不匹配的doInterruptible\r\n17.3.3 匹配的doInterruptible\r\n17.3.4 内幕\r\n17.3.5 应用程序对异步中断的处理\r\n17.4 不可中断的代码\r\n17.5 旧式代码\r\n17.6 使用ATC来终止线程\r\n\r\n第18章 物理内存\r\n\r\n18.1 物理内存和虚拟内存\r\n18.2 物理内存管理器\r\n18.2.1 内存类型\r\n18.2.2 可移动的内存\r\n18.3 不朽物理内存\r\n18.4 领域物理内存\r\n\r\n第19章 原始内存访问\r\n\r\n19.1 安全性\r\n19.2 读写\r\n19.3 Get/Set方法\r\n19.4 映射\r\n19.5 RawMemoryFloatAccess类\r\n\r\n第20章 无锁同步\r\n\r\n20.1 免等待队列的原理\r\n20.1.1 构造器\r\n20.1.2 通用的方法\r\n20.2 免等待写队列\r\n20.2.1 方法\r\n20.2.2 共享免等待写队列\r\n20.3 免等待读队列\r\n20.3.1 附加的构造器\r\n20.3.2 方法\r\n20.4 免等待双端队列\r\n20.5 免等待队列与内存\r\n20.6 实现注意事项\r\n\r\n第21章 建议实践\r\n\r\n21.1 RTSJ中功能强大并且容易使用的功能特性\r\n21.1.1 实时线程\r\n21.1.2 周期性线程\r\n21.1.3 异步事件处理器\r\n21.1.4 高解析度时间\r\n21.1.5 事体\r\n21.2 RTSJ中功能很强但有危险性的功能特性\r\n21.2.1 简单\r\n21.2.2 易泄漏\r\n21.2.3 不干净\r\n21.3 RW中功能很强但须加倍小心的功能特性\r\n21.3.1 领域内存\r\n21.3.2 无堆异步事件处理器\r\n21.3.3 无堆实时线程\r\n21.3.4 异步中断式异常\r\n21.4 优先级的选择
本书分为二大部分。第1章到第7章讲述RTSJ的背景知识,剩下的部分是关于RTSJ的内容。如果你已经掌握了实时调度或者并不关心调度问题而想直接阅读代码,你可以从第8章开始往后阅读。尽管跳过前面7章是可以的,但我不推荐这样跳来跳去地阅读。几乎没有哪章可以自成一体。在读完本书后,你还可把它作为参考资料用,所以我建议你还是从头开始、按顺序地读一下本书。
本书可以与RTSJ规范、参考实现配合使用。你可以在www.phptr.com/dibble或者www.rtj.org上找到规范和参考实现。初始的RTSJ文档是Addison-Wesley Java丛书的一部分。不过,RTSJ的初始版本已经被最终版本——1.0版本所取代。目前最新的RW版本只能通过可下载的PDF和HTML格式得到。
参考实现是RTSJ for Linux的一个完整的、可用的实现。本书中提到的例子几乎都在参考实现上测试过。我曾在运行有Red Hat Linux和Timesys Linux的PC上使用过该参考实现,在X86 Linux的其他版本上也应该没有问题。不过参考实现依赖于底层的操作系统进行调度,所以你会发现类似于优先级逆转避免(Priority Inversion Avoidance)这样的功能特性会取决于你所使用的Linux版本。
参考实现的源代码是可以获取的。其中一些是从SunCVM派生而来,可以在Sun社区源码授权协议(Sun commnity sonrce license)下获得。参考实现中与 Sun的代码没有关系的那部分受开放源码协议(Open sonrce license)的约束比较小。
虽然参考实现用于实验相当不错,但由于它不是为商业使用而设计的,它没有在性能或内存使用方面加以注意,而这些或许正是你期望从商业产品中获得的。
在www.phptr.com/dibble上,你可以找到重要的Web站点的链接、本书的修正和补充、以及其他诸如源代码等有用的东西。