实时Java,第1部分: 使用Java语言编写实时系统 - 编程入门网
,可以像其他任何进程一样被抢占和优先化,因此延迟变得更短并且更具确定性。
高分辨率计时器 高分辨率时钟和计时器提供了更高的分辨率和准确性。RT Java 将这些特性用于高分辨率休眠和定时等待。Linux 高分辨率计时器是使用高精度、64 位数据类型实现的。与传统 Linux 不同(其时钟和计时器依赖于低分辨率的系统滴答,限制了计时器事件的粒度),RT Linux 使用独立的可编程的高分辨率计时器事件,可以实现每微秒以内的计时。 优先级继承 优先级继承技术可以避免常见的优先级反转问题。图 2 最上面的图表解释了一个最简单的优先级反转示例,它涉及三个线程:一个高级(H)、一个中级(M)和一个低级(L)优先级线程。设想 H 和 M 最初等待事件被触发而处于休眠状态,而 L 处于活动状态并持有一个锁。如果 H 被唤醒去处理事件,它将抢占 L 并开始执行。在这里考虑一下如果 H 在 L 持有的锁处出现阻塞会发生什么情况。由于只有 L 释放了锁后 H 才能进行处理,H 被阻塞,而 L 再次开始执行。如果此时 M 被事件触发,M 将抢占 L 并且执行时间取决于其需要。这种情况就被称为优先级反转,因为 M 在 H 之前执行,即使 H 比 M 的优先级高。 图 2. 优先级反转和优先级继承示例 RT Linux 通过使用名为优先级继承(也称作优先级借出(priority lending))的策略防止发生优先级反转,图 2 底部的图表做了解释。当 H 在 L 持有的锁处阻塞时,H 将其优先级交给 L,这将保证在 L 释放 H 需要的锁之前,比 H 优先级低的任务都不能抢占 L。当 L 释放锁后,L 的优先级恢复到最初的值,这样 H 就可以进行处理而不需要等待 L 完成。应用程序设计者应该尽量避免发生高优先级线程所需的资源被低优先级线程占有的情况,但是优先级继承机制增强了健壮性,从而防止了优先级反转的发生。 实时Java,第1部分: 使用Java语言编写实时系统(4)时间:2011-06-22 Mark Stoodley Mike健壮的互斥锁和 rt-mutexes 快速用户空间互斥(也被称为 futexes)支持 Linux pthread 互斥锁。Futexes 对获得非竞争锁的时间进行了优化,而不用依赖内核;只有对竞争的锁才需要内核干涉。健壮的互斥锁解决了在持有锁的应用程序崩溃后正确清理锁的问题。同样,rt-mutexes 对优先级继承协议扩展了健壮的互斥锁,后者允许 RT JVM 通过 pthread 库依赖优先级继承行为。 确定性垃圾收集 假设一个 RT 操作系统(比如 RT Linux)为 RT 行为提供了基础,那么可以构建 JVM 的其他主要部分来呈现 RT 行为。GC 是 JVM 中造成不确定性行为主要原因之一,但是这种不确定性可以通过谨慎地设计和使用 RT Linux 的特性而减轻。 GC 暂停的不确定性影响将严重破坏 RT 应用程序在特定时限内完成任务的能力(请参见 垃圾收集)。多数 GC 实现将妨碍 RT 应用程序实现其延迟目标,只有同步需求宽松的大型任务才承受得起 GC 技术引起的延迟。RTSJ 对这一问题的解决方案就是引入由编程人员管理的内存分配,方法是使用不朽和作用域内存区域以及 NHRT,但是这个解决方案对于 Java 应用程序设计者来说开始成为巨大的负担。 WebSphere Real Time 使编程人员依赖于 RTSJ 内存区域(如果他们愿意的话),但是推荐您只对延迟需求极度严格的任务使用这种方法。对于允许 GC 暂停时间为 1 毫秒级的任务,IBM 创建了确定性 GC 技术,该技术可以使编程人员从轻松地编写自动内存管理和 具有可预测性能的管理任务中获益。 IBM 的确定性 GC 技术基于两个简单的前提: 没有一个 GC 暂停超出了最大上限。 GC 消耗的时间要不多于给定时限,方法是控制该时限内暂停的次数。 牢记这两个前提并用之管理 GC 行为将显著增加应用程序实现其 RT 目标的可能性。 Metronome GC WebSphere Real Time 使用 Metronom |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |