实时Java简介

    • 实时Java规范的发展历程:

    早在1997年,就有人曾想过用Java语言来编写实时应用程序,虽然当时看来是不可能的,因为实时程序对执行的时间性上有很严格的要求,而当时的Java并不能做到这一点。但是,情况总在发生变化,到1998年,已经有三个小组在进行实时Java的研究,来自NewMonics公司的KelvinNilsen和国家标准与技术学院(National In statute for Standards and Technology)Lisa Carnahan领导着一个小组,而IBM公司的Gred Bollella也领导着一个小组在进行Java和实时系统的研究,在Sun公司内部还有一个实时Java平台的研究项目。到了1998年夏天,这三个小组合并在一起共同工作,其中一个非常重要的原因就是Sun公司的lava CommunityProcess的出台。任何人只要觉得Java平台需要在某一方面进行补充或发展,就可以通过JCP (Java Community Process)提出JSR (Java Specification Request)。一旦该请求被接受,就通过一个call for experts过程向业界召集专家,从中选取专家组组长并由他来组织专家队伍。而专家队伍的最终工作目标是制订规范、进行参考实现和制订测试集。

    1998年,IBM公司向Sun公司提出了一个JSR,即,The Real-Time Specification for JavaSun公司接受了该提案并把之列为JSR的第一号JSR-000001IBM公司的Gred Bollella被选为组长并负责成立专家组。专家组包括两个层次,由八位专家组成的基础组主要负责规范的起草,而由十二位专家组成的顾问组主要负责对草案的初次审阅:专家组的组成是非常均衡的,既有实时系统的专家,又有Java的专家,有些还是两方面的专家。第一次专家组全体会于19993月召开,此后基础组每月至少召开一次会议,而基础组和顾问组的全体会则每月不多于一次。到19999月,规范的草案公开由JCP (Java Community Process)的正式成员进行评阅,而任何对此感兴趣的人就可以从网站上下载该规范草案进行非正式的评阅。从199912月到2000214日,修订稿在网站上进行公开评阅,而后根据反馈回来的情况修订成目前这个版本。

    RTSJ 1.0的发展历程如下:

JSR-000001

Stage

Start

Finish

Final Release 3

12 Jul, 2006

 

Final Release 2

09 May, 2006

 

Maintenance Draft Review 4

10 Apr, 2006

15 May, 2006

Maintenance Draft Review 3

01 Dec, 2005

09 Jan, 2006

Maintenance Draft Review 2

31 Mar, 2005

02 May, 2005

Maintenance Draft Review

24 Jun, 2004

09 Aug, 2004

Final Release

07 Jan, 2002

 

Final Approval Ballot

30 Oct, 2001

12 Nov, 2001

First Release 2

01 Jun, 2000

 

First Release

03 May, 2000

 

Public Review

14 Jan, 2000

14 Feb, 2000

Participant Review

28 Sep, 1999

28 Oct, 1999

CAFE

16 Dec, 1998

22 Jan, 1999

JSR Approval

15 Dec, 1998

16 Dec, 1998

From:http://jcp.org/en/jsr/detail?id=1

RTSJ 1.1版本的发展历程如下:

JSR-282

Stage

Start

Finish

Early Draft Review

02 Mar, 2009

01 May, 2009

Expert Group Formation

13 Sep, 2005

25 Jan, 2008

JSR Review Ballot

30 Aug, 2005

12 Sep, 2005

From:http://jcp.org/en/jsr/detail?id=282

 

实时Java的语义扩展:

实时Java在八个方面扩展了Java语言的语义:

Ø  调度

实时程序要确保机器指令执行的时间或者说是可预见的执行顺序,通常情况下是用线程、任务、模块等概念来描述这个执行过程。在实时Java规范中则使用schedulable object这个概念,任何实现了接口Schedulable的类的实例都是一个schedulable object,而该对象的调度和分配将由持有该对象的引用的Scheduler实例来进行管理。实时Java规范规定了三种可产生schedulable object的类:Realtimehread, NoHeapRealtimeThreadAsyncEventHandlera

名词"Scheduling"(或者Scheduling Algorithm)表示产生一组线程的执行顺序,这种“调度”力求去优化某一特定的尺度〔这种尺度衡量了系统是如何达到当时所限制的要求的),而“可行性分析”将决定对于某一特定尺度来说该调度是否可以接受。例如,在严格的实时系统中的典型尺度是“错过期限的次数”,而且这个尺度所能够接受的值是零:而在不太严格的实时系统中将使用其它的尺度(例如平均延级时间),而且在实际使用中将接受不同的值。

许多系统采用线程优先级的方式来进行调度,优先级是与线程相关的一个整数,它实际上是规定了执行的合理性。名词“dispatching"表示从预备要运行的线程池中挑选最能体现执行合理性的线程来执行的过程.在现今的实时系统中,优先级的分配是由程序员来控制的,而不是由系统来控制的。在实时Java规范中,优先级也是交由程序员来控制的,但是荃本的调度器将依据超类中的方法来判断可行性。可行性算法假定等级单调的优先级分配算法已被用以分配优先级。实时Java规范并不要求对所有的实现来检查该优先级分配算法是否正确,当然,如果优先级分配是错误的则可行性分析将是毫无意义的。

实时Java规范需要许多命名规则为<String>Parameters的类(例如Scheduling Parameters)这些参数类的实例对象为若千可调度对象保存了某一特定资源所需要的特性。例如,Scheduling Parameters的子类PriorityParameter保存了基础调度器的执行合理的尺度,如优先级。在某些时刻(如线程创建或复位的时刻),参数类后续的实例对象将关联到某一可调度对象上,该可调度对象将采用参数对象中的值,例如,PriorityParameter实例对象中的优先级域的值代表了最高优先级,而且该实例对象与某一可调度对象相关联,则该实例对象在准备好运行的情况下将先于其他可调度对象运行。(当然,其他可调度对象也是最高优先级时除外)

实时 Java规范在制订的过程中也允许实现人员有一定的灵活性来实现仲裁调度算法和可行性分析算法,原因在于专家组认识到实时系统工业界对于调度有着极为不同要求。用Java编写程序的目的是“一次编写,到处运行”,但是上述灵活性却与该目的相违背。实时Java规范为了让Java虚拟机能够支持程序的可预见执行,规定了特殊的调度算法和做了语义上的改变.而且在不同的实现过程中都必须有该调度算法和语义改变。要求的缺省的调度算法是固定优先级的抢先式算法,而且至少存在28级优先级,并由Scheduler的子类PriorityScheduler来表示。

 

Ø  内存管理

用垃圾回收算法来进行内存回收是实时编程的一个障碍,原因在于垃圾回收器会产生不可预知的延迟。为解决这个问题,实时Java规范提供了几种扩展的内存模式,以一种不干扰实时代码提供确定行为的方式来进行内存管理,允许在垃圾回收堆之外为长期或短期对象分配空间。

内存区域代表了可以用来分配给对象的内存空间。某些内存空间是存在于堆之外,并且限制了系统和垃圾回收器对该区域对象的操作;某些内存区域的对象是永远不能被垃圾回收器回收的,但是必须允许垃圾回收器能够扫描这些内存空间以弄清堆中对象的引用以保持堆的完整性。总共有四种基本类型的内存区域:

1.范围内存(Scoped Memory):提供了处理有生存周期对象的机制,该生存周期是由语法范围定义的 (如堆中对象的生命周期)

2.物理内存(Physical Memory):指定的有特殊重要特性的物理内存区域,可在其中创建对象,例如在可以快速访问的内存区域。

3.长久内存(Immortal Memory):该内存区域所包含的对象将一直存在到应用程序结束,因此成为长久内存。

4.堆内存(Heap Memory):实时Java规范并不改变堆内存中的对象的生存周期,而由可见性来决定生存周期。

 

Ø  同步

在实时Java规范中,存在着两种新的线程类型:RealtimeTheradNoHeapRealtimeThread.但是.当一个NoHeapRealtimeThread和一个普通线程对同一个对象进行同步时,会产生新的问题。作为实时Java规范的基本原则之一,NoHeapRealtimeThread的优先级要比垃圾回收器的优先级要高;而普通Java线程的优先级是不会比垃圾回收器的优先级要高的.在这种情况下,现有的一些预防优先级倒置的算法,如优先级继承协议和优先级最高竟争协议都不不适用。实时Java规范提供了三个无须等持的队列类,这些类为普通的线程和NoHeapRealtimeThread提供了可以同时访问的受保护的、无阻塞的、可共享访问的对象,促进普通线程和NoHeapRealtimeThread之间的通信。。

 

Ø  异步事件处理

与异步事件处理相关的有两个类:AsyncEventAsyncEventl-Iandler,A syncEvent对象代表了可能发生的事情,例如POSIX信号、硬中断或者是计算事件。当这些事件发生时,与之相关联的AsynrEvendlandler实例将调用handleAsyncEvento方法来处理事件。

AsyncEvent实例管理两件事:其一是在事件发生时激发处理程序;其二是管理与该事件相关联的处理程序集,并且可以对该处理程序集进行查询、增加、删除。

AsyncEventHandler实例类似线程,实际上它是一个Rumtable对象。AsyncEventHandler与简单的Runnable的区别在于AsyneEventHandler有与之相关联的ReleaseParameters,SchedulingParametetsMemoryParameters来控制处理程序的实际执行过程。事件发生时,处理程序的执行是异步的,而调度的依据是与此相关联的ReleaseParametersSchedulingParameters对象,看起来象是处理程序被分配到自身的线程上。在有许多AsyncEventAsyncEventHandler实例的情况下,系统应能够正常应付,但是进程中的处理程序最好是越少越好。

 

Ø  异步传输控制

许多时候实时程序的编写人员将面临着同一算法的计算代价却极为不同的情况,算法是可重复的,而且每次重复都会产生精确的结果。如果系统在开始计算之前能够估计计算所要花费的时间范围,就可以在预知的时间范围内进行从计算到结果的传输代码之间的异步传输控制。实时Java规范支待的就是这种方便的编程风格。

 

Ø  异步线程终止

实时Java规范通过异步事件处理和异步传输控制机制的结合提供了安全的异步线程终止功能。如果线程中的重要的长的方法和模块化的方法是可中断的,则启示程序将由许多异步事件处理程序构戊,而且这些处理程序是与外部事件相关联的。当外部事件发生时,处理程序将对适当的线程调用interrupt()方法,而这些线程将被清除。

 

Ø  物理内存访问

实时Java规范为编程人员定义了可以从代码中直接访问物理内存的类. RawMemoryAccess给编程人员提供方法来构造表示某一物理地址的对象,并且可以byte, short, int, long, float, double等方式来访问物理内存。类ScopedPhysicalMemoryImmortalPhysicalMemory让编程人员创建物理内存对象,该内存对象可以保存普通的Java对象。而PhysicaIMemoryFactory在实时Java氖范中是一定要实现的。

 

Ø  例外

实时Java规范提供了几种新的例外,主要是针对异步传输控制和内存分配的例外,包括:

Asynchronously Interrupted Exception: 线程被异步中断时产生该例外。

Memory Access Error. 线程访问不在区域中的内存时,有虚拟机产生该例外。

Throw Boundary Error.例外传递到不许访问的内存时产生该例外。

Memory Scope Exception对象传递到wait-free队列、但与队列不匹配时产生该例外。

OffsetOutOfBoundsExceptio二由物理内存类在所给的下标越界时产生该例外。

SizeOutOfBoundsException 由物理内存类在所给的大小越界时产生该例外。

Unsupported Physical Memory Exception 由物理内存类在所请求的物理内存并不受支持。

Illegal Assignment Error: 进行非法的分配时产生该例外。

ResourceLimitErrol: 在企图超过系统的资源限制时产生该例外,例如超过系统的最大Lock数。

 

实时Java虚拟机

目前实现的实时Java虚拟机主要有八个,如表1所示。

表格  实时Java虚拟机产品

公司

产品名称

IBM

 IBM WebSphere Real Time

SUN

Java RTS

Aphelion

Aphelion JREs

TimeSys

TimeSys RTSJ Reference Implementation

Research project

OVM

Aicas

JamaicaVM

DDC-I

Scorpion

Aonix

PERC

 

  • IBM WebSphere Real Time

    要实现 RTSJ 需要来自底层操作系统及 JRE 组件的广泛支持。在 2006 年 8 月发布的 IBM® WebSphere® Real Time与 RTSJ 全面兼容,并且包含了一些新技术,旨在改进 RT 系统的运行时行为并减少应用程序设计者创建 RT 系统时必须的工作量。WebSphere Real Time 的基础是 IBM 的跨平台 J9 技术。Linux 操作系统应用了开源的 RT 补丁,提供了基本的 RT 服务以支持 RT 行为,特别是支持 RTSJ 规范要求的行为。得到极大加强的 GC 技术支持 1 毫秒的暂停时间。JIT 编译可用于软 RT 场景,其中编译将在不需要执行高优先级任务时发生。同样还引入了新的 Ahead-of-time (AOT) 编译技术,为不适合使用 JIT 编译的系统提供了硬 RT 性能。

软件环境:

Red Hat Enterprise Linux ES, Version 4 with Update 2, 32-bit x86 with Open Source Real Time Linux extensions. The Real Time Linux Extensions are available from IBM and via open source download.

Note: Technical Support for Real Time Extensions is required and available via separate service contract from IBM.

硬件环境:

IBM IntelliStation® A Pro: 6217-28u, 6217-LHU, 6217-84U, 6217-PGU, 6217-87U

IBM e326m: 7969-65U, 7969-85U, 7984-52U, 7984-6AU

IBM LS20 blades: 8850-76U, 8850-55U, 7971, 7972

  • Java RTS (Sun Java Real-Time System)

这是一个Java实时系统规范(JSR-001)的商业实现,Java RTS实时系统提供了一个强壮的实时时序调度系统,提供调度线程,锁队列,初始化类,控制垃圾回收等强大控制能力。NetBeans也增加了RTS的支持。

实现规范版本Java (RTSJ) version 1.0.2。

Java Platform, Standard Edition version 5 (update 16)

Solaris 10, SUSE Linux Enterprise Real-Time 10 (SP2), Red Hat Enterprise MRG 1.0.1 Errata

  • Aphelion JREs

Aphelion JREs是在嵌入式系统上使用的高级中间件,它增强了Java应用程序的JAR文件的字节码的执行可靠性和执行效率。它实现了RTSJ规范,提供了实时功能。

源主机:

Windows/x86 and Linux/x86 (any desktop or enterprise Linux).

目标主机系统:

'Embedded' Linuxes based on recent Linux kernels (2.4.x and higher) from commercial providers (MontaVista Linux, Wind River's Commercial Grade Linux, LynuxWorks' BlueCat Linux, TimeSys Linux, etc.) and 'open source' providers (Debian Linux, Deng Linux, OpenWRT, etc.), as well as 'in-house created' Linuxes of Apogee's customers.

Enterprise Linuxes (RedHat Linux, RedHat MRG Linux, SUSE Linux, etc.).

Windows Mobile, Windows CE, VxWorks, LynxOS, QNX Neutrino, Integrity, and BSD UNIX.

目标处理机:

x86, PowerPC, ARM, XScale, MIPS, or SH4 processors running any Linux.

x86, ARM, or XScale processors running Windows Mobile or Windows CE.

x86, PowerPC, ARM, XScale, or MIPS processors running VxWorks.

x86, PowerPC, or MIPS processors running LynxOS, Neutrino, Integrity, or BSD UNIX.

  • TimeSys RTSJ Reference Implementation

这个是RTSG官方指定的参考实现.

产品的官方网站居然没有确切介绍,只说了是X86/Linux。通过查其他网站得知如果要使用refimp全部功能,需要使用TimeSys公司的Realtime Linux:TimeSys Linux.但他也能在通用的Linux上运行,但需要损失一些特性。例如优先级抢占继承机制。

  • OVM

Ovm是用来在虚拟机上使用面向对象程序语言进行开发的一种通用框架。Ovm已经被用来实现了实时Java虚拟机。Ovm框架结构是开源的。

Linux/x86, Linux/ppc, and OS X/ppc

  • JamaicaVM

JamaicaVM是德国Aicas公司开发的世界领先的实时Java产品虚拟机、面向对象的软件开发环境和分析工具产品。这个产品不仅可以提高我们的开发效率、改进应用的可靠性、提供安全可靠的操作,而且可以简化代码的重用和封装。JamaicaVM是针对关键应用的理想解决方案。产品还提供了专门的Eclipse开发插件。

HostsLinuxSolarisWindows

Target OSIntegrityITRONLinuxLinux/RTMacOSNetOSOS-9PikeOSQNXRTEMSSolarisThreadXucLinuxVxWorksWindowsCE

Target CPUARMBlackfinColdfireERC32Net+ARMNIOS IIMIPSPowerPCSH3SH4SparcXScalex86

  • Scorpion

DDC-I的Scorpion是一个为嵌入式RTSJ和混合语言开发的Eclipse基础工具盒。Scorpion虚拟机在工业中通过一个独一无二的垃圾收集技术提供了最大的性能。先进的混合语言技术使现存的程序能够简单、准确的与Java集成到一块儿,允许重用其他的语言写得代码,例如Ada, C或者Embedded C++。

VxWorks 6.3, 6.4 PowerPC or Pentium or VxSim Others Available Upon Request

  • PERC

该产品是由Aonix公司开发的。

支持RTOS

INTEGRITYLinux (BlueCat, Mobilinux,Red Hat, RedHawk, and many others)LynxOSLynxOS-178LynxOS-SENeutrinoOSEPikeOSVxWorksWindows NTWinCE等等

支持体系结构:

PowerPCIntel x86XscaleARMMIPSColdfire

支持主机:

Windows、Linux、Solaris

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值