0% encontró este documento útil (0 votos)
228 vistas411 páginas

STR

Este documento introduce los sistemas de tiempo real y cubre sus características clave como el determinismo temporal, la concurrencia, la interacción con dispositivos físicos y la programación. Explica las nociones básicas sobre procesos concurrentes y threads, y proporciona ejemplos de cómo implementar tareas concurrentes en Ada95, POSIX threads y un ejecutivo cíclico para controlar la temperatura y el nivel de un sistema.

Cargado por

Piedad Go
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
228 vistas411 páginas

STR

Este documento introduce los sistemas de tiempo real y cubre sus características clave como el determinismo temporal, la concurrencia, la interacción con dispositivos físicos y la programación. Explica las nociones básicas sobre procesos concurrentes y threads, y proporciona ejemplos de cómo implementar tareas concurrentes en Ada95, POSIX threads y un ejecutivo cíclico para controlar la temperatura y el nivel de un sistema.

Cargado por

Piedad Go
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 411

SISTEMAS DE TIEMPO REAL

Optativa de 2 ciclo Ingeniera Informtica Ingeniera de Telecomunicacin Ingeniera Industrial

Jos Luis Villarroel Salcedo


Departamento de Informtica e Ingeniera de Sistemas Centro Politcnico Superior Universidad de Zaragoza

NDICE
Introduccin Nociones sobre concurrencia Medida y control del tiempo Planificacin cclica Planificacin basada en prioridades: RMS Planificacin basada en prioridades: DMS Planificacin basada en prioridades: EDF Manejadores de dispositivos Tolerancia a fallos. Excepciones Programacin secuencial. Ada95 Programacin concurrente. Ada95 Medida y control del tiempo en Ada95 Programacin de bajo nivel. Ada95 Excepciones en Ada95 1 13 48 86 131 199 225 253 267 287 330 362 382 399

SISTEMAS DE TIEMPO REAL

SISTEMAS DE TIEMPO REAL

INTRODUCCIN

SISTEMAS DE TIEMPO REAL

DEFINICIN
Un sistema de Tiempo Real es un sistema informtico que: Interacciona con su entorno fsico Responde a los estmulos del entorno dentro de un plazo de tiempo determinado No basta con que las acciones del sistema sean correctas, sino que, adems, tienen que ejecutarse dentro de un intervalo de tiempo determinado.

Los sistemas tiempo real suelen estar integrados en un sistema de ingeniera ms general, en el que realizan funciones de control y/o monitorizacin: SISTEMAS EMPOTRADOS (embedded systems)

SISTEMAS DE TIEMPO REAL

CLASES
Sistemas de Tiempo Real: Crticos (hard real-time systems):
los plazos de respuesta deben respetarse siempre estrictamente. una sola respuesta tarda a un suceso externo puede tener consecuencias fatales.

Acrticos (soft real-time systems):


se pueden tolerar retrasos ocasionales en la respuesta a un suceso.

Sistemas Interactivos (no de tiempo real): No tienen plazos de respuesta explcitos

SISTEMAS DE TIEMPO REAL

EJEMPLO
Robot mvil de inspeccin

SISTEMAS DE TIEMPO REAL

EJEMPLO
Varias tareas: Control automtico de velocidad y posicin (50 ms) Lectura del lser y evitacin de obstculos (100 ms) Toma de imgenes y procesamiento (1 s)
Reconocimiento de objetos Lectura de matrculas

Comunicacin con la consola


Recepcin de rdenes Envo de imgenes y otros datos ...

SISTEMAS DE TIEMPO REAL

CARACTERISTCAS
Determinismo Temporal Acciones en intervalos de tiempo determinados Es fundamental que el comportamiento temporal de los STR sea determinista
no hay que confundirlo con la necesidad de que sea eficiente el sistema debe responder correctamente en todas las situaciones hay que prever el comportamiento en el peor caso posible

Fiabilidad y seguridad Un fallo en un sistema de control puede hacer que el sistema controlado se comporte de forma peligrosa o antieconmica Es importante asegurar que si el sistema de control falla lo haga de forma que el sistema controlado quede en un estado seguro => hay que tener en cuenta los posibles fallos o excepciones en el diseo

SISTEMAS DE TIEMPO REAL

CARACTERISTCAS
Concurrencia Los componentes del sistema controlado funcionan simultneamente El sistema de control debe atenderlo y generar las acciones de control simultneamente Dos opciones
Sistema monoprocesador Computadores multiprocesador o sistemas con varios computadores

Un computador ejecuta sus acciones de forma secuencial RAPIDEZ se puede hacer que el computador ejecute sus acciones de forma aparentemente simultnea La programacin de sistemas concurrentes es compleja

SISTEMAS DE TIEMPO REAL

CARACTERSTICAS
Interaccin con dispositivos fsicos Los sistemas empotrados interaccionan con su entorno mediante diversos tipos de dispositivos que normalmente no son convencionales (teclados, impresoras, ...): convertidores A/D y D/A, entradas y salidas digitales, ... (interfases con sensores, actuadores, perifricos especiales, ...) Los componentes del software que controlan el funcionamiento de estos dispositivos (manejadores, "drivers") son, en general, dependientes del sistema concreto

SISTEMAS DE TIEMPO REAL

PROGRAMACIN
Actualmente existen dos alternativas: Lenguajes secuenciales (C, C++, ...) + sistema operativo de tiempo real
Los lenguajes secuenciales dependen de un sistema operativo para las funciones de concurrencia y temporizacin

Lenguajes concurrentes (Ada95, ...)


Las funciones de concurrencia y tiempo real forman parte del lenguaje

SISTEMAS DE TIEMPO REAL

10

SISTEMAS OPERATIVOS
Los sistemas operativos convencionales no son adecuados para tiempo real: No tienen comportamiento determinista No permiten garantizar los tiempos de respuesta

Un sistema operativo de tiempo real debe soportar: concurrencia: procesos ligeros con memoria comn temporizacin: medida de tiempos y ejecucin peridica planificacin: expulsiva con prioridades, y acceso a recursos con herencia de prioridad manejo de dispositivos E/S: acceso a recursos de hardware e interrupciones Ejemplos: VxWorks, LynxOS, QNX, RTEMS, RT-Linux, ....

SISTEMAS DE TIEMPO REAL

11

POSIX Portable Operating System Interface + X


Conjunto de normas IEEE/ISO que definen servicios que pueden ofrecer los sistemas operativos Normas bsicas, con interfaces para C Interfaces para Ada y otros lenguajes Perfiles de aplicacin

SISTEMAS DE TIEMPO REAL

12

PROGRAMACIN
Ada95
Se desarroll especficamente para sistemas empotrados por encargo del DoD (Ministerio de Defensa de EEUU) --> Ada 83 Revisin 1995 --> Ada95 Soporta tecnologas de software avanzadas

descomposicin, abstraccin, reutilizacin programacin orientada a objetos

Incluye concurrencia, tiempo real, acceso a recursos de bajo nivel y potente tratamiento de excepciones Se utiliza ampliamente en todo tipo de sistemas de tiempo real (no slo militares), especialmente en Europa Transportabilidad, Legibilidad, Eficiencia, Seguridad (chequeos compilador) Anexos especializados (aplicaciones distribuidas, sistemas de informacin, ...)

SISTEMAS DE TIEMPO REAL

13

SISTEMAS DE TIEMPO REAL

NOCIONES SOBRE CONCURRENCIA

SISTEMAS DE TIEMPO REAL

14

PROCESOS CONCURRENTES
Procesos concurrentes: Se dice que dos o ms procesos son concurrentes si pueden ejecutarse en paralelo, de forma que alguno de ellos comience a ejecutarse antes que termine algn otro. Programa concurrente: Es un programa que especifica dos o ms procesos concurrentes o, de forma equivalente, un programa cuya ejecucin se realiza segn varios flujos de control que avanzan en paralelo. Paralelismo virtual Monoprocesador: Un nico procesador va alternando la ejecucin de los diversos procesos (entrelazado) Paralelismo real Multiprocesador: Cada proceso se ejecuta en un procesador diferente. Zona de memoria comn (datos comunes). Sistema distribuido: Multiprocesador sin memoria compartida.

SISTEMAS DE TIEMPO REAL

15

PROCESOS PESADOS Y LIGEROS


Los sistemas operativos suelen soportar procesos "pesados"
Espacios de memoria totalmente independientes

Algunos sistemas operativos tienen procesos "ligeros" (threads)


Tienen acceso al mismo espacio de memoria El entrelazado, comunicacin y sincronizacin entre threads es ms eficiente Se necesitan mecanismos para evitar las interferencias entre los threads.

Nos centraremos en procesos ligeros: threads o tareas

SISTEMAS DE TIEMPO REAL

16

ESTADOS DE UN PROCESO

kernel
nuevo preparado

espera

activo

ejecucin

terminado

En un sistema con N procesadores, slo puede haber N procesos en ejecucin

SISTEMAS DE TIEMPO REAL

17

NCLEO DE TIEMPO REAL


Los procesos concurrentes se ejecutan con ayuda de un ncleo de ejecucin (run-time kernel) El ncleo se encarga de la creacin, terminacin y entrelazado de los procesos

El ncleo puede tomar varias formas: Ncleo desarrollado como parte de la aplicacin
ejemplo: ejecutivo cclico

Ncleo del entorno de ejecucin del lenguaje


ejemplo: lenguaje Ada95

Ncleo de un sistema operativo de tiempo real


ejemplo: VxWorks, LynxOS, RTEMS, RT-Linux, QNX, ...

SISTEMAS DE TIEMPO REAL

18

Ejemplo: control de temperatura y nivel

T: temperatura H: nivel de lquido C: ajuste del calefactor V: ajuste de la vlvula

V H C T

Periodo de muestreo deseado:


Temperatura: 5 s Nivel: 1 s

SISTEMAS DE TIEMPO REAL

19

Ejemplo: Ejecutivo cclico (C)

void CONTROL_DE_TEMPERATURA(void) { TEMPERATURA T ; AJUSTE_DE_CALEFACTOR C ; MEDIR(&T) ; CALCULAR_ACCION(T,&C) ; GENERAR(C) ; MOSTRAR(T) ; } void CONTROL_DE_NIVEL(void) { ALTURA H ; AJUSTE_DE_VALVULA V ; MEDIR(&H) ; CALCULAR_ACCION(H,&V) ; GENERAR(V) ; MOSTRAR(H) ; } } void EJECUTIVO_CICLICO(void) { int i ; for (i = 0; 1; i=(i+1)%5 ) { CONTROL_DE_NIVEL() ; if (i==0) CONTROL_DE_TEMPERATURA() ; -- esperar hasta 1 s }

SISTEMAS DE TIEMPO REAL

20

Ejemplo: Tareas en Ada95

procedure SISTEMA_DE_CONTROL is task CONTROL_DE_TEMPERATURA ; task CONTROL_DE_NIVEL ; task body CONTROL_DE_TEMPERATURA is T: TEMPERATURA ; C: AJUSTE_DE_CALEFACTOR ; begin loop MEDIR(T) ; CALCULAR_ACCION(T,C) ; GENERAR(C) ; MOSTRAR(T) ; -- esperar hasta 5 seg end loop ; end CONTROL_DE_TEMPERATURA ; task body CONTROL_DE_NIVEL is H: ALTURA ; V: AJUSTE_DE_VALVULA ; begin loop MEDIR(H) ; CALCULAR_ACCION(H,V) ; GENERAR(V) ; MOSTRAR(H) ; -- esperar hasta 1 seg end loop ; end CONTROL_DE_NIVEL ; begin -- SISTEMA_DE_CONTROL null ; end SISTEMA_DE_CONTROL ;

SISTEMAS DE TIEMPO REAL

21

Ejemplo: Threads en POSIX

#include <pthread.h> pthread_attr_t atributos ; pthread_t thread_T, thread_H ; void CONTROL_TEMP(void) { TEMPERATURA T ; AJUSTE_DE_CALEFACTOR C ; while(1) { MEDIR(&T) ; CALCULAR_ACCION(T,&C) ; GENERAR(C) ; MOSTRAR(T) ; -- esperar hasta 5 s } }

void CONTROL_NIVEL(void) { ALTURA H ; AJUSTE_DE_VALVULA V ; while(1) { MEDIR(&H) ; CALCULAR_ACCION(H,&V) ; GENERAR(V) ; MOSTRAR(H) ; -- esperar hasta 1 s } } ......

SISTEMAS DE TIEMPO REAL

22

Ejemplo: Threads en POSIX


..... void main() { void *result ; /* preparar atributos por defecto */ pthread_attr_init(&atributos); /* crear los threads */ pthread_create(&thread_T, &atributos, (void *)CONTROL_TEMP, void); pthread_create(&thread_H, &atributos, (void *)CONTROL_NIVEL, void); /* bloquea el progama principal */ /* hasta que terminen los threads */ pthread_join(thread_T, &result ) ; pthread_join(thread_H, &result ) ; exit(-1) ; /* nunca se ejecutar */ }

SISTEMAS DE TIEMPO REAL

23

ENTRELAZADO
Entrelazado y operaciones atmicas Proceso P ; x,y: entero ; P1: x:=1 ; P2: y:=x+2 ; fin P ; Proceso Q ; z,u: entero ; Q1: z:=3 ; Q2: u:=z+1 ; fin Q ;

Posibles ejecuciones: (P1; P2; Q1; Q2) (P1; Q1; P2; Q2) (Q1; P1; P2; Q2) ...

SISTEMAS DE TIEMPO REAL

24

ENTRELAZADO
Cada instruccin de alto nivel: varias instrucciones cdigo mquina.

Por ejemplo: x := y + z ; copiar copiar sumar copiar y, r1 z, r2 r1, r2 r2, x

Operaciones atmicas.

SISTEMAS DE TIEMPO REAL

25

COMPETENCIA / EXCLUSIN MUTUA


Dos procesos compiten cuando comparten: un recurso una variable El acceso al recurso o a la variable debe ser en exclusin mutua. Regin crtica: secuencia de instrucciones que deben ejecutarse en exclusin mutua

SISTEMAS DE TIEMPO REAL

26

COMPARTICIN DE UN RECURSO
Ejemplo: dos procesos (P y Q) comparten una cinta magntica. libre:= true; proceso P; proceso Q; principio repetir repetir nada; hasta libre; libre:= false; usar cinta; libre:= true; otras cosas; fin repetir; fin ;

principio repetir repetir nada; hasta libre; libre:= false; usar cinta; libre:= true; otras cosas; fin repetir; fin ;

SISTEMAS DE TIEMPO REAL

27

COMPARTICIN DE UNA VARIABLE


Ejemplo: dos procesos (acumulador y escritor) comparten una variable n. n : entero := 0; proceso acumulador; principio repetir esperar impulso; n:=n+1; fin repetir; fin;

proceso escritor; principio repetir esperar 1 hora; escribir n; n:=0; fin repetir; fin;

SISTEMAS DE TIEMPO REAL

28

COMPARTICIN DE UNA VARIABLE


Posibles trazas: (escribir n; n:=0; n:=n+1) (escribir n; n:=n+1; n:=0) --> Prdida de pulso (n:=n+1; escribir n; n:=0) n := n + 1 ; copiar sumar copiar n, r1 r1, 1 r1, n / (escritor) n:=0; => Prdida de la puesta a cero de n

Pb: entrelazado de las instrucciones en el acceso a la variable comn. Solucin en ambos casos: garantizar el acceso en exclusin mutua al elemento compartido.

SISTEMAS DE TIEMPO REAL

29

REGIN CRTICA
Se garantiza que dos procesos no estarn ejecutando a la vez una misma regin crtica Ejemplo: dos procesos (P y Q) comparten una cinta magntica. n : compartida entero := 0; proceso acumulador; principio repetir esperar impulso; region n hacer n:=n+1; fin; fin repetir; fin;

proceso escritor; principio repetir esperar 1 hora; region n hacer escribir n; n:=0; fin; fin repetir; fin;

SISTEMAS DE TIEMPO REAL

30

REGIN CRTICA
Ejemplo: dos procesos (P y Q) comparten una cinta magntica. v : compartida boolean; proceso P; principio repetir region v hacer usar cinta; fin; otras cosas; fin repetir; fin ;

proceso Q; principio repetir region v hacer usar cinta; fin; otras cosas; fin repetir; fin ;

SISTEMAS DE TIEMPO REAL

31

REGIN CRTICA: REALIZACIN


Varias posibles realizaciones: Mutex (semforo binario)
POSIX, VxWorks, RTEMS, ...

Monitor
Protected (Ada95)

Aplicacin tiempo real: tareas + ncleo El ncleo es el que ejecuta las primitivas de exclusin mutua El ncleo no puede ser expulsado
El ncleo es el que decide qu tarea est en el procesador en cada momento

SISTEMAS DE TIEMPO REAL

32

MUTEX
Es una variable booleana
S : mutex := valor_inicial ; wait(S): si S = true, signal(S): si hay procesos esperando, pasar uno de ellos a preparado si no, S := true S := false si no, suspender el proceso

Las operaciones signal y wait son atmicas. Los semforos tienen asociada una cola de procesos suspendidos en espera. Los semforos son gestionados por el ncleo de ejecucin

SISTEMAS DE TIEMPO REAL

33

MUTEX
La exclusin mutua puede asegurarse con un semforo binario, inicializado a uno (true)

mutex: mutex_semaphore := 1 ; proceso P1; principio repetir Wait(mutex) ; <seccin crtica> Signal(mutex) <seccin no crtica> fin repetir; fin P1 ; proceso P2; principio repetir Wait(mutex) ; <seccin crtica> Signal(mutex) <seccin no crtica> fin repetir; fin P2 ;

CUIDADO: si un proceso olvida liberar el mutex, el recurso queda bloqueado

SISTEMAS DE TIEMPO REAL

34

MONITOR (protected Ada95)


No se puede acceder a las variables definidas en un monitor salvo a travs de los procedimientos definidos en l. El nmero de procesos que pueden ejecutar a la vez procedimientos de un monitor est limitado a uno => exclusin mutua en el acceso a las variables protected body contador is procedure incremento is begin n := n+1 ; end ; procedure escribe_borra is begin escribir (n) ; n := 0 ; end ; end ;

protected contador is procedure incremento ; procedure escribe_borra ; private n: integer := 0 ; end ;

SISTEMAS DE TIEMPO REAL

35

MONITOR
Pueden programarse mediante mutex

/* fichero contador.c */ #include contador.h #include <semaphore.h> /* variables privadas del monitor */ static semaphore mutex_contador ; static int n = 0 ; void incrementa(void) { wait(mutex_contador) ; n:=n+1; signal(mutex_contador) ; } void escribe_borra(void) { wait(mutex_contador) ; escribir(n); n:=0; signal(mutex_contador) ; }

/* fichero contador.h */ void incrementa(void) ; void escribe_borra(void) ;

SISTEMAS DE TIEMPO REAL

36

EXCLUSIN MUTUA E INTERRUPCIONES


Las rutinas de servicio de interrupciones (ISR) se ejecutan en concurrencia con el resto de procesos. Exclusin mutua => inhibir interrupciones
static int n = 0 ; void rutina_interrupcion(void) { n:=n+1; } void escribe_borra(void) { inhibir_interrupcion() ; escribir(n); n:=0; activar_interrupcion() ; }

SISTEMAS DE TIEMPO REAL

37

COOPERACION / COMUNICACION
Interacciones ms directas entre procesos que cooperan en la realizacin de alguna tarea. Cooperacin => intercambio de datos

Comunicacin asncrona:
buzones semforos.

Comunicacin sncrona:
cita cita extendida.

SISTEMAS DE TIEMPO REAL

38

BUZON
Comunicacin asncrona Un proceso P produce y enva una secuencia de datos a otro proceso C que los recibe y consume. Los datos son transmitidos en porciones discretas denominadas mensajes. Es posible que P produzca un mensaje cuando C no est en disposicin de recibirlo. Para evitar que P espere se introduce un rea de almacenamiento de mensajes donde P puede colocar sus mensajes hasta que C los lea: BUZON.

SISTEMAS DE TIEMPO REAL

39

BUZON
Restricciones: El proceso emisor no puede exceder la capacidad finita del buzn. Si el buzn est lleno el emisor espera para depositar su mensaje. El proceso receptor no puede consumir mensajes ms deprisa de lo que se producen. Si el buzn est vaco el proceso receptor espera a que un mensaje sea depositado. Manejo de buzones: var B : buffer send(M,B) max of T

receive(M,B)

B es memoria compartida por varios procesos (emisor y receptor) => exclusin mutua en el acceso => un buzn es una regin crtica. Es posible que un buzn tenga varios procesos emisores y varios receptores.

SISTEMAS DE TIEMPO REAL

40

BUZN
La poltica de manejo de un buzn puede ser: Si al enviar un mensaje el buzn est lleno:
el emisor espera hasta que haya espacio el emisor espera, con un tiempo mximo el mensaje se descarta se descarta otro mensaje (p.ej. el ms antiguo)

Si al solicitar un mensaje el buzn est vaco:


el receptor espera hasta que haya mensaje el receptor espera, con un tiempo mximo se le indica que no hay mensaje y puede continuar

SISTEMAS DE TIEMPO REAL

41

BUZONES EN POSIX Y VXWORKS


Algunos sistemas ofrecen paquetes de manejos de buzones con posibilidades adicionales: Colas de mensajes en POSIX
Consulta del nmero de mensajes pendientes Opcin de no bloqueo al enviar o al recibir Si hay varios receptores esperando se les atiende por prioridad Mensajes con 32 prioridades

Colas de mensajes en VxWorks


Consulta del nmero de mensajes pendientes Opcin de no bloqueo y de tiempo mximo de espera al enviar o al recibir Si hay varios receptores esperando se les atiende por prioridad o por orden FIFO Mensajes con 2 prioridades: normal o urgente

SISTEMAS DE TIEMPO REAL

42

SEMFORO
Si los mensajes no encierran ninguna informacin el buzn se denomina SEMAFORO. No interesa el contenido de los mensajes sino solamente su nmero => el semforo es un contador de mensajes. Sintaxis:
S : semaphore := valor_inicial ; wait(S): si S > 0, S := S - 1 si no, suspender el proceso signal(S): si hay procesos esperando, pasar uno de ellos a preparado si no, S := S + 1

Las operaciones signal y wait son atmicas. Cola de procesos suspendidos en espera. Los semforos son gestionados por el ncleo de ejecucin

SISTEMAS DE TIEMPO REAL

43

SEMFORO
El problema de hacer cuadernillos:
programa GRAPAR_HOJAS ; var S: semaphore; proceso AMONTONAR; principio repetir coger una hoja de cada montn ; dejar el grupo de hojas en la mesa ; signal(S) ; hasta que se acaben las hojas; fin ; proceso GRAPAR ; principio repetir wait(S) ; tomar un grupo de la mesa ; graparlo ; hasta que se acaben los grupos; fin ; principio init (S,0) ; fin ;

SISTEMAS DE TIEMPO REAL

44

CITA
Una cita supone: Una sincronizacin de dos procesos Un intercambio de informacin La cita es un mecanismo no simtrico: un proceso ejerce de llamador y otro de aceptador de la llamada. Proceso Aceptador Proceso Llamador El intercambio de informacin puede ser bidireccional (Ada) o unidireccional (OCCAM).

envo datos

aceptacin de la llamada

respuesta

SISTEMAS DE TIEMPO REAL

45

CITA EXTENDIDA
Cita extendida (rendez-vous de Ada): es una cita en la que el proceso aceptador ejecuta un cdigo en la aceptacin: Procesamiento datos recibidos Preparacin datos a enviar Sintaxis (proceso aceptador): entry NOMBRE_ENT (DEC_PARAMETROS) ; accept NOMBRE_ENT(DEC_PARAMETROS) do cdigo de la cita extendida; end NOMBRE_ENT; Proceso llamador ( llamada procedimiento): P_ACEPTADOR.NOMBRE_ENT(PARAMETROS) ;

SISTEMAS DE TIEMPO REAL

46

CITA EXTENDIDA
procedure BAR is

BAR: El camarero y los clientes

task CLIENTE ; task CAMARERO is entry COBRAR (DINERO: in out integer) ; end CAMARERO ; task body CLIENTE is MONEDERO: integer := 100 ; begin -- tomar una consumicin ; CAMARERO.COBRAR (MONEDERO) ; -- hacer otras cosas ; end CLIENTE ; task body CAMARERO is PRECIO: integer := 50 ; begin -- atender clientes ; accept COBRAR(DINERO: in out integer) do begin DINERO := DINERO - PRECIO ; end COBRAR ; -- hacer otras cosas ; end CAMARERO ; begin null; end BAR ;

SISTEMAS DE TIEMPO REAL

47

SELECCIN NO DETERMINISTA
BAR: El camarero mejorado
task CAMARERO is entry SERVIR (_) ; entry COBRAR (_) ; end CAMARERO ; task body CAMARERO is begin loop select accept SERVIR (_) do ... end SERVIR ; or accept COBRAR (_) do ... end COBRAR ; end select ; end loop ; end CAMARERO ;

task C1 ; task body C1 is begin ... CAMARERO.SERVIR (_) ; ... CAMARERO.COBRAR (_) ; ... end C1 ;

SISTEMAS DE TIEMPO REAL

48

SISTEMAS DE TIEMPO REAL

MEDIDA Y CONTROL DEL TIEMPO

SISTEMAS DE TIEMPO REAL

49

INTRODUCCION
Caracterstica ms importante de un sistema tiempo real: capacidad para ejecutar sus acciones en intervalos de tiempo bien definidos. Por este motivo es fundamental disponer de mecanismos adecuados para: medir el tiempo controlar la duracin de las acciones del sistema

Ms concretamente hace falta: Mecanismos para medir el tiempo: relojes y temporizadores Mecanismos para activar tareas en instantes determinados Mecanismos para reconocer fallos en los plazos de ocurrencia de ciertos eventos: timeouts Mecanismos para especificar y asegurar los plazos de ejecucin de las acciones: planificadores de tiempo real

SISTEMAS DE TIEMPO REAL

50

INTRODUCCIN
Adems un sistema tiempo real es un sistema concurrente, compuesto por procesos. Desde el punto de vista del tiempo, principalmente dos tipos de procesos:

Procesos peridicos: son aquellos que se activan regularmente en instantes de tiempo separados por un perodo de tiempo determinado.

proceso P; cada T repetir actividad; fin repetir; fin P;

Procesos espordicos: son aquellos que se activan de forma irregular, cada vez que se producen ciertos eventos externos.

proceso P; repetir esperar E ; actividad; fin repetir; fin P;

SISTEMAS DE TIEMPO REAL

51

TIEMPO
El tiempo es una magnitud fsica fundamental, cuya unidad en el SI es el segundo. Se necesitan dos tipos de medidas:
Tiempo absoluto Tiempo relativo o intervalos de tiempo

El tiempo absoluto necesita un sistema de referencia


escala de tiempo con un origen que se denomina poca

Un sistema de tiempo real para medir el paso del tiempo puede:


Acceder a un sistema de referencia externo (p.e. Seal UTC del GPS) Utilizar un reloj de hardware interno que proporciona una aproximacin del paso del tiempo en el entorno Utilizar un reloj interno + sincronizaciones con sistema de referencia externo

SISTEMAS DE TIEMPO REAL

52

TIEMPO
Sistemas de referencia estndar Astronmicos
Tiempo universal (UT0):Tiempo solar en el meridiano Greenwich UT1, UT2: correcciones por el desplazamiento polar y por variaciones de la velocidad de rotacin de la Tierra

Atmicos
Tiempo Atmico Internacional (IAT): Basado en un reloj atmico de cesio Tiempo Universal Coordinado (UTC): Reloj IAT sincronizado con UT2 mediante la adicin de ticks ocasionales

SISTEMAS DE TIEMPO REAL

53

MEDIDA DEL TIEMPO


El tiempo en un computador se mide con: Relojes
Pueden llegar a medir tiempo absoluto Funcionan de forma continua

Temporizadores
Medida de intervalos temporales Arranque y paro

Arranque

[
t1

Paro

Temporizador Reloj t = t2-t1

]
t2

SISTEMAS DE TIEMPO REAL

54

RELOJES
Reloj: es un mdulo (de hardware y software) que proporciona el valor del tiempo real cuando se lee. Un reloj est compuesto por: Un circuito que genera impulsos peridicos Un contador que acumula los impulsos Un software de gestin
Lectura del tiempo Puesta en hora Conversin del contador en unidades de tiempo (segundos, minutos, ...) ...

Las caractersticas ms importantes de un reloj son: Precisin (granularidad). Depende de la frecuencia de los impulsos. Intervalo de valores. Depende de la precisin y de la capacidad del contador.

SISTEMAS DE TIEMPO REAL

55

MEDIDA DEL TIEMPO


Unidad de tiempo: tick El contador es de capacidad limitada
desbordamiento -> reinicio cuenta Tiempo computador tick
vida aplicacin (t. no montono)

tiempo

tiempo montono, la aplicacin tiene una vida menor que el tiempo de desbordamiento. tiempo no montono, la aplicacin vive ms que el tiempo de desbordamiento

SISTEMAS DE TIEMPO REAL

56

MEDIDA DEL TIEMPO


La monotona del tiempo depende de: el tiempo de vida de la aplicacin el tamao del contador en relacin con el tamao del tick.

Problemas del tiempo no montono No se dispone del tiempo absoluto


No se puede mantener fecha, hora, ...

No se pueden utilizar intervalos temporales por encima del tiempo de desbordamiento del contador del reloj

SISTEMAS DE TIEMPO REAL

57

TIPOS DE RELOJES
Reloj calendario Mantenimiento de la fecha y hora de una aplicacin No montono
Generalmente sincronizado con un sistema de referencia exterior (p.e. UTC) puesta en hora Horario de invierno y de verano

Reloj de tiempo real Medida y control del tiempo Montono o no montono


No monotona slo por desbordamiento No puesta en hora

Generalmente de ms precisin

SISTEMAS DE TIEMPO REAL

58

EJEMPLOS DE RELOJES
POSIX.1b: CLOCK_REALTIME (p.e. VxWorks) nmero entero de segundos (32 bits) nmero entero de nanosegundos (32 bits) Resolucin en la representacin: 1ns Granularidad
Depende de la implementacin Como mnimo 20 ms

Ada95: Ada.Real_Time Tipo abstracto de dato con funciones de manejo y conversin poca: arranque de la aplicacin intervalo: igual o mayor a 50 aos Resolucin en la representacin: mnimo 20 s Granularidad
Depende de la implementacin Como mnimo 1 ms

intervalo: 232 s = 136 aos

SISTEMAS DE TIEMPO REAL

59

CLOCK_REALTIME
struct timespec { time_t tv_sec ; /* segundos */ long tv_nsec; /* nanosegundos */ };

#include <time.h> struct timespec ts ; /* leer la hora */ clock_gettime(CLOCK_REALTIME, &ts); /* poner en hora */ clock_settime(CLOCK_REALTIME, &ts); /* obtener la resolucion del reloj */ clock_getres(CLOCK_REALTIME, &ts);

SISTEMAS DE TIEMPO REAL

60

Ada.Real_Time

package Ada.Real_Time is type Time is private; Time_First : constant Time; Time_Last : constant Time; Time_Unit : constant := implementation-defined-real-number; type Time_Span is private; Time_Span_First : constant Time_Span; Time_Span_Last : constant Time_Span; Time_Span_Zero : constant Time_Span; Time_Span_Unit : constant Time_Span; Tick : constant Time_Span; function Clock return Time;

SISTEMAS DE TIEMPO REAL

61

EJEMPLO DE MEDIDA DEL TIEMPO


Medida del tiempo de ejecucin de una actividad

use Ada.Real_Time; declare Old_Time, New_Time : Time; Interval : Time_Span; begin Old_Time := Clock; -- actividad cuya duracin se mide New_Time := Clock; Interval := New_Time - Old_Time; end;

SISTEMAS DE TIEMPO REAL

62

EJEMPLO DE MEDIDA DEL TIEMPO


Tcnica de doble bucle Slo es vlido si la secuencia de instrucciones se ejecuta de una vez (sin ceder el procesador a otras tareas o al ncleo)
declare T0, T1, T2 : Ada.Real_Time.Time; Execution_Time : Ada.Real_Time.Time_Span; N : constant Positive := ...; begin T0 := Ada.Real_Time.Clock; for i in 1 .. N loop -- secuencia de instrucciones end loop; T1 := Ada.Real_Time.Clock; for i in 1 .. N loop null; end loop; T2 := Ada.Real_Time.Clock; Execution_Time = ((T1 - T0) - (T2 - T1))/N; end;

SISTEMAS DE TIEMPO REAL

63

RELOJES CALENDARIO
Reloj calendario Fecha Hora oficiales Un reloj calendario no es montono Horario de invierno Horario de verano En el cambio a horario de verano el reloj se atrasa

Un reloj de estas caractersticas no se puede utilizar en tiempo real

SISTEMAS DE TIEMPO REAL

64

ACTIVACIN DE TAREAS
Mecanismos bsicos de activacin de tareas: Por interrupcin
Tareas peridicas Tareas espordicas

Con retardos
Tareas peridicas

Primitivas de comunicacin/sincronizacin (tareas que activan a otras tareas)


Semforos, buzones Cita Tareas peridicas o espordicas

SISTEMAS DE TIEMPO REAL

65

ACTIVACIN POR INTERRUPCIN


La estructura de la aplicacin depende del hardware disponible:
La activacin es realizada directamente por el hardware Se asocia una interrupcin a cada tarea Tareas peridicas -> un timer (hardware) por cada tarea

Con esta aproximacin la aplicacin es dependiente del hardware:


Hardware especfico, no de propsito general Falta de transportabilidad Mucha eficiencia

SISTEMAS DE TIEMPO REAL

66

EJEMPLO INTERRUPCIONES
Ada95
task body Task_i is

begin loop Int_i.Wait_for_Event ; Event_Processing ; end loop ; end Task_i ; protected Int_i is entry Wait_for_Event ; private protected body Int_i is procedure Handler ; Interrupt_Ocurred: boolean := false ; procedure Handler is end ; begin Interrupt_Ocurred:= true ; end ; entry Wait_for_Event when Interrupt_Ocurred is begin Interrupt_Ocurred := false ; end ; end ;

SISTEMAS DE TIEMPO REAL

67

EJEMPLO INTERRUPCIONES
VxWorks

void task (void) { while (TRUE){

void Int_Handler (void) { ... ; semGive (syncSem) ; }

semTake (syncSe, WAIT_FOREVER) ; Event_Processing () ; } }

SISTEMAS DE TIEMPO REAL

68

RETARDOS
Los retardos permiten controlar el tiempo de activacin de las tareas. Esta tcnica de activacin no depende del hardware Hardware propsito general Transportabilidad En Ada95 y otros lenguajes y sistemas operativos se realizan mediante la instruccin: delay <duracion> ; / nanosleep (<duracion>) ; Efecto: suspende la ejecucin de la tarea durante, al menos, la duracin especificada, a partir del momento en que se invoca. La ejecucin puede verse retrasada durante una duracin mayor a la especificada debido a: Precisin del reloj menor que la precisin de la duracin especificada. Un mtodo de planificacin que selecciona otra tarea para la ejecucin antes que la retrasada.

SISTEMAS DE TIEMPO REAL

69

TAREAS PERIDICAS Y RETARDOS


Los retardos se pueden utilizar para realizar tareas peridicas:
task PERIODICA; task body PERIODICA is PERIODO: constant DURATION := ; begin loop -- accin periodica delay PERIODO ; end loop ; end PERIODICA ;

Problema: deriva acumulativa. Los retrasos que se producen en cada periodo (deriva local) se van acumulando.

SISTEMAS DE TIEMPO REAL

70

TAREAS PERIDICAS Y RETARDOS


Esquema que elimina la deriva acumulativa (no la local):

task body PERIODICA is PERIODO: constant DURATION := ; SIGUIENTE: TIME ; begin SIGUIENTE:= CLOCK ; loop -- accin periodica SIGUIENTE:= SIGUIENTE + PERIODO ; delay SIGUIENTE - CLOCK ; end loop ; end PERIODICA ;

SISTEMAS DE TIEMPO REAL

71

TAREAS PERIDICAS Y RETARDOS


P=50 ms a1 a2 a3 a4

A1

delay 0.05

A2
50 ms

delay 0.05

A3
50 ms

DL

DA

DL

DA

Primera aproximacin

A1

delay A2 0.01

delay 0.02

A3

delay 0.03

A4

DL

DL

DL=0

DL

Aproximacin buena

SISTEMAS DE TIEMPO REAL

72

TAREAS PERIDICAS Y RETARDOS


En C + VxWorks
#include "delays.h" .... void tarea_periodica(void) { struct timespec siguiente, inicio, ahora, ts ; struct timespec periodo = to_timespec(0.05) ; clock_gettime(CLOCK_REALTIME, &inicio) ; siguiente = inicio ; while(1) { <cdigo peridico> siguiente=add_timespec(siguiente, periodo); clock_gettime(CLOCK_REALTIME, &ahora) ; ts = sub_timespec (siguiente, ahora) ; nanosleep(&ts, 0) ; } }

SISTEMAS DE TIEMPO REAL

73

DELAY UNTIL
Resuelve el problema de la no atomicidad de la instruccin: delay SIGUIENTE - CLOCK ; utilizando tiempo absoluto

task body PERIODICA is PERIODO: constant DURATION := ; SIGUIENTE: TIME ; begin SIGUIENTE:= CLOCK ; loop -- accin periodica SIGUIENTE:= SIGUIENTE + PERIODO ; delay until SIGUIENTE ; end loop ; end PERIODICA ;

Ada 95

SISTEMAS DE TIEMPO REAL

74

COMUNICACIN / SINCRONIZACIN
Tarea peridica con supervisor Es posible tratar posibles prdidas de activacin con un supervisor
procedure main is ... task body supervisor_T1 is begin SIGUIENTE:= CLOCK ; loop select T1.activacion ; else manejo_perdida_activacion ; end select ; SIGUIENTE:= SIGUIENTE + PERIODO ; delay until SIGUIENTE ; end loop ; end supervisor_T1 ;

task body T1 is begin loop accept activacion ; task1 ; end loop ; end T1 ; ... begin null; end main ;

SISTEMAS DE TIEMPO REAL

75

TIME-OUT
A veces es necesario limitar el tiempo durante el cual una tarea espera que ocurra algn evento. Una tarea queda suspendida cuando requiere: una operacin de entrada/salida u otro servicio del sistema operativo una comunicacin con otra tarea Pb: si el dispositivo o la tarea cooperante falla la tarea suspendida nunca volver a estar activa Solucin: Time-out, tiempo mximo en el cual la tarea quedar suspendida

SISTEMAS DE TIEMPO REAL

76

TIME OUT
Limitacin del tiempo de espera Sincronizacin condicional: semforo con time-out
Ejemplo: en VxWorks
semTake(semaforo, NO_WAIT) ; semTake(semaforo, WAIT_FOREVER) ; semTake(semaforo, num_ticks) ;

Paso de mensajes: buzn con time-out


Ejemplo: en VxWorks
msgQReceive(Qid, &buf, max, NO_WAIT) ; msgQReceive(Qid, &buf, max, WAIT_FOREVER) ; msgQReceive(Qid, &buf, max, num_ticks) ; msgQSend(Qid, &buf, lon, NO_WAIT, prio) ; msgQSend(Qid, &buf, lon, WAIT_FOREVER, prio) ; msgQSend(Qid, &buf, lon, num_ticks, prio) ;

SISTEMAS DE TIEMPO REAL

77

TIME OUT
Limitar el tiempo de ejecucin de una accin si se supera el tiempo mximo, puede ser necesaria una accin de recuperacin
Ejemplo: Watchdogs en VxWorks
void recupera(int parametro) { printf(Watchdog expirado\n) ; } void tarea1(void) { WDOG_ID miwdog ; ... miwdog = wdCreate() ; ... wdStart(miwdog, ticks, recupera, param) ; <cdigo vigilado> wdCancel(miwdog) ; ... }

SISTEMAS DE TIEMPO REAL

78

PLANIFICACION
Adems de la limitacin del tiempo de espera aparecen otras restricciones que afectan al tiempo de ejecucin de sus actividades:

Periodicidad Tiempo de respuesta ante un evento Completar el trabajo antes de un plazo

Cmo planificar la ejecucin de las actividades de forma que se satisfagan las restricciones temporales?

SISTEMAS DE TIEMPO REAL

79

PLANIFICACIN
Marco temporal de una tarea: es el conjunto de atributos temporales asociados.
Tiempo de activacin: ta Periodo de ejecucin: P T; o separacin mnima: S Retardo: r ; retardo mximo: R

Jitter: variacin en r

Tiempo de cmputo: c ; id. mximo: C Tiempo de ejecucin transcurrido: e Tiempo de finalizacin: tf Tiempo de respuesta: d Plazo de respuesta: D (deadline) Tiempo lmite: tl
t a (k) r d D P t a (k+1)
activacin comienzo k fin activacin k+1

c1

c = c1 + c2 + c3 c2 c3 e t f (k) t l (k)

SISTEMAS DE TIEMPO REAL

80

PLANIFICACIN
Las restricciones temporales ms comunes se refieren al plazo de respuesta de las tareas. Desde este punto de vista, podemos distinguir tres clases de tareas: Tareas de tiempo real crticas. No admiten que se sobrepase el tiempo lmite en ningn caso. Tareas de tiempo real acrticas. Admiten que se sobrepase el tiempo lmite ocasionalmente. Tareas interactivas. No tienen plazo de respuesta estricto, aunque el tiempo de respuesta debe ser lo ms corto posible.

SISTEMAS DE TIEMPO REAL

81

PLANIFICACIN
Objetivo: Planificar el uso de los recursos del sistema (en particular, el procesador), para poder garantizar los requisitos temporales de las tareas

Un mtodo de planificacin consta de: Un algoritmo de planificacin, que determina el orden de acceso de las tareas a los recursos del sistema Un mtodo de anlisis que permite calcular el comportamiento temporal del sistema
Para comprobar que los requisitos estn garantizados en todos los casos Se estudia siempre el peor caso Es necesario conocer la duracin de las tareas en el peor caso

SISTEMAS DE TIEMPO REAL

82

PLANIFICACION
Mtodos: Planificacin esttica off-line
Planificacin cclica

Planificacin basada en prioridades


Prioridades estticas

Prioridad al ms frecuente (Rate monotonic) Prioridad al ms urgente (Deadline monotonic)

Prioridades dinmicas

Proximidad del plazo de respuesta (Earliest deadline first) Prioridad al de menor holgura (Least Laxity First)

SISTEMAS DE TIEMPO REAL

83

PLANIFICACION CICLICA
Ejecutivo cclico: estructura de control o programa cclico que entrelaza de forma explcita la ejecucin de diversos procesos peridicos en un nico procesador. El entrelazado es fijo. Planificacin cclica: especificacin del entrelazado de varios procesos peridicos durante un periodo de tiempo (ciclo principal) de tal forma que su ejecucin cclica garantiza el cumplimiento de los plazos de los procesos

Ejemplo: cuatro procesos (plazo = periodo) (C,P,D) A=(1,10,10), B=(3,10,10), C=(2,20,20), D=(8,20,20)
0 A B C 6 D1 10 A B 14 D2 20

SISTEMAS DE TIEMPO REAL

84

PRIORIDADES
Son un mecanismo elemental para planificar la ejecucin de un conjunto de tareas. La prioridad es un atributo de las tareas normalmente ligado a su importancia relativa en el conjunto de tareas. Planificacin por prioridades: en cada momento se ejecuta la tarea ms prioritaria de entre todas las ejecutables (preparadas). Planificacin expulsiva: se abandona inmediatamente la ejecucin de la tarea en ejecucin cuando otra ms prioritaria pasa al estado preparada para ejecucin. La prioridad de una tarea puede ser: Esttica: la prioridad permanece constante a lo largo de la existencia de la tarea. Dinmica: la prioridad puede variar en funcin del estado o modo de funcionamiento del sistema.

SISTEMAS DE TIEMPO REAL

85

PRIORIDADES
Ejemplo: T1 = (5,20,20) T2 = (10,40,40) T3 = (40,80,80)

Prio(T1) > Prio(T2) > Prio(T3)

T1 T2 fin T3 T3 0 10 20 30 40 50 60 70 80

SISTEMAS DE TIEMPO REAL

86

SISTEMAS DE TIEMPO REAL

PLANIFICACION CCLICA

SISTEMAS DE TIEMPO REAL

87

MODELO DE TAREAS
Consideraremos inicialmente un modelo de tareas simple: Conjunto de tareas esttico Todas las tareas son peridicas Las tareas son independientes entre s Se conoce el tiempo de ejecucin mximo de cada tarea C i Cada tarea tiene un plazo de respuesta D i T i

Despus veremos como incorporar tareas espordicas

SISTEMAS DE TIEMPO REAL

88

PLAN PRINCIPAL
Ejecutivo cclico: estructura de control o programa cclico que entrelaza de forma explcita la ejecucin de diversos procesos peridicos en un nico procesador. El entrelazado es fijo y est definido en el denominado plan principal que es construido antes de poner en marcha el sistema Plan principal: especificacin del entrelazado de varios procesos peridicos durante un perodo de tiempo (ciclo principal) de tal forma que su ejecucin cclica garantiza el cumplimiento de los plazos de los procesos La duracin del ciclo principal es igual al mnimo comn mltiplo de los perodos de los procesos
M = mcm (Ti) se supone tiempo entero (p.e. Nmero de ticks) el comportamiento temporal del sistema se repite cada ciclo principal

SISTEMAS DE TIEMPO REAL

89

PLANES SECUNDARIOS
Cada plan principal es dividido en uno o ms planes secundarios o marcos (frames) que se ejecutarn de forma secuencial. Cada comienzo/fin de un marco en el ejecutivo cclico se sincroniza con el reloj. Son puntos donde se fuerza la correccin del tiempo real. Por simplicidad, en la prctica, la duracin de todos los marcos es la misma. A esta duracin se le denomina ciclo secundario. Si las acciones definidas en un marco acaban antes de que concluya el ciclo secundario el ejecutivo cclico espera (p.e. en un delay) Si las acciones definidas en un marco no han acabado al terminar el ciclo secundario, se produce un error: desbordamiento de marco. Si la duracin de una accin es superior al ciclo secundario debe ser descompuesta en subacciones

SISTEMAS DE TIEMPO REAL

90

EJEMPLO
Cuatro procesos (plazo = periodo) (C,T,R) A=(1,10,10), B=(3,10,10), C=(2,20,20), D=(8,20,20)

Plan principal:
0 A B C 6 D1 10 A B 14 D2 20

Ciclo principal: 20 ms Ciclo secundario: 10 ms

SISTEMAS DE TIEMPO REAL

91

EJEMPLO
Ejecutivo cclico:
procedure cyclic_executive_1 is type frame_index is mod 2 ; interval: constant := 0.01 ; next_time: time := clock ; frame_number: frame_index := 1 ; begin loop frame_number:= frame_number + 1 ; case frame_number is when 0 => A; B; C; D1; when 1 => A; B; D2; end case next_time := next_time + interval ; if clock > next_time them frame_overrun ; end if ; delay until next_time ; end loop ; end cyclic_executive_1 ;

SISTEMAS DE TIEMPO REAL

92

EJEMPLO (C+VxWorks)
Ejecutivo cclico:
#include "delays.h
void delay_until(TS ts) { TS ahora, resto ; clock_gettime(CLOCK_REALTIME, &ahora) ; resto = sub_timespec(ts, ahora) ; nanosleep(&resto, 0) ;

void main (void) { } struct timespec next ; struct timespec interval = to_timespec(0.01) ; int frame_number = 1 ; clock_gettime(CLOCK_REALTIME, &next) ; while(1) { frame_number = (frame_number + 1)%2 ; switch (marco) { case 0: A; B; C; D1; break ; case 1: A; B; D2; break ; } next = add_timespec(next, interval); delay_until (next) ; } }

SISTEMAS DE TIEMPO REAL

93

PROPIEDADES
No hay concurrencia en la ejecucin
Cada ciclo secundario es una secuencia de llamadas a procedimientos No se necesita un ncleo de ejecucin multitarea

Los procedimientos pueden compartir datos


No se necesitan mecanismos de exclusin mutua como los semforos o monitores

SISTEMAS DE TIEMPO REAL

94

DETERMINACION DE LOS CICLOS


Sea un conjunto de procesos peridicos {Pi / i = 1..n}, con requisitos temporales representados por ternas (Ci, Ti, Di). Ciclo principal:
M = mcm (Ti)

Ciclo secundario
m min(Di) m max(Ci) k: M = km i: m+ (m - mcd(m,Ti)) Di

garantiza que entre el instante de activacin de cada proceso y su plazo lmite exista un marco o ciclo secundario completo m - mcd(m,Ti) es el retraso mximo entre la activacin de un proceso y el comienzo del siguiente marco esta condicin incluye a la primera

SISTEMAS DE TIEMPO REAL

95

EJEMPLO
Considrese tres procesos
P E F G C 1 2 3 T 14 20 22 D 14 20 22

Ciclo principal
M = mcm(14,20,22) = 1540

Ciclo secundario
m min(14,20,22) => m = 1..14 m max(1,2,3) => m = 3..14 k: 1540 = km => m = 4,5,7,10,11,14 m+ (m - mcd(m,Ti)) Di => m = 4,5,7

SISTEMAS DE TIEMPO REAL

96

EJEMPLO
para m = 4
i 1 2 3 Ti 14 20 22 mcd(m,Ti) retraso 2 4 2 2 0 2 m+retraso 6 4 6 < < < Di 14 20 22

m=4

14 6

20 4 6

22

E F G

SISTEMAS DE TIEMPO REAL

97

EJEMPLO
para m = 10
i 1 Ti 14 mcd(m,Ti) retraso 2 8 m+retraso 18 > Di 14 NO

18 14 m = 10

E F G

14

28

42

56

SISTEMAS DE TIEMPO REAL

98

INCLUSIN DE PROCESOS PERIODICOS


En cada ciclo principal se tienen ncs = M/m ciclos secundarios En cada plan principal se tienen nei = M/Ti ejecuciones de cada proceso Pi Hay que definir la secuencia de procesos de cada marco: x:{Pik,Pjl,..,Prs} La ejecucin k-sima de un proceso Pi caracterizado por ternas (Ci, Ti, Di) podr ser incluida en los marcos j-simos que comienzan despus de la activacin de Pik y terminan antes del deadline de Pik:
(k 1)Ti ( j 1) m jm ( k 1)Ti + Di

Para que la ejecucin k-sima de Pi pueda ser incluida en la secuencia de procesos x del marco x, debe quedar suficiente tiempo libre en el marco:
Ci m
l , Pl x

Cl

SISTEMAS DE TIEMPO REAL

99

PLANIFICACIN
Objetivo: asignacin de procesos (o subprocesos) a los marcos de forma que se cumplan los requisitos temporales Planteamiento: bsqueda en el espacio de estados Estado: asignacin parcial Algoritmo: bsqueda en profundidad con retroceso
se pretende encontrar una nica solucin

Guiado de la bsqueda: heursticas


sobre el siguiente proceso a asignar

primero el ms urgente o el ms frecuente primero el de tiempo de proceso ms grande

si varios marcos cumplen las condiciones:


el primer marco que cumpla las condiciones el marco con menor tiempo de cmputo libre

SISTEMAS DE TIEMPO REAL

100

EJEMPLO: PLANIFICACIN
Conjunto de procesos a planificar:
Proceso P1 P2 P3 P4 C 2 3 1 2 T 8 8 6 12 D 8 8 6 12

Ciclo principal: M = mcm(6,8,12) = 24 Nmero de ejecuciones a planificar


ne1 = M/8 = 3 ne2 = M/8 = 3 ne3 = M/6 = 4 ne4 = M/12 = 2

SISTEMAS DE TIEMPO REAL

101

EJEMPLO: PLANIFICACIN
Ciclo secundario
m min(6,8,12) => m = 1..6 m max(1,2,3) => m = 3..6 k: 24 = km => m = 3,4,6 m+ (m - mcd(m,Ti)) Di => m = 3,4

posibles_m = {4,3}

SISTEMAS DE TIEMPO REAL

102

EJEMPLO: PLANIFICACIN
Ordenacin procesos: primero el ms urgente
Proceso P1 P2 P3 P4 C 1 3 2 2 T 6 8 8 12 D 6 8 8 12 n 4 3 3 2

Se intenta planificar primero para m=4 (la complejidad del problema disminuye con el nmero de marcos) Un planificacin consta de 6 marcos consecutivos

SISTEMAS DE TIEMPO REAL

103

EJEMPLO: PLANIFICACION
Pik puede ir en el marco j si:

(k 1)Ti ( j 1) m jm ( k 1)Ti + Di

P11

P12 4 8 12 P22 8 12 P32 8 P41 12

P13 16 20

P14 24

P1 P2 P3 P4

P21 0 4 P31 0 4

P23 16 20 P33 16 P42 20 24 24

12

16

20

24

SISTEMAS DE TIEMPO REAL

104

EJEMPLO: PLANIFICACIN

1 1 1 1

1 2 1 2 1 2 1

1 2 1 2 1 2 1

1 2 1 1 2 2 1

1 2 1 1 2 2 1

1 2 1 2 1 1 2 1 3 1 1 3 1

1 3 1 1 2 1

2 2 3 3

1 2 1 1 2 1

3 2 3 3

1 3 1 1 2 1

2 3 2 3

1 2 1 1 2 1

3 3 2 3

2 2 3 2

1 3 1 1 3 1

2 4 2 3 4 2

SISTEMAS DE TIEMPO REAL

105

PARTICIN DE PROCESOS
Hay casos en que un conjunto de procesos que no es planificable: Si el tiempo de cmputo de uno es mayor que el plazo de algn otro: Ci > Dk => No existe valor de m que cumpla a la vez:
m min(Di) m max(Ci)

Si para una ejecucin de un proceso no queda ningn marco con suficiente tiempo libre Solucin: descomponer el proceso demasiado largo Pi=(Ci,Ti,Di) en varios subprocesos Pij=(Cij,Tij,Dij): Tij=Ti ; Dij=Di Ci1+Ci2+Ci3+... = Ci no partir secciones crticas relacin de precedencia en cada una de las ejecuciones a mantener en la planificacin: Pi1Pi2Pi3...

SISTEMAS DE TIEMPO REAL

106

RELACIONES DE PRECEDENCIA
Sean Pi1 y Pi2 dos procesos entre los que existe una relacin de precedencia Pi1Pi2, En la ordenacin de los procesos para su inclusin en la planificacin se mantiene el orden de precedencia (los dos subprocesos tienen las mismas restricciones temporales) Para incluir la ejecucin k-sima de Pi2, Pi2k, en la planificacin:
obtener los valores {j,...,j+h} de los marcos donde puede ser incluida a partir de: (k 1)T ( j 1) m
jm ( k 1)Ti + Di
i

Debido al orden de inclusin Pi1k ya ha sido incluida en el marco j+l {j,...,j+h}. El conjunto de marcos donde puede ser incluida se reduce a {j+l,...,j+h} A los elementos de {j+l,...,j+h} se aplica la condicin
Ci 2 m
l , Pl x

Cl

SISTEMAS DE TIEMPO REAL

107

EJEMPLO: PARTICIN DE PROCESOS


Conjunto de procesos a planificar:
Proceso P1 P2 P3 C 2 2 8 T 6 8 24 D 6 8 20

Ciclo principal
M = mcm(6,8,24) = 24

Ciclo secundario
m min(6,8,20) => m = 1..6 m max(2,2,8) => no hay ningn m que lo cumpla

Es preciso partir el proceso P3 en varios subprocesos con tiempo de cmputo menor que 6 unidades de tiempo Particin en P31 P32 con igual tiempo de cmputo, 4 unidades

SISTEMAS DE TIEMPO REAL

108

EJEMPLO: PARTICIN DE PROCESOS


Conjunto de procesos a planificar:
Proceso P1 P2 P31 P32 C 2 2 4 4 T 6 8 24 24 D 6 8 20 20

Ciclo principal
M = mcm(6,8,24) = 24

Nmero de ejecuciones a planificar


ne1 = M/6 = 4 ne2 = M/8 = 3 ne31 = M/24 = 1 ne32 = M/24 = 1

SISTEMAS DE TIEMPO REAL

109

EJEMPLO: PARTICIN DE PROCESOS


Ciclo secundario
m min(6,8,20) => m = 1..6 m max(2,2,4) => m = 4..6 k: 24 = km => m = 4,6 m+ (m - mcd(m,Ti)) Di => m = 4

Unica posibilidad de planificacin m=4 Ordenacin de procesos: primero el ms urgente manteniendo relaciones de precedencia
Misma tabla anterior P1 P2 P31 P32

Un planificacin consta de 6 marcos consecutivos: M = 6m

SISTEMAS DE TIEMPO REAL

110

EJEMPLO: PARTICIN DE PROCESOS

1 1

2 2

1 1 2 1

1 1

1 31 1 1 2 1

1 31 1 1

2 2

1 31 1 1 32 1

2 2

SISTEMAS DE TIEMPO REAL

111

PARTICIN CON SECCIONES CRTICAS


Si es preciso partir algn proceso en subprocesos, no deben partirse las secciones crticas con objeto de preservar la exclusin mutua Ejemplo: Planificar la ejecucin de los siguientes procesos:
P P1 P2 P3 C 20 25 90 T 100 150 300 D 100 150 300

Dichos procesos acceden a una seccin crtica comn tal y como muestra el siguiente esquema:
P1 P2 P3
15 15 15 5 10 20 15 40

SISTEMAS DE TIEMPO REAL

112

PARTICIN CON SECCIONES CRTICAS


Ciclo principal
M = mcm(100,150,300) = 300

Nmero de ejecuciones a planificar


ne1 = M/100 = 3 ; ne2 = M/150 = 2 ; ne3 = M/300 = 1

Ciclo secundario
m min(100,150,300) => m = 1..100 m max(20,25,90) => m = 90..100 k: 300 = km => m = 100 m+ (m - mcd(m,Ti)) Di => m = 100

Posibles valores de m = {100} Ordenacin procesos: primero el ms urgente


Misma ordenacin que en el enunciado

Un planificacin consta de 3 marcos consecutivos

SISTEMAS DE TIEMPO REAL

113

PARTICIN CON SECCIONES CRTICAS


No existe planificacin porque no queda ningn marco donde quepa el proceso P3 Particin de P3
Tiempo sobrante en los marcos: 55, 80, 55 ms P31: primera seccin crtica + segundo segmento cdigo P32: segunda seccin crtica + cuarto segmento cdigo
1 1 1

1 1 1

2
2

SISTEMAS DE TIEMPO REAL

114

PARTICION CON SECCIONES CRITICAS


Nueva especificacin de procesos:
P P1 P2 P31 P32 C 20 25 35 55 T 100 150 300 300 D 100 150 300 300

Ciclo principal
M = mcm(100,150,300) = 300

Nmero de ejecuciones a planificar


ne1 = M/100 = 3 ne2 = M/150 = 2 ne31 = M/300 = 1 ne32 = M/300 = 1

SISTEMAS DE TIEMPO REAL

115

PARTICIN CON SECCIONES CRTICAS


Ciclo secundario
m min(100,150,300) => m = 1..100 m max(20,25,35,55) => m = 55..100 k: 300 = km => m = 60,75,100 m+ (m - mcd(m,Ti)) Di => m = 60,100

Posibles valores de m = {60,100} Para m=100:


1 1 1

1 1 1

2 2

1 1 1

2 32 2

31

SISTEMAS DE TIEMPO REAL

116

PROCESOS ESPORDICOS
Proceso espordico E: atencin a eventos externos aperidicos SE : separacin mnima entre eventos DE : plazo lmite ( normalmente DE SE ) CE : tiempo de cmputo mximo En un ejecutivo cclico los procesos espordicos pueden programarse de dos formas: Por muestreo peridico del evento

Por interrupcin

SISTEMAS DE TIEMPO REAL

117

ESPORADICOS POR MUESTREO


Se programa el proceso espordico como un proceso peridico que consulta si ha llegado un evento, y en tal caso, lo procesa. Transformamos el proceso espordico en peridico con D = T DE / 2, y lo planificamos de la forma convencional
Si el proceso peridico cumple sus plazos, cualquier evento se atiende en su plazo DE T Proceso peridico

DE evento Se consulta, y no hay evento Hay evento, y se procesa CE

SISTEMAS DE TIEMPO REAL

118

EJEMPLO 1
Conjunto de procesos a planificar:
Proceso E P1 P2 C 1 3 2 6 12 T D 8 6 12 S 20

Proceso peridico equivalente: D = T= 4 DE / 2


Proceso PE P1 P2 C 1 3 2 T 4 6 12 D 4 6 12

Ciclo principal
M = mcm(4,6,12) = 12

Ejecuciones a planificar: nE = M/4 = 3 ; n1 = M/6 = 2 ; n2 = M/24 = 1

SISTEMAS DE TIEMPO REAL

119

EJEMPLO 1
Ciclo secundario
m min(4,6,12) => m = 1..4 m max(1,2,3) => m = 3..4 k: 12 = km => m = 3,4 m+ (m - mcd(m,Ti)) Di => m = 4

Plan de 3 marcos de duracin m=4

E E E E E E E E E 1 1 1 2 1

SISTEMAS DE TIEMPO REAL

120

ESPORDICOS POR INTERRUPCIN


La llegada del evento produce una interrupcin, y el evento se trata inmediatamente

Basta con reservar tiempo en cada marco para atender el mximo nmero de eventos que pueden llegar en un marco:

Cres

m = C E SE

SISTEMAS DE TIEMPO REAL

121

EJEMPLO 2
Conjunto de procesos a planificar (primero el ms urgente):
Proceso E P2 P3 P4 C 1 3 2 2 8 8 12 T D 7 8 8 12 S 10

Calculamos los ciclos con los peridicos Ciclo principal


M = mcm(8,12) = 24

Nmero de ejecuciones a planificar


ne2 = M/8 = 3 ne3 = M/8 = 3 ne4 = M/12 = 2

SISTEMAS DE TIEMPO REAL

122

EJEMPLO 2
Ciclo secundario
m min(8,12) => m = 1..8 m max(2,3) => m = 3..8 k: 24 = km => m = 3,4,6,8 m+ (m - mcd(m,Ti)) Di => m = 3,4,8

Probamos con 3 marcos de duracin m=8 En cada uno reservamos tiempo para atender un evento

Cres

m = CE SE

SISTEMAS DE TIEMPO REAL

123

EJEMPLO 2

E E E E E E E E E E E E P2 P2 P2 P2 P2 P2 P2 P2 P2 P3 P3 P3 P3 P3 P3 P4 P4

SISTEMAS DE TIEMPO REAL

124

PROGRAMACIN DEL EJECUTIVO


Mediante un ejemplo: Cuatro procesos (plazo = periodo) (C,T,D): A=(1,10,10), B=(3,10,10), C=(2,20,20), D=(8,20,20)
Proceso A B C D1 D2 C 1 3 2 2 6 T 10 10 20 20 20 D 10 10 20 20 20

Planificacin:
M = 20, m=10

0 A B C

6 D1

10 A B

14 D2

20

SISTEMAS DE TIEMPO REAL

125

EJECUTIVO - 1
task cyclic_executive_1 ; task body cyclic_executive_1 is interval: constant := 0.01 ; next_time: time := clock ; frame_number: integer := 0 ; begin loop frame_number:= (frame_number mod 2) +1 ; case frame_number is when 1 => A; B; C; D1; when 2 => A; B; D2; end case next_time := next_time + interval ; if clock > next_time them frame_overrun ; end if ; delay until next_time; end loop ; end cyclic_executive_1 ;

SISTEMAS DE TIEMPO REAL

126

EJECUTIVO - 1
Ventajas: Independiente del hardware: transportable, no hardware especfico, ... Inconvenientes: El desbordamiento de marco slo es detectado despus de acabar el marco Sobrecarga por la ejecucin del delay
aritmetica del tipo TIME costosa (normalmente 64 bits) acceso al reloj costoso (p.e. en exclusin mutua con la actualizacin) manejo de la tarea por el RTS costoso

SISTEMAS DE TIEMPO REAL

127

EJECUTIVO - 2
task cyclic_executive_2 ; task body cyclic_executive_2 is frame_number: integer := 0 ; begin loop Timer_Handler.Wait_for_Interrupt ; frame_number:= (frame_number mod 2) +1 ; case frame_number is when 1 => A; B; C; D1; when 2 => A; B; D2; end case end loop ; end cyclic_executive_2 ;

SISTEMAS DE TIEMPO REAL

128

EJECUTIVO - 2
Ventajas: Mayor control sobre el tiempo
No sobrecarga por manejo tiempo, lo hace el hardware

Inconvenientes: Dependencia del hardware


No transportable Necesidad de un timer esclavo

Qu pasa con el desbordamiento de marco?


No se detecta el desbordamiento pero el sistema puede recuperarse

SISTEMAS DE TIEMPO REAL

129

EJECUTIVO - 3
task cyclic_executive_3 is pragma priority (system.prioritylast) ; end cyclic_executive_3 ; task action is entry next_frame ; end action ; task body cyclic_executive_3 is begin loop Timer_Handler.Wait_for_Interrupt ; select action.next_frame ; else frame_overrun ; end select ; task body action is end loop ; frame_number: integer := 0 ; end cyclic_executive_3 ; begin loop accept next_frame ; frame_number:= (frame_number mod 2) +1 ; case frame_number is when 1 => A; B; C; D1; when 2 => A; B; D2; end case end loop ; end action ;

SISTEMAS DE TIEMPO REAL

130

VENTAJAS/INCONVENIENTES
Ventajas Predictibilidad del sistema: la ejecucin est predeterminada Al no requerirse cambios de contexto la sobrecarga introducida por el ncleo es muy pequea Inconvenientes La introduccin de cualquier cambio es muy costosa (replanificacin, reprogramacin) Ante un conjunto de procesos no planificable, la particin de procesos no es evidente

SISTEMAS DE TIEMPO REAL

131

PLANIFICACIN BASADA EN PRIORIDADES: PRIORIDAD AL MS FRECUENTE (RMS)

SISTEMAS DE TIEMPO REAL

132

INTRODUCCION
Planificacin con asignacin de prioridades a la tarea ms frecuente RMS/RMA: Rate Monotonic Scheduling / Analysis Prioridades estticas Plazo de respuesta = perodo en tarea peridicas

Es un marco terico que proporciona una base para el diseo de sistemas de tiempo real. Proporciona directrices para asignar prioridades ptimas Proporciona un marco analtico para verificar los requisitos temporales Ayuda a identificar cuellos de botella Permite la separacin de los aspectos temporales y funcionales

SISTEMAS DE TIEMPO REAL

133

TAREAS PERIODICAS CRITICAS


Factor de utilizacin Es una medida de la carga del procesador. El factor de utilizacin de una tarea Ti es:
Ci Ui = Pi

El factor de utilizacin total del sistema es

U = U i =
i =1

Ci i i =1 P

Se trata de encontrar mtodos que proporcionen planificaciones admisibles con factores de utilizacin lo ms altos posible. Con un solo procesador, el factor de utilizacin est limitado a
U1

En general para M procesadores


UM

SISTEMAS DE TIEMPO REAL

134

TAREAS PERIODICAS CRITICAS


Planificacin basada en prioridades Consideraremos prioridades estticas y planificacin expulsiva. Frecuentemente se asignan prioridades a las tareas segn su "importancia". De esta forma no se puede calcular si se pueden garantizar los plazos o no. Puede fallar incluso con factores de utilizacin muy bajos. Ejemplo: T
T1 T2

C
10 2

P
50 10

U
0.20 0.20 0.40
a T1 a T2 0 a fallo 10 20 30 a a

Si hacemos p1 > p2, T2 falla.

fin

SISTEMAS DE TIEMPO REAL

135

TAREAS PERIODICAS CRITICAS


Prioridad al ms frecuente (RMS) La asignacin de prioridades ms altas a las tareas ms frecuentes (perodo ms corto) es ptima (Liu & Layland, 1973). Por ptima se entiende que no hay ninguna otra planificacin mejor. Si de esta forma no se obtiene un plan admisible, no se puede obtener con ningn otro mtodo basado en prioridades estticas. Ejemplo: T
T1 T2

C
10 2

P
50 10

U
0.20 0.20 0.40
a

Hacemos ahora p2 > p1 ( P2 < P1) --> las dos tareas terminan a tiempo

T1 a T2 0

a a a

10

20

30

SISTEMAS DE TIEMPO REAL

136

CONDICIONES DE GARANTIA DE PLAZOS


Teorema 1 (Liu & Layland): En un sistema de n tareas peridicas independientes con prioridades asignadas en orden de frecuencia, se cumplen todos los plazos de respuesta, para cualquier desfase inicial de las tareas, si n C U = i n( 21/ n 1) = U 0 (n) i i =1 P U0(n) es la utilizacin mnima garantizada para n tareas.

U 0 (1) = 1.000 U 0 (2) = 0.828 U 0 (3) = 0.779 U 0 (4) = 0.757 U 0 (5) = 0.743 ...

limU 0 (n) = 0.693 = ln 2


n

SISTEMAS DE TIEMPO REAL

137

CONDICIONES DE GARANTIA DE PLAZOS


Ejemplo:
T T1 T2 T3 C 5 10 20 P 20 40 80 U 0.25 0.25 0.25 0.75

La utilizacin total es 0.75 < U(3) = 0.779 => los plazos de las tres tareas estn garantizados si: pr1 > pr2 > pr3 El 25% del tiempo de CPU utilizable en clculos sin requerimientos temporales

SISTEMAS DE TIEMPO REAL

138

CONDICIONES DE GARANTIA DE PLAZOS


En muchos caso se pueden garantizar plazos con factores de utilizacin mayores que U0(n). Teorema 1: condicin suficiente, no necesaria Ejemplo: T
T1 T2 T3

C
5 10 40

P
20 40 80

U
0.25 0.25 0.50 1.00

U = 1.00 > U0(3) = 0.779 Los plazos de respuesta de las tareas no estn garantizados, segn el Teorema 1 Sin embargo asignando prioridades RMA se cumplen los plazos de respuesta

SISTEMAS DE TIEMPO REAL

139

CONDICIONES DE GARANTIA DE PLAZOS


Teorema 2 (Liu & Layland): En un sistema de n tareas peridicas independientes con prioridades estticas, se cumplen todos los plazos de respuesta, para cualquier desfase inicial de las tareas, si cuando se activan todas ellas simultneamente, cada tarea acaba dentro del plazo en su primera ejecucin. En el ejemplo anterior: U1.2 = 0.50 < U0(2) = 0.828 Por tanto, se pueden garantizar los plazos de T1 y T2. Para comprobar si se puede garantizar los plazos de T3 hay que aplicar el teorema 2

T1 T2 fin T3 T3 0 10 20 30 40 50 60 70 80

SISTEMAS DE TIEMPO REAL

140

CONDICIONES DE GARANTIA DE PLAZOS


Test de Tiempo de Finalizacin El tiempo de finalizacin de una tarea Ti (tfi) es:

t t t fi = min P C1 + ... + P Ci 1 + Ci = t t >0 i 1 1


Por lo tanto la tarea Ti cumplir su primer plazo si:

t fi Pi
Justificacin:
Ti finaliza cuando no hay ms trabajo de prioridad pri pendiente. El trabajo solicitado en el instante t, suponiendo que todas las tareas han empezado en t=0, es:
i t t t Wi (t ) = C1 + ... + Ci 1 + Ci = C j P Pi 1 1 j =1 Pj

Wi : carga parcial de grado i en el instante t

SISTEMAS DE TIEMPO REAL

141

CONDICIONES DE GARANTIA DE PLAZOS


Clculo del tiempo de finalizacin Se puede usar el siguiente mtodo iterativo:
k +1

Wi

Wi k Wi k = C1 + ... + Ci 1 + Ci 1 P Pi 1

El clculo se realiza iterativamente hasta que se repite el resultado anterior:

Wi k +1 = Wi k = t fi

SISTEMAS DE TIEMPO REAL

142

CONDICIONES DE GARANTIA DE PLAZOS


Ejemplo:
T T1 T2 T3 C 7 10 20 P 20 40 80 U 0.35 0.25 0.25 0.85

U = 0.85 > U0(3) = 0.779 Sin embargo, U1,2= 0.60 < 0.828 Las tareas T1 y T2 cumplen sus plazos.

T3 cumple su plazo? => Tiempo de finalizacin

SISTEMAS DE TIEMPO REAL

143

CONDICIONES DE GARANTIA DE PLAZOS


Clculo del tiempo de finalizacin:

W30 = 0 W31 = C3 = 20 20 20 W32 = 7 + 10 + 20 = 37 20 40 37 37 W33 = 7 + 10 + 20 = 44 20 40 44 44 W34 = 7 + 10 + 20 = 61 20 40 61 61 W35 = 7 + 10 + 20 = 68 20 40 68 68 W36 = 7 + 10 + 20 = 68 20 40 t fi = W35 = W36 = 68 < 80

SISTEMAS DE TIEMPO REAL

144

CONDICIONES DE GARANTIA DE PLAZOS


Reformulacin / Generalizacin Punto de planificacin: Los puntos de planificacin de una tarea Ti son todos los instantes lmite (es decir los finales de los perodos) de las tareas de prioridad mayor o igual que Ti que se dan antes del final de su perodo, suponiendo que todas las tareas han comenzado simultneamente. Si es el conjunto de puntos de planificacin de la tarea Ti:
Pi Si = k p j j = 1..i; k = 1.. Pj

Teorema 3 (Lehoczky, Sha & Ding): En un sistema de n tareas peridicas independientes con prioridades asignadas en orden de frecuencia, se cumplen todos los plazos de respuesta, para cualquier desfase inicial de las tareas, si y slo si

i Cj i,1 i n, min tSi j =1 t

t 1 Pj

SISTEMAS DE TIEMPO REAL

145

CONDICIONES DE GARANTIA DE PLAZOS


Ejemplo:
T T1 T2 T3 C 7 10 20 P 20 40 80 U 0.35 0.25 0.25 0.85

S1 = {20} S2 = {20, 40} S3 = {20, 40, 60, 80}

SISTEMAS DE TIEMPO REAL

146

CONDICIONES DE GARANTIA DE PLAZOS


t 20 W1(t) (7*1)=7

t 20

W2(t) (7*1 + 10*1)=17

t 20 40 60 80

W3(t) (7*1 + 10*1 + 20*1)=37 (7*2 + 10*1 + 20*1)=44 (7*3 + 10*2 + 20*1)=61 (7*4 + 10*2 + 20*1)=68

SISTEMAS DE TIEMPO REAL

147

TIEMPO DE CAMBIO DE CONTEXTO


Tiempo de cambio de contexto de peor caso:

Cs = Csa + Csb

Csa: Salvar el contexto de la tarea en ejecucin Csb: Planificar y recuperar el contexto de la nueva tarea

C sb T1

Csa

C sb T2 Csa

SISTEMAS DE TIEMPO REAL

148

TIEMPO DE CAMBIO DE CONTEXTO


As pues:

Cada vez que una tarea expulsa a una de prioridad inferior que est activa, hay dos cambios de contexto En el peor caso es preciso considerar dos cambios de contexto por cada expulsin Esto implica aadir 2Cs al tiempo de ejecucin de cada tarea para el anlisis

SISTEMAS DE TIEMPO REAL

149

TIEMPO DE CAMBIO DE CONTEXTO


Ejemplo: Se supone un tiempo de cambio de contexto Cs = 2ms
T T1 T2 T3 C 20+4 40+4 100+4 P 100 150 350 U 0.240 0.293 0.271 0.831

U = 0.831 > U0(3) = 0.779 => Test de tiempos de finalizacin:

t f 1 = C1 + 2CS = 24ms 68 t f 2 = (C1 + 2CS ) + C2 + 2CS = 68ms P 1 264 264 ( ) (C2 + 2CS ) + C3 + 2CS = 264ms tf3 = C1 + 2CS + P P2 1

SISTEMAS DE TIEMPO REAL

150

TAREAS PERIODICAS CRITICAS/ACRITICAS


Cuando hay tareas acrticas podemos admitir fallos ocasionales en sus tiempos de respuesta. Se trata de garantizar: Los plazos de todas las tareas (crticas y acrticas) con los tiempos de cmputo medios. Los plazos de las tareas crticas con los tiempos de cmputo mximos.

La planificacin con prioridades es estable: fallan primero las tareas menos prioritarias. Si las tareas crticas no son las ms frecuentes, se puede hacer una transformacin de perodos. Se puede acortar el perodo de las tareas crticas o alargar el de las acrticas.

SISTEMAS DE TIEMPO REAL

151

TAREAS PERIODICAS CRITICAS/ACRITICAS


Ejemplo:
T T1 T2 T3 cm 6 8 10 C 10 10 12 P 30 40 50 um 0.200 0.200 0.200 0.600 U 0.333 0.250 0.240 0.823

um = 0.600 < U0(3) = 0.779 Se pueden garantizar los plazos de todas las tareas con los tiempos de cmputo medios. U = 0.823 > U0(3) = 0.779 U1.2 = 0.583 < U0(2) = 0.828 Con los tiempos de cmputo mximos, slo se pueden garantizar T1 y T2. Si T3 es crtica y T2 no: acortar el perodo de T3 => subir su prioridad.

SISTEMAS DE TIEMPO REAL

152

TAREAS PERIODICAS CRITICAS/ACRITICAS

T1 T2 T3 0 20 30 40 50 10 Tiempos de ejecucin medios

T1 T2 fallo T3 T3 0 20 30 40 50 10 Tiempos de ejecucin mximos

SISTEMAS DE TIEMPO REAL

153

TAREAS PERIODICAS CRITICAS/ACRITICAS


Transformacin de T3: Descomponemos T3 en dos segmentos, T31 y T32, cuyos tiempos de cmputo son la mitad del de T3. Construimos una nueva tarea, T3', que cada vez que se activa ejecuta uno de estos segmentos, alternativamente. El perodo de la nueva tarea es P3' = P3/2 = 25
T T3' T1 T2 cm 5 6 8 C 6 10 10 P 25 30 40 um 0.200 0.200 0.200 0.600 U 0.240 0.333 0.250 0.823

El factor de utilizacin sigue siendo el mismo, pero ahora T3 tiene la prioridad ms alta

SISTEMAS DE TIEMPO REAL

154

TAREAS PERIODICAS CRITICAS/ACRITICAS

T1 fallo T2
(9 u.)

T2
T31 T32

T3' 20 30 40 50 10 0 Tiempos de ejecucin mximos, con T3 transformada

SISTEMAS DE TIEMPO REAL

155

TAREAS PERIODICAS CRITICAS/ACRITICAS


El cdigo de T3' es:
with Ada.Real_Time; use Ada.Real_Time; task body T3_MODIFICADA is PERIODO: constant Time_Span := To_Time_Span(0.025); SIGUIENTE: TIME := CLOCK ; begin loop -- accion T31 ; SIGUIENTE:= SIGUIENTE + PERIODO ; delay until SIGUIENTE ; -- accion T32 ; SIGUIENTE:= SIGUIENTE + PERIODO ; delay until SIGUIENTE ; end loop ; end T3_MODIFICADA ;

SISTEMAS DE TIEMPO REAL

156

COMUNICACION ENTRE TAREAS


El anlisis de tareas con comunicaciones es un problema de gran complejidad => simplificaciones: las comunicaciones se restringen al modelo de clientes-servidores. las alternativas de los servidores no pueden estar guardadas La segunda simplificacin evita que una tarea se quede bloqueada durante un tiempo no acotado.

Pb. clientes-servidores: INVERSION DE PRIORIDADES.

SISTEMAS DE TIEMPO REAL

157

COMUNICACION ENTRE TAREAS


Ejemplo de servidor:
T1 VARIABLE_COMUN MODIFICAR T2 EXAMINAR

/* Variable_Comun.h */ void Inicializa_Servidor (void) ; void Modificar (tipoV Valor) ; tipoV Examinar (void) ;

protected Variable_Comun is procedure Modificar (Valor: in tipoV) ; procedure Examinar (Valor: out tipoV) ; private Variable: tipoV ; end Variable_Comun ; task Variable_Comun is entry Modificar (Valor: in tipoV) ; entry Examinar (Valor: out tipoV) ; end Variable_Comun ;

SISTEMAS DE TIEMPO REAL

158

COMUNICACION ENTRE TAREAS


Con un MUTEX de VxWorks:
static SEM_ID Mutex ; static tipoV Variable_Protegida ; void Inicializa_Servidor (void) {... Mutex = semMCreate (...) ; ... } void Modificar (tipoV Valor) { semTake (Mutex, WAIT_FOREVER) ; Variable_Protegida = Valor ; semGive (Mutex) ; return ; } tipoV Examinar (void) { tipoV Local ; semTake (Mutex, WAIT_FOREVER) ; Local = Variable_Protegida ; semGive (Mutex) ; return Local ; }

SISTEMAS DE TIEMPO REAL

159

COMUNICACION ENTRE TAREAS


Ada83
task body Variable_Comun is VARIABLE: tipoV; begin loop select accept Modificar (Valor: in tipoV) do VARIABLE:= Valor; end MODIFICAR ; or accept Examinar (Valor: out tipoV) do Valor := VARIABLE ; end EXAMINAR ; or terminate ; end select ; end loop ; end Variable_Comun ;

SISTEMAS DE TIEMPO REAL

160

COMUNICACION ENTRE TAREAS


Ada95

protected Variable_Comun is procedure Modificar (Valor: in tipoV) is begin Variable := Valor; end Modificar ; procedure Examinar (Valor: out tipoV) is begin Valor := Variable; end Examinar ; end Variable_Comun ;

SISTEMAS DE TIEMPO REAL

161

COMUNICACION ENTRE TAREAS


Ejemplo comunicacin entre tareas:

T1 T=100 ms C=20 ms

S1 10 ms

T2 T=150 ms C=40 ms

10 ms

S2 2 ms

T3 T=350 ms C=100 ms

20 ms

SISTEMAS DE TIEMPO REAL

162

INVERSION DE PRIORIDADES
A veces una tarea puede verse retrasada por la ejecucin de otra menos prioritaria. Este fenmeno se denomina inversin de prioridades, y puede ocurrir cuando hay interaccin entre tareas. Ejemplo:
INVERSION DE PRIORIDAD

T1 T2 T3

Ejecucin de servicios S2

Pb.: el retraso de una tarea por inversin de prioridad puede no estar acotado

SISTEMAS DE TIEMPO REAL

163

PROTOCOLOS DE COMUNICACION
Los siguientes protocolos evitan la inversin de prioridad sin lmite: Seccin crtica no expulsable Herencia de prioridad Techo de prioridad Techo de prioridad inmediato

SISTEMAS DE TIEMPO REAL

164

SECCION CRITICA NO EXPULSABLE


Un servidor ejecutando un servicio no puede perder el procesador. Pb.: Introduce inversin de prioridad aunque la tarea ms prioritaria sea independiente y no solicite ningn servicio.

INVERSION DE PRIORIDAD

T1 T2 T3

Ejecucin de servicios S2

SISTEMAS DE TIEMPO REAL

165

SECCION CRITICA NO EXPULSABLE


Implementacin Kernel Enmascaramiento interrupciones
Sin MUTEX

Elevacin de prioridad
Sin MUTEX

void Servicio (...) { Mask_all_Interrupts () ; Service_Code() ; Unmask_all_Interrupts () ; return ; }

void Servicio (...) { Nominal = Get_Priority () ; Set_Priority (HIGH) ; Service_Code() ; Set_Priority (Nominal) ; return ; }

SISTEMAS DE TIEMPO REAL

166

HERENCIA DE PRIORIDAD
Los clientes tienen prioridades estticas y los servidores dinmicas. Est basado en las siguientes reglas: Cuando un servidor est realizando un servicio o bloqueando a algn cliente hereda la prioridad ms alta entre la del cliente al que esta sirviendo y los clientes bloqueados. Las llamadas pendientes se aceptan por orden de prioridad de clientes. Protocolo implementado en el kernel sobre el semforo que protege el servidor Se produce inversin de prioridad nicamente cuando una tarea solicita un servicio a un servidor que est ejecutando un servicio para otra tarea de menor prioridad desde antes de la activacin.

SISTEMAS DE TIEMPO REAL

167

HERENCIA DE PRIORIDAD
Puede haber mas de un bloqueo por inversin de prioridad durante una ejecucin.

INVERSION DE PRIORIDAD

INVERSION DE PRIORIDAD

T1 T2 T3
Bloqueo indirecto (Push-trough blocking)

T1 T2 T3

Ejecucin de servicios S2

Ejecucin de servicios S1 Ejecucin de servicios S2

SISTEMAS DE TIEMPO REAL

168

TECHO DE PRIORIDAD
Es un protocolo de herencia de prioridades con las siguientes reglas adicionales: El techo de prioridad de un servidor es igual a la prioridad del ms prioritario de sus clientes potenciales. Un cliente que intenta llamar a un servidor se bloquea si cualquier otro servidor con techo de prioridad mayor o igual que la prioridad dinmica del cliente est ya ejecutando un servicio para otro cliente. Caractersticas bsicas: Bloqueo nico: En una ejecucin de una tarea, sta slo se puede ver bloqueada, por inversin de prioridad, durante la ejecucin de un servicio. Es un protocolo para sistemas monoprocesador.

SISTEMAS DE TIEMPO REAL

169

TECHO DE PRIORIDAD
BLOQUEO UNICO: Protocolo de techo de prioridad

INVERSION DE PRIORIDAD

T1 T2 T3

Ejecucin de servicios S1 Ejecucin de servicios S2

SISTEMAS DE TIEMPO REAL

170

TECHO DE PRIORIDAD INMEDIATO


Con este protocolo, una tarea que accede a un recurso hereda inmediatamente el techo de prioridad del servidor la prioridad dinmica de una tarea es el mximo de su prioridad bsica y los techos de prioridad de los servidores que usa Las propiedades son las mismas que las del protocolo del techo de prioridad
Bloqueo nico

Es ms fcil de implementar que el protocolo bsico Es ms eficiente (menos cambios de contexto) Se producen ms bloqueos que en el caso del protocolo de techo de prioridad
Comportamiento idntico de peor caso Peor comportamiento medio

SISTEMAS DE TIEMPO REAL

171

TECHO DE PRIORIDAD INMEDIATO


Si el protocolo no est implementado en el kernel, se puede realizar asignando a cada servidor una prioridad
ps = tps + 1

donde tps es el techo de prioridad del servidor. Implementacin Elevacin prioridad


void Servicio (...) { Nominal = Get_Priority () ; Set_Priority (Server_Ceiling+1) Service_Code() ; Set_Priority (Nominal) ; return ; } ;

Ada83

task servidor is pragma priority (Server_Ceiling+1) ; entry end servidor ;

SISTEMAS DE TIEMPO REAL

172

HERENCIA/TECHO DE PRIORIDAD
Ejemplo
T1 P=100 C=10

T2

S1 4

Tarea T1 T2 T3 T4 T5 S1 S2

P 100 150 250 300 500

C 15 30 50 50 30

Pr 5 4 3 2 1

Tpr

P=150 C=30

20

T3

P=250 C=50

4 5

T4 2 P=300 C=30 8

S2

T1

P=500 C=50

SISTEMAS DE TIEMPO REAL

173

HERENCIA/TECHO DE PRIORIDAD
Techo de prioridad

T1 T2 T3 T4 T5
techo directo

S2

S1

4 forzado


S2

S1 S1 S1 S1

SISTEMAS DE TIEMPO REAL

174

HERENCIA/TECHO DE PRIORIDAD
Herencia de prioridad

T1 T2 T3 T4 T5

S2

5 directo forzado directo

S1

4 forzado forzado
S2 S2

2
S1 S1

S1

SISTEMAS DE TIEMPO REAL

175

CONDICIONES DE GARANTIA DE PLAZOS


La inversin de prioridad puede ser tenida en cuenta en el anlisis mediante la incorporacin de un trmino denominado tiempo de bloqueo: bi
Tiempo de bloqueo de peor caso Cada protocolo proporciona tiempos de bloqueo diferentes Anlisis => clculo de los tiempos de bloqueo

tiempo de cmputo modificado

Ci* = (Ci + Bi )

SISTEMAS DE TIEMPO REAL

176

CONDICIONES DE GARANTIA DE PLAZOS


Seccin crtica no expulsable Una tarea puede ser bloqueada como mximo por un servicio Clculo
sjk servicio k usado por la tarea j D(sjk) duracin del servicio

Bi = MAX MAX (D (s jk )) j k
j >i

SISTEMAS DE TIEMPO REAL

177

CONDICIONES DE GARANTIA DE PLAZOS


Protocolo de Herencia de Prioridad Una tarea T pude ser bloqueada como mximo por MIN(n,m) servicios
n: nmero de tareas de menor prioridad que T que la pueden bloquear m: nmero de servidores distintos que pueden bloquear a T

Bi: suma de todos los bloqueos (de peor caso) posibles Para calcular Bi hay que establecer qu servicios pueden estar en ejecucin cuando se active T y que puedan bloquearle (bloqueo directo o indirecto por aumento de prioridad) Difcil de sistematizar: Algoritmo que calcula una cota superior del tiempo de bloqueo
Condicin suficiente

SISTEMAS DE TIEMPO REAL

178

CONDICIONES DE GARANTIA DE PLAZOS


Algoritmo para calcular Bi Ceiling(): prioridad del ms prioritario de los clientes Dj,k: duracin de un servicio

Bil

j =i +1 m

MAX [D j ,k : Ceiling (S k ) Pi ] k
n k =1 j >i

Bis

= MAX D j ,k : Ceiling (S k ) Pi Bi = MIN Bil , Bis

SISTEMAS DE TIEMPO REAL

179

CONDICIONES DE GARANTIA DE PLAZOS


Protocolo de techo de prioridad El valor mximo del tiempo de bloqueo de una tarea Ti, bi, es igual a la duracin del servicio ms largo de los requeridos, a cualquiera de los servidores, por tareas de prioridad inferior (pritecho prioridad servidor) Un cliente puede verse bloqueado por otro menos prioritario aunque no llamen a servidores comunes. El cliente de menos prioridad no se puede bloquear por otros menos prioritarios: bn=0.

Bi = MAX D j ,k Pj < Pi , Ceiling (S k ) Pi


j ,k

Protocolo de techo de prioridad inmediato IDEM que el de techo

SISTEMAS DE TIEMPO REAL

180

CONDICIONES DE GARANTIA DE PLAZOS


Teorema 4 (Sha, Rajkumar & Lehoczky): En un sistema de n tareas peridicas con prioridades asignadas en orden de frecuencia, que se comunican mediante servidores, se cumplen todos los plazos de respuesta, para cualquier desfase inicial de las tareas, si

Ci bi C1 i,1 i n, + ... + + i 21/ i 1 P Pi Pi 1

Corolario (Sha, Rajkumar & Lehoczky): Se cumple lo mismo si

bi Ci 1/ n + max n 2 1 = U 0 (n ) P i=1..n1 P i i =1 i
n

Condicin suficiente ms restrictiva.

SISTEMAS DE TIEMPO REAL

181

CONDICIONES DE GARANTIA DE PLAZOS


Teorema 5 (Sha, Rajkumar & Lehoczky): En un sistema de n tareas peridicas con prioridades asignadas en orden de frecuencia, que se comunican mediante servidores, se cumplen todos los plazos de respuesta, para cualquier desfase inicial de las tareas, si

i Cj i,1 i n, min tSi j =1 t

t bi + 1 Pj t

Test de tiempo de finalizacin: El tiempo de finalizacin de una tarea Ti (tfi) es:

t t t fi = min C1 + ... + Ci 1 + Ci + bi = t t >0 P Pi 1 1


En el tiempo de finalizacin de Ti slo influye bi

SISTEMAS DE TIEMPO REAL

182

CONDICIONES DE GARANTIA DE PLAZOS


Anlisis del ejemplo Seccin crtica no expulsable:
Tarea P T1 T2 T3 100 150 350 C 20 40 100 b 20 20 0 p 3 2 1

C1 b1 20 20 + = + = 0.400 1.0 = U 0 (1) P P 100 100 1 1 C1 C 2 b2 20 40 20 + + = + + = 0.600 0.828 = U 0 (2 ) P P2 P2 100 150 150 1 C1 C 2 C3 b3 20 40 100 0 + + + = + + + = 0.753 0.779 = U 0 (3) P P2 P3 P3 100 150 350 350 1

SISTEMAS DE TIEMPO REAL

183

CONDICIONES DE GARANTIA DE PLAZOS


Anlisis del ejemplo Herencia de prioridad:
Tarea P T1 T2 T3 S1 S2 100 150 350 C 20 40 100 b 30 20 0 3 3 tp p 3 2 1
S1 S2 T1 10 2 T2 10 T3 - 20

C1 b1 20 30 + = + = 0.500 1.0 = U 0 (1) P P 100 100 1 1 C1 C 2 b2 20 40 20 + + = + + = 0.600 0.828 = U 0 (2 ) P P2 P2 100 150 150 1 C1 C 2 C3 b3 20 40 100 0 + + + = + + + = 0.753 0.779 = U 0 (3) P P P P 100 150 350 350 1 2 3 3

SISTEMAS DE TIEMPO REAL

184

CONDICIONES DE GARANTIA DE PLAZOS


Anlisis del ejemplo: Techo de prioridad:
Tarea P T1 T2 T3 S1 S2 100 150 350 C 20 40 100 b 20 20 0 3 3 tp p 3 2 1

C1 b1 20 20 + = + = 0.400 1.0 = U 0 (1) P P 100 100 1 1 C1 C 2 b2 20 40 20 + + = + + = 0.600 0.828 = U 0 (2 ) P P2 P2 100 150 150 1 C1 C 2 C3 b3 20 40 100 0 + + + = + + + = 0.753 0.779 = U 0 (3) P P2 P3 P3 100 150 350 350 1

SISTEMAS DE TIEMPO REAL

185

CONDICIONES DE GARANTIA DE PLAZOS


Clculo de los tiempos de finalizacin

t f 1 = C1 + b1 = 40ms 80 t f 2 = C1 + C 2 + b2 = 80ms P 1 240 240 tf3 = C + C 2 + C3 + b3 = 240ms 1 P P2 1 b3 = 0

SISTEMAS DE TIEMPO REAL

186

TAREAS ESPORADICAS Y APERIODICAS


Tareas que se ejecutan como respuesta a un evento => NO PERIODICAS. Se consideran dos tipos: Tareas aperidicas: no tienen requisitos de tiempo real crticos. Generalmente se desea que tengan un comportamiento estadstico adecuado, p.e. el valor del tiempo medio de respuesta est limitado. Tareas espordicas: tienen plazo de respuesta crtico.

SISTEMAS DE TIEMPO REAL

187

TAREAS APERIODICAS
Se pueden ejecutar de varias formas: Como tareas de segundo plano (sin requisitos de tiempo real). Solucin ms sencilla, tiempo de respuesta medio excesivo. Procesado directo de eventos (a alta prioridad). Tiempo de respuesta muy bueno pero puede haber una expulsin excesiva sobre tareas de menos prioridad que sean crticas. Mediante servidores aperidicos. Son tareas que ejecutan las actividades aperidicas en momentos oportunos para no perturbar a las tareas crticas. Se van a considerar dos:
Servidor de muestreo (polling server). Tarea peridica que en cada activacin ejecuta las actividades correspondientes a eventos aperidicos pendientes de atender. Se debe limitar su tiempo de cmputo, tiempos de respuesta elevados. Servidor espordico (sporadic server). Se basa en la idea de reservar tiempo para atender eventos aperidicos. Si queda tiempo reservado, un evento se atiende inmediatamente (a la prioridad que le corresponda).

SISTEMAS DE TIEMPO REAL

188

TAREAS APERIODICAS
Procesado en segundo plano
tr

Procesado directo
Exceso expulsin

Muestreo
Periodo

Servidor espordico

Procesado del evento Relleno Llegada del evento

SISTEMAS DE TIEMPO REAL

189

SERVIDOR ESPORADICO
Varias posibles implementaciones dependiendo de la poltica de relleno. Una de las ms sencillas est basada en: Perodo de relleno. Igual al ritmo medio de llegada de los eventos. Capacidad de ejecucin. Tiempo de peor caso en el procesado de un evento. Asignacin de prioridades. En el peor caso el servidor espordico se comporta como una tarea peridica de perodo el tiempo de renovacin.
relleno tiempo renovacin

relleno

SISTEMAS DE TIEMPO REAL

190

SERVIDOR ESPORADICO
En Ada95
task body Sporadic_Server is Replenishment_Period: time_span := milliseconds (...) ; Next_Star : time := clock ; Time_Stamp : time ; begin loop Interrupt_Handler.Wait_for_Event(Time_Stamp) ; Activation_Time := max (Time_Stamp, Next_Start) ; Event_Processing ; Next_Star := Activation_Time + Replenishment_Period ; delay until Next_Start ; end loop ; end Sporadic_Server ;

SISTEMAS DE TIEMPO REAL

191

SERVIDOR ESPORADICO
protected body Interrupt_Handler is procedure Handler is begin Interrupt_Ocurred := true ; Add (Event_Queue, clock) ; end ; entry Wait_for_Event (TS: out time) when Interrupt_Ocurred is begin Extract (Event_Queue, TS) ; if Empty(Event_Queue) then Interrupt_Ocurred := false ; end if ; protected Interrupt_Handler is end ; entry Wait_for_Event (TS: out time) ; private end ; procedure Handler ; Event_Queue : ; Interrupt_Ocurred : boolean := false ; end ;

SISTEMAS DE TIEMPO REAL

192

SERVIDOR ESPORADICO
En VxWorks
void Sporadic_Server (void) { struct timespec Replenishment_Period = to_timespec (...) ; struct timespec Next_Star, Time_Stamp, Activation_Time ; clock_gettime (CLOCK_REALTIME, &Next_Start) ; while (TRUE){ msgQReceive (Event_Queue, &Time_Stamp, ...) ; Event_Processing () ; Activation_Time = max (Time_Stamp, Next_Start) ; Next_Star = add_timespec (Activation_Time, Replenishment_Period) ; delay_until (Next_Start) ; } } void Handler (void) { ... ; clock_gettime (CLOCK_REALTIME, &Time_Stamp) ; msgQSend (Event_Queue, Time_Stamp, ...) ; }

SISTEMAS DE TIEMPO REAL

193

TAREAS ESPORADICAS
Para poder garantizar plazos es preciso suponer una separacin mnima entre eventos, si. Puede utilizarse un servidor espordico con una reserva ci (tiempo de cmputo de la accin asociada al evento) y un intervalo de renovacin si.

Pb.: asignacin de prioridades: Si si = di => tarea peridica de perodo si y con una prioridad RMA. Si si > di (caso ms frecuente) => no caso RMA. Una aproximacin: prioridad al ms urgente para tareas espordicas y prioridad RMA para el resto. Posibilita anlisis RMA considerando tiempos adicionales de bloqueo.

SISTEMAS DE TIEMPO REAL

194

TAREAS ESPORADICAS
Si la separacin est garantizada:

task body Sporadic_Server is begin loop Interrupt_Handler.Wait_for_Event ; Event_Processing ; end loop ; end Sporadic_Server ;

SISTEMAS DE TIEMPO REAL

195

TAREAS ESPORADICAS
Rechazo de eventos que no cumplen el requisito de separacin mnima
protected body Interrupt_Handler is procedure Handler is begin Event_Time := clock ; if Event_Time >= Rejection_Time then Interrupt_Ocurred := true ; Rejection_Time := Event_Time + Minimum_Separation ; end if ; end ; entry Wait_for_Event when Interrupt_Ocurred is begin Interrupt_Ocurred := false ; end ; end ;

SISTEMAS DE TIEMPO REAL

196

TAREAS ESPORADICAS
Ejemplo:
T1 T=100 ms C=20 ms
Emergencia

S1 10 ms

s = 120 ms d = 6 ms Ce = 5 ms

T2 T=150 ms C=40 ms

10 ms

S2 2 ms ev. Acrticos s = 40 ms Ce = 2 ms

T3 T=350 ms C=100 ms

20 ms

Tareas no peridicas: E : servidor espordico (separacin mnima = 120 ms ; plazo = 6 ms ; c = 5 ms) A : servidor espordico (renovacin = 40 ms ; c = 2 ms)

SISTEMAS DE TIEMPO REAL

197

TAREAS ESPORADICAS
Tarea A T1 E T2 T3 S1 S2 P 40 100 120 150 350 C 2 20 5 40 100 b 0+5 20+5 0 20 0 3 3 tp p 4 3 5 2 1

SISTEMAS DE TIEMPO REAL

198

TAREAS ESPORADICAS
C A CE 2 5 + = + = 0.175 1.0 = U 0 (1) PA PA 40 40 C A C1 b1 C E 2 20 20 5 + + + = + + + = 0.509 0.828 = U 0 (2 ) PA P P P 40 100 100 100 1 1 1 C E DE C A C1 C E C 2 b2 2 20 5 40 20 + + + + = + + + + = 0.692 0.756 = U 0 (4 ) PA P PE P2 P2 40 100 120 150 150 1 C A C1 C E C 2 C3 2 20 5 40 100 + + + + = + + + + = 0.844 > 0.743 = U 0 (5) PA P P P P 40 100 120 150 350 E 1 2 3

Tiempo de finalizacin de T3:

275 275 275 275 + + + tf3 = C C C C A + C3 = 269ms 1 E 2 P PE P2 PA 1


SE CUMPLEN LOS PLAZOS DE LAS TAREAS

SISTEMAS DE TIEMPO REAL

199

SISTEMAS DE TIEMPO REAL

PLANIFICACIN BASADA EN PRIORIDADES: PRIORIDAD AL MS URGENTE (DMS)

SISTEMAS DE TIEMPO REAL

200

INTRODUCCIN
Planificacin con asignacin de prioridades a la tarea ms urgente DMS/DMA: Deadline Monotonic Scheduling / Analysis Prioridades estticas Plazo de respuesta perodo en tarea peridicas Nace del RMS basndose en alguno de sus conceptos

Estructura: Tareas peridicas. Tareas espordicas. Comunicacin entre tareas Plazos de respuesta arbitrarios Jitter

SISTEMAS DE TIEMPO REAL

201

TAREAS PERIDICAS
Prioridad al ms urgente (DMS) La asignacin de prioridades ms altas a las tareas ms urgentes (plazo de respuesta ms corto) es ptima (Leung & Whitehead, 1982). Por ptima se entiende que no hay ninguna otra planificacin mejor. Si de esta forma no se obtiene un plan admisible, no se puede obtener con ningn otro mtodo basado en prioridades estticas. Ejemplo:
T T1 T2 C 6 6 D 15 10
T1 T2 0 5 10 15 20 25 30 35 40

P 15 20

DMS => Pr1 < Pr2

SISTEMAS DE TIEMPO REAL

202

CONDICIONES DE GARANTA DE PLAZOS


Los test de utilizacin del procesador no sirven con el DMS. Los test de garanta de de plazos se basan en: En un sistema de n tareas peridicas independientes con prioridades estticas, se cumplen todos los plazos de respuesta, para cualquier desfase inicial de las tareas, si cuando se activan todas ellas simultneamente, cada tarea acaba dentro del plazo en su primera ejecucin. (Liu & Layland) El tiempo de finalizacin y en el trabajo requerido al procesador

SISTEMAS DE TIEMPO REAL

203

CONDICIONES DE GARANTA DE PLAZOS


Test 1: En un sistema de n tareas peridicas independientes con prioridades asignadas en orden de urgencia, se cumplen todos los plazos de respuesta, para cualquier desfase inicial de las tareas, si:
i,1 i n, Ci I i + 1 Di Di

donde
Di I i = C j P j =1 j
i 1

Ii se denomina tiempo de interferencia de la tarea Ti

SISTEMAS DE TIEMPO REAL

204

CONDICIONES DE GARANA DE PLAZOS


Se trata de una condicin suficiente pero no necesaria
T T1 T2 T3 C 2 2 4 D 3 6 11 P 5 15 20
C1 + I1 = 2 + 0 D1 = 3 D 6 C2 + 2 C1 = 2 + 2 = 6 D2 = 6 5 P 1 D D C3 + 3 C1 + 3 C2 = P P2 1 11 11 4 + 2 + 2 = 12 > D3 = 11 5 15

y sin embargo T3 cumple sus plazos de respuesta:


T1 T2 T3 0 5 10 15 20 25 30 35 40

SISTEMAS DE TIEMPO REAL

205

CONDICIONES DE GARANTA DE PLAZOS


La condicin necesaria y suficiente la da el test del tiempo de finalizacin Test de Tiempo de Finalizacin El tiempo de finalizacin de una tarea Ti (tfi) es:
t t t fi = min C ... C C t + = + + 1 i 1 i t >0 P Pi 1 1

Por lo tanto la tarea Ti cumplir su primer plazo si:


t fi Di

Tiempo de interferencia:
Slo se tienen en cuenta las activaciones de tareas ms prioritarias que afectan efectivamente a la ejecucin de una tarea dada:
t fi t fi I i = C1 + ... + Ci 1 P P 1 i 1

SISTEMAS DE TIEMPO REAL

206

CONDICIONES DE GARANTA DE PLAZOS


Ejemplo:
T T1 T2 T3 C 2 2 4 D 3 6 11 P 5 15 20

Mismo ejemplo anterior. Anlisis:


C1 + I1 = 2 + 0 D1 = 3 D 6 C2 + 2 C1 = 2 + 2 = 6 D2 = 6 5 P 1 D D 11 11 C3 + 3 C1 + 3 C2 = 4 + 2 + 2 = 12 > D3 = 11 5 15 P P2 1

Clculo del tiempo de finalizacin para T3

SISTEMAS DE TIEMPO REAL

207

CONDICIONES DE GARANTA DE PLAZOS


Tiempo de finalizacin: tf3
W30 = 0
1 = C3 = 4 W3

4 4 W32 = 2 + 2 + 4 = 8 5 15 8 8 W33 = 2 + 2 + 4 = 10 5 15 10 10 W34 = 2 + 2 + 4 = 10 5 15 t f 3 = 10 < 11

SISTEMAS DE TIEMPO REAL

208

CONDICIONES DE GARANTA DE PLAZOS


Reformulacin Punto de planificacin: Los puntos de planificacin de una tarea Ti son todos los instantes lmite (es decir los finales de los perodos) de las tareas de prioridad mayor o igual que Ti que se dan antes del final de su plazo de respuesta, suponiendo que todas las tareas han comenzado simultneamente. Si es el conjunto de puntos de planificacin de la tarea Ti:
Di Si = Di , k p j j = 1..i 1; k = 1.. Pj

Teorema 3 (Lehoczky, Sha & Ding): En un sistema de n tareas peridicas independientes con prioridades asignadas en orden de urgencia, se cumplen todos los plazos de respuesta, para cualquier desfase inicial de las tareas, si y slo si
i Cj i,1 i n, min tSi j =1 t t 1 Pj

SISTEMAS DE TIEMPO REAL

209

TAREAS ESPORDICAS
Caracterizadas por: Separacin mnima entre eventos: si Tiempo de cmputo: Ci Plazo de respuesta: Di Tratamiento mucho ms sencillo que en el caso de RMS En el peor caso tarea peridica de perodo si y plazo de respuesta Di Ejemplo:
T T1 T2 T3 T4 C 1 2 2 2 D 5 6 7 8 P/S 6 8 9 10 Espordica Espordica

SISTEMAS DE TIEMPO REAL

210

TAREAS ESPORADICAS
Anlisis:
C1 + I1 = 1 + 0 D1 = 5 D 6 C2 + 2 C1 = 2 + 1 = 3 D2 = 6 6 P 1 D D 7 7 C3 + 3 C1 + 3 C2 = 2 + 1 + 2 = 6 D3 = 7 6 8 P P2 1 D D D 8 8 8 C4 + 4 C1 + 4 C2 + 4 C3 = 2 + 1 + 2 + 2 = 8 D4 = 8 9 6 8 P P2 P3 1

por lo tanto todas las tareas cumplen sus plazos de respuesta

SISTEMAS DE TIEMPO REAL

211

COMUNICACIN ENTRE TAREAS


Protocolo de techo de prioridad Introduccin en los test de garanta de plazos del trmino de bloqueo El valor mximo del tiempo de bloqueo de una tarea Ti, bi, es igual a la duracin del servicio ms largo de los requeridos, a cualquiera de los servidores, por tareas de prioridad inferior (pri techo prioridad servidor) Condicin suficiente
C I b i,1 i n, i + i + i 1 Di Di Di Di I i = C j P j =1 j
i 1

Condicin necesaria y suficiente (tiempo finalizacin)


t t t fi = min C1 + ... + Ci 1 + Ci + bi = t t >0 P Pi 1 1

t fi Di

SISTEMAS DE TIEMPO REAL

212

COMUNICACIN ENTRE TAREAS


Ejemplo:
Tarea P T1 T2 T3 S1 S2
T1 P=100 ms D=100 ms C=20 ms

D 100 90 310

C 20 40 120

b 20 10 0

tp

p 2 3 1

100 150 350

3 2
S1 10 ms T2 P=150 ms D=90 ms C=40 ms 10 ms

S2 2 ms

T3 P=350 ms D=300 ms C=100 ms

20 ms

SISTEMAS DE TIEMPO REAL

213

COMUNICACIN ENTRE TAREAS


Condicin suficiente:
Ci + I i + bi Di C2 + I 2 + b2 = 40 + 0 + 10 = 50 D2 = 90 D 100 C1 + 1 C2 + b1 = 20 + 40 + 20 = 80 D1 = 100 P 150 2 D D 310 310 C3 + 3 C2 + 3 C1 + b3 = 120 + 40 20 + 0 = 320 > D3 = 310 + 100 150 P P2 1

Tiempo de finalizacin para T3:


t t + + + = t f 3 = min C C C b t 1 2 3 3 t >0 P P2 1 260 260 + 260 = 20 40 + 120 + 0 < 310 100 150

SISTEMAS DE TIEMPO REAL

214

PLAZOS DE RESPUESTA ARBITRARIOS


Algunas aplicaciones de tiempo real pueden aceptar que los plazos de respuesta de las tareas sean superiores a los periodos: Una tarea puede ser reactivada antes de que la invocacin previa haya concluido su ejecucin Ni la asignacin de prioridades en orden de frecuencia ni la asignacin en orden de urgencia son ptimas Otro algoritmo de asignacin de prioridades

SISTEMAS DE TIEMPO REAL

215

PLAZOS DE RESPUESTA ARBITRARIOS


Ecuacin del tiempo de respuesta para sistemas con prioridades:
t t t fi = min C1 + ... + Ci 1 + Ci = t t >0 P Pi 1 1

Qu ocurre si tfi > Pi? Nueva activacin de Ti


Si Di Pi no importa porque la tarea no es planificable Si Di > Pi la primera ejecucin interfiere en la segunda y por lo tanto puede tener un tfi mayor

NO SIRVE LA ECUACIN

SISTEMAS DE TIEMPO REAL

216

PLAZOS DE RESPUESTA ARBITRARIOS


Ejemplo

T T1 T2

C 15 9

D 20 40

P 41 16

T1 T2

10

20

30

40

50

60

70

80

90

Periodo de ocupacin nivel 2

SISTEMAS DE TIEMPO REAL

217

PLAZOS DE RESPUESTA ARBITRARIOS


Teorema (Tindell, Burns & Wellings 1994): En un conjunto de tareas ordenadas por prioridad, el tiempo de respuesta de peor caso es:
t fi =
q = 0,1, 2,...Q

max

( wi (q ) qPi )

donde: wi(q) se calcula con:


wi (q ) wi ( q ) = (q + 1)Ci + Bi + C j Pj jhp (i )

hp(i) es el conjuto de tareas de mayor prioridad que la de la tarea i Q se calcula con:


Q = min{q wi ( q ) (q + 1)Pi }

SISTEMAS DE TIEMPO REAL

218

PLAZOS DE RESPUESTA ARBITRARIOS


Aplicacin al ejemplo:
w (q) w (q) w2 ( q ) = C2 (1 + q ) + 2 C1 = 9(1 + q ) + 2 15 41 P 1

q=0

w (0) w2 (0) = 9 + 2 15 = 24 41 w2 (0) = 24 > 16 = (1 + q) P2 w (1) w2 (1) = 9(1 + 1) + 2 15 = 33 41 w2 (1) = 33 > 32 = (1 + q ) P2 w ( 2) w2 (2) = 9(1 + 2) + 2 15 = 57 41 w2 (2) = 57 > 48 = (1 + q ) P2

q=1

q=2

SISTEMAS DE TIEMPO REAL

219

PLAZOS DE RESPUESTA ARBITRARIOS


q=3
w (3) w2 (3) = 9(1 + 3) + 2 15 = 66 41 w2 (3) = 66 > 64 = (1 + q ) P2 w ( 4) w2 (4) = 9(1 + 4) + 2 15 = 75 41 w2 (4) = 75 80 = (1 + q ) P2

q=4

CONDICION DE PARADA CUMPLIDA


tf 2 =

max{24,33 16,57 32,66 48,75 64} = max{24,17,25,18,11} = 25

q = 0,1, 2,3, 4

max

( w2 ( q ) qP2 ) =

SISTEMAS DE TIEMPO REAL

220

ASIGNACIN DE PRIORIDADES
La asignacin de prioridades DMS deja de ser ptima con plazos de respuesta arbitrarios Audsley (1991) desarroll un algoritmo de asignacin de prioridades estticas que es ptimo en cualquier caso:
ordered := number_of_tasks repeat finished := false failed := true task := first_task repeat insert task at priority ordered if task is schedulable then ordered := ordered - 1 failed := false finished := true extract task end if task := next_task until finished or no_more_tasks until ordered = 1 or failed

SISTEMAS DE TIEMPO REAL

221

ASIGNACIN DE PRIORIDADES
Ejemplo:
T T1 T2 T3 C 2 9 15 D 50 40 20 P 50 16 41

ordered = 3, task = T1 => T1 mnima prioridad


t f 1 t f 1 t f 1 t f 1 t f 1 = C1 + C2 + C3 = 2 + 9 + 15 = 68 P2 P3 16 41 t f 1 = 68 > 50 = D1

not schedulable, next_task

ordered = 3, task = T2 => T2 mnima prioridad


w (q) w (q) w (q) w (q) w2 (q ) = C2 (1 + q ) + 2 C1 + 2 C3 = 9(1 + q ) + 2 2 + 2 15 50 41 P P3 1

SISTEMAS DE TIEMPO REAL

222

ASIGNACIN DE PRIORIDADES
w ( 0) w (0) w2 (0) = 9 + 2 2 + 2 15 = 26 50 41 w2 (0) = 26 > 16 = (1 + q ) P2 w (1) w (1) w2 (1) = 9(1 + 1) + 2 2 + 2 15 = 35 50 41 w2 (1) = 35 > 32 = (1 + q ) P2 w (1) w (1) w2 (2) = 9(1 + 2) + 2 2 + 2 15 = 61 50 41 w2 (2) = 61 > 48 = (1 + q ) P2

q=0

q=1

q=2

SISTEMAS DE TIEMPO REAL

223

ASIGNACIN DE PRIORIDADES
q=3

w (3) w (3) w2 (3) = 9(1 + 3) + 2 2 + 2 15 = 70 50 41 w2 (3) = 70 > 64 = (1 + q) P2 w (4) w ( 4) w2 (4) = 9(1 + 4) + 2 2 + 2 15 = 79 50 41 w2 (4) = 79 80 = (1 + q ) P2

q=4

tf 2 =

max{26,35 16,61 32,70 48,79 64} = max{26,19,29,22,15} = 29 < 40 = D2

q = 0,1, 2,3, 4

max

( w2 (q ) qP2 ) =

schedulable, ordered:= ordered - 1, finished, extract (T2)

SISTEMAS DE TIEMPO REAL

224

ASIGNACIN DE PRIORIDADES
ordered = 2, task = T1 => T1 prioridad media
t f 1 t f 1 t f 1 = C1 + C3 = 2 + 15 = 17 41 P3 t f 1 = 17 < 50 = D1

schedulable, ordered:= ordered - 1, finished

ordered = 1, task = T3 => T3 prioridad mxima


t f 3 = C3 = 15 < 20 = D3

schedulable, ordered:= ordered - 1, finished

ordered = 0 => FIN

SISTEMAS DE TIEMPO REAL

225

SISTEMAS DE TIEMPO REAL

PLANIFICACIN BASADA EN PRIORIDADES: PRIORIDADES DINMICAS - EDF -

SISTEMAS DE TIEMPO REAL

226

PRIORIDADES DINMICAS - EDF


Asignar en cada instante la prioridad ms alta al proceso cuyo plazo de respuesta est ms prximo (Earliest Deadline First, EDF) La prioridad de una tarea se calcula en tiempo de ejecucin La prioridad de una tarea puede cambiar a lo largo de su ejecucin y en diferentes activaciones
Prioridades dinmicas

T T1 T2 T3

C 8 4 7

D 20 6 15

Activacin 0 6 9

T1 T2 T3 0 5 10 15 20 25

SISTEMAS DE TIEMPO REAL

227

EDF
Earliest Deadline First es un mtodo de planificacin ptimo bajo las siguientes restricciones: Tareas independientes Planificacin expulsiva Sistemas monoprocesador

SISTEMAS DE TIEMPO REAL

228

BASES DEL ANLISIS


Conjunto sncrono: todas las tareas se activan por primera vez en el mismo instante temporal Peor caso de una tarea espordica: activacin cada separacin mnima entre eventos = tarea peridica Un sistema de tareas espordicas cumple sus plazos de respuesta si y slo si su correspondiente conjunto de tareas peridicas sncronas cumple sus plazos de respuesta Peor caso de un conjunto de tareas peridicas: conjunto sncrono Un sistema hbrido de tareas (espordicas y peridicas) cumplir sus plazos de respuesta si y slo si su correspondiente conjunto de tareas peridicas sncronas cumple sus plazos de respuesta

SISTEMAS DE TIEMPO REAL

229

FACTOR DE CARGA
Demanda de procesador

h[t ,t ) =
1 2

t1 rk , d k < t 2
t1 rk t2

Ck

h[t1,t2 ) W[t1,t2 ) =

Ck

T1 T2 T3 0

3 5 6 12 14

18

h[3,18 ) = 4 + 4 + 6 = 14 h[0,13) = 4
La demanda slo cambia en rk y en dk

10

15

20

25

SISTEMAS DE TIEMPO REAL

230

FACTOR DE CARGA
Factor de carga

u[t1 ,t2 ) =

t2 t1

h[t1 ,t2 )

Factor de carga absoluto

u = max u[t1 ,t2 ) 0t <t


1 2

T1 T2 T3 0

3 5 6 12 14

18

10

15

20

25

4 + 4 + 6 14 = 15 15 4 u[5,12 ) = 7 4 + 6 10 = u[5,14 ) = 9 9 6 u[6,14 ) = 8 10 u= 9 u[3,18 ) =

SISTEMAS DE TIEMPO REAL

231

FACTOR DE CARGA
Teorema (Spuri, 1995): Un conjunto de tareas planificadas mediante el algoritmo EDF cumple sus plazos de respuesta si y slo si

u 1

T1 T2 T3 0

3 5 6 12 14

18

fallo

10

15

20

25

SISTEMAS DE TIEMPO REAL

232

UTILIZACIN DEL PROCESADOR


Tareas peridicas, independientes, plazo de respuesta igual al perodo Teorema (Liu&Layland 1973): En un sistema de n tareas peridicas, sncronas, independientes, con su plazo de respuesta igual al periodo y con prioridades asignadas mediante el algoritmo EDF, se cumplen todos los plazos de respuesta si y slo si

U =

Ci 1 i =1 Ti

En 1976 Coffman extiende el resultado para un conjunto de tareas peridicas asncronas

SISTEMAS DE TIEMPO REAL

233

UTILIZACIN DEL PROCESADOR


Demostracin

T n Ci U= = T i =1 Ti
n

T Ci
i =1 i

= u[0,T )

(T = hiperperiodo )

n C t 2 t1 Ck T Ci = (t2 t1 ) T i u[t1 ,t2 ) U i =1 t1 rk , d k t 2 i =1 i i

u =U

SISTEMAS DE TIEMPO REAL

234

DEMANDA DE PROCESADOR
Teorema: Cualquier conjunto hbrido de tareas con prioridades asignadas mediante el algoritmo EDF cumple sus plazos de respuesta si y slo si

t , h(t ) t

h(t) = h[0,t) en un sistema sncrono el factor absoluto de carga se da en un intervalo de la forma [0,t) u 1 h(t) t

SISTEMAS DE TIEMPO REAL

235

DEMANDA DE PROCESADOR
Clculo de la demanda Sistema sncrono hiperperiodo = T = mcm(Ti)

t Di 1+ h(t ) = Ci Di t Ti
La demanda slo cambia en los plazos de respuesta

S = {e j e j = mTi + Di ; m = 0,1,...; i [1, n]; e j T }

SISTEMAS DE TIEMPO REAL

236

DEMANDA DE PROCESADOR
Ejemplo T1: C=3, D=4, P=4 T2: C=2, D=18, P=20 T1: C=1, D=3, P=10

T1 T2 T3 0

12

16

20 18 20

13

23

10

15

20

25

si 3 4 8 12 13 16 18 20

h(t) 1 4 7 10 11 14 16 19

c3 c1 + c3 c1 + c3 3c1 + c3 3c1 + 2c3 4c1 + 2c3 4c1 + c2 + 2c3 5c1 + c2 + 2c3

SISTEMAS DE TIEMPO REAL

237

DEMANDA DE PROCESADOR
Teorema (Liu&Layland 1973, Spuri 1995, Ripoll&Crespo&Mok 1996): Si en un sistema sncrono de tareas con DiTi i y prioridades asignadas mediante el algoritmo EDF no cumple sus plazos de respuesta, entonces existe un fallo de plazo sin tiempo libre antes.

Clculo de la demanda durante el primer intervalo de ocupacin completa del procesador Longitud del intervalo (L): solucin ms pequea de la ecuacin

x = W (x) t W (t ) = Ci i =1 Ti
n

Clculo de la demanda en los puntos

S = {e j e j = mTi + Di ; m = 0,1,...; i [1, n]; e j L}

SISTEMAS DE TIEMPO REAL

238

DEMANDA DE PROCESADOR
Ejemplo

L(0) = 3 + 2 + 1 = 6 L(1) = W(6) = 2x3 + 1x2 + 1x1 = 9 L(2) = W(9) = 3x3 + 1x2 + 1x1 = 12 L(3) = W(12) = 3x3 + 1x2 + 2x1 = 13 L(4) = W(13) = 4x3 + 1x2 + 2x1 = 16 L(5) = W(16) = 4x3 + 1x2 + 2x1 = 16 L = 16

si 3 4 8 12 13 16

h(t) 1 4 7 10 11 14

c3 c1 + c 3 c1 + c 3 3c1 + c3 3c1 + 2c3 4c1 + 2c3

T1 T2 T3 0

12

16

20 18 20

13

23

10

15

20

25

SISTEMAS DE TIEMPO REAL

239

NIVEL DE EXPULSIN
Una tarea Tj expulsar a otra Ti si:

t ai t aj t di t dj

Esta situacin slo se puede dar si Dj Di

Ti Tj

tai taj tdj

tdi

SISTEMAS DE TIEMPO REAL

240

NIVEL DE EXPULSIN
El nivel de expulsin de una tarea Ti se denota i Una tarea Ti que puede expulsar a otra Tj tiene un nivel de expulsin i j Si suponemos EDF:

i > j Di < D j

En EDF la prioridad no es una propiedad inherente a la tarea, su nivel de expulsin si

SISTEMAS DE TIEMPO REAL

241

BLOQUEOS
Cundo una tarea puede sufrir un bloqueo con inversin de prioridades? La tarea Ti est activa y dentro de una seccin crtica La tarea Tj expulsa a la Ti (tdj < tdi) Para que esto suceda: i > j
Ti Tj

tai taj tdj

tdi

En EDF, una tarea Tj puede ser bloqueada por otra Ti de menor prioridad slo si Ti tiene mayor nivel de expulsin que Tj (i > j)

SISTEMAS DE TIEMPO REAL

242

PROTOCOLOS
En EDF son vlidos los protocolos: Herencia de prioridades Techo de prioridad Aspectos a tener en cuenta: La definicin de los protocolos es la misma que con prioridades estticas El clculo de los tiempos de bloqueo es el mismo que con prioridades estticas pero atendiendo a los niveles de expulsin de las tareas, no a su prioridad (que cambia segn la situacin)

SISTEMAS DE TIEMPO REAL

243

HERENCIA DE PRIORIDAD
Tareas peridicas que comunican mediante servidores con el protocolo de techo de prioridad, plazo de respuesta menor o igual al periodo

Teorema (Stankovic&col 1998): En un sistema de n tareas con prioridades asignadas mediante el algoritmo EDF, se cumplen todos los plazos de respuesta si

Ci + bi i = 1,..., n + 1 Di j =1 D j
i 1

Cj

Condicin suficiente, no necesaria Tareas ordenadas por nivel de expulsin

SISTEMAS DE TIEMPO REAL

244

TECHO DE PRIORIDAD
Tareas peridicas que comunican mediante servidores con el protocolo de techo de prioridad, plazo de respuesta igual al periodo

Teorema (Chen&Lin 1989): En un sistema de n tareas con prioridades asignadas mediante el algoritmo EDF, se cumplen todos los plazos de respuesta si

Ci + bi 1 Pi i =1
n

Condicin suficiente, no necesaria

SISTEMAS DE TIEMPO REAL

245

TECHO DE PRIORIDAD
Ejemplo:

Tarea P
T1 T2 T3 100 150 350

C
20 40 100

b
0 10 0

T1 P=100 ms C=20 ms

T2 P=150 ms C=40 ms S2 5 ms T3 P=350 ms C=100 ms 10 ms

Ci + bi 20 40 + 10 100 P = 100 + 150 + 350 = 0.819 1 i =1 i


n

SISTEMAS DE TIEMPO REAL

246

PLANIFICACIN DINMICA
Tipos de planificaciones: Planificacin Esttica
Se realiza la planificacin antes del tiempo de ejecucin Se requiere un conocimiento previo de todas las caractersticas de las tareas el sistema Poco coste en ejecucin Planificacin cclica, RMS, DMS, ...

Planificacin Dinmica
Se construye el plan en tiempo de ejecucin Se adapta a cambios

Llegada de nuevas tareas al sistema Desaparicin de tareas Cambios en el entorno

Gran coste de ejecucin EDF permite la planificacin dinmica

SISTEMAS DE TIEMPO REAL

247

PLANIFICACIN DINMICA
Se conocen a priori todas las tareas y sus caractersticas Anlisis previo de planificabilidad Todas las tareas cumplirn plazos No se conocen las tareas y sus caractersticas. Dos aproximaciones cuando llega el evento de activacin de una tarea: Control de admisin. La ejecucin de la tarea se iniciar slo si pasa un test de planificabilidad, esto es, todas las tareas del sistema incluyendo la nueva cumpliran sus plazos. Si no pasa el test:
la activacin es rechazada una accin correctora puede ser ejecutada

No se realiza un test de aceptacin. No se sabe a priori si una tarea que ha comenzado su ejecucin cumplir su plazo de respuesta:
una tarea puede ser abortada una accin correctora puede ser ejecutada

SISTEMAS DE TIEMPO REAL

248

PROGRAMACIN DE UN PLANIFICADOR
Caractersticas Prioridades dinmicas Ada95 Las tareas se planifican ellas mismas mediante un protected
with Ada.Task_Identification, Ada.Task_Attributes, Ada.Real_Time ; with Ada.Dynamic_Priorities, System ; use Ada, Ada.Real_Time ; procedure EDF is pragma Locking_Policy (Ceiling_Locking) ; pragma Task_Dispatching_Policy (Fifo_Within_Priority) ; N: constant Positive := ... ; subtype Active_Range is Natural range 0..N ; subtype Task_Range is Active_Range range 1..N ; High: constant System.Priority := System.PriorityLast ; Medium: constant System.Priority := High - 1 ; Low: constant System.Priority := High - 2 ; package Deadline_Attributes is new Task_Attributes(Time, Time_Last) ; -- Time_Last is the furtest time into the future the -- implementation can give, it is defined in Real_Time type Labels is array (Task_Range) of Task_Identification.Task_Id ;

SISTEMAS DE TIEMPO REAL

249

PROGRAMACIN DE UN PLANIFICADOR
protected Scheduler is pragma Priority (High) ; procedure Register ; procedure Reschedule ; -- called by tasks coming off delay queue procedure Remove ; -- called by tasks completing their execution private Task_Labels: Labels ; Number_Of_Tasks: Active_Range := 0 ; Shortest_Deadline: Time := Time_Last ; Running_Task: Task_Identification.Task_Id := Task_Identification.Null_Task_Id ; end Scheduler ; task type Worker is pragma priority (High) ; end Worker ; protected body Scheduler is ... task body Worker is ... -- declaration of N Workers end EDF ;

SISTEMAS DE TIEMPO REAL

250

PROGRAMACIN DE UN PLANIFICADOR

task body Worker is -- internal declarations Period: Time_Span := -- some value Deadline: Time_Span := -- some value Next_Release: Time : begin Scheduler.Register ; Next_Release:= Clock + Period ; Dynamic_Priorities.Set_Priority (High) ; loop delay until Next_Release ; Deadline_Attributes.Set_Value (Next_Release+Deadline) ; Secheduler.Reschedule ; -- lowers priority from high -- code of application Dynamic_Priorities.Set_Priority (High) ; Deadline_Attributes.Set_Value (Time_Last) ; Scheduler.Remove ; -- retains priority at high Next_Release := Next_Release + Period ; end loop ; end Worker ;

SISTEMAS DE TIEMPO REAL

251

PROGRAMACIN DE UN PLANIFICADOR

protected body Scheduler is procedure Register is begin Number_Of_Tasks := Number_Of_Tasks + 1 ; Tasks_Labels(Number_Of_Tasks) := Task_Identification.Current_task ; end Register ; procedure Reschedule is begin if Deadline_Attributes.Value < Shortest_Deadline then Dynamic_Priorities.Set_Priority(Medium) ; Dynamic_Priorities.Set_Priority(Low,Running_Task) ; Shortest_Deadline := Deadline_Attributes.Value ; Running_Task := Task_Identification.Current_Task ; else Dynamic_Priorities.Set_Priority(Low) ; end if ; end Reschedule ;

SISTEMAS DE TIEMPO REAL

252

PROGRAMACIN DE UN PLANIFICADOR

procedure Remove is begin Shortest_Deadline := Time_Last ; Running_Task := Task_Identification.Null_Task_Id ; for T in 1..Number_Of_Tasks loop if Deadline_Attributes.Value(Task_Labels(T)) < Shortest_Deadline then Shortest_Deadline := Deadline_Attributes.Value(Task_Labels(T)) ; Running_Task := Task_Labels(T) ; end if ; end loop ; if Shortest_Deadline < Time_Last then Dynamic_Priorities.Set_Priority(Medium,Running_Task) ; end if ; end Remove ; end Scheduler ;

SISTEMAS DE TIEMPO REAL

253

SISTEMAS DE TIEMPO REAL

MANEJADORES DE DISPOSITIVOS

SISTEMAS DE TIEMPO REAL

254

MECANISMOS DE ENTRADA-SALIDA
Los sistemas tiempo real se conectan a los sistemas fsicos que controlan por medio de dispositivos de entrada y salida especficos (sensores, actuadores, etc.), que suelen requerir un tratamiento especial en cada caso. Esquema genrico:

SISTEMA CONTROL MANEJADOR DE DISPOSITIVO CONTROLADOR DE DISPOSITIVO

DISPOSITIVO

SISTEMAS DE TIEMPO REAL

255

MECANISMOS DE ENTRADA-SALIDA
Los controladores presentan como interfase al procesador un conjunto de registros (estado, control, datos). Existen dos formas bsicas de conectar un controlador a una cierta arquitectura: Mediante un bus especfico de entradas-salidas:
El espacio de direccionamiento de los controladores es diferente que el de la memoria. El procesador accede a los registros mediante instrucciones de mquina especiales:

in Rn, puerto out Rn, puerto

Mediante el bus de memoria:


El espacio de direccionamiento de los controladores es el mismo que el de la memoria. Los registros se comportan, a todos los efectos, como celdas de memoria:

mov Rn, registro mov registro, Rn

SISTEMAS DE TIEMPO REAL

256

MECANISMOS DE ENTRADA-SALIDA
El manejo de un controlador de dispositivos: Activacin de la operacin
Por programa Autnoma Exterior

Paso de los datos


Interrupcin: el controlador interrumpe al procesador cuando termina una operacin y fuerza la ejecucin de un manejador. DMA: acceso directo a memoria Muestreo: el procesador interroga cada cierto tiempo al controlador sobre el estado de la operacin.

SISTEMAS DE TIEMPO REAL

257

EJEMPLO
Supondremos un sistema de entradasalida con direccionamiento en espacio de memoria. Cada controlador tiene dos tipos de registros: Registros de control y estado (CSR). Se dividen en campos correspondientes a operaciones o componentes de estado. Registros de datos (DBR). Contienen datos que se transmiten hacia o desde el dispositivo. Por ejemplo, el registro de control y estado de un convertidor analgicodigital con 64 canales de entrada podra tener esta estructura:
Bits Funcin 0 Arranca 1-5 No utilizados 6 Interrupcin permitida 7 Terminado 8-13 Canal 14 No utilizado 15 Error
Extrado de las transparencias de Tiempo Real de Juan Antonio de la Puente (DIT/UPM)

SISTEMAS DE TIEMPO REAL

258

EJEMPLO

0 1

63

MUX

A/D

12 bits

LCI
6 bits

14 13

15

12 11

TI
16 bits

A
RD 8#176560#

M
16 bits

RC 8#176562#

BUS DEL SISTEMA

INTERRUPCION Vector: 8#100#

SISTEMAS DE TIEMPO REAL

259

EJEMPLO

package ADC_Device_Driver is Bits : constant := 16; Max_Measure : constant := 2**Bits - 1; type Channel is range 0 .. 63; subtype Measurement is Integer range 0 .. Max_Measure; procedure Read (C : Channel; M : out Measurement); Conversion_Error : exception; private for Channel'Size use 6; end ADC_Device_Driver ;

SISTEMAS DE TIEMPO REAL

260

EJEMPLO
with with with with Ada.Interrupts; use Ada.Interrupts; Ada.Interrupts.Names; use Ada.Interrupts.Names; System; use System; System.Storage_Elements; use System.Storage_Elements;

package body ADC_Device_Driver is Bits_In_Word : constant := 16; Word : constant := 2; type Flag is (Down, Set); for Flag use (Down => 0, Set => 1); for Flag'Size use 1; type Control_Register is record Start : Flag; I_Enable : Flag; Done : Flag; Chan : Channel; Error : Flag; end record;

SISTEMAS DE TIEMPO REAL

261

EJEMPLO
pragma Pack(Control_Register); for Control_Register use record Start at 0*Word range I_Enable at 0*Word range Done at 0*Word range Chan at 0*Word range Error at 0*Word range end record;

0..0; 6..6; 7..7; 8..13; 15..15;

for Control_Register'Size use Bits_In_Word; for Control_Register'Alignment use Word; for Control_Register'Bit_Order use Low_Order_First;

SISTEMAS DE TIEMPO REAL

262

EJEMPLO
type Data_Register is range 0..Max_Measure; for Data_Register'Size use Bits_In_Word; for Data_Register'Alignment use Word; Control_Reg_Address : constant Address:= To_Address(8#150002#); Data_Reg_Address : constant Address:= To_Address(8#150000#); ADC_Priority : constant Interrupt_Priority := 31; Control_Reg : Control_Register; for Control_Reg'Address use Control_Reg_Address; Data_Reg : Data_Register; for Data_Reg'Address use Data_Reg_Address;

SISTEMAS DE TIEMPO REAL

263

EJEMPLO

protected Interrupt_Interface is entry Read (C : Channel; M : out Measurement); private entry Done (C : Channel; M : out Measurement); procedure Handler; pragma Attach_Handler( Handler, INTADC); pragma Interrupt_Priority( ADC_Priority); Interrupt_Occurred : Boolean := False; Next_Request : Boolean := True; end Interrupt_Interface;

SISTEMAS DE TIEMPO REAL

264

EJEMPLO
protected body Interrupt_Interface is entry Read (C : Channel; M : out Measurement) when Next_Request is begin Control_reg := (Start => Set, I_Enable => Set, Done => Down, Chan => Channel(C), Error => Down); Interrupt_Occurred := False; Next_Request := False; requeue Done; end Read;

SISTEMAS DE TIEMPO REAL

265

EJEMPLO
procedure Handler is begin Interrupt_Occurred := True; end Handler;

entry Done(C: Channel; M: out Measurement) when Interrupt_Occurred is begin Next_Request := True; if Control_reg.Done = Set and Control_reg.Error = Down then M := Measurement(Data_Reg); else raise Conversion_Error; end if; end Done; end Interrupt_Interface;

SISTEMAS DE TIEMPO REAL

266

EJEMPLO
procedure Read (C : Channel; M : out Measurement) is begin for I in 1.. 3 loop begin ADC_Interface.Read(C,M); return; exception when Conversion_Error => null; end; end loop; raise Conversion_Error; end Read; end ADC_Device_Driver;

SISTEMAS DE TIEMPO REAL

267

SISTEMAS DE TIEMPO REAL

TOLERANCIA A FALLOS. EXCEPCIONES

SISTEMAS DE TIEMPO REAL

268

INTRODUCCIN
En un sistema Tiempo Real no es permisible: Finalizacin inesperada Bloqueos Salidas errneas Dos aproximaciones complementarias para obtener sistemas fiables: Prevencin de fallos Tolerancia a fallos Dos tipos de fallos: Fallos en el sistema de control Fallos en el sistema controlado Causas principales de fallos (sist. control): Errores en el desarrollo del software Fallos en las unidades de procesamiento Interferencias en el subsistema de comunicaciones

SISTEMAS DE TIEMPO REAL

269

CONCEPTOS DE TOLERANCIA A FALLOS FALLO ERROR FRACASO

Tipos de fallos: Fallos transitorios (p.e. interferencias electro-magnticas) Fallos permanentes (p.e. un error de diseo en un programa) Fallos intermitentes (p.e. un componente sensible a la temperatura)

Un sistema evoluciona por un conjunto de estados: Internos Externos (apreciable desde el exterior)

SISTEMAS DE TIEMPO REAL

270

CONCEPTOS DE TOLERANCIA A FALLOS Comportamiento Observable


FRACASO

Interno

FALLO

ERROR

SISTEMAS DE TIEMPO REAL

271

CONCEPTOS DE TOLERANCIA A FALLOS


ERROR: Estado interno no especificado de un sistema FRACASO: Estado externo no especificado de un sistema

Aproximaciones para conseguir un sistema fiable, esto es, sin fracasos: Prevencin de fallos Tolerancia a fallos

SISTEMAS DE TIEMPO REAL

272

PREVENCIN DE FALLOS
Dos fases: Evitacin de fallos durante la construccin del sistema. Con respecto al software:
Especificacin de requisitos rigurosa o formal Uso de metodologas de diseo probadas Uso de lenguajes que faciliten la modularidad y abstraccin de datos Uso de herramientas CASE que faciliten el manejo de la complejidad del software

Eliminacin de los fallos introducidos en el software, generalmente mediante tests del sistema. Problemas:
Un test slo muestra la presencia de fallos, no su ausencia No tests en condiciones reales

SISTEMAS DE TIEMPO REAL

273

TOLERANCIA A FALLOS
Diversos grados de tolerancia a fallos: Tolerancia a fallos completa Tolerancia con degradacin Parada segura

Tolerancia a fallos redundancia

Redundancia: incorporacin de elementos extras (redundantes) no necesarios en funcionamiento normal.


Redundancia esttica: los componentes redundantes operan siempre incluso sin fallos (p.e. programacin N-versin) Redundancia dinmica: los componentes redundantes operan cuando hay un fallo (p.e. bloques de recuperacin, excepciones)

SISTEMAS DE TIEMPO REAL

274

PROGRAMACIN N-VERSIN
Un componente tolerante a fallos est compuesto por: N versiones independientes de un programa con las mismas especificaciones (N 3) Un controlador Independencia: Desarrollo: diferentes lenguajes de programacin, diferentes entornos de desarrollo, diferentes programadores Ejecucin: las versiones no comunican entre s Funcionamiento: Cada diseo se comunica nicamente con el controlador Cada diseo emite un resultado (voto) El controlador compara los votos y elige el resultado ms votado

SISTEMAS DE TIEMPO REAL

275

PROGRAMACIN N-VERSIN
Versin 1 Versin 2 Versin 3

CONTROL

SISTEMAS DE TIEMPO REAL

276

REDUNDANCIA DINMICA
Los componentes redundantes actuan nicamente cuando se ha detectado un fallo. Fases: Deteccin del error Evaluacin del dao Recuperacin del error Tratamiento del fallo
Deteccin del error. Dos clases de tcnicas:

Deteccin por el entorno donde se ejecuta la aplicacin ("hardware", soporte "run-time"). Deteccin implcita. Deteccin por la propia aplicacin mediante chequeos. Deteccin explcita.
if not CONDICION_REQUERIDA then ERROR ; end if ;

SISTEMAS DE TIEMPO REAL

277

REDUNDANCIA DINMICA
Recuperacin del error. Dos aproximaciones diferentes:

Recuperacin hacia adelante: se intenta continuar desde un estado errneo realizando correcciones selectivas en dicho estado. Recuperacin hacia atrs: se restaura un estado correcto (punto de recuperacin) anterior a la ocurrencia del error. Generalmente se contina utilizando un procedimiento alternativo al que ha fallado.

...
Proc. alternativo Hacia adelante

ERROR

SISTEMAS DE TIEMPO REAL

278

BLOQUES DE RECUPERACIN
Ensure {test de aceptacion}by {modulo primario} else by {modulo alternativo} else by {modulo alternativo} else by {modulo alternativo} else error
Reestablece estado

no
Pto. recuperacin Mod?

si

Siguiente mdulo

Test

si

Pto. recuperacin

no

FRACASO

SISTEMAS DE TIEMPO REAL

279

PROBLEMAS
Problemas en la programacin N-versin y en los bloques de recuperacin:

Costos de desarrollo grandes: ambas aproximaciones requieren algoritmos alternativos La programacin N-versin requiere N veces los recursos de una versin. La recuperacin del estado y la ejecucin de una alternativa, en los bloques de recuperacin, son actividades costosas Tolerancia a fallos del sistema de control, no del sistema controlado No existen actualmente lenguajes de tiempo real que presenten primitivas de soporte para estas tcnicas.

SISTEMAS DE TIEMPO REAL

280

EXCEPCIONES
Caractersticas: Redundancia dinmica Recuperacin hacia delante

Deteccin de un error

Levantamiento de una excepcin

Ejecucin de un manejador de la excepcin

SISTEMAS DE TIEMPO REAL

281

EXCEPCIONES

Peticin servicio

Respuesta normal

Excepciones de interfase

Excepciones de fracaso

Vuelta servicio normal Manejadores de excepciones

Actividad normal

Peticin Respuesta servicio normal

Excepciones internas Excepciones Excepciones de interfase de fracaso

SISTEMAS DE TIEMPO REAL

282

DOMINIO DEL MANEJADOR DE UNA EXCEPCIN


Dentro de un programa puede haber varios manejadores de una misma excepcin.

Cada uno tiene un dominio: si la excepcin se levanta en ese dominio el manejador correspondiente se activa.

Lenguaje orientado a bloques dominio = bloque

SISTEMAS DE TIEMPO REAL

283

EXCEPCIONES. MODELOS.
Modelo de reanudacin (PEARL)

Q Ex

Manejador Ex

SISTEMAS DE TIEMPO REAL

284

EXCEPCIONES. MODELOS.
Modelo de terminacin (Ada, CHILL)

Q Ex

Manejador Ex

SISTEMAS DE TIEMPO REAL

285

PROPAGACIN DE EXCEPCIONES
Qu sucede si se levanta una excepcin en un bloque donde no existe manejador para ella?

Dos aproximaciones:

Enlace esttico: en tiempo de compilacin se establece un enlace entre excepcin-contexto y su manejador Enlace dinmico: bsqueda de un manejador a lo largo de la cadena de invocadores del bloque propagacin

SISTEMAS DE TIEMPO REAL

286

PROPAGACIN DE EXCEPCIONES
Propagacin
P Q R Ei

Mi

R Ei

Propagacin explcita
Mi Mi raise

Mi raise

SISTEMAS DE TIEMPO REAL

287

SISTEMAS DE TIEMPO REAL

PROGRAMACIN SECUENCIAL. ADA95

SISTEMAS DE TIEMPO REAL

288

CUESTIONES BSICAS
Ada95 es un lenguaje de la familia del Pascal Lxico: No hay distinciones entre maysculas y minsculas. Los identificadores pueden contener cualquier nmero de caracteres. Puede utilizarse el carcter "_" en los identificadores para hacerlos ms legibles:

Ejemplo_de_identificador

Los comentarios empiezan con "--" y van hasta el final de la lnea

SISTEMAS DE TIEMPO REAL

289

TIPOS DE DATOS
Ada es un lenguaje fuertemente tipado. No se pueden copiar valores de un tipo en variables de otro. Creacin de tipos Desde cero Basndose en otros
Subtipo restriccin de un cierto tipo base. copia (posiblemente restringida) de un tipo base.

Tipo derivado

Los subtipos de un mismo tipo son compatibles. No as los derivados. Tipos predefinidos:
integer, positive, ..., float boolean character

SISTEMAS DE TIEMPO REAL

290

TIPOS DE DATOS
Elementales Access Scalar
Discrete

Compuestos Array Record Protected Task

Enumeration Integer Signed Modular

Real

Fixed Decimal Ordinary

Floating

SISTEMAS DE TIEMPO REAL

291

TIPOS DISCRETOS
Son los enteros, enumerables, boolean y character. Tipos enteros
Predefinidos: integer y dos subtipos:
subtype NATURAL is integer range 0..integer'last ; subtype POSITIVE is integer range 1..integer'last ;

Es mejor usar tipos especficos:


type INDICE is range 0..128 ; subtype INDICE_POSITIVO is INDICE range 1..128 ; -- derivado type OTRO_INDICE is new INDICE ;

Operaciones predefinidas con los tipos enteros: + - * / rem mod abs **

SISTEMAS DE TIEMPO REAL

292

TIPOS DISCRETOS
Tipos enumerables
type DIMENSION is (X,Y,Z); type MAP is (X,Y); subtype SUPERFICIE is DIMENSION range X..Y; type PROY is new DIMENSION range X..Y; -- distinto tipo

Ejemplo de uso
declare D : DIMENSION ; S : SUPERFICIE ; P : PROY ; begin D := S ; -- legal S := D ; -- legal, puede dar probs. P := D ; -- ilegal P := PROY(D) ; -- legal, conversion end ;

SISTEMAS DE TIEMPO REAL

293

TIPOS DISCRETOS
Tipo boolean
type boolean is (false,true) ;
Las operaciones predefinidas son: not and or xor Tambin hay operadores relacionales: = /= < <= > >= Y un operador de pertenencia, in, que se aplica a tipos discretos:

I in 0..10 X in POSITIVE D in X..Y

Tipo carcter
Comprende todos los caracteres ASCII Tambin hay tiras de caracteres. 'C' es un carcter. "C" es una tira de un solo carcter.

SISTEMAS DE TIEMPO REAL

294

TIPOS REALES
En los sistemas de control es necesario utilizar valores reales. Hay dos formas de representar estos valores: Nmeros con coma flotante:
Se representan como M*RE Tiene una precisin relativa al tamao del nmero (M longitud finita) Son adecuados para realizar clculos en los cuales no se necesiten resultados exactos

Coma fija, nmeros con escala


Se representan como V*S Tiene una precisin absoluta determinada Son adecuados para representar valores analgicos en el computador

En Ada95 se pueden definir ambas formas de reales.

SISTEMAS DE TIEMPO REAL

295

TIPOS REALES
Coma flotante: El tipo float est predefinido, pero es mejor definir tipos especficos:
type REAL is digits 8 range -1.0E18..1.0E18; subtype REAL_1 is REAL digits 2; subtype REAL_2 is REAL range 0.0..1000.0;

Tipos coma fija (con escala): No hay ningn tipo de coma fija predefinido.
type ESCALA is delta 0.05 range -100.00..100.00; Los valores del tipo ESCALA son: -100.00, -99.95,

Las operaciones predefinidas son: Coma flotante: Coma fija: + - * / abs ** + - * / abs

Funciones matemticas en paquetes.

SISTEMAS DE TIEMPO REAL

296

TIPOS ESTRUCTURADOS
Array
MAX: constant integer := 10; type T_LECTURA is array (0..MAX-1) of float; TAMAGNO: constant integer := MAX-1; type T_CONMUTADORES is array (0..TAMAGNO, 0..TAMAGNO) of boolean; LECTURA: T_LECTURA; CONMUTADORES: T_CONMUTADORES;

Agregados

LECTURA(1) := 2.5 ; LECTURA := (2.5, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); LECTURA := (1 => 2.5, 2..4 => 1.0, others => 0.0); LECTURA (1..3) := LECTURA (5..7) ;

SISTEMAS DE TIEMPO REAL

297

TIPOS ESTRUCTURADOS
Registros
type T_DIA is new integer range 1..31; type T_MES is new integer range 1..12; type T_AGNO is new integer range 1900..2050; type FECHA is record DIA: T_DIA := 1 ; MES: T_MES := 1 ; AGNO: Y_AGNO ; end record;

Agregados

declare F: FECHA; begin F.AGNO := 1990 ; F:= (1, 3, 1990) ; F:= (AGNO => 1992, DIA => 1, MES => 4); end ;

SISTEMAS DE TIEMPO REAL

298

OBJETOS DINMICOS
Los tipos acceso permiten acceder a objetos dinmicos.
type NODO; type ENLACE is access NODO; type NODO is record VALOR: integer ; SIGUIENTE: ENLACE ; end record; V: integer ; NUEVO: ENLACE; begin NUEVO := new NODO ; NUEVO.VALOR := V ; NUEVO.SIGUIENTE := null ; --por defecto end; -- NUEVO.all es lo apuntado por el access NUEVO

SISTEMAS DE TIEMPO REAL

299

ESTRUCTURAS DE CONTROL
Secuencia
instruccion; instruccion; instruccion;

Bloques
declare <parte declarativa> begin <secuencia de instrucciones> exception <manejadores de excepciones> end;

declare TEMP: integer := A ; begin A := B ; B := TEMP ; end ;

Siempre se puede poner un bloque en lugar de una instruccin.La parte declarativa (constantes, variables, tipos, subprogramas, paquetes y tareas) y la de excepciones son optativas.

SISTEMAS DE TIEMPO REAL

300

ESTRUCTURAS DE CONTROL
Seleccin
if A /= 0 then if B/A > 10 then MAYOR := true ; else MAYOR := false ; end if ; end if ; -- tambien elsif, and then case ORDEN is when 'A' | 'a' => ACCION1 ; when 'b' => ACCION2 ; when 'x'..'z' => ACCION3 ; when others => null ; end case ;

SISTEMAS DE TIEMPO REAL

301

ESTRUCTURAS DE CONTROL
Iteracin
for I in 0..9 loop -- I local al bucle A(I) := I ; -- no se puede modificar end loop ; while CONDICION loop ACCION ; end loop ; loop ACCION_1 ; exit when CONDICION ; ACCION_2 ; end loop ; loop ACCION ; end loop ;

SISTEMAS DE TIEMPO REAL

302

SUBPROGRAMAS
Son los procedimientos y las funciones. Modos de los parmetros: in, out e in out Ejemplo:
procedure CUADRATICA (A,B,C: in float; R1,R2: out float; OK : out boolean);

Un parmetro in se compota como una constante local cuyo valor es del parmetro real. Un parmetro out se comporta como una variable a la que slo se le puede asignar valor. Este valor se copia al parmetro real. Un parmetro in out se comporta como una variable cuyo valor inicial es del parmetro real, y cuyo valor final se vuelve a copiar al mismo. El modo por defecto es in.

SISTEMAS DE TIEMPO REAL

303

SUBPROGRAMAS
Procedimientos Se puede declarar una especificacin y despus el cuerpo, o directamente ste.
procedure CUADRATICA (A,B,C: in float; R1,R2: out float; OK : out boolean) is z: float ; begin Z:= B*B - 4.0*A*C ; if Z < 0.0 or A = 0.0 then OK:= false; R1 := 0.0 ; R2 := 0.0 ; return ; end if ; OK := true ; R1 := (-B + SQRT(Z))/(2.0*A) ; R2 := (-B - SQRT(Z))/(2.0*A) ; end CUADRATICA;

SISTEMAS DE TIEMPO REAL

304

SUBPROGRAMAS
Los procedimientos se invocan de la forma habitual:
CUADRATICA(1.0,3.0,2.0,X,Y,VALE) ;

Hay otras formas. Ejemplos:


type AJUSTE is (ABIERTO,CERRADO) ; type VALVULA is range 1..10 ; procedure AJUSTAR(VALVULA_N: VALVULA ; POSICION: AJUSTE := CERRADO) ; -- llamada normal AJUSTAR(6,ABIERTO) ; -- parmetro por defecto AJUSTAR(3) ; -- notacin nombrada AJUSTAR(POSICION => ABIERTO ; VALVULA_N => 9) ;

En Ada, todos los subprogramas son reentrantes y se pueden llamar recursivamente.

SISTEMAS DE TIEMPO REAL

305

SUBPROGRAMAS
Funciones Son semejantes a los procedimientos
function MINIMO (X,Y:integer) return integer is begin if X > Y then return Y; else return X ; end if ; end MINIMO ;

La invocacin se hace de forma habitual:


C := MINIMO(A,B) ;

Las formas de llamadas de los procedimientos son vlidas tambin para las funciones.

SISTEMAS DE TIEMPO REAL

306

GRANDES PROGRAMAS. FACILIDADES DEL LENGUAJE


Grandes programas => Descomposicin modular Mdulo: es un coleccin de objetos y operaciones relacionados entre s. En Ada95 los mdulos se denominan paquetes (packages).

La estructura de mdulos del Ada95 permite utilizar algunas tcnicas que facilitan el desarrollo de programas grandes: Ocultamiento de informacin, tipos abstractos de datos Compilacin separada Reutilizacin del Software Programacin orientada a objeto

SISTEMAS DE TIEMPO REAL

307

OCULTACIN DE LA INFORMACIN
Un paquete permite controlar la visibilidad de sus objetos. Un paquete tiene dos partes: Especificacin: Contiene las declaraciones y especificaciones que son visibles fuera del paquete (define su interfase). Cuerpo: Contiene los detalles de implementacin que no son visibles fuera del paquete.
package nombre_paquete is -- declaraciones visibles private -- declaracion tipos privados end nombre_paquete ; package body nombre_paquete is -- codigo y datos ocultos begin -- codigo de inicializacion end nombre_paquete ;

SISTEMAS DE TIEMPO REAL

308

TIPOS ABSTRACTOS DE DATOS


Tipo abstracto de datos: es un tipo de datos definido nicamente por las operaciones que se pueden efectuar con objetos del tipo. Ada: Especificacin: declaracin del tipo + operaciones Cuerpo: implementacin operaciones

Tipo privado: es un tipo visible en la especificacin de un paquete pero su implementacin est oculta. Operaciones predefinidas: asignacin, comparaciones de igualdad y no igualdad.

Tipo privado limitado: no tiene ninguna operacin predefinida, slo se le pueden aplicar las explcitamente definidas en la especificacin del paquete.

SISTEMAS DE TIEMPO REAL

309

EJEMPLO TAD COLA


package COLAS is type COLA is limited private ; procedure INICIAR(C: in out COLA) ; function VACIA(C: COLA) return boolean ; procedure METER(C: in out COLA ; E: ELEMENTO) ; procedure SACAR(C: in out COLA ; E: ELEMENTO) ; private type NODO ; type ENLACE is access NODO ; type NODO is record CONTENIDO: ELEMENTO ; SIGUIENTE: ENLACE ; end record ; type COLA is record PRIMERO: ENLACE := null ; ULTIMO: ENLACE := null ; end record end COLAS ;

SISTEMAS DE TIEMPO REAL

310

EJEMPLO TAD COLA


package body COLAS is procedure INICIAR(C: in out COLA) is begin end INICIAR; function VACIA(C: COLA) return boolean is begin end VACIA; procedure METER(C: in out COLA ; E: ELEMENTO) is NUEVO: ENLACE; begin NUEVO:= new NODO'(CONTENIDO => E, SIGUIENTE => null); if VACIA(C) then C.PRIMERO:= NUEVO ; else C.ULTIMO.SIGUIENTE:= NUEVO ; end if ; C.ULTIMO:= NUEVO ; end METER ; procedure SACAR(C: in out COLA ; E: out ELEMENTO) is begin end SACAR; end COLAS;

SISTEMAS DE TIEMPO REAL

311

EJEMPLO TAD COLAS


with COLAS ; procedure ejemplo is COLA_1: COLAS.COLA ; COLA_2: COLAS.COLA ; X, Y: ELEMENTO ; begin COLAS.INICIAR (COLA_1) ; COLAS.INICIAR (COLA_2) ; COLAS.METER (COLA_1,X) ; if not COLAS.VACIA(COLA_2) then COLAS.SACAR(COLA_2,Y); end if; end ejemplo ;

SISTEMAS DE TIEMPO REAL

312

COMPILACIN SEPARADA
Un programa grande puede ser dividido en unidades de compilacin, que se pueden compilar por separado: Especificacin de paquetes Cuerpo de paquetes (primero hay que compilar la especificacin) Subprogramas (procedimientos y funciones) Una de las unidades de compilacin (un procedimiento) hace el papel de programa principal. Ada95 no tiene un constructor especfico para el programa principal. El procedimiento principal no tiene parmetros.

SISTEMAS DE TIEMPO REAL

313

COMPILACIN SEPARADA
La dependencia entre unidades se indica con la clusula with.
with hace visibles las declaraciones del paquete a las que se refiere.

Se puede aadir use => no es preciso anteponer el nombre del mdulo al del objeto referenciado.
package PLANIFICADOR is -- especificacin end PLANIFICADOR ; with COLAS ; use COLAS ; package body PLANIFICADOR is -- cuerpo con referencias a las -- operaciones del paquete COLA METER(COLA_1,X) ; end PLANIFICADOR ;

SISTEMAS DE TIEMPO REAL

314

REUTILIZACIN DEL SOFTWARE


Reutilizacin de componentes de software => mejora productividad y calidad. Tipado inconveniente. Cmo hacer colas que no dependan del tipo de elemento? --> procedimientos, funciones o paquetes genricos
generic type ELEMENTO is private ; package COLAS is type COLA is limited private ; procedure METER(C: in out COLA ; E: ELEMENTO) ; private end COLAS ;

Se pueden crear ejemplares para cada tipo especfico ELEMENTO:


declare package COLAS_DE_ENTEROS is new COLAS(ELEMENTO => integer) ; use COLAS_DE_ENTEROS ; begin end ;

SISTEMAS DE TIEMPO REAL

315

ENTRADAS SALIDAS. ASPECTOS BSICOS


Las operaciones de entradas/salidas en Ada95 estn definidas en paquetes estndar. Algunos genricos permiten su instanciacin para diversos tipos.

Los paquetes estndar del Ada95 son: Ada.Direct_IO: Paquete genrico de acceso directo a ficheros binarios Ada.Sequential_IO: Paquete genrico de acceso secuencial a ficheros binarios Ada.Text_IO: Paquete para ficheros de texto y entradas-salidas por terminal. Contiene seis paquetes genricos especficos:
Integer_IO Float_IO Fixed_IO Enumeration_IO Modular_IO Decimal_IO

SISTEMAS DE TIEMPO REAL

316

ENTRADAS SALIDAS. ASPECTOS BSICOS


Un fichero en Ada95 es un objeto con los siguientes atributos: Name: nombre del fichero en el sistema Mode: IN_FILE, OUT_FILE, APPEND_FILE o INOUT_FILE. Form: String para atributos dependientes del sistema State: Open, Closed Index: Posicion en el fichero Size: Nmero de objetos almacenados en el fichero

SISTEMAS DE TIEMPO REAL

317

ENTRADAS SALIDAS. ASPECTOS BSICOS


Operaciones bsicas: Create Delete Open Close Reset Read, Get (In_File o Inout_File) Write, Put (Out_File, Append_File or Inout_File) Name: devuelve el nombre del fichero Mode: devuelve el modo del fichero Form: devuelve Form Index: devuelve el Index Is_Open: True si el fichero est abierto End_of_File: True si Index apunta al ltimo elemento

SISTEMAS DE TIEMPO REAL

318

FICHEROS DE ACCESO SECUENCIAL


with Ada.io_exceptions; generic type element_type(<>) is private; package Ada.Sequential_io is type file_type is limited private; type file_mode is (In_File,Out_File,Append_File); -- Gestin de ficheros procedure create(file:in out file_type; mode:in file_mode:=out_file; name:in string:=""; form:in string:=""); procedure open(file:in out file_type; mode:in file_mode; name:in string; form:in string:=""); procedure close(file:in out file_type); procedure delete(file:in out file_type); procedure reset(file:in out file_type; mode:in file_mode); procedure reset(file:in out file_type); function mode(file:in file_type)return file_mode; function name(file:in file_type)return string; function form(file:in file_type)return string; function is_open(file:in file_type)return boolean; ...

SISTEMAS DE TIEMPO REAL

319

FICHEROS DE ACCESO SECUENCIAL


... -- Operaciones de entrada/salida procedure read(file:in file_type; item:out element_type); procedure write(file:in file_type; item:in element_type); function end_of_file(file:in file_type)return boolean; -- Excepciones ... private -- Dependiente de la implementacin end Ada.sequential_io;

Hay otro paquete similar para ficheros de acceso directo: Ada.Direct_IO. Primitivas adicionales:
procedure SET_INDEX (FILE,TO); function function INDEX (File) return POSITIVE_COUNT;; SIZE (File) return COUNT;

SISTEMAS DE TIEMPO REAL

320

FICHEROS DE TEXTO
with Ada.io_exceptions; package Ada.text_io is type file_type is limited private; type file_mode is (in_file,out_file, append_file); -- N de columna en una lnea y de lnea -- en una pgina, y formatos type count is range 0..dep_implementacin; subtype positive_count is count range 1..count'last; unbounded:constant count:=0; subtype field is integer range 0..dep_implementacin; subtype number_base is integer range 2..16; type type_set is (lower_case,upper_case); -- Gestin de ficheros: create, open, close, delete, reset, mode, -- name, form e is_open son iguales que en sequential_io -- Control de ficheros de e/s por defecto procedure set_output(file:in file_type); function standard_output return file_type; function current_output return file_type; -- Lo mismo para entrada, con 'input' ...

SISTEMAS DE TIEMPO REAL

321

FICHEROS DE TEXTO
... -- Especificacin de longitudes de lnea y pgina procedure set_line_length(to:in count); procedure set_page_length(to:in count); function line_length return count; function page_length return count; -- Lo mismo con un parmetro file -- Control de columnas, lneas y pginas procedure new_line(spacing:in positive_count:=1); procedure skip_line(spacing:in positive_count:=1); function end_of_line return boolean; procedure new_page; procedure skip_page; function end_of_page return boolean; function end_of_file return boolean; procedure set_col(to:in positive_count); procedure set_line(to:in positive_count); function col return positive_count; function line return positive_count; function page return positive_count; -- Lo mismo con un parmetro file ...

SISTEMAS DE TIEMPO REAL

322

FICHEROS DE TEXTO
... -- Entrada/salida de caracteres procedure get(item:out character); procedure put(item:in character); -- Lo mismo con un parmetro file -- Entrada/salida de cadenas de caracteres procedure get(item:out string); procedure put(item:in string); procedure get_line(item:out string; last:out natural); procedure put_line(item:in string); -- Lo mismo con un parmetro file ...

SISTEMAS DE TIEMPO REAL

323

FICHEROS DE TEXTO
Entradas-salidas de nmeros enteros: subpaquete genrico.
... -- Paquete genrico de e/s de enteros generic type num is range <>; package integer_io is default_width:field:=num'width; default_base:number_base:=10; procedure get(item:out num; width:in field:=0); procedure put(item:in num; width:in field:= default_width; base:in number_base:= default_base); -- Lo mismo con un parmetro file procedure get(from:in string; item:out num; last:out positive); procedure put(to:out string; item:in num; base:in number_base:= default_base); end integer_io; ...

SISTEMAS DE TIEMPO REAL

324

FICHEROS DE TEXTO
Entradas-salidas de nmeros de tipo mdulo: subpaquete genrico.

... -- Paquete genrico de e/s de enteros modulo generic type num is mod <>; package modular_io is -- Lo mismo que en Integer_IO end modular_io ; ...

SISTEMAS DE TIEMPO REAL

325

FICHEROS DE TEXTO
Entradas-salidas de nmeros coma flotante: subpaquete genrico.
... -- Paquete genrico de e/s de tipos reales(de coma flotante) generic type num is digits <>; package float_io is default_fore:field:=2; default_aft:field:=num'digits-1; default_exp:field:=3; procedure get(item:out num; width:in field:=0); procedure put(item:in num; fore:in field:=default_fore); -- Lo mismo con un parmetro file procedure get(from:in string; item:out num; last:out positive); procedure put(to:out string; item:in num; aft:in field:=default_aft; exp:in field:=default_exp); end float_io; ...

SISTEMAS DE TIEMPO REAL

326

FICHEROS DE TEXTO
Entradas-salidas de nmeros coma fija: subpaquete genrico.

... -- Paquete genrico de e/s de tipos reales -- (de coma fija) generic type num is delta <>; package fixed_io is default_fore:field:=numfore; default_aft:field:=num'aft; default_exp:field:=0; -- Lo mismo que en Float_IO end fixed_io ; ...

SISTEMAS DE TIEMPO REAL

327

FICHEROS DE TEXTO
Entradas-salidas de tipos enumerados: subpaquete genrico.
... -- Mdulo genrico de e/s de tipos definidos por enumeracin generic type enum is (<>); package enumeration_io is default_width:field:=0; default_setting:type_set:=upper_case; procedure get(item:out enum); procedure put(item:in enum; width:in field:= default_width; set:in type_set:= default_setting); -- Lo mismo con un parmetro file procedure get(from:in string; item:out enum; last:out positive); procedure put(to:out string; item:in enum; set:in type_set:= default_setting); end enumeration_io; -- Excepciones ... private -- Dependiente de la implementacin end Ada.text_io;

SISTEMAS DE TIEMPO REAL

328

FICHEROS DE TEXTO
Los paquetes genricos de Text_IO deben ser instanciados:
with Ada.Text_IO; procedure Demo_Text_IO is type type type type INDEX is range 0..100; PROBABILITY is digits 6 range 0.0..1.0; SENSOR_READING is delta 0.01 range -2.0..2.0; COIN is (Penny,Nickel,Dime,Quarter);

-- instantiation of I/O packages package package package package INDEX_IO is new Ada.Text_IO.Integer_IO(INDEX); PROBABILITY_IO is new Ada.Text_IO.Float_IO(PROBABILITY); SENSOR_IO is new Ada.Text_IO.Fixed_IO(SENSOR_READING); COIN_IO is new Ada.Text_IO.Enumeration_IO(Coin);

-- lets make the IO operation directly visible -- to avoid a full scope specification use Text_IO, INDEX_IO,PROBABILITY_IO, SENSOR_IO, COIN_IO; -- The Put and Get operations are now over -- loaded with the types: Character,String, ...

SISTEMAS DE TIEMPO REAL

329

FICHEROS DE TEXTO
I P S C : : : : Index := 0; Probability := 0.0; Sensor_Reading := 0.0; Coin := Penny;

begin Put_Line("Enter an Index: "); Get(I); Put("You entered: "); Put(I); New_Line; Put_Line("Enter a Proability: "); Get(P); Put("You entered: "); Put(P); New_Line; Put_Line("Enter a Sensor_Reading: "); Get(S); Put("You entered: "); Put(S); New_Line; Put_Line("Enter a Coin: "); Get(C); Put("You entered: "); Put(C); New_Line; end Demo_Text_IO;

SISTEMAS DE TIEMPO REAL

330

SISTEMAS DE TIEMPO REAL

PROGRAMACIN CONCURRENTE. ADA95

SISTEMAS DE TIEMPO REAL

331

ASPECTOS BSICOS
Primitivas de concurrencia en Ada95 Procesos task Monitores protected Comunicacin sncrona: cita extendida entry Seleccin indeterminista select Otros:
Requeue Asynchronous transfert of control

SISTEMAS DE TIEMPO REAL

332

TAREAS

En Ada95: Procesos = tareas (task) El manejo de tareas en Ada95 es realizado por un ncleo (RTS) que forma parte del entorno de ejecucin.

Una tarea tiene dos partes:


Especificacin: declaracin de los puntos de entrada Cuerpo

SISTEMAS DE TIEMPO REAL

333

UN EJEMPLO
Dos bucles de control: temperatura y nivel Especificacin:

with TIPOS_BASICOS; use TIPOS_BASICOS; with ENT_SAL; use ENT_SAL; with METODOS_CONTROL ; use METODOS_CONTROL ; procedure SISTEMA_DE_CONTROL is task CONTROL_DE_TEMPERATURA ; task CONTROL_DE_NIVEL ;

SISTEMAS DE TIEMPO REAL

334

UN EJEMPLO
Cuerpo:
task body CONTROL_DE_TEMPERATURA is T: TEMPERATURA ; C: AJUSTE_DE_CALEFACTOR ; begin loop -- cada periodo de muestreo MEDIR(T) ; CALCULAR_ACCION(T,C) ; GENERAR(C) ; MOSTRAR(T) ; end loop ; end CONTROL_DE_TEMPERATURA ; task body CONTROL_DE_NIVEL is begin end CONTROL_DE_NIVEL ; begin -- SISTEMA_DE_CONTROL null ; end SISTEMA_DE_CONTROL ;

SISTEMAS DE TIEMPO REAL

335

TIPOS TAREA
Es til poder definir grupos de tareas similares. La declaracin de un tipo tarea permite disponer de una plantilla para crear tareas similares. Ejemplo: Control del brazo de un robot cartesiano
procedure CONTROL_DE_ROBOT is type DIMENSION is (X,Y,Z) ; task type CONTROL is end CONTROL ; SISTEMA_DE_CONTROL: array (DIMENSION) of CONTROL ;

SISTEMAS DE TIEMPO REAL

336

TIPOS TAREA
task body CONTROL is EJE: DIMENSION ; POSICION: integer ; DESPLAZAMIENTO: integer ; begin -- obtener el valor de EJE POSICION:= 0 ; loop CALCULAR_DESPLAZAMIENTO(EJE, DESPLAZAMIENTO) ; POSICION := POSICION+DESPLAZAMIENTO ; MOVER_BRAZO(EJE, POSICION) ; end loop ; end CONTROL ; begin -- CONTROL_DE_ROBOT for I in DIMENSION loop -- pasar el valor I -- SISTEMA_DE_CONTROL(I) end loop ; end CONTROL_DE_ROBOT;

SISTEMAS DE TIEMPO REAL

337

TAREAS DINMICAS
Se pueden crear dinmicamente tareas con un tipo acceso y el operador new. Las variables de acceso a tarea se pueden copiar y comparar
declare task type T ; type REF_T is access T ; P: REF_T ; Q: REF_T := new T ; -- Q.all arranca begin P:= new T ; -- P.all arranca Q:= P ; -- la anterior se -- vuelve anonima end ;

SISTEMAS DE TIEMPO REAL

338

DEPENDENCIA, ACTIVACIN, TERMINACIN


Toda tarea depende de una unidad progenitora. Las tareas estticas: Dependen del bloque, subprograma o cuerpo de tarea donde se declaran. Se activan justo antes de empezar la ejecucin de la unidad progenitora. Una unidad no puede terminar hasta que terminen todas las tareas que dependen de ella. Las tareas dinmicas siguen reglas diferentes: No dependen de la unidad donde se crean, sino de la unidad donde se declara el tipo acceso. Se activan cuando se ejecuta el operador new. Pueden seguir existiendo despus de que termine la unidad donde se crean.

SISTEMAS DE TIEMPO REAL

339

DEPENDENCIA, ACTIVACIN, TERMINACIN


Ejemplo:
declare task type T ; type REF_T is access T ; begin declare X: T ; Y: REF_T := new T; begin end ; -- espera que termine X -- Y.all puede continuar end ; -- espera que termine Y.all

Una tarea puede terminar cuando: Completa la ejecucin de su cuerpo. Se pone de acuerdo con otras tareas para terminar conjuntamente. Es abortada.

SISTEMAS DE TIEMPO REAL

340

COMUNICACIN ENTRE TAREAS


Cita extendida (rendez-vous)

Algunas caractersticas: Si varias tareas invocan a un mismo punto de entrada de otra tarea, se colocan en una cola (asociada a ese punto de entrada)
FIFO Prioridad Otras ...

La tarea que invoca un punto de entrada tiene que identificar a la tarea a la cual llama. Esta ltima no identifica a la tarea llamadora (puede ser cualquiera) A veces conviene que una tarea llamadora se identifique a s misma mediante algn parmetro Se pueden definir familias de puntos de entrada

SISTEMAS DE TIEMPO REAL

341

COMUNICACIN ENTRE TAREAS


Volvemos al ejemplo del control del brazo de un robot cartesiano: ejemplo de entrada de inicializacin.

procedure CONTROL_DE_ROBOT is type DIMENSION is (X,Y,Z) ; task type CONTROL is entry INICIAR(D: DIMENSION) ; end CONTROL ; SISTEMA_DE_CONTROL: array (DIMENSION) of CONTROL ;

SISTEMAS DE TIEMPO REAL

342

COMUNICACIN ENTRE TAREAS


task body CONTROL is EJE: DIMENSION ; POSICION: integer ; DESPLAZAMIENTO: integer ; begin accept INICIAR(D: DIMENSION) do EJE:= D ; end INICIAR ; POSICION:= 0 ; loop CALCULAR_DESPLAZAMIENTO(EJE, DESPLAZAMIENTO) ; POSICION := POSICION+DESPLAZAMIENTO ; MOVER_BRAZO(EJE, POSICION) ; end loop ; end CONTROL ; begin -- CONTROL_DE_ROBOT for I in DIMENSION loop SISTEMA_DE_CONTROL(I).INICIAR(I) ; end loop ; end CONTROL_DE_ROBOT;

SISTEMAS DE TIEMPO REAL

343

SELECCIN DE LLAMADAS
A veces no es posible prever en qu orden se van a invocar los distintos puntos de llamada de una tarea (por ejemplo en tareas servidoras --> proporcionan un servicio). Por ejemplo un monitor:
task VARIABLE_COMUN is entry MODIFICAR(VALOR: TIPO) ; entry EXAMINAR(VALOR: out TIPO) ; end VARIABLE_COMUN ;

Alternancia estricta entre MODIFICAR y EXAMINAR

task body VARIABLE_COMUN is VARIABLE: TIPO ; begin loop accept MODIFICAR(VALOR: TIPO) do VARIABLE:= VALOR ; end MODIFICAR ; accept EXAMINAR(VALOR: out TIPO) do VALOR:= VARIABLE ; end EXAMINAR ; end loop ; end VARIABLE_COMUN ;

SISTEMAS DE TIEMPO REAL

344

SELECCIN DE LLAMADAS
Seleccin indeterminista: Es una estructura de control indeterminista que slo puede ir en el cuerpo de una tarea: select <alternativa_1> or <alternativa_2> or end select ; Funcionamiento: Si se recibe una llamada a una de las entradas alternativas, se acepta y despus se termina el select. Si se reciben llamadas a varias entradas simultneamente, se acepta una de ellas de acuerdo a la poltica de colas establecida y despus se termina el select. Si no hay llamadas pendientes, la tarea espera en el select hasta que llegue una.

Cada alternativa es una instruccin select que puede ir seguida de una secuencia de instrucciones.

SISTEMAS DE TIEMPO REAL

345

SELECCIN DE LLAMADAS
El ejemplo del monitor arreglado:
task body VARIABLE_COMUN is VARIABLE: TIPO ; begin loop select accept MODIFICAR(VALOR: TIPO) do VARIABLE:= VALOR ; end MODIFICAR ; or accept EXAMINAR(VALOR: out TIPO) do VALOR:= VARIABLE ; end EXAMINAR ; or terminate ; end select ; end loop ; end VARIABLE_COMUN ;

La alternativa terminate se selecciona cuando el progenitor est completado y todas las tareas hermanas o dependientes estn completadas o esperando en un select con terminate. En este caso terminan todas simultneamente.

SISTEMAS DE TIEMPO REAL

346

OTRAS FORMAS DE ALTERNATIVAS


Alternativas con else:
select else -- secuencia de instrucciones end select ;

Si no se puede aceptar ninguna alternativa, se ejecuta la parte else. Hay tambin llamadas condicionales a puntos de entrada:
select T.E() ; else -- instrucciones end select ;

Si la llamada no es aceptada inmediatamente, se abandona y se ejecuta la parte else. En esta forma no puede haber alternativas.

SISTEMAS DE TIEMPO REAL

347

ALTERNATIVAS GUARDADAS
A veces es necesario que alguna de las alternativas de un select se acepte slo en determinadas condiciones. Esto se hace poniendo una guarda:
when <condicion> => accept <entrada> do ...

En un select con guardas, se evalan todas las guardas y slo se consideran para la seleccin las que son ciertas (alternativas abiertas). Una alternativa sin guarda est siempre abierta.

SISTEMAS DE TIEMPO REAL

348

ALTERNATIVAS GUARDADAS
Ejemplo: un semforo
task SEMAFORO is entry ESPERAR ; entry AVISAR ; end SEMAFORO ; task body SEMAFORO is VALOR: natural := 0 ; begin loop select when VALOR > 0 => accept ESPERAR ; VALOR := VALOR - 1 ; or accept AVISAR ; VALOR := VALOR + 1 ; or terminate ; end select ; end loop ; end SEMAFORO ;

SISTEMAS DE TIEMPO REAL

349

PROTECTED
Tienen una semntica similar a los monitores: Permiten controlar el acceso a datos compartidos por varios procesos Son pasivos, a diferencia de las tareas Ofrece tres clases de operaciones
Protected procedures: acceso en exclusin mtua a los datos protegidos Protected functions: acceso concurrente, slo lectura, a los datos Entries: como las procedures, pero permiten especificar barriers (guardas).

Se pueden definir objetos y tipos protegidos (similar a las tareas).

SISTEMAS DE TIEMPO REAL

350

EJEMPLO DE PROTECTED
generic type Data_Item is private ; Mbox_size: positive ; package Mailbox_Pkg is subtype Data_Item_Count is integer range 0 .. Mbox_Size; subtype Data_Item_Index is integer range 1 .. Mbox_Size; type Data_Item_Array is array(Data_Item_Index) of Data_Item ; protected type Mailbox is entry Send (Item : Data_Item); entry Receive (Item : out Data_Item); procedure Clear; function Number_In_Box return Integer; private Count : Data_Item_count := 0; Out_Index : Data_Item_Index := 1; In_Index : Data_Item_Index := 1; Data : Data_Item_Array ; end Mailbox; end Mailbox_Pkg;

SISTEMAS DE TIEMPO REAL

351

EJEMPLO DE PROTECTED
package body Mailbox_Pkg is protected body Mailbox is

entry Send ( Item : Data_Item) when Count < Mbox_Size is -- block until room begin Data ( In_Index ) := Item; In_Index := In_Index mod Mbox_size + 1; Count := Count + 1; end Send; entry Receive ( Item : out Data_Item ) when Count > 0 is -- block until non-empty begin Item := Data( Out_Index ); Out_Index := Out_Index mod Mbox_Size + 1; Count := Count -1; end Receive;

SISTEMAS DE TIEMPO REAL

352

EJEMPLO DE PROTECTED
procedure Clear is --only one user in Clear at a time begin Count := 0; Out_Index := 1; In_Index := 1; end Clear; function Number_In_Box return Integer is -- many users can check # in Box begin return Count; end Number_In_Box; end Mailbox; end Mailbox_Pkg;

SISTEMAS DE TIEMPO REAL

353

PROTECTED
Uso del protected
with mailbox_pkg ; procedure mp is package Integer_Mailbox_pkg is new Mailbox_pkg(integer, 100) ; use Integer_Mailbox_pkg ; MB: Mailbox ; i: integer ; begin ... MB.send (100) ; ... MB.receive (i) ; ... if MB.Number_In_Box > 0 then ... end if ; ... end ;

SISTEMAS DE TIEMPO REAL

354

PRIVATE ENTRIES
Existen varias razones para que una tarea declare como privada una entrada (no pblica): La tarea tiene varias tareas declaradas internamente; estas tareas internas tienen acceso a las entradas privadas La entrada es usada internamente en una primitiva requeue La entrada tiene asociada una interrupcin de hardware y el programador no quiere que ninguna otra tarea llame a esa entrada. Ejemplo de declaracin y uso:

procedure Aplicacion is task Usuario ; task Controlador is entry Lectura(I: out integer); private entry Comienzo ; entry Completado (K: integer) ; end Controlador ; task body Usuario is ... -- Incluye llamadas -- a Lectura

SISTEMAS DE TIEMPO REAL

355

REQUEUE
Existen situaciones en las cuales las guardas no son suficientes: La aceptacin de una cita no depende nicamente del estado del aceptador si no tambin del llamador
para aceptar o no una cita de haber un intercambio previo de informacin

Ejemplo:
type Request_Range is range 1..Max ; protected Resource_Controller is entry Allocate (R: out Resource; Amount: Request_Range) ; procedure Release (R: Resource ; Amount: Request_Range) ; private ... end Resource_Controller ;

SISTEMAS DE TIEMPO REAL

356

REQUEUE
Solucin: Entrada privada para encolar los pedidos que no pueden ser aceptados Los pedidos son tramitados
type Request_Range is range 1..Max ; protected Resource_Controller is entry Allocate (R: out Resource; Amount: Request_Range) ; procedure Release (R: Resource ; Amount: Request_Range) ; private entry Assign (R: out Resource; Amount: Request_Range) ; Free: Request_Range := Request_RangeLast ; New_Resources_Released: Boolean:= False ; To_Try: Natural := 0 ; ... end Resource_Controller ;

SISTEMAS DE TIEMPO REAL

357

REQUEUE

protected body Resource_Controller is entry Allocate (R: out Resource; Amount: Request_Range) when Free > 0 is begin if Amount<= Free then Free:= Free - Amount ; -- Allocate else requeue Assign ; end if ; end Allocate ;

SISTEMAS DE TIEMPO REAL

358

REQUEUE

entry Assign (R: out Resource; Amount: Request_Range) when New_Resources_Released is begin To_Try := To_Try - 1 ; if To_Try = 0 then New_Resources_Released := False ; end if ; if Amonut <= Free then Free := Free - Amount ; -- allocate else requeue Assign ; end if ; end Assign ;

SISTEMAS DE TIEMPO REAL

359

REQUEUE

procedure Release (R: Resource ; Amount: Request_Range) is begin Free := Free + Amount ; -- Free resources if Assigncount > 0 then To_Try := AssignCount ; New_Resources_Released:= true ; end if ; end Release ; end Resource_Controller ;

SISTEMAS DE TIEMPO REAL

360

ASYNCHRONOUS TRANSFER OF CONTROL


codigo_abortable es ejecutado si la llamada no puede ser aceptada inmediatamente Si la llamada puede ser aceptada antes de que haya finalizado la ejecucin de codigo_abortable, dicha ejecucin es abortada Si codigo_abortable acaba su ejecucin entonces la llamada es cancelada

select entry_call_statement then abort codigo_abortable end select ;

SISTEMAS DE TIEMPO REAL

361

ASYNCHRONOUS TRANSFER OF CONTROL


Ejemplo:

loop select Terminal.Wait_For_Interrupt; Ada.Text_IO.Put_Line(Interrupted); then abort Ada.Text_IO.Put_Line(Enter Command--> ); Ada.Text_IO.Get_Line(Command, Last); Parse_and_Process (Command (1..Last) ) ; end select ; end loop; end Poll_Device;

SISTEMAS DE TIEMPO REAL

362

SISTEMAS DE TIEMPO REAL

MEDIDA Y CONTROL DEL TIEMPO EN ADA95

SISTEMAS DE TIEMPO REAL

363

MEDIDA DE TIEMPOS EN ADA95


En Ada hay dos paquetes predefinidos que proporcionan funciones de reloj: Ada.Calendar
Reloj calendario orientado a dar la fecha y la hora Define un tipo abstracto Time La funcin Clock da un valor de tiempo para uso externo Los intervalos de tiempo se representan con el tipo predefinido Duration

Ada.Real_Time
Reloj de tiempo real con granularidad ms pequea Define un tipo abstracto Time La funcin Clock da un valor montono (durante ms de 50 aos desde el arranque de la aplicacin) Los intervalos de tiempo se representan con el tipo abstracto Time_Span

SISTEMAS DE TIEMPO REAL

364

MEDIDA DE TIEMPOS EN ADA95


DURATION: Es un tipo predefinido que representa intervalos de tiempo en segundos. Es un tipo coma fija => no se pierde precisin al sumar o restar intervalos de tiempo: type DURATION is delta range ; Su precisin depende de la implementacin. Su valor, DURATION'SMALL, no debe ser mayor de 20 ms, aunque se recomienda que no sobrepase los 50 s. El intervalo de valores tambin depende de la implementacin. Debe poder representar valores positivos y negativos hasta la duracin de un da: -86400.0 .. +86400.0

SISTEMAS DE TIEMPO REAL

365

Ada.Calendar
TIME: Representa valores de tiempo absolutos. Es un tipo abstracto de dato especificado en un paquete predefinido denominado CALENDAR. Este paquete incluye un reloj, cuyo valor se lee con la funcin CLOCK, adems de operaciones con los tipos TIME y DURATION.
package Ada.Calendar is type TIME is private ; subtype subtype subtype subtype YEAR_NUMBER is integer range 1901..2099 ; MONTH_NUMBER is integer range 1..12 ; DAY_NUMBER is integer range 1..31 ; DAY_DURATION is DURATION range 0.0..86400.0 ;

function CLOCK return TIME ;

SISTEMAS DE TIEMPO REAL

366

Ada.Calendar
function YEAR (DATE: TIME) return YEAR_NUMBER ; function MONTH (DATE: TIME) return MONTH_NUMBER ; function DAY (DATE: TIME) return DAY_NUMBER ; function SECONDS(DATE: TIME) return DAY_DURATION ; procedure SPLIT(DATE: in TIME ; YEAR: out YEAR_NUMBER ; MONTH: out MONTH_NUMBER ; DAY: out DAY_NUMBER ; SECONDS: out DAY_DURATION); function TIME_OF(YEAR: YEAR_NUMBER ; MONTH: MONTH_NUMBER ; DAY: DAY_NUMBER ; SECONDS:DAY_DURATION:=0.0) return TIME ;

SISTEMAS DE TIEMPO REAL

367

Ada.Calendar
function function function function function function function function "+" "+" "-" "-" (LEFT: (LEFT: (LEFT: (LEFT: TIME; RIGHT: DURATION) return TIME ; DURATION; RIGHT: TIME) return TIME ; TIME; RIGHT: DURATION) return TIME ; TIME; RIGHT: TIME) return DURATION;

"<" (LEFT, RIGHT: TIME) return boolean ; "<=" (LEFT, RIGHT: TIME) return boolean ; ">" (LEFT, RIGHT: TIME) return boolean ; ">=" (LEFT, RIGHT: TIME) return boolean ;

TIME_ERROR: exception ; private -- depende de la implementacion end;

SISTEMAS DE TIEMPO REAL

368

Ada.Real_Time
En el anexo Real-Time Systems se define un paquete para manejo del tiempo en aplicaciones de tiempo real: tiempo monotnico y reloj de alta resolucin
package Ada.Real_Time is type Time is private; Time_First : constant Time; Time_Last : constant Time; Time_Unit : constant := implementation-defined-real-number; type Time_Span is private; Time_Span_First : constant Time_Span; Time_Span_Last : constant Time_Span; Time_Span_Zero : constant Time_Span; Time_Span_Unit : constant Time_Span; Tick : constant Time_Span; function Clock return Time;

SISTEMAS DE TIEMPO REAL

369

Ada.Real_Time

function function function function function function function function function function function function function

"+" "+" "-" "-"

(Left: (Left: (Left: (Left:

Time; Right: Time_Span) return Time; Time_Span; Right: Time) return Time; Time; Right: Time_Span) return Time; Time; Right: Time) return Time_Span; Right: Right: Right: Right: Time) Time) Time) Time) return return return return Boolean; Boolean; Boolean; Boolean;

"<" (Left, "<="(Left, ">" (Left, ">="(Left, "+" "-" "-" "*" "*"

(Left, Right: Time_Span) return Time_Span; (Left, Right: Time_Span) return Time_Span; (Right: Time_Span) return Time_Span; (Left: Time_Span; Right: Integer) return Time_Span; (Left: Integer; Right: Time_Span) return Time_Span;

SISTEMAS DE TIEMPO REAL

370

Ada.Real_Time

function "/" (Left, Right : Time_Span) return Integer; function "/" (Left: Time_Span; Right: Integer) return Time_Span; function "abs"(Right : Time_Span) return Time_Span; function function function function "<" (Left, "<="(Left, ">" (Left, ">="(Left, Right Right Right Right : : : : Time_Span) Time_Span) Time_Span) Time_Span) return return return return Boolean; Boolean; Boolean; Boolean;

SISTEMAS DE TIEMPO REAL

371

Ada.Real_Time
function To_Duration (TS : Time_Span) return Duration; function To_Time_Span (D : Duration) return Time_Span; function Nanoseconds (NS : Integer) return Time_Span; function Microseconds (US : Integer) return Time_Span; function Milliseconds (MS : Integer) return Time_Span; type Seconds_Count is range implementation-defined; procedure Split(T : in Time; SC : out Seconds_Count; TS : out Time_Span); function Time_Of(SC : Seconds_Count; TS : Time_Span) return Time; private ... -- not specified by the language end Ada.Real_Time;

SISTEMAS DE TIEMPO REAL

372

RETARDOS Y TIME-OUTS
Los retardos en Ada95 se pueden realizan mediante dos instrucciones: delay <duracion> ; delay until <time> ;
Calendar.Time Ada.Real_Time.Time

SISTEMAS DE TIEMPO REAL

373

RETARDOS Y TIME-OUTS
En Ada95, las relaciones con el entorno toman la forma de llamadas o aceptaciones de puntos de entrada. Conviene limitar el tiempo durante el cual una tarea puede estar suspendida llamando, aceptando o en seleccin de entradas. La limitacin del tiempo de aceptacin o seleccin se hace mediante una seleccin temporizada:
select accept <entrada> or or delay <duracion> ; -- delay until <time> ; <instrucciones> end select ;

NOTA: el select puede tener como mximo: una parte else o una alternativa terminate o una o varias alternativas delay.

SISTEMAS DE TIEMPO REAL

374

TIME-OUT
task body VARIABLE_COMUN is CONTENIDO: VALOR ; DEFECTO: constant VALOR := ; begin -- si en 10s no se modifica => defecto select accept MODIFICAR (V: VALOR) do CONTENIDO:= V ; end MODIFICAR ; or delay 10.0 CONTENIDO:= DEFECTO ; end select ; loop select accept MODIFICAR(VALOR: TIPO) do VARIABLE:= VALOR ; end MODIFICAR ; or ... end VARIABLE_COMUN ;

SISTEMAS DE TIEMPO REAL

375

TIME-OUT
Llamadas temporizadas Las llamadas temporizadas sirven para limitar el tiempo de espera en las llamadas a puntos de entrada. Un ejemplo:
task body CONTROL is begin loop select CAPTADOR.MEDIR(Y) ; -- aqui puede haber una secuencia -- de instrucciones or delay 0.10 ; raise CAPTADOR_AVERIADO ; end select ; end loop ; end CONTROL ;

SISTEMAS DE TIEMPO REAL

376

RETARDOS Y TIME-OUTS
En Ada95 se puede limitar el tiempo de ejecucin de un cdigo mediante un Asynchronous Transfer of Control:

select delay Time_out ; <instrucciones> then abort codigo_con_plazo_de_respuesta ; end select ;

SISTEMAS DE TIEMPO REAL

377

PRIORIDADES
En Ada95 se asigna una prioridad a una tarea (o protected) o a todas las tareas (protected) de un tipo incluyendo un pragma PRIORITY en la especificacin correspondiente:

task T is pragma PRIORITY(<prioridad>) ; end T ; task type TT is pragma PRIORITY(<prioridad>) ; end TT ;

SISTEMAS DE TIEMPO REAL

378

PRIORIDADES
La prioridad es una expresin esttica del tipo predefinido SYSTEM.PRIORITY, que a su vez es un subintervalo del tipo integer. El intervalo de valores depende de la implementacin. Los valores ms altos corresponden a las tareas ms prioritarias.

subtype Any_Priority is Integer range implementation-defined ; subtype Priority is Any_Priority range Any_Priorityfirst..implementation-defined ; subtype Interrupt_Priority is Any_Priority range Prioritylast.. Any_Prioritylast;

SISTEMAS DE TIEMPO REAL

379

PRIORIDADES
Propiedades del modelo de prioridades de Ada95: La planificacin es expulsiva. Las prioridades son estticas aunque se pueden cambiar explcitamente en tiempo de ejecucin. Todas las tareas del mismo tipo tienen la misma prioridad. Existen pragmas que pueden configurar la poltica de planificacin del RTS

SISTEMAS DE TIEMPO REAL

380

POLITICAS DE PLANIFICACIN
pragma Task_Dispatching_Policy (policy_identifier) Permite la poltica de planificacin del RTS FIFO_Within_Priorities es la nica poltica requerida y es la de defecto Los compiladores pueden implementar otras polticas pragma Locking_Policy (policy_identifier) Poltica de interaccin entre las tareas y los objetos protegidos Ceiling_Locking est predefinida Los compiladores pueden implementar otras polticas pragma Queuing_Policy (policy_identifier) Especifica como se encolan las llamadas a un entry FIFO_Queuing y Priority_Queuing estn predefinidas Los compiladores pueden implementar otras polticas

SISTEMAS DE TIEMPO REAL

381

PRIORIDADES
En Ada95 se puede cambiar de forma dinmica las prioridades de las tareas:
with System; with Ada.Task_Identification; package Ada.Dynamic_Priorities is procedure Set_Priority (Priority: in System.Any_Priority; T : in Ada.Task_Identification.Task_ID := Ada.Task_Identification.Current_Task); function Get_Priority (T : Ada.Task_Identification.Task_ID := Ada.Task_Identification.Current_Task) return System.Any_Priority; end Ada.Dynamic_Priorities;

SISTEMAS DE TIEMPO REAL

382

SISTEMAS DE TIEMPO REAL

PROGRAMACIN DE BAJO NIVEL

SISTEMAS DE TIEMPO REAL

383

Mecanismos de bajo nivel en Ada95


Ada 95 tiene varios mecanismos de bajo nivel que permiten acceder a registros, direcciones e interrupciones clusulas de representacin
permiten especificar la representacin de tipos y objetos en la arquitectura de hardware

atributos de representacin (tamao, direccin, alineacin) representacin de tipos enumerados representacin de registros

manejadores de interrupciones
permiten asociar una interrupcin a un procedimiento protegido

subprogramas en lenguaje de mquina


permiten un control total sobre la arquitectura de hardware

SISTEMAS DE TIEMPO REAL

384

Paquete System
En cada implementacin de un compilador Ada95 hay un paquete predefinido (SYSTEM) que incluye la definicin de caractersticas dependientes de la mquina, importantes para la programacin bajo nivel.
package System is pragma Preelaborate(System); type Name is implementation-defined-enumeration-type; System_Name : constant Name := implementation-defined; -- System-Dependent Named Numbers: Min_Int : constant := root_integer'First; Max_Int : constant := root_integer'Last; ... Tick : constant := implementation-defined; -- Storage-related Declarations: type Address is implementation-defined; Null_Address : constant Address; ...

SISTEMAS DE TIEMPO REAL

385

Paquete System
-- Address Comparison: function "<" (Left, Right : Address) return Boolean; function "<="(Left, Right : Address) return Boolean; ... -- Other System-Dependent Declarations: type Bit_Order is (High_Order_First, Low_Order_First); Default_Bit_Order : constant Bit_Order; -- Priority-related declarations (see D.1): subtype Any_Priority is Integer range implementation-defined; subtype Priority is Any_Priority range Any_Priority'First .. implementation-defined; subtype Interrupt_Priority is Any_Priority range Priority'Last+1 .. Any_Priority'Last; Default_Priority : constant Priority := (Priority'First + Priority'Last)/2; private ... -- not specified by the language end System;

SISTEMAS DE TIEMPO REAL

386

ATRIBUTOS DE REPRESENTACION
Para cualquier objeto, unidad de programa, etiqueta o entry X: Xaddress Para cualquier tipo o subtipo, u objeto X: Xsize (en bits) Para cualquier tipo acceso o subtipo T: Tstorage_size (en unidades de memoria) Para cualquier tipo tarea u objeto tarea T: Tstorage_size (en unidades de memoria) Para cualquier componente C de un registro R: R.Cposition (en unidades de memoria) R.Cfirst_bit (en bits) R.Clast_bit (en bits)

SISTEMAS DE TIEMPO REAL

387

CLAUSULAS DE REPRESENTACIN
Direccin del objeto:
DATOS: REGISTRO_DE_DATOS; for DATOSAddress use System.Storage_Elements.To_Address(16#C200#) ;

Longitud (en bits) de los objetos de un tipo:


type CANAL is range 0..63; for CANAL'SIZE use 6;

Representacin de un tipo enumerado:


type INDICADOR is (SI,NO); for INDICADOR use (SI => 1, NO => 0) ;

Alineacin
for REGISTRO_DE_DATOSAlignment use 2;

SISTEMAS DE TIEMPO REAL

388

CLAUSULAS DE REPRESENTACION
Estructura de un registro
type REGISTRO_DE_CONTROL is record ARRANCA : INDICADOR; INTERRUMPE: INDICADOR; TERMINADO : INDICADOR; ENTRADA : CANAL; ERROR : INDICADOR; end record;

for REGISTRO_DE_CONTROL use record ARRANCA at 0 range 0..0 INTERRUMPE at 0 range 6..6 TERMINADO at 0 range 7..7 ENTRADA at 1 range 0..5 ERROR at 1 range 7..7 end record;

; ; ; ; ;

SISTEMAS DE TIEMPO REAL

389

CONVERSIN DE TIPOS
A veces hay que interpretar un dato de un tipo como si fuera de otro tipo, copiando directamente su representacin binaria. Se hace con un procedimiento genrico predefinido:

generic type SOURCE (<>) is limited private ; type TARGET (<>) is limited private ; function Ada.Unchequed_Conversion(S: SOURCE) return TARGET ;

SISTEMAS DE TIEMPO REAL

390

CONVERSIN DE TIPOS
Ejemplo:
with unchecked_conversion, text_io ; procedure pru_to_word is type byte is range 0..16#FF# ; for byte'size use 8 ; type two_byte is record L: byte ; H: byte ; end record ; pragma pack (two_byte) ; for two_byte'size use 16 ; type word is range 0..16#FFFF# ; for word'size use 16 ; package wio is new text_io.integer_io (word) ; use wio ; function to_word is new unchecked_conversion (source => two_byte, target => word) ; begin put (to_word(two_byte'(1,1))) ; end ;

SISTEMAS DE TIEMPO REAL

391

INTERRUPCIONES
Los manejadores de interrupciones son procedimientos protegidos sin parmetros. Cada interrupcin tiene un identificador nico de tipo Interrupt_Id (definido en el paquete Ada. Interrupts ) El pragma Attach_Handler especifica que un procedimiento protegido es un manejador asociado a una interrupcin
pragma Attach_Handler (Handler_Name, Interrupt) ;

El pragma Interrupt_Handler permite especificar que un procedimiento protegido es un manejador, pero no lo asocia con ninguna interrupcin
la asociacin con una interrupcin se hace dinmicamente pragma Interrupt_Handler (Handler_Name) ;

SISTEMAS DE TIEMPO REAL

392

INTERRUPCIONES
Se puede especificar la prioridad del manejador de una interrupcin el pragma Interrupt_Priority en la especificacin del objeto protegido
pragma Interrupt_Priority (Priority_Value) ;

El valor de la prioridad debe pertenecer al subtipo:


System.Interrupt_Priority

SISTEMAS DE TIEMPO REAL

393

INTERRUPCIONES

package Ada.Interrupts is type Interrupt_ ID is ...; type Parameterless_ Handler is access protected procedure; function Is_Reserved (Interrupt : Interrupt_ ID) return Boolean; function Is_Attached (Interrupt : Interrupt_ ID) return Boolean; function Current_Handler (Interrupt : Interrupt_ ID) return Parameterless_Handler; procedure Attach_Handler (New_Handler : Parameterless_ Handler; Interrupt : Interrupt_ ID); procedure Exchange_Handler (Old_Handler: out Parameterless_Handler; New_Handler: Parameterless_ Handler; Interrupt: Interrupt_ID); procedure Detach_Handler (Interrupt : Interrupt_ ID); ... end Ada. Interrupts;

SISTEMAS DE TIEMPO REAL

394

INTERRUPCIONES
protected body Interrupt_Handler is

E j e m p l o

procedure Handler is begin -- Code of handler Interrupt_Ocurred := true ; end ; entry Wait_for_Event when Interrupt_Ocurred is begin ... Interrupt_Ocurred := false ; ... end ; protected Interrupt_Handler is entry Wait_for_Event ; end ; private procedure Handler ; pragma Attach_Handler (Handler, Int_ID) ; pragma Interrupt_Priority () ; Interrupt_Ocurred : boolean := false ; end ;

SISTEMAS DE TIEMPO REAL

395

SUBPROGRAMAS EN LENGUAJE MAQUINA


A veces es necesario realizar algn componente de software en lenguaje ensamblador. En Ada95 se pueden escribir procedimientos en ensamblador de forma controlada, utilizando un paquete predefinido denominado MACHINE_CODE. Las instrucciones de estos procedimientos son todas de la forma: tipo'agregado donde tipo es un tipo registro definido en MACHINE_CODE que representa un formato de instruccin de mquina, y agregado es del tipo anterior. Adems, puede haber pragmas especficos para indicar el uso de los registros del procesador u otras caractersticas de bajo nivel.

SISTEMAS DE TIEMPO REAL

396

SUBPROGRAMAS EN LENGUAJE MAQUINA


Ejemplo
package System.Machine_Code is type OPERACION is (LOAD, STORE, ADD, ,SETI,CLI) ; type OPERANDO is range 0..4095 ; for OPERACION'SIZE use 4 ; for OPERANDO'SIZE use 12 ; type INSTRUCCION is record COP: OPERACION ; OPR: OPERANDO ; end record; for INSTRUCCION use record COP at 0 range 0..3 ; OPR at 0 range 4..15 ; end record; for INSTRUCCION'SIZE use 16 ; end MACHINE_CODE ;

SISTEMAS DE TIEMPO REAL

397

SUBPROGRAMAS EN LENGUAJE MAQUINA

procedure INHIBIR_INTERRUPCIONES ; pragma INLINE(INHIBIR_INTERRUPCIONES) ; procedure INHIBIR_INTERRUPCIONES is use MACHINE_CODE; begin INSTRUCCION'(COP => CLI, OPR => 0) ; end INHIBIR_INTERRUPCIONES ;

SISTEMAS DE TIEMPO REAL

398

SUBPROGRAMAS EN OTROS LENGUAJES


El pragma INTERFACE permite utilizar subprogramas escritos en otros lenguajes de programacin. Ejemplo:
package FORTRAN_LIB is function SQRT(X: FLOAT) return FLOAT ; function EXP(X: FLOAT) return FLOAT ; private pragma INTERFACE(FORTRAN, SQRT) ; pragma INTERFACE(FORTRAN, EXP) ; end FORTRAN_LIB ;

SISTEMAS DE TIEMPO REAL

399

SISTEMAS DE TIEMPO REAL

EXCEPCIONES EN Ada95

SISTEMAS DE TIEMPO REAL

400

MODELO. DECLARACIN
Modelo de terminacin. Enlace dinmico El tipo exception est predefinido. Se pueden declarar excepciones: ERROR_DE_PARIDAD: exception; FUERA_DE_LIMITES: exception; EXC1, EXC2: exception;

Hay excepciones predefinidas:


CONSTRAINT_ERROR: Rangos, ndices, longitudes. NUMERIC_ERROR: Divisin por cero, sobrepasamiento. PROGRAM_ERROR: Acceso a procedimientos, mdulos, , seleccin, STORAGE_ERROR: Variables y memoria dinmica. TASKING_ERROR: Comunicacin y ejecucin de tareas.

SISTEMAS DE TIEMPO REAL

401

ACTIVACIN
Explcita (deteccin de errores por la aplicacin):
raise ERROR_DE_PARIDAD ;

Implcita (deteccin de errores por el entorno):


el compilador genera el cdigo para levantar las excepciones predefinidas.

SISTEMAS DE TIEMPO REAL

402

MANEJADOR
Manejador: se situa al final de un bloque, procedimiento o funcin, paquete o tarea. Maneja las excepciones levantadas en o propagadas hacia ese dominio
declare ERROR_DE_PARIDAD: exception; begin if not PARIDAD (C) then raise ERROR_DE_PARIDAD ; end if ; exception when ERROR_DE_PARIDAD => ENVIAR(NACK) ; LEER(C) ; when NUMERIC_ERROR => raise ; when others => HACER_ALGO; end ;

SISTEMAS DE TIEMPO REAL

403

EJEMPLO. CONVERSIN AD
package IO_DIGITAL is type VALOR_DIGITAL is limited private ; procedure LEER_VALOR (V: out VALOR_DIGITAL) ; procedure SACAR_VALOR (V: in VALOR_DIGITAL) ; function CONVERTIR (V: in INTEGER) return VALOR_DIGITAL ; ERROR_LECTURA: exception ; ERROR_ESCRITURA: exception ; private type VALOR_DIGITAL is range 0..4095; for VALOR_DIGITAL'SIZE use 12 ; end IO_DIGITAL ;

SISTEMAS DE TIEMPO REAL

404

EJEMPLO. CONVERSIN AD
with IO_DIGITAL; use IO_DIGITAL ; task CONTROL is MAX_SATURACIONES: constant := 5 ; VECES_SATURADO: CARDINAL:= 0; Y, X, K, KI, KP: float ; FUERA_DE_CONTROL: exception ; begin loop declare ENTRADA, SALIDA: VALOR_DIGITAL; begin LEER_VALOR(ENTRADA); X:= float(ENTRADA) ; Y:= K*X + ; SALIDA:= VALOR_DIGITAL(Y) ; -- posible desbordamiento de SALIDA SACAR_VALOR(SALIDA) ; VECES_SATURADO:= 0 ;

SISTEMAS DE TIEMPO REAL

405

EJEMPLO. CONVERSIN AD
exception when CONSTRAINT_ERROR => if Y>0 then SACAR_VALOR(4095) ; else SACAR_VALOR(0) ; end if ; VECES_SATURADO:= VECES_SATURADO + 1 ; if VECES_SATURADO >= MAX_SATURACIONES then raise FUERA_DE_CONTROL ; end if ; when ERROR_LECTURA => ; when ERROR_ESCRITURA => ; end ; end loop ; exception ; when FUERA_DE_CONTROL => ABRIR_VALVULA ; SONAR_ALARMA ; when others => ; end CONTROL ;

SISTEMAS DE TIEMPO REAL

406

EJEMPLO. BLOQUES DE RECUPERACIN


Implementacin de la tcnica de los bloques de recuperacin mediante excepciones.
with recovery_cache; procedure recovery_block is primary_failure, secondary_failure, tertiary_failure: exception; recovery_block_failure : exception; type module is (primary, secondary, tertiary); function acceptance_test return boolean is begin -- code for the acceptance test return true; end acceptance_test;

SISTEMAS DE TIEMPO REAL

407

EJEMPLO. BLOQUES DE RECUPERACIN

procedure primary is begin -- code for primary algorithm if not acceptance_test then raise primary_failure; end if; exception when primary_failure => -- forward recovery to return environment -- to the required state raise; when others => -- unexpected error -- forward recovery to return environment -- to the required state raise primary_failure; end primary;

SISTEMAS DE TIEMPO REAL

408

EJEMPLO. BLOQUES DE RECUPERACIN


procedure secondary is begin -- code for secondary algorithm if not acceptance_test then raise secondary_failure; end if; exception when secondary_failure => -- forward recovery to return environment -- to the required state raise; when others => -- unexpected error -- forward recovery to return environment -- to the required state raise secondary_failure; end secondary; procedure tertiary is begin ... end tertiary;

SISTEMAS DE TIEMPO REAL

409

EJEMPLO. BLOQUES DE RECUPERACIN


begin recovery_cache.save; for try in module loop begin case try is when primary => primary; exit; when secondary => secondary; exit; when tertiary => tertiary; end case; exception when primary_failure => recovery_cache.restore; when secondary_failure => recovery_cache.restore; when tertiary_failure => recovery_cache.restore; raise recovery_block_failure; when others => recovery_cache.restore; raise recovery_block_failure; end; end loop; end recovery_block;

También podría gustarte