Real-Time Specification for Java Universidade Federal do Rio Grande do Sul Instituto de Informática CMP158 – Sistemas de Tempo Real Descrição da Real-Time Specification for Java Alessandra Vargas Fernando Ataíde Marcio Oliveira Real-Time Specification for Java Objetivos • Definir uma API de tempo real para a linguagem Java; • Permitir a criação, verificação, análise, execução e gerenciamento de threads tempo real; • Satisfazer requisitos temporais. Real-Time Specification for Java Thread Scheduling and Dispatching • Implementação permite a programação de parâmetros apropriados para o mecanismo de escalonamento escolhido • provê métodos para criação, gerenciamento e terminação de real-time Java threads • A RTSJ requer em todas as implementações um escalonador : – Baseado em prioridades – Preemptivo – Com o mínimo de 28 prioridades Real-Time Specification for Java Thread Scheduling and Dispatching • schedulable object => são os objetos que o escalonador gerencia • timely execution of threads => restrições temporais. Geralmente são os deadlines, expressos em tempos relativos ou absolutos • feasibility analysis => verificar se é possível obedecer às restrições temporais • execution eligibility => qual thread será executada Real-Time Specification for Java Memory Management • Implementação de gerenciamento de memória o mais automático possível • Foi definida uma área de memória: – independente de qualquer algoritmo de Garbage Collection – que permite ao programa caracterizar precisamente o efeito de um GC no tempo de execução, na preempção e no despacho de real-time threads – e que permite a alocação e utilização de objetos sem interferência alguma de GC. Real-Time Specification for Java Memory Management Existem 4 tipos de áreas de memória: • Scoped memory => objetos têm tempo de vida definidos por um escopo. • Physical memory => regiões físicas de memória com características particulares, ex. acesso mais rápido • Immortal memory => objetos podem ser referenciados sem atraso de exeções ou do GC. • Heap memory => tempo de vida determinado pela visibilidade Real-Time Specification for Java Synchronization and Resource Sharing • Utilização de filas • Prevenção à inversão de prioridade – herança de prioridades – priority ceiling Real-Time Specification for Java Asynchronous Event Handling Duas classes: AsyncEvent e AsyncEventHandler • AsyncEvent => um objeto representa um sinal POSIX, uma interrupção de hardware ou qualquer outro evento. • AsyncEventHandler => quando ocorre um evento, as instâncias associadas de AsyncEventHandler são escalonadas e o método handleAsyncEvent() é invocado Real-Time Specification for Java Physical Memory Access A RTSJ define classes para acessar a memória física • RawMemoryAccess – trata uma faixa de memória como uma seqüência fixa de bytes – os conteúdos são acessados através de uma base e um offset de endereço – permite a implementação de drivers de dispositivos, I/O mapeado em memória, memória flash, etc • VTPhysicalMemory, LTPhysicalMemory, and ImmortalPhysicalMemory – Permitem construir objetos nas áreas de memória Real-Time Specification for Java Objeto Escalonável Constituído por qualquer instância de classe que implemente a interface Schedulable. São três classes contendo objetos escalonáveis: • RealtimeThread • NoHeapRealtimeThread ::Thread ::Schedulable • AsyncEventHandler extends ::RealtimeThread implements implements ::AsyncEventHandler implements ::NoHeapRealtimeThread extends Real-Time Specification for Java Principais Classes : Escalonador ::Scheduler {Abstract} extends ::PriorityScheduler PriorityScheduler: Um escalonador padrão para objetos Schedulable das clases RealtimeThread, AsyncEventHandler e NoHeapRealtimeThread . Real-Time Specification for Java Principais Classes: Parâmetros de Tempo Rea ::SchedulingParameters {Abstract} extends ::PriorityParameters extends ::ImportanceParameters Fornecem informações úteis para o escalonador do sistema. Define parâmetros para um objeto Schedulable. Real-Time Specification for Java Principais Classes: Parâmetros de Tempo Rea ::ReleaseParameters {Abstract} extends ::AperiodicParameters ::PeriodicParameters extends ::SporadicParameters Parâmetros úteis na especificação das características de ativação do objeto escalonável. Real-Time Specification for Java Principais Classes: Timer ::AsyncEvent extends ::Timer extends ::OneShotTimer ::PeriodicTimer Evento cuja ocorrência é determinada por um relógio RT. ::clock - OneShotTimer - PeriodicTimer extends ::RealtimeClock Real-Time Specification for Java Principais Classes: Recursos compartilhados ::MonitorControl extends ::PriorityCeilingEmulation ::PriorityInheritance • Oferece controle para recursos compartilhados - processador - blocos sincronizados. Real-Time Specification for Java Principais Classes : Gerenciamento de memória ::GarbageCollector {Abstract} • Manter este gerenciamento de maneira automática no ambiente de execução. • Necessário modificações a fim de permitir uma caracterização precisa dos efeitos da execução do GC no tempo de execução. Real-Time Specification for Java Thread periódica e miss-deadline import javax.realtime.*; public class appJavaRT { public static void main(String[] args) { AsyncEventHandler handlerDeadline = new AsyncEventHandler () { public void handleAsyncEvent () { System.out.println("missDeadline"); } }; PriorityParameters priortyParametersT1 = new PriorityParameters(1); PeriodicParameters periodicParametersT1 = new PeriodicParameters (new RelativeTime(3, 0 ), new RelativeTime(10, 0 ), null, new RelativeTime(10, 0), null, null); periodicParametersT1.setDeadlineMissHandler(handlerDeadline); RealtimeThread realTimeThread1 = new RealtimeThread( priortyParametersT1, periodicParametersT1 ) {public void run() { while(waitForNextPeriod()) { System.out.println("..T1...."); } } }; realTimeThread1.start(); } } Real-Time Specification for Java Disparo de evento /*MainThread.java*/ import javax.realtime.*; import java.util.*; public class MainProcess{ public static void main(String args[]){ RelativeTime tempoEsporadico; System.out.println("Criando o Handler"); /* verifica a prioridade MAX permitida */ int priority = PriorityScheduler.instance().getMaxPriority(); ThreadEventHandler threadEventHandler = new ThreadEventHandler(priority); tempoEsporadico = new RelativeTime(1000,0); OneShotTimer evento = new OneShotTimer(tempoEsporadico, threadEventHandler); evento.start(); while(true); } } Real-Time Specification for Java Tratamento de evento /*ThreadEventHandler.java*/ import javax.realtime.*; public class ThreadEventHandler extends AsyncEventHandler { public ThreadEventHandler(int priority){ super(new PriorityParameters(priority), null, null, null, null, null) ; System.out.println("Handler`s constructor"); } public void handleAsyncEvent(){ System.out.println("Peguei o evento"); } }