第一部分 实时计算概念第1章 实时系统概述 1
1.1 实时系统质量 1
1.2 可预见性和确定性 4
1.2.1 确定延迟 4
1.2.2 确定抖动 4
1.2.3 硬实时与软实时 6
1.2.4 等时实时 6
1.2.5 实时与实快 7
1.2.6 实时与吞吐量 7
1.2.7 任务完成价值 8
1.3 实时计算 9
1.3.1 高速公路类比 9
1.3.2 高速公路类比——添加优先车道 10
1.4 实时调度 11
1.4.1 调度约束 11
1.4.2 调度算法 14
1.4.3 实时操作系统 20
1.4.4 RT-POSIX操作系统扩展 21
1.5 参考资料 22
第2章 实时与Java SE 23
2.1 Java是实时语言吗 23
2.1.1 无界定延迟和抖动的来源 23
2.1.2 缺乏严格的线程优先级 24
2.2 垃圾回收 25
2.2.1 究竟什么是垃圾回收 25
2.2.2 常见的垃圾回收算法 26
2.3 Sun Java SE 6 HotSpot中的垃圾回收 30
2.3.1 Java对象世代 31
2.3.2 回收器 33
2.3.3 内存分配 37
2.3.4 安全点 39
2.3.5 未来:垃圾优先(G1) 39
2.4 实时垃圾回收算法 43
2.4.1 基于工作的垃圾回收 43
2.4.2 基于时间的垃圾回收 44
2.4.3 汉瑞克森的垃圾回收 45
2.4.4 Sun公司的Java实时系统中的RTGC 50
2.5 Java的困境 50
第3章 Java实时规范 51
3.1 实时Java基础 51
3.2 RTSJ内部机制 53
3.2.1 调度 54
3.2.2 内存管理 55
3.2.3 资源共享 57
3.2.4 异步事件处理(AEH) 58
3.2.5 控制的异步转移 59
3.2.6 物理内存访问 60
3.3 可选的RTSJ工具 61
3.4 实时Java的未来 61
第4章 Sun Java实时系统 63
4.1 Java RTS程序设计的前奏 63
4.1.1 操作系统支持 64
4.1.2 Solaris与实时 64
4.1.3 Linux与实时 66
4.2 安装Java RTS 67
4.2.1 Solaris上的安装 67
4.2.2 Linux上的安装 69
4.3 确定性指南 70
4.3.1 使用实时线程 70
4.3.2 调整实时垃圾回收器 73
4.3.3 关键预留内存 77
4.3.4 处理器绑定 79
4.3.5 编译Java RTS代码 81
4.3.6 解释RTGC统计 85
4.3.7 使用RTSJ的时钟API 87
4.4 命令行选项 87
4.4.1 RTGC相关选项 88
4.4.2 与内存相关的选项 89
4.4.3 线程相关的选项 90
4.4.4 异步相关选项 91
4.4.5 编译器和解释器选项 91
4.4.6 Java RTS优化选项 92
第二部分 高级Java RTS第5章 线程、调度与新内存模型 93
5.1 可调度对象 93
5.1.1 实时调度器 95
5.1.2 SchedulingParameters 95
5.1.3 发布参数 97
5.2 实时线程 103
5.2.1 使用RealtimeThread 104
5.2.2 使用NoHeapRealtimeThread 109
5.2.3 实现周期线程 117
5.2.4 错过最后期限处理程序 118
5.2.5 实现非周期性线程 120
5.3 内存模型 122
5.3.1 内存访问规则 126
5.3.2 作用域内存 127
5.3.3 物理内存 135
第6章 同步 136
6.1 资源共享 136
6.1.1 优先级倒置控制 137
6.1.2 行动中的优先级继承 139
6.2 非等待线程通信 140
6.2.1 使用WaitFreeWriteQueue 140
6.2.2 使用WaitFreeReadQueue 143
第7章 实时时钟API 150
7.1 Clock API 150
7.2 Java RTS高精度时间操作 151
7.3 叠加的股票数据提供的例子 154
第8章 异步事件 160
8.1 异步事件处理 160
8.2 创建一个异步事件处理程序 162
8.2.1 内部应用程序事件 163
8.2.2 约束异步事件处理程序 168
8.2.3 与事件触发计数一起工作 168
8.2.4 处理POSIX事件 171
8.2.5 指定内存区域 172
8.3 基于时间的事件 176
8.3.1 一次性定时器 176
8.3.2 周期定时器 178
第9章 异步控制转移和线程终止 183
9.1 异步控制转移 183
9.1.1 实现可中断代码 184
9.1.2 实现Timed操作 190
9.2 异步线程终止 193
第10章 实时垃圾回收器内部机制 196
10.1 RTGC操作理论 196
10.1.1 并发标记 197
10.1.2 并发清扫 203
10.1.3 并发清零 205
10.2 RTGC内存分配 205
10.2.1 堆布局 206
10.2.2 线程局部分配缓冲器 206
10.2.3 对象分裂 207
10.2.4 数组分裂和缓存 207
10.3 RTGC策略 208
10.3.1 全时RTGC策略 208
10.3.2 隔离的RTGC策略 209
10.3.3 基于时间的RTGC策略 209
10.3.4 孤立的RTGC策略 213
第三部分 使用Java RTS第11章 证券交易系统 215
11.1 股票市场 215
11.1.1 限价订单 215
11.1.2 止损订单 216
11.2 交易系统实现 216
11.2.1 系统架构 216
11.2.2 交易引擎 217
11.3 Java SE版本 218
11.3.1 MarketManager类 220
11.3.2 OrderManager类 221
11.4 Java RTS版本 227
11.5 Java RTS没有堆的版本 229
11.5.1 OrderManager类 232
11.5.2 MarketManager类 236
11.6 应用程序配置 237
第12章 Java RTS工具 238
12.1 Java RTS开发 238
12.1.1 使用NetBeans插件进行远程调试 238
12.1.2 替代的开发环境 239
12.2 线程调度展示台(TSV) 243
12.2.1 TSV日志文件格式 243
12.2.2 使用TSV日志文件 246
12.2.3 记录应用程序的事件 248
12.2.4 用TSV查看器工作 251
12.3 Java RTS DTrace探针 257
12.3.1 用于Schedulable的DTrace探针 259
12.3.2 用于内存的DTrace探针 260
12.3.3 用于线程的DTrace探针 261
12.3.4 用于AsyncEventHandlers的DTrace探针 262
12.3.5 用于编译的DTrace探针 264
12.3.6 用于RTGC的DTrace探针 265
12.3.7 用于类加载的DTrace探针 266
12.3.8 用于VM活动的DTrace探针 268
12.3.9 特定应用程序的DTrace探针 268
参考文献 269