You are on page 1of 36

Mario Alberto Rivera Legarreta Manuel Alejandro Meza Chacon

RealtimeThread
Hereda de java.lang.Thread por tanto su forma de utilizarla es similar (crear una clase que herede de Realtimethread e incluir en ella un mtodo run() con las instrucciones que se deben ejecutar)

Constructor
RealtimeThread ([SchedulingParameters scheduling,] [ReleaseParameters release,] [MemoryParameters memory, MemoryArea area,] [ProcessingGroupParameters]);

RealtimeThread
SchedulingParameters son los parmetros para ser utilizados por el Scheduler., su subclase ms importante es PriorityParameters que sirve para definir la prioridad que se le asigna al thread. ReleaseParameters son los parmetros relativos al comportamiento del thread, dependiendo del tipo de thread que se use (periodico, espordico, etc.) se utiliza una u otra de sus subclases, ProcessingGroupParameters: definen un grupo de tareas aperiodicas que no podrn consumir ms de un determinado tiempo en cada periodo de ejecucin indicado Parmetros de Memoria (MemoryParameters y MemoryArea) definen la utilizacin de la memoria que realizar el thread

SchedulingParameters

Constructor SchedulingParameters(); Clase utilizada: PriorityParameters public class PriorityParameters extends SchedulingParameters(); Constructor: PriorityParameters(int prioridad): define el nivel de prioridad;

ReleaseParameters Constructor ReleaseParameters ( RelativeTime coste, RelativeTime deadline, AsyncEventHandler overrunHandler, AsyncEventHandler missHandler); coste : tiempo de cpu utilizado por el thread deadline : plazo de respuesta overrunHandler: Gestor del desbordamiento en el coste indicado missHandler: Gestor del desbordamiento en el deadline indicado Las subclases que permiten aadir otras caractersticas son PeriodicParameters : para tareas peridicas. AperiodicParameters : para tareas aperidicas (pueden activarse en cualquier momento) SporadicParameters : para tareas esporadicas (existe un tiempo mnimo entre 2 activaciones consecutivas)

ReleaseParameters (subclases) Constructor de PeriodicParameters PeriodicParameters ( HighResolutionTime start, RelativeTime periodo, RelativeTime coste, RelativeTime deadline, AsyncEventHandler overrunHandler, AsyncEventHandler missHandler); donde adems de los parmetros de la clase ReleaseParameters tenemos el relativo al tiempo de activacin (start) y al periodo La clase AperiodicParameters incluye los mismos atributos que ReleaseParameters La clase SporadicParameters aade como primer parmetro (a los de ReleaseParameters) el RelativeTime intervaloMinimo que refleja el tiempo mnimo entre 2 activaciones consecutivas.

RealtimeThread Mtodos bsicos public void addToFeasibility() : aade el thread al scheduler por defecto para que ste analice si es factible public void removeFromFeasibility(): elimina el thread al scheduler por defecto para que ste no analice si es factible public static void sleep([Clock clock], HighResolutionTime time) public boolean waitForNextPeriod() Deja el thread suspendido hasta que le toque el siguiente periodo de activacin (slo para threads peridicos) Para comenzar la ejecucin del thread se debe invocar el mtodo start() que llamar al mtodo run() redefinido.

Class Scheduler Clase abstracta que gestiona la ejecucin de objetos planificables e implementa algoritmos de factibilidad Mtodos bsicos protected abstract void addToFeasibility (Schedulable schedulable) : aade el objeto schedulable al planificador protected abstract void removeToFeasibility (Schedulable schedulable) : elimina el objeto schedulable del planificador public abstract boolean isFeasible (): true si los objs. planificables con los que cuenta (aadidos con addToFeasibilitiy()) permiten una planificacin factible. Public abstract java.lang.String getPolicyName(): Devuelve el nombre de la poltica de planificacin utilizada public static void setDefaultScheduler (Scheduler scheduler) : define el scheduler indicado como el utilizado por defecto public static Scheduler getDefaultScheduler (Scheduler scheduler) : devuelve una referencia al scheduler por defecto, que si no se ha definido lo contrario ser un PriorityScheduler

Class PriorityScheduler
Scheduler preemtivo con prioridades fijas Mtodos bsicos: public void fireSchedulable (Schedulable schedulable) : Dispara la ejecucin del objeto schedulable public int getXXXPriority() Dependiendo de si XXX es Max, Min o Norm devolver la mxima, mnima o normal prioridad disponible para un thread gestionado por este scheduler public static int getXXXPriority(java.lang.Thread thread) Si el thread indicado es planificable por el scheduler y dependiendo de si XXX es Max, Min o Norm devolver la mxima, mnima o normal prioridad que puede tener un thread gestionado por este scheduler, Si el thread no es planificable por este scheduler se devuelve Thread.YYY_Priority (YYY= MAX, MIN o NORM) public static PriorityScheduler instance () : devuelve un puntero a una instancia de un PriorityScheduler

MemoryArea Es una zona de memoria en la que se pueden almacenar objetos Cuando se crea se debe definir su tamao.. Tipos: HeapMemory: la del heap de Java InmortalMemory: para objetos que existan durante toda la vida de la aplicacin, est compartida por todos los threads y sus objetos nunca son eliminados por el recolector de basura. InmortalPhysicalMemory : con las caractersticas de la InmortalMemory pero asociada a una posicin de memoria fsica determinada. ScopedMemory :Memoria con mbito definido, til para tratar objetos que tienen su tiempo de vida definido por su mbito de utilizacin. ste est definido entre la utilizacin del mtodo enter(Runnnable r) y la finalizacin del thread r

MemoryArea
Mtodos bsicos: protected MemoryArea (long tamanoEnBytes): constructor que define el tamao del rea. public void enter (java.lang.Runnable logic) Asocia el rea de memoria al thread indicado durante la ejecucin de su mtodo run(), que es disparado por este mtodo. Durante esa ejecucin del mtodo run() los objetos que se creen lo harn en esa zona de memoria public static MemoryArea getMemoryArea (java.lang.Object obj) : devuelve el rea de memoria en la que est el objeto. public long memoryConsumed(): N de bytes utilizados public long memoryRemaining(): N de bytes disponibles public synchronized java.lang.Object newArray (java.lang.Class type, int num): crea un array de num elementos del tipo indicado public synchronized java.lang.Object newinstance(java.lang.Class type, int num): crea un objeto del tipo indicado

HeapMemory e InmortalMemory Mtodos bsicos. Ambas clases aplican el patrn singleton No se utilizan constructores para obtener un objeto de las mismas, sino que se deben utilizar los mtodos: public static HeapMemory instance() public static InmortalMemory instance() que devuelven la instancia correspondiente del tipo de rea indicado.

ScopedMemory Es una clase abstracta de la que heredan:VTMemory y LTMemory (no sujetas al recolector de basura => pueden ser utilizadas por NoHeapRealtimeThread) y ScopedPhysicalMemory Mtodos para asociar un rea de memoria de mbito a un thread Colocar el rea como uno de los parmetros que se pasan al crear el thread Ejecutar el mtodo enter() Los objetos creados mientras esta asociada un ScopedMemory a un thread se crearn en dicho rea. Cuando se termina de utilizar el rea se ejecutan los mtodos finalize de cada uno de los objetos del rea Mtodos bsicos. public ScopedMemory (long tamao): Constructor public void enter (java.lang.Runnable logic): similar al descrito en la clase MemoryArea

ScopedMemory (subclases) VTMemory: Tiempo de reserva de espacio variable. public VTMemory(int inicial, int maximo): constructor que define el tamao asociado inicial y el mximo que puede llegar a tener dicho rea. LTMemory: Garantiza un tiempo lineal (dependiente del tamao del objeto) de reserva de espacio para los objetos que se creen en ella. No se garantiza que est disponible el tamao mximo cuando se necesita. public LTMemory(long inicial, long maximo): constructor que define el tamao asociado inicial y el mximo que puede llegar a tener dicho rea. ScopedPhysicalMemory: Memoria de mbito asociada a una determinada zona de memoria fsica. Describiremos sus mtodos ms adelante.

Gestin de la Memoria Fsica Es posible asociar reas de memoria a zonas fsicas de la memoria. Existe un gestor encargado de realizar la asociacin y buscar el tipo de memoria indicado (dma, shared, byteswap) y el lugar: class PhysicalMemoryFactory Mtodos: protected synchronized java.lang.Object create(java.lang.Object tipoDeMemoria, java.lang.ClassphysMemType, long base, long size) Crea una zona de memoria con las caractersticas indicadas. protected synchronized java.lang.Object getTypedMemoryBase (java.lang.Object tipoDeMemoria, java.lang.ClassphysMemType, long base, long size): devuelve la direccin fsica del trango de memoria del tipo indicado que tiene como mnimo el tamao especificado Tipos de reas de memoria fsica : ImmortalPhysicalMemory ScopedPhysicalMemory RawMemoryAccess RawMemoryFloatAccess

ImmortalPhysicalMemory Immortal: La vida de los objetos es mayor que la de la aplicacin Physical: Permite asociar objetos a una determinada posicin de memoria fsica. Mtodos: protected ImmortalPhysicalMemory ([ImmortalPhysicalMemory memoria,] long base, long tamano): constructor , utilizado por el MemoryObjectFactory, que define la direccin fsica (base) y el tamao del rea que ser creada public static ImmortalPhysicalMemory create (java.lang.Object tipo, [long base, ,] long tamano) Crea un rea del tipo (dma, shared,..) indicado en la direccin fsica (base) y con el tamao en bytes solicitado. public static void setFactory (PhysicalMemoryFactory factory): define quien ser el encragado de generar las instancias de ImmortalPhysicalMemory

ScopedPhysicalMemory Mtodos protected ScopedPhysicalMemory(long base, long tamano): constructor , utilizado por el MemoryObjectFactory, que define la direccin fsica (base) y el tamao del rea que ser creada public static ScopedPhysicalMemory create (java.lang.Object tipo, long base, long tamano) Crea un rea del tipo (dma, shared,..) indicado en la direccin fsica (base) y con el tamao en bytes solicitado. public static void setFactory (PhysicalMemoryFactory factory): define quien ser el encragado de generar las instancias de ScopedPhysicalMemory

RawMemoryAccess
Modela una zona de memoria fsica como una secuencia de byte No sirve para almacenar objetos sino para ser usada como una zona de memoria de acceso crudo (por ejem. para guardar imgenes de I/O, drivers, etc.) Mtodos: protected RawMemoryAccess ([ImmortalPhysicalMemory memoria,] long base, long tamano): constructor , utilizado por el MemoryObjectFactory. public static RawMemoryAccess create (java.lang.Object tipo,[long base,] long tamano) Crea un rea del tipo (dma, shared,..) indicado en la direccin fsica (base) y con el tamao en bytes solicitado.

RawMemoryAccess Mtodos public byte getByte(long offset): devuelve el byte que se encuentra en el desplazamiento indicado, existen mtodos similares para Int, Long, y Short y para arrays public void setByte(long offset, byte valor): coloca el valor en el byte que se encuentra en el desplazamiento indicado, existen mtodos simi lares para Int, Long, y Short y para arrays public long map([long base,] [long tamano]):Mapea el rango de direcciones fsico del RawMemoryAccess a la zona de memoria virtual indicada en base con el tamao indicado. Devuelve la direccin de memoria virtual a la que ha sido mapeada. Public long getMappedAddress(): Devuelve la localizacin de la memoria virtual en la que est mapeada el dicho RawAccessMemory public void unmap(): Elimina el mapeado realizado sobre la memoria virtual

MemoryParameters Son utilizados para definir las caractersticas de memoria asociadas a RealtimeThreads y AsyncEventHandler Mtodos: public MemoryParameters (long Tammaximo, long maxImmortal [, long allocationRate]):Crea un objeto con : el lmite mximo de tamao de memoria indicado en tamMaximo el lmite mximo del tamao de memoria inmortal indicado en maxImmortal. Ambos parmetros son en bytes y NO_MAX indica sin lmite la velocidad de colocacin, en bytes/sec. de datos en el heap indicada en allocationRate. (NO_MAX para no especificar lmite y 0 para no permitir almacenamiento en el heap)

MonitorControl

Clase base para los objetos de control de la poltica de control de monitores Mtodos: public MonitorControl() public static void setMonitorControl(MonitorControl politica); define la poltica aplicable cuando se accede a recursos comunes (synchronize) public static void setMonitorControl(java.lang.Object monitor, MonitorControl politica): define la poltica aplicable cuando se accede a recursos comunes, slo para el objeto indicado.

MonitorControl (subclases) PriorityCeilingEmulation public PriorityCeilingEmulation(int ceiling): crea un objeto de esta clase con el techo indicado. public int getDefaultCeiling () PriorityInheritance public PriorityInheritance(): public static PriorityInheritance instance (): devuelve un puntero al objeto nico (singleton) PriorityInheritance.

Comunicacin entre Threads

La modificacin de la interpretacin de la clausula synchronize no soluciona el problema cuando alguno de los threads tiene menor prioridad que el GC => se han creado colas libres de espera para facilitar el acceso compartido a los objetos: WaitFreeWriteQueue WaitFreeReadQueue WaitFreeDequeue

WaitFreeWriteQueue Para comunicar y sincronizar, RealtimeThreads y java.lang.Threads sincronizados en lectura Mtodos bsicos: public WaitFreeWriteQueue(java.lang.Thread escritor, java.lang.Thread lector, int max, MemoryArea mem): Crea una cola que tendr como maximo max elementos que se almacenarn en mem public void bind (java.lang.Thread escritor, java.lang.Thread lector, MemoryArea mem): aade 2 nuevos threads con acceso a la cola, sino tienen reas de memoria comunes slo podrn almacenar objetos inmortales en la cola. public boolean write(java.lang.Object objeto): Intenta insertar el objeto en la cola. No se bloquea si la cola est llena, devuelve false. Si 2 threads lo utilizan a la vez deben asegurarse su sincronizacin. public synchronized java.lang.Object read(): este mtodo se bloquea si la cola est vaca. Es sincronizado y puede ser llamado por 2 o ms threads

WaitFreeReadQueue
Para comunicar y sincronizar, RealtimeThreads y java.lang.Threads sincronizados en escritura Mtodos bsicos: public WaitFreeReadQueue(java.lang.Thread escritor, java.lang.Thread lector, int max, MemoryArea mem[, boolean notify]): Crea una cola que tendr como maximo max elementos que se almacenarn en mem. Si se coloca true en notify se notificar al lector cuando se aaden elementos public synchronized boolean write(java.lang.Object objeto): Intenta insertar el objeto en la cola. Se bloquea si la cola est llena y espera hasta que haya sitio. Es sincronizado y puede ser llamado por 2 o ms threads public java.lang.Object read(): Devuelve el siguiente elemento de la cola o null si est vacia. No se bloquea. Si 2 threads lo utilizan a la vez deben asegurarse su sincronizacin. Public void waitForData(): espera hasta que se la cola tiene algn elemento

WaitFreeDequeue
Para comunicar y sincronizar, RealtimeThreads y java.lang.Threads sincronizados o no en escritura y en lectura. Crea una WaitFreeWriteQueue y una WaitFreeReadQueue Mtodos bsicos: public WaitFreeDequeue(java.lang.Thread escritor, java.lang.Thread lector, int max, MemoryArea mem): Crea una cola que tendr como maximo max elementos que se almacenarn en mem. public boolean blockingWrite(java.lang.Object objeto): llamada al write de WaitFreeReadQueue (sincronizado) public java.lang.Object blockingRead(): llamada al read de WaitFreeWriteQueue (sincronizado) public java.lang.Object nonBlockingRead(): llamada al read de WaitFreeReadQueue (no sincronizado) public boolean nonBlockingWrite(java.lang.Object objeto): llamada al write de WaitFreeWriteQueue (no sincronizado)

class AsyncEvent

Mtodos bsicos: public AsyncEvent() :Constructor public synchronized void addHandler (AsyncEventHandler handler) : Aade el manejador (handler) como uno (puede haber varios) de los asociados a este evento. Cuando se produzca el evento se ejecutar el mtodo run() del dicho manejador public void bindTo(java.lang.String eventoExterno) : asocia el AsyncEvent a un evento externo. Los valores dependen de la implementacin public ReleaseParameters createReleaseParameters(): Crea los parmetros temporales apropiados para el evento AsyncEvent public synchronized void removehandler (AsyncEventHandler handler): Elimina el manejador del conjunto de los asociados al evento public synchronized void fire () Dispara el evento => provoca la ejecucin de los mtodos run() de los manejadores asociados

class AsyncEventHandler Implementa Schedulable y Runnable Similares a los threads pero deben ser de mucho menor coste de ejecucin. Se ejecutan, por defecto en el thread actual. Si se quiere crear un thread propio para el manejador hay que usar BoundAsyncEventHandler (subclase de AsyncEventHandler) Mtodos bsicos: public AsyncEventHandler() :Crea un manejador que hereda los parmetros (SchedulingParams . ReleaseParam., etc) del thread actual. Existen constructores y mtodos en los que se pueden especificar esos parametros . public void addToFeasibility()/ removeFromFeasibility() public abstract void handleAsyncEvent(): Mtodo en el que se debe definir el comportamiento del manejador cuando se dispare el evento.

HighResolutionTime(subclases) AbsoluteTime: Tiempo absoluto desde 1-1-1970 a las 00:00:00 GMT public AbsoluteTime (long millis, int nanos): crea un obj. con ese tiempo public AbsoluteTime add(long millis, int nanos) / add (RelativeTime time) Se crea un nuevo objeto al que se le aade el tiempo indicado. RelativeTime: Tiempo relativo desde el instante actual. public RelativeTime (long millis, int nanos): crea un obj. con ese tiempo public AbsoluteTime add(long millis, int nanos) / add (RelativeTime time) Se crea un nuevo objeto al que se le aade el tiempo indicado. RationalTime: Subclase de RelativeTime que divide un tiempo en subintervalos de cierta frecuencia. Se utiliza para disparar tareas peridicas. public RationalTime (int frecuencia, long millis, int nanos): crea un obj. con el n de ocurrencias indicado por frecuencia en el intervalo millis+nanos . Ejem. Si tengo (3, 100, 50) como RationalTime para un Temporizador peridico, el temporizador se ejecutara 3 veces cada 100ms 50 nanoseg.

Temporizadores

RTSJ permite temporizadores peridicos o puntuales a los que se les pueden asociar acciones como a cualquier eventos asncrono Existe un reloj de tiempo real por defecto (getRealtimeClock()) pero es posible crear instancias propias de relojes (class Clock) a las que se les puede asignar la precisin que se desee (setResolution()) para despus solicitar el tiempo actual (getTime()) o utilizarlo para definir temporizadores.

Timer

Es la clase base de los temporizadores, hereda de AsyncEvent No se deben definir directamente objetos de la misma( Constructor: protected Timer () ) Mtodos bsicos: public void disable(): deshabilita el temporizador, si este se dispara mientras est desabilitado, cuando vuelva a habilitarse se disparar. public void enable() : re-habilita el temporizador. No es necesario invocar a este mtodo para habilitar el temporizador la 1 vez, se usa start() public void start (). Arranca (habilita) el temporizador public ReleaseParameters createReleaseParameters(): Crea los parmetros de temporizacin apropiados para el evento AsyncEvent public AbsoluteTime getFireTime() devuelve cuando se disparar el temporizador.

Timer (Subclases) OneShotTimer public OneShotTimer (HighResolutionTime time, [Clock reloj,] AsyncEventHandler manejador): Define un temporizador que provocar la ejecucin del manejador cuando se dispare. PeriodicTimer public PeriodicTimer (HighResolutionTime start, RelativeTime intervalo, [Clock reloj,] AsyncEventHandler manejador): Define un temporizador que comenzara a contar el tiempo en start y se disparara cada intervalo provocando la ejecucin del manejador.

AsynchronouslyInterruptedException (AIE)

Subclase de java.lang.InterruptedException Excepcn especial que se lanza en respuesta al intento de realizar una transferencia asncrona de control en un RealtimeThread Si un mtodo declara que lanzar (thows) una AIE, sta se producir cuando se invoque a RealtimeThread.interrupt() mientras ese mtodo est ejecutando o, si est pendiente, cuando el control vuelva al mismo Cuando se captura una interrupcin (AIE) se debe invocar el mtodo happened() para comprobar que es la pendiente, con lo que ser eliminada del thread, sino se continuar propagando.

AsynchronouslyInterruptedException Mtodos (AIE) public AsynchronouslyInterruptedException () public synchronized boolean disable() deshabilita el tratamiento de la interrupcin. Si sta salta mientras est deshabilitada se pone en estado de pendiente y se lanzar en cuanto vuelva a ser habilitada. Slo debe ser invocado dentro de una llamada a doInterruptible() public synchronized boolean enable() habilita el tratamiento de la excpecion. public boolean doInterruptible (Interruptible tarea): invoca al mtodo run() de la tarea public shnchronized boolean fire() Hace que esa excepcin sea la actual si se ha invocado a doInterruptible() y no se ha completado public boolean happened (boolean propagar) utilizada con una instancia de esa excepcin para ver si la actualmente disparada es ella. Propagar indica si sta se debe propagar o no si no es la actual.

Timed Subclase de AIE. Se utiliza para realizar una ATC basada en un temporizador (se invocar a interrupt() y por tanto se disparar la excepcin cuando cumpla el temporizador) Mtodos: public Timed (HighResolutionTime tiempo) : Crea una instancia de Timed que invocar a interrup() cuando pase el tiempo indicado despus de invocar a doInterruptible() public boolean doInterruptible(Interruptible tarea) ejecuta el mtodo run de la tarea y arranca el temporizador

Interface Interruptible
Se utiliza para los objetos que vayan a ser interrumpidos por medio de AIE.doInterruptible (); Mtodos public void interruptAction (AIE excepcion) : es el mtodo que se ejecuta si el mtodo run es interrumpido. La excepcion indica el AIE generado y sirve para invocar mtodos de la misma. Public void run (AIE excepcion) :mtodo que se ejecuta cuando se invoca a doInterruptible(). El parmetro sirve para lo mismo que en el mtodo anterior.

You might also like