# Java de Temps Real

Java de Temps Real, en sigles RTSJ, és un comú denominador d'una combinació de tecnologies per permetre escriure programes que compleixin els requeriments dels Sistemes de Temps Real en el llenguatge de programació Java.
La plataforma Java habitual, mostra una sèrie de mancances que la fan inadequada per al temps real:
Per superar aquestes dificultats, la Comunitat Java va introduir una especificació de Java de Temps Real anomenada "Real-Time Specification for Java" com a requeriment JSR001.
Aquesta especificació ha donat lloc a un cert nombre d'implementacions, incloent la implementació de referència de TimeSys, "WebSphere Real Time" d'IBM, "Java SE Real-Time Systems" de Sun, i PERC de Aonix.
La RTSJ adreça els temes crítics obligant una especificació mínima per al model de fils d'execució (threads) i altres models endollables a la Màquina Virtual Java i proporcionant, a més a més, àrees de memòria no subjectes al recol·lector de brossa a més de fils d'execució als quals el recol·lector de brossa no pugui arrabassar la CPU.

## Terminologia
### memòria Heap

    munt de memòria habitual de la Plataforma Java-no-de-temps-real, netejada per un recol·lector de memòria brossa que, excepte versions especials, és no acotat en el temps de servei.

### memòria Immortal

    munt de memòria per a objectes quina vida és la de tota l'aplicació. No li cal recol·lector. No pot contenir referències a objectes de memòries d'àmbit (pel temps de vida inferior fora del qual la ref. seria il·legal).

### memòria d'Àmbit (Scoped memory)

    munt de memòria dinàmica d'àmbit d'un procediment/rutina. Diferents fils d'execució poden utilitzar la mateixa simultàniament. En entrar-hi un fil d'execució, passa a ser el seu munt d'allotjament actual. S'allibera automàticament quan totes les instàncies d'execució que la travessen han finalitzat, mitjançant un comptador de referències. El recol·lector no la gestiona. Un fil d'execució pot entrar successivament en diverses mem. d'àmbit establint una pila d'allotjaments.
    Un objecte no pot contenir referències a un altre que tingui la vida més curta, per tant una mem. d'àmbit només pot tenir punters a altres memòries més antigues i dins d'ella mateixa.

### Portal

    objecte principal d'una memòria d'àmbit que hom pot establir (setPortal/getPortal) com a punt d'entrada a les estructures, per facilitar la intercomunicació (IPC) entre possibles múltiples fils d'execució que entrin a la mateixa memòria d'àmbit.

### AbsoluteTime (origen a l'Època Unix), RelativeTime (interval)

    Temps (classes derivades de HighResolutionTime) mesurat en parells (long mil·lisegons, int nanosegons)

### RealTimeThread

    fil d'execució per a tasques de "temps real tou". Se li poden associar paràmetres ..
   * de planificació (ang:scheduling): prioritat, importància
   * de llançament (Release): cost (en temps previst), temps límit (deadline), .. i rutines gestores (AsyncEventHandlers) pel cas de sobrepassar-los (overrunHandler per al sobrecost, missHandler per al temps límit excedit)
   * de memòria: topalls en l'allotjament

### NoHeapRealTimeThread

    fil d'execució per a tasques de "temps real dur" que s'executa amb major prioritat que el recol·lector de brossa del munt tradicional (Heap). Només pot accedir a la memòria Immortal i a les d'Àmbit.

### AsyncEvent, AsyncEventHandlers

    Un AsyncEvent és un objecte associable a un esdeveniment (per ex. senyal POSIX) al qual es poden assignar diversos objectes de codi AsyncEventHandlers amb possible restricció de llançament: Esporàdic, amb temps mínim entre llançaments (interarrival), Periòdic (inici, període) o Aperiòdic, i possible restricció de cost (temps previst) o de temps límit en tots els casos.

### Codi interrompible per un AsyncEvent

    per què un mètode d'una classe pugui ésser interromput (en un sector no subjecte a zona d'exclusió mútua "synchronized") cal especificar en la declaració que llança l'excepció (throws) AsynchronouslyInterruptedException. Alguns mètodes interrompibles de RTSJ són HighResolutionTime.waitForObject, Object.wait, Thread.sleep, RealtimeThread.sleep, Thread.join, ScopedMemory.join, ...

### Factibilitat (feasibility)

    analitzador en línia que les restriccions de temps (cost de temps previst, temps límit deadline, ..) es puguin complir abans d'acceptar un nou element RealTimeThread o AsyncEventHandler al planificador (Scheduler): (mètodes de Schedulable) addIfFeasible, setIfFeasible(params)

### Cues no blocants

    Vegeu
   * WaitFreeReadQueue: Cua no blocant per al consumidor, generalment un fil NoHeapRealTimeThread
   * WaitFreeWriteQueue: Cua no blocant per al productor, generalment un fil NoHeapRealTimeThread
   * WaitFreeDequeue: Cua no blocant de dos caps, per ambdós, el productor i el consumidor

### Asincronia

    Definicions i semàntica de l'Asynchronous Transfer of Control

## Normes JSR

* JSR-1 (anglès) Real Time Specification for Java
* JSR-282 (anglès) RTSJ Versió 1.1
* JSR-302 (anglès) Safety-critical Java Technology

## Referències

* ↑ Requeriment d'especificació Java per una Especificació de Temps Real per a Java
* ↑ «TimeSys - Implementació de referència de RTSJ». Arxivat de l'original el 2006-03-15. [Consulta: 8 juliol 2009].
* 1 2 Asincronicitat en RTSJ (anglès)
* ↑ Extensions RTSJ: L'Analitzador de Factibilitat (anglès)
* ↑ RTSJ - Sincronització i cues
* ↑ Asynchrony - Definicions, semàntica, transferència de control asíncrona

## Vegeu també

* El perfil Ravenscar
* Javolution

## Enllaços externs

* RTSJ.org Especificació de l'estàndard. (anglès)
* UPC-FIB - Java per a Temps Real