Laura Gualdo Sabaté Núria Lleal Serra Jose Luis Montes Martínez Java per a Temps Real Laura Gualdo Sabaté Núria Lleal Serra Jose Luis Montes Martínez
Índex Introducció Propostes i requisits Millores en Real Time Java Planificació. Gestió de la memòria. Mecanismes de sincronització. ATC (Transferència Asíncrona de control). Finalització de tasques. Accés a memòria física. Gestió del temps Bibliografia
Introducció Què és un Sistema en Temps Real? Es un sistema informàtic que compleix dues propietats: Interacciona repetidament amb el seu entorn físic. Respon a peticions que rep de l’entorn físic dins d’uns marge de temps determinats. Què ha de garantir un Sistema en Temps Real? Per a que el funcionament del sistema sigui correcte, a més de que les seves accions siguin les esperades, és a dir, correctes, un Sistema en Temps Real ha de garantir que aquestes accions s’executen en un interval de temps determinat.
Introducció (II) Avantatges d’utilitzar Java La seva facilitat d’aprenentatge i usabilitat. (Simplicitat) Al ser un llenguatge O.O augmenta la productivitat. (Productivitat) Es un llenguatge molt tipificat, no ens hem de preocupar de la memòria, i molts errors que es detecten en temps d’execució Java els detecta en temps de compilació. (Robust) La JVM està disponible en moltes plataformes. (Portabilitat) Te funcionalitats de molts tipus. (Biblioteques) Al ser un llenguatge que està molt extés facilita el suport i el manteniment dels productes. (Distribuït)
Introducció (III) Inconvenients d’utilitzar JAVA Els principals problemes que trobem a JAVA per fer codi per a temps real son: El Garbage Collector te problemes de predicibilitat. Al ser un llenguatge interpretat hi ha pèrdua d’eficiència. Te una especificació que no es suficientment precisa.
Propostes i Requeriments Dos propostes diferents Hi han dues propostes per diferents per a utilitzar JAVA per a Temps Real: The Real-Time for Java Expert Group Es un projecte liderat per Sun Microsystems que intenta donar suport genèric a un ampli grup de sistemes empotrats de temps real. J Consortium Aquesta proposta proposa l’extensió del nucli de JAVA, enfocant-ho cap a sistemes d’alta integritat, mitjançant el High Integrity Profile. Nosaltres explicarem la proposta de Sun Microsystems.
Propostes i Requeriments (II) Requeriments inicials Per a poder utilitzar JAVA per a fer codi en temps real necessitem una sèrie de requeriments inicials, aquests son: Que hi hagi una compatibilitat amb tot lo anterior. Que serveixi per a qualsevol plataforma JAVA. WORCRAC (Write Once Carefully Run Anywhere Conditionally ) ≈ WORA Ha de tenir mes importància la predecibilitat que la portabilitat. A de permetre actualitzacions futures mantenint el correcte funcionament del que hi ha en l’actualitat. S’ha d’evitar extensions sintàctiques al llenguatge JAVA. S’ha de permetre certa flexibilitat en la implementació.
Millores en Real-Time Java Planificació. Gestió de la memòria Mecanismes de sincronització. ATC. Finalització de tasques. Accés a memòria física.
Planificació Gran varietat d’algorismes de planificació en funció dels diferents tipus de sistemes (temps real crític, multimèdia, ...) Objectiu: Escriure una especificació que s’adapti tant als algorismes de planificació dels SO existents i als futurs algorismes. El mínim que haurà de tenir la especificació és: prioritats fixes, amb apropiació i com a mínim 28 nivells de prioritat. Ser planificable és un atribut de l’objecte Interfície Scheduler: qualsevol objecte que la implementi serà planificable pel planificador (RT-threads).
Planificació (II) Planificador: Objecte de la classe Scheduler Una instància d’aquesta classe per a cada JVM Conté els mètodes necessaris per admetre threads, mecanismes de manipulació d’events asíncrons, ... Subclasses derivades de Scheduler implementen alteracions dels algorismes de planificació Per defecte Priority Scheduler Requerit per l’especificació Planificació amb priotitats fixes Planificació expulsiva
Planificació (III) Threads: Paràmetres s’úsen per especificar els requisits temporals i la demanda de recursos d’un RT-Thread (o NoHeapRT-Thread), i també permet especificar la resposta dels threads enfront situacions imprevistes (incomplir el termini de resposta,...) Cost no es deixa consumir més CPU que la indicada. Importance criteri de selecció entre task’s d’igualtat prioritat. Deadline termini de resposta. Period periode d’execució del mètode run. OverrunHandler s’execute si run encara està actiu al consumir-se tot el cost. DeadlineHandler s’exeuta si run encara està actiu quan es compleix el termini de reposta.
Gestió de la memòria Gestió automàtica: Molt útil. El sistema deixa de ser tan previsible. Alguns algorismes de GC són aplicables a determinats STR. Requisits de la especificació de temps real: Ser independent d’algorismes particulars de Garbage Collector. Permetre una caracterització precisa de l’efecte de l’algorisme concret implementat en el sistema sobre els threads (T. Exec.). Permetre la creació i la destrucció d’objectes sense interfícies per part de l’algorisme del GC.
Gestió de la memòria (II) Compatible cap enrera: el heap i el GC de Java continuen existint. Qualsevol implementació ha de suportar les noves àrees de memòria. Permet la implementació de nous mecanismes de GC. Canvia la idea de temps de vida d’un objecte que és candidat a ser esborrat. Caracterització del comportament del GC. 4 tipus bàsics: HeapMemory ScopedMemory ImmortalMemory - ImmortalPhysicalMemory
Gestió de la memòria (III) HeapMemory Els objectes es creen en el Heap. Una instància per cada JVM. Zona de memòria que s’utilitza per defecte. Temps de vida limitat degut a la seva visibilitat: Els objectes es mantenen mentre estan referenciats. Quan ho deixen estar són eliminats pel GC. Zona de memòria compartida pels threads de temps real del sistema. ImmortalMemory Objectes creats aquí es mantenen fins que s’acaba l’aplicació. No hi ha GC. Una instància d’aquesta memòria per a cada JVM. Zona de memòria compartida per tots els threads de temps real del sistema.
Gestió de la memòria (IV) ScopedMemory Temps de vida limitat i definit: No hi ha GC. Els objectes en aquesta zona s’eliminen: Es surt de mètode enter. S’acaba l’últim thread que utilitzava aquesta zona. S’elimina malgrat encara existeixin referències a objectes en ella. Subclasses: VTMemory. LTMemory. ImmortalPhysicalMemory Permet crear objectes dins d’un rang de memòria física, amb un comportament específic, per exemple, més velocitat d’accés. La vida dels objectes creats aquí tenen un temps de vida igual al de l’aplicació: No hi ha GC. Permet modificar paràmetres d’accés a aquestes regions: Paràmetres de seguretat.
Mecanismes de sincronització Idees bàsiques de sincronització: Compatibilitat cap enrera. (Synchronized) Els threads que esperen per entrar a un bloc estan ordenats per prioritat. Quan thread deixa d’estar bloquejat es posa com a últim de la cua de la seva prioritat. Normalment hi ha una herència de prioritat. (PriorityInheritance) Es poden establir altres algorismes per a tots o per un monitor en particular. (Ex: PriorityCeilingEmulation)
Mecanismes de sincronització (II) Wait-free queues: Comunicació lliure d’espera entre RT-threads i threads de Java. Similar a les RT-FIFO’s que comuniquen threads de Linux i de RT-Linux. Events asíncrons: Essencials en els sistemes empotrats i la seva interfície amb l’entorn: Els events de l’entorn són asíncrons a l’execució del sistema. Poden aparèixer internament events asíncrons, des de la JVM o programables per l’aplicació. Proporciona un mecanisme per unir l’ocurrència d’un objecte a un objecte planificable (manipulador d’events). Cada instància de la classe AsyncEvent representa un event.
Mecanismes de sincronització (II) Manipulador d’events: Associa un event a un manipulador. Els events es produeixen de dues maneres: Executant el mètode AsyncEvent.fire(). Que es produeixi l’event en l’entorn. Aquests manipulador d’events són objectes planificables: S’executen segons els seus SchedullingParameters. La seva execució és similar a la d’un RT-thread.
ATC (I) Administra l’amplada de banda assignada a cadascuna de les senyals que circulen per la xarxa, per tal que l’usuari les rebi de manera integrada en el seu mòdul receptor. Informació en trames de 53 bytes (5 de ctrl de transmissió i 48 de dades). Suporta gran volum de dades a velocitats entre 1.5 Mbps i 1.2 Gbps. Última generació de Transferència Asíncrona. Diferències amb excepcions de Java: asíncronia. Codi interrumpible s’ha d’indicar explicitament. Codi escrit sense coneixement previ d’interrupcions no pot ser interromput.
ATC (II) Elements ATC: Classe: AsynchronouslyInterruptedException (AIE) Subclasse: Timed Interface: Interruptible Mètodes: interrupt a RealTimeThreads Modificacions del mètode interrupt(): - L’execució de t.interrupt() llança excepció al thread t. - S’executa ATC sempre que en un mètode s’inclogui throws AIE a la capçalera del mateix (wait, join, sleep...). - L’execució de ATC es retrasa si s’està executant un mètode synchronized.
Finalització de tasques Utilitzat quan el programador vol que els threads acabin quan es produeix algun event extern que ho requereixi. Mecanismes: Transferència asíncrona de control (ATC). Tractament d’events asíncrons. Característiques: Acabament de tasques de mode normal i segur. El mètode tradicional d’acabament a Java és insegur (stop() i destroy ()).
Accés a memòria física L’accés a memoria física es necessari en sistemes empotrats. Tipus d’acces: Llegir i escriure directament sobre memoria fisica. Utilitzat per controlar dispositius mapejats a memoria. Tipus: RawMemoryAcces. Creació d’objectes a memoria física. Utilitzat en el control de memoria cache per part del programador. Tipus: InmortalPhysicalMemory. ScopedPhysicalMemory.
Gestió de Temps (I) Es necessita representar el temps en nanosegons. No tots els SO’s ho soporten. Mitjançant la classe abstracta HighResolutionTime, malgrat s’utilitzen les tres subclasses que té: AbsoluteTime: Representació temps en milisegons i nanosegons a partir de 1 de Gener de 1970 a les 0:00 hores. RelativeTime: Representació d’un interval de temps en format milisegons, nanosegons. RationalTime: Igual que RelativeTime, dividint l’interval en subintervals donada una freqüència.
Gestió de Temps (II) Els temporitzadors, també son molt útils en sistemes de temps real. Llança events asincrons periodicament o en un moment donat. Classes referents als temporitzadors: Clock: Proporciona referencia en el temps Timer: Event que mesura temps relatiu d’un Clock. Subclasses: PeriodicTimer: Events llançats repetidament en intervals periodics. OneShotTimer: Event llançat al temps especificat.
Bibliografia Requeriments for Real-Time Extensions for the Java Plataform : http://www.nist.gov/rt-java API de Real-Time: http://www.rtj.org/doc/javax/realtime/