Cenni di Real-Time JAVA
E.Mumolo, DEEI
[email protected]
Real Time Specifications for Java (RTSJ)






RTSJ: specifiche ottenute dalle prime specifiche lanciate nella
comunità Java, JSR-1 (Inverno 1998)
Approvate nel Gennaio 2002. Prima implementazione commerciale:
estate 2003
Seconda versione di RTSJ: Giugno 2005
Versione IBM: estate 2006
Caratteristiche generali:
 applicazioni hard e soft real-time
 Schedulazione real time
 Task periodici e sporadici, gestione delle deadlines, possibilità
data ai task di ridurre il ritardo nella garbage collection
La Java Community Process JCP ha accettato una Java
Specification Requests (JSR) per RTSJ: lista di miglioramenti e
modifche di RTSJ
Real Time Specifications for Java (RTSJ)



Package javax.realtime scaricabile da
www.timesys.com, (gratuito per l'utilizzo con scopi
non commerciali).
Home page: http://www.rtsj.org/
Le specifiche dettagliano le richieste in 7 aree







scheduling,
memory management,
synchronization,
asynchronous event handling,
asynchronous transfer of control,
asynchronous thread termination,
physical memory access
Real Time Specifications for Java (RTSJ)
Scheduling

Funzioni:





schedulare secondo la priorità,
Aumentare il numero dei livelli di priorità a 28.
rendere schedulabili non solo i thread ma tutti gli oggetti
che implementano l’interfaccia Schedulable e che
diventano “schedulable object”
Gli oggetti schedulabili, secondo le specifiche, sono di tre
tipi: RealtimeThread, NoHeapRealtimeThread,
AsyncEventHandler
Ogni schedulable object ha bisogno di tre parametri
fondamentali per la sua schedulazione:



release parameter: condizioni di inizio esecuzione
memory parameter: tipo di memoria
scheduling parameter: come ordinare i processi in coda
Real Time Specifications for Java (RTSJ)
Scheduling

Release parameter. Parametri:







thread periodico
aperiodico
Costo computazionale
Deadline
handler che gestirà i casi in cui le deadline o i costi siano
superati.
memory parameter: il tipo e quantità di memoria
scheduling parameter :

Attualmente si consente solo l'assegnazione di 28 livelli
diversi di priorità per gli oggetti schedulabili.
Real Time Specifications for Java (RTSJ)
Scheduling
Real Time Specifications for Java (RTSJ)
Memory management
Classe ScopedMemory: sottoclassi: VTMemory (allocazioni fornite in un tempo
variabile) e LTMemory (allocazioni fornite in un tempo lineare proporzionale alla
grandezza dell'oggetto)
Real Time Specifications for Java (RTSJ)
Memory management

RTSJ introduce due nuove aree di memoria nelle quali il Garbage
Collector agisce in modo predicibile

immortal memory: condivisa tra i thread di un'applicazione. Rilascio solo
al termine.
ImmortalMemory.instance().enter(new Runnable()
{
public void run() { // ogni allocazione di memoria eseguita qua dentro // avverrà nella Immortal memory
}
};

Scoped memory. Definisce limiti di vita di un oggetto; numero dei
riferimenti a quell'area. Se == 0 la memoria viene rilasciata (metodi
finalize() di quegli oggetti)
public void run() {
LTMemory myMem = new LTMemory(1000, 5000);
// LTMemory (initialSize, maxSize in byte)
myMem.enter(new Runnable()
{
public void run() { //all'interno di una Scoped Memory prima istanziata!
}
}
};
Real Time Specifications for Java (RTSJ)
Orologi e tempo

RTSJ introduce un




realtime clock monotonico (classe Clock , metodo getRealtimeClock() ),
Una classe astratta, HighResolutionTime, in grado di salvare e fare operazioni
su tempi con risoluzioni fino al nanosecondo.
Classi derivate: AbsoluteTime e RelativeTime (intervallo temporale).
Esempio di misura di intervallo temporale
{
AbsoluteTime oldTime, newTime;
RelativeTime interval;
Clock myclock = Clock.getRealtimeClock();
oldTime = myclock.getTime();
// other computations
newTime = myclock.getTime();
interval = newTime.subtract(oldTime);
}
Real Time Specifications for Java (RTSJ)
Eventi asincroni e loro handler

Classi eventi: gestiti nel metodo fire()


AsyncEvent : rappresenta segnali, interrupt,
eventi, Metodo handleAsyncEvent()
AsyncEventHandler: oggetti molto simili ai thread.
E’ uno schedulable object



Ogni evento è gestito da un handler diverso
Un handler può anche gestire più eventi
Particolare tipo di AsyncEvent: timer. Lancia un evento
(metodo fire()) a tempi stabiliti


OneShotTimer
PeriodicTimer
Real Time Specifications for Java (RTSJ)
Eventi asincroni e loro handler
Real Time Specifications for Java (RTSJ)
Real Time Thread
Real Time Specifications for Java (RTSJ)
Real Time Thread

Due nuovi thread:






RealtimeThread estende la classe java.lang.Thread. E’ un oggetto
schedulabile
NoHeapRealtimeThread estende RealtimeThread. Non può allocare o
anche solo creare riferimenti nello heap (GC)
In caso di sforamento di una deadline, viene chiamato il deadline
miss handler specificato.
Metodo waitForNextPeriod() di RealtimeThread: utilizzabile solo con
i thread periodici. Mette in wait il thread fino al prossimo periodo
Gestione sovraccarichi: handler per gestire un overrun rispetto al
costo computazionale prefissato.
Sincronizzazione e condivisione risorse

Algoritmi introdotti: simple priority inheritance e priority ceiling emulation
inheritance