Real-time Specification for Java

Propaganda
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");
}
}
Download