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