dit UPM Sistemas de tiempo real 1er semestre, curso 2004-2005 Juan Antonio de la Puente Alejandro Alonso DIT/UPM Prof
Views 77 Downloads 7 File size 6MB
dit UPM
Sistemas de tiempo real 1er semestre, curso 2004-2005
Juan Antonio de la Puente Alejandro Alonso DIT/UPM
Profesores
Juan Antonio de la Puente – Correo electrónico: [email protected] – Página personal: http://www.dit.upm.es/jpuente – Tutorías: B-318, martes de 12 a 13 horas
Alejandro Alonso – Correo electrónico: [email protected] – Página personal: http://www.dit.upm.es/aalonso – Tutorías: B-319, miércoles de 12 a 13 horas
STRL - 21/09/2004
©2004 Juan Antonio de la Puente
1
1
Objetivos de la asignatura
Comprender los problemas específicos de los sistemas de tiempo real y los conceptos básicos asociados a ellos.
Conocer los métodos más importantes que se utilizan para desarrollar sistemas de tiempo real con un grado de fiabilidad elevado, y comprender sus principios y formas de aplicación.
Conocer algunas herramientas (lenguajes de programación y sistemas operativos) adecuadas para la realización de sistemas de tiempo real.
STRL - 21/09/2004
©2004 Juan Antonio de la Puente
2
Asignaturas relacionadas
Programación Fundamentos de ordenadores Sistemas digitales Arquitectura de ordenadores Laboratorio de programación de sistemas Ingeniería del software Software de comunicaciones
STRL - 21/09/2004
©2004 Juan Antonio de la Puente
3
2
Enfoque
Conceptos teóricos sobre tiempo y planificación de tareas Mecanismos de realización – Lenguajes de programación » C » Ada 95 » RT-Java
– Sistemas operativos » Multiprogramación con prioridades fijas » POSIX con extensiones de tiempo real
Métodos de diseño – Diseño mediante objetos » HRT-HOOD » UML
STRL - 21/09/2004
©2004 Juan Antonio de la Puente
4
Programa 1 2 3 4 5 6 7 8 9 10
STRL - 21/09/2004
Introducción a los sistemas de tiempo real (2 h) Programación de sistemas de tiempo real (6 h) Sistemas cíclicos (2 h) Sistemas multiprogramados (6 h) Gestión del tiempo (2 h) Planificación de tareas (8 h) Sistemas distribuidos (4 h) Programación de bajo nivel (4 h) Análisis temporal y diseño de sistemas (2 h) Aplicaciones industriales (4 h)
©2004 Juan Antonio de la Puente
5
3
Prácticas
1. 2. 3. 4.
Sistema de control con un ejecutivo cíclico. (4 h) Sistema de control con tareas concurrentes. (4 h) Análisis temporal de sistemas (4 h) Diseño y realización de una aplicación completa (6 h) – Control de un brazo robótico
STRL - 21/09/2004
©2004 Juan Antonio de la Puente
6
Evaluación
Examen
– Preguntas cortas y problemas (con libros) – 75% de la nota final Prácticas
– Documentación de las prácticas – 25% de la nota final
STRL - 21/09/2004
©2004 Juan Antonio de la Puente
7
4
Bibliografía Texto básico Alan Burns & Andy Wellings Real-Time Systems and Programming Languages, 3rd ed. Addison-Wesley, 2001
´
STRL - 21/09/2004
©2004 Juan Antonio de la Puente
8
Bibliografía adicional
John Barnes. Programming in Ada 95. Addison-Wesley, 1995. Brian Kernigan & Dennis Richtie. The C Programming Language. 2nd. ed (ANSI-C). Prentice-Hall, 1991. Bill Gallmeister. Posix.4. O’Reilly, 1995. Bradford Nichols, Dick Butlar & Jacqueline Farrell. Pthreads programming. O’Reilly, 1996. Hermann Kopetz. Real-Time Systems. Kluwer, 1997.
STRL - 21/09/2004
©2004 Juan Antonio de la Puente
9
5
Otros recursos
Transparencias Software – Compilador GNAT – Núcleos de tiempo real Marte y ORK – Analizador de tiempo de respuesta RTA
Lista de correo – Para consultas, dudas, aviso, etc. – Darse de alta en https://lists.dit.upm.es/mailman/listinfo/strl
Página de la asignatura:
http://www.dit.upm.es/jpuente/strl.html STRL - 21/09/2004
©2004 Juan Antonio de la Puente
10
6
dit UPM
Introducción a los sistemas de tiempo real Juan Antonio de la Puente DIT/UPM
Transparencias basadas en el capítulo 1 del libro de A. Burns y A. Wellings Real-Time Systems and Programming Languuages, 3ª edición (2001)
Objetivos
Veremos los conceptos más importantes relacionados con los sistemas de tiempo real
Analizaremos sus requisitos y características más importantes
Examinaremos los tipos de sistemas de tiempo real más comunes
STRL – introducción-17/09/2001
©2001 Juan Antonio de la Puente
1
1
Sistemas empotrados
Muchos sistemas de uso común en la industria, el transporte, las comunicaciones y el hogar tienen computadores empotrados: – – – – – –
aviones trenes coches teléfonos móviles televisores etc.
Los computadores empotrados realizan funciones de control de sistemas físicos
STRL – introducción-17/09/2001
©2001 Juan Antonio de la Puente
2
Características
Los recursos están limitados – procesador, memoria, pantalla, etc.
Los dispositivos de entrada y salida son especiales para cada sistema – no hay teclado ni pantalla normales
El computador debe reaccionar a tiempo ante los cambios en el sistema físico – una acción retrasada puede ser inútil o peligrosa – ejemplo: imágenes de TV, sistema de frenado ABS
El desarrollo de software para sistemas empotrados tiene requisitos especiales STRL – introducción-17/09/2001
©2001 Juan Antonio de la Puente
3
2
Sistemas de tiempo real Un sistema de tiempo real es un sistema informático que – Interacciona repetidamente con su entorno físico – Responde a los estímulos que recibe del mismo dentro de un plazo de tiempo determinado Para que el funcionamiento del sistema sea correcto no basta con que las acciones sean correctas, sino que tienen que ejecutarse dentro del intervalo de tiempo especificado
El tiempo en que se ejecutan las acciones del sistema es significativo ©2001 Juan Antonio de la Puente
STRL – introducción-17/09/2001
4
Requisitos temporales activación
límite plazo de ejecución
intervalo de ejecución arranque
terminación
ejecución de la tarea
tiempo de respuesta
STRL – introducción-17/09/2001
©2001 Juan Antonio de la Puente
5
3
Tipos de requisitos temporales
Tiempo real estricto (hard real-time) – todas las acciones deben ocurrir dentro del plazo especificado » ejemplo: control de vuelo
Tiempo real flexible (soft real-time) – se pueden perder plazos de vez en cuando – el valor de la respuesta decrece con el tiempo » ejemplo: adquisición de datos
Tiempo real firme (firm real-time) – se pueden perder plazos ocasionalmente – una respuesta tardía no tiene valor » ejemplo: sistemas multimedia
En un mismo sistema puede haber componentes con distintos tipos de requisitos temporales ©2001 Juan Antonio de la Puente
STRL – introducción-17/09/2001
6
Ejemplo: freno con computador
actuador
Computador
pedal de freno
sensor de velocidad
sensor de guiñada
STRL – introducción-17/09/2001
©2001 Juan Antonio de la Puente
7
4
Ejemplo: control de posición
motor
sensor
amplificador
carga
medida computador
STRL – introducción-17/09/2001
referencia
©2001 Juan Antonio de la Puente
8
Ejemplo: control de fabricación
máquinas
robots
transporte
computador
STRL – introducción-17/09/2001
©2001 Juan Antonio de la Puente
9
5
Ejemplo: control de procesos
consigna
sensor de temperatura computador
calefactor
STRL – introducción-17/09/2001
©2001 Juan Antonio de la Puente
10
Estructura de un STR típico Reloj de tiempo real
Control digital
Registro de datos
Sistema controlado
Interfaz
Sistema remoto de supervisión
Base de datos Visualización de datos
Consola de operador
STRL – introducción-17/09/2001
Interfaz de operador ©2001 Juan Antonio de la Puente
Pantallas
Computador de tiempo real 11
6
Características de los STR (1)
Gran tamaño y complejidad – algunos STR tienen millones de líneas de código – la variedad de funciones aumenta la complejidad incluso en sistemas relativamente pequeños
Simultaneidad de acciones (concurrencia) – los dispositivos físicos controlados funcionan al mismo tiempo – los componentes de software que los controlan actúan concurrentemente
Dispositivos de entrada y salida especiales – los manejadores de dispositivos forman parte del software de aplicación
STRL – introducción-17/09/2001
©2001 Juan Antonio de la Puente
12
Características de los STR (2)
Seguridad y fiabilidad – sistemas críticos: fallos con consecuencias graves » pérdida de vidas humanas » pérdidas económicas » daños medioambientales
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
STRL – introducción-17/09/2001
©2001 Juan Antonio de la Puente
13
7
Resumen
Los sistemas de tiempo real interaccionan con su entorno y ejecutan sus acciones dentro de intervalos de tiempo determinados Tienen requisitos muy exigentes – – – – –
tamaño y complejidad concurrencia interfaces de hardware específicas fiabilidad y seguridad determinismo temporal
Hay dos clases principales de requisitos de tiempo real – tiempo real estricto (hard real-time) – tiempo real flexible (soft real-time)
STRL – introducción-17/09/2001
©2001 Juan Antonio de la Puente
14
8
dit UPM
Diseño de sistemas de tiempo real Juan Antonio de la Puente DIT/UPM
Transparencias basadas en el capítulo 2 del libro de A. Burns y A. Wellings Real-Time Systems and Programming Languuages, 3ª edición (2001)
Objetivos
Repasaremos algunos conceptos de ingeniería de software y su aplicación a sistemas de tiempo real
Introduciremos brevemente el método HRT-HOOD
Analizaremos los lenguajes de programación y sistemas operativos más adecuados para realizar sistemas de tiempo real
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
1
1
Motivación
Los métodos y herramientas que se usan para construir otros tipos de sistemas no sirven para el software de tiempo real – no son suficientemente fiables – sólo contemplan el tiempo de respuesta medio, no el peor – no se garantizan los requisitos temporales
Las plataformas de desarrollo y ejecución suelen ser diferentes – es difícil hacer pruebas en la plataforma de ejecución – es difícil medir los tiempos con precisión
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
2
Niveles de abstracción
Los métodos de diseño de software comprenden una serie de transformaciones desde los requisitos iniciales hasta el código ejecutable Normalmente se consideran distintos niveles de abstracción en la descripción de un sistema: – – – – –
Especificación de requisitos Diseño arquitectónico Diseño detallado Codificación Pruebas
Cuanto más precisa sea la notación empleada en cada nivel mejor será la calidad del sistema final
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
3
2
abstracción
Ciclo de desarrollo secuencial
pruebas de sistema
análisis
diseño arquitectónico
pruebas de integración diseño detallado
pruebas de unidades realización tiempo
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
4
Características
Se descompone en una secuencia de etapas – Hay que completar cada etapa antes de empezar la siguiente
Las pruebas se llevan a cabo después de la realización – Muchos errores se encuentran sólo al final – Volver atrás es muy costoso – A veces se hace sin documentar y de forma poco rigurosa
Es mejor utilizar un proceso iterativo – Veremos uno centrado en la etapa de diseño – Se trata de validar todos los aspectos que se pueda en la etapa de diseño del sistema – Prestaremos especial atención a la validación del comportamiento temporal
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
5
3
HRT-HOOD
HRT-HOOD – Hard Real-Time Hierarchical Object-Oriented Design – desarrollado por Burns & Wellings en1994
Es un método de diseño estructurado, basado en objetos, para sistemas de tiempo real estricto – derivado de HOOD (Hierarchical Object-Oriented Design) – estándar en la Agencia Europea del Espacio (ESA)
Principios – – – –
abstracción descomposición jerárquica ocultamiento de información análisis temporal
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
6
Proceso de desarrollo iterativo Definición de requisitos
Diseño de la arquitectura lógica Diseño de la arquitectura física y análisis temporal
Restricciones
Diseño detallado Codificación y cálculo de tiempos de ejecución
Restricciones
Pruebas y medida de tiempos
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
7
4
Características
Elementos en cada nivel de abstracción – Compromisos: propiedades que ya no se cambiarán – Obligaciones que se dejan para niveles inferiores
En el diseño se van transformando las obligaciones en compromisos – Este proceso está sujeto a restricciones impuestas por el entorno de ejecución
Dos niveles de diseño arquitectónico – Modelo lógico - compromisos independientes del entorno – Modelo físico - compromisos dependientes del entorno
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
8
Elementos de HRT-HOOD
Un sistema se diseña como una jerarquía de objetos abstractos – un objeto se caracteriza por sus operaciones y su comportamiento (abstracción y ocultamiento de información) – cada objeto se puede descomponer en otros de más bajo nivel – modelo de objetos simple, sin herencia » apropiado para sistemas de tiempo real
Se puede analizar el comportamiento temporal si el entorno de ejecución es conocido y predecible – los objetos tienen atributos temporales – las relaciones entre objetos están restringidas para asegurar que el diseño se puede analizar
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
9
5
Objetos y relaciones El objeto parent contiene los objetos child_1 y child_2
parent
T T
op1
child_1
datos
uncle
op
op2
excepción T
op
STRL - Diseño de sistemas -30/09/2002
child_2
parent usa uncle child_1 usa child_2 y uncle child_1.op implementa parent.op1 child_2.op implementa parent.op2
©2001 Juan Antonio de la Puente
10
Tipos de objetos
Pasivos » no controlan cuándo se ejecutan sus operaciones » no invocan operaciones de otros objetos espontáneamente
Protegidos » pueden controlar cuándo se ejecutan sus operaciones » no invocan operaciones de otros objetos espontáneamente
Activos » pueden controlar cuándo se ejecutan sus operaciones » pueden invocar operaciones de otros objetos espontáneamente
– Cíclicos » sus operaciones se ejecutan a intervalos regulares
– Esporádicos » sus operaciones se ejecutan cuando ocurre un suceso externo o interno STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
11
6
UML
UML – Unified Modeling Language – desarrollado por Booch, Rumbaugh y Jacobson
Notación basada en objetos con diversos aspectos – – – – – –
clases y objetos casos de uso comportamiento paquetes estructura del software estructura física
UML es un lenguaje, no un método Se están desarrollando variantes para STR
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
12
Diseño de sistemas y lenguajes de programación
El diseño debe tener en cuenta lo que se puede hacer en los niveles de abstracción inferiores
Los lenguajes de programación proporcionan la notación básica para la realización de los diseños
La elección de un lenguaje es importante desde el punto de vista de la eficiencia y la fiabilidad del sistema – también tiene que ver con la productividad de la programación – un programa se escribe una vez, pero se lee y se modifica muchas durante las etapas de mantenimiento – la vida útil de los sistemas empotrados puede ser muy larga
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
13
7
Lenguajes de programación
Un lenguaje de programación de sistemas de tiempo real debe facilitar la realización de sistemas – concurrentes, – fiables, – con un comportamiento temporal analizable
Hay varias clases de lenguajes de interés para STR: – Lenguajes ensambladores » flexibles y eficientes, pero costosos y poco fiables
– Lenguajes secuenciales (Fortran, Pascal, C, C++) » necesitan un SO para concurrencia y tiempo real
– Lenguajes concurrentes (Modula, Ada, Java, ...) » concurrencia y tiempo real incluidos en el lenguaje
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
14
C
Es un lenguaje muy utilizado para programación de sistemas Es un lenguaje – estructurado, con bloques – sin tipado fuerte – muy flexible (pero a veces poco seguro)
No tiene integrada la concurrencia ni el tiempo real – se consigue invocando servicios del sistema operativo de forma explícita
No facilita la descomposición en módulos ni la programación con objetos – se puede hacer con C++ » extensión de C para programar con objetos » no se suele usar en STR por problemas de fiabilidad
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
15
8
Ada
Es un lenguaje diseñado específicamente para sistemas de tiempo real empotrados – concurrencia – tiempo real – acceso al hardware e interrupciones
Es un lenguaje descendiente de Pascal – estructura en bloques – fuertemente tipado
Está pensado para construir sistemas grandes y cambiantes – – – –
paquetes (módulos) y esquemas genéricos extensión de tipos con herencia biblioteca jerárquica interfaces normalizadas con otros lenguajes (C, Fortran)
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
16
Ada 95
Es la versión actual normalizada de Ada La norma define – un núcleo común para todas las implementaciones (core language) – unos anexos especializados para » » » » » »
programación de sistemas sistemas de tiempo real sistemas distribuidos sistemas de información cálculo numérico fiabilidad y seguridad
– Los anexos definen » paquetes de biblioteca » mecanismos de implementación
No añaden sintaxis ni vocabulario al lenguaje
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
17
9
Perfiles para sistemas críticos
El documento Guide for the use of the Ada programming language in high-integrity systems define subconjuntos seguros de Ada para aplicaciones críticas
SPARK es un subconjunto / extensión de Ada que permite el uso de técnicas de análisis estático
El perfil de Ravenscar define un subconjunto seguro de la parte concurrente de Ada, y los correspondientes servicios de sistema operativo
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
18
Java
Es un lenguaje pensado para construir sistemas distribuidos – – – –
basado en objetos dinámicos con concurrencia integrada en el lenguaje bibliotecas de clases (APIs) muy útiles pensado para que el código objeto sea portátil » interpretado por una máquina virtual (JVM) » “write once, run everywhere”
La definición original no es adecuada para tiempo real – – – – –
la planificación de actividades concurrentes no está bien definida los mecanismos de sincronización son inadecuados la gestión dinámica de memoria introduce indeterminismo la medida del tiempo no es suficientemente precisa otros problemas con excepciones y concurrencia
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
19
10
Java para tiempo real
Hay varias propuestas de modificaciones para usar Java en sistemas de tiempo real – NIST Requirements for Real-Time Extensions to Java (1999) » no modificar la sintaxis, coexistencia con aplicaciones convencionales
– Java Real-time Experts Group (Sun & otros) » Real-Time Specification for Java (2000-2001) » basada en un máquina virtual extendida para STR » hay una implementación de referencia
– Real-Time Java Working Group (J-Consortium) » Real-Time Core Specification (2000) » basada en una máquina virtual separada para STR
Los compiladores y las máquinas virtuales para Java de tiempo real están en sus comienzos
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
20
Sistemas operativos
Los sistemas operativos convencionales no son adecuados para realizar sistemas de tiempo real – no tienen un comportamiento determinista – no permiten garantizar los tiempos de respuesta – algunos de ellos son poco fiables
Un sistema operativo de tiempo real (SOTR) debe soportar – concurrencia: procesos ligeros (threads) con memoria común – temporización: medida de tiempos y ejecución periódica – planificación determinista » ej.: prioridades fijas con desalojo
– dispositivos de E/S: acceso a recursos de hardware e interrupciones STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
21
11
Arquitectura de software y SO (1)
Sistema operativo
Programa de aplicación con componentes de sistema operativo
Hardware
Hardware
Aplicación convencional
Sistema empotrado
Programas de usuario
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
22
Arquitectura de software (2)
programa de aplicación núcleo de ejecución (run-time system) sistema operativo de tiempo real hardware
Arquitectura con sistema operativo de tiempo real
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
23
12
Arquitectura de software (3)
programa de aplicación núcleo de ejecución (run-time system)
aplicaciones convencionales
programa de tiempo real
SO convencional
RTS
núcleo de tiempo real
hardware hardware
Arquitectura con máquina desnuda
STRL - Diseño de sistemas -30/09/2002
Arquitectura con máquina virtual
©2001 Juan Antonio de la Puente
24
POSIX
Es un conjunto de normas IEEE/ISO que definen interfaces de sistemas operativos Permiten desarrollar software portátil y reutilizable (Portable Operating System Interface) Las normas definen servicios que se pueden incluir o no en un sistema operativo particular Además se definen perfiles de aplicación con conjuntos de servicios estándar Hay interfaces para C, Ada, y otros lenguajes
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
25
13
Normas POSIX POSIX 1, 1a POSIX 1b,1d,1j POSIX 1c POSIX 1e POSIX 1f POSIX 1g POSIX 1h POSIX 5,5a,5b POSIX 13 POSIX 21
STRL - Diseño de sistemas -30/09/2002
Interfaz básica similar a UNIX™ Extensiones de tiempo real Procesos ligeros (threads) Seguridad NFS Servicios de red (sockets, XTI) Tolerancia de fallos Interfaces para Ada Perfiles para sistemas de tiempo real Comunicaciones de tiempo real
©2001 Juan Antonio de la Puente
26
Perfiles de aplicación
Definen subconjuntos de servicios para distintos tipos de aplicaciones
POSIX 13 : Perfiles para sistemas de tiempo real – PSE50 : sistema de tiempo real mínimo » sin gestión de memoria, ficheros ni terminal » sólo threads (no procesos pesados)
– PSE51 : controlador de tiempo real » tiene sistema de ficheros y terminal
– PSE52 : sistema de tiempo real dedicado » tiene gestión de memoria y procesos pesados
– PSE53 : sistema de tiempo real generalizado » sistema completo con todo tipo de servicios
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
27
14
Ejemplos de SOTR
LynxOS pSOS QNX VRTX VxWorks RTEMS RT-Linux Marte — Universidad de Cantabria – perfil POSIX PSE50 – para sistemas empotrados en PCx86
Open Ravenscar Kernel (ORK) — DIT/UPM – núcleo de SOTR para Ada / Ravenscar
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
28
Resumen
Los métodos y herramientas convencionales no son adecuados para desarrollar sistemas de tiempo real
HRT-HOOD es un método de diseño bien adaptado a este tipo de sistemas
En el curso usaremos algunos lenguajes de programación para ilustrar los conceptos más importantes de los STR – C / POSIX – Ada 95 – RT Java
STRL - Diseño de sistemas -30/09/2002
©2001 Juan Antonio de la Puente
29
15
dit UPM
Introducción a Ada Juan Antonio de la Puente DIT/UPM
Objetivos
Haremos un repaso de las características básicas de un lenguaje de programación: Ada 95 Veremos un subconjunto mínimo que permite realizar programas en pequeña escala Suponemos que se conoce algún lenguaje estructurado (como Pascal o Modula)
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
1
1
Índice
Introducción Léxico Tipos de datos Instrucciones Subprogramas Estructura de programas Aspectos avanzados
©2001 Juan Antonio de la Puente
STRL - 30/09/2002
2
Lenguajes de programación
Un lenguaje de programación de sistemas de tiempo real debe facilitar la realización de sistemas – concurrentes, – fiables, – puntuales.
Las características más importantes para la realización de programas en pequeña escala son – – – – –
léxico tipos de datos y objetos instrucciones subprogramas estructura de programas
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
3
2
Ada
Es un lenguaje imperativo, descendiente de Pascal – estructura en bloques – fuertemente tipado
Es un lenguaje pensado para realizar sistemas empotrados de gran dimensión Dos versiones normalizadas – Ada 83 (ISO 8652:1987) – Ada 95 (ISO 8652:1995)
Desarrollado por iniciativa y bajo la supervisión del DoD (Department of Defense) de los EE.UU.
©2001 Juan Antonio de la Puente
STRL - 30/09/2002
4
Núcleo y anexos La norma (ISO) de Ada 95 define – un núcleo común para todas las implementaciones – unos anexos especializados para » » » » » »
programación de sistemas sistemas de tiempo real sistemas distribuidos sistemas de información cálculo numérico fiabilidad y seguridad
– Los anexos definen » paquetes de biblioteca » mecanismos de implementación
(no añaden sintaxis ni vocabulario al lenguaje)
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
5
3
Índice
Introducción Léxico Tipos de datos Instrucciones Subprogramas Estructura de programas Aspectos avanzados
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
6
Léxico
Los identificadores pueden contener letras, dígitos o el carácter '_' Ejemplos: Sensor
Tiempo_de_Activación
No hay distinción entre mayúsculas y minúsculas
Hay palabras reservadas que no se pueden usar como identificadores
Los números pueden contener el carácter '_' Ejemplos: 123 150_000 3.141_592_654 1.7E-5
Los comentarios empiezan con "--" y van hasta el final de la línea
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
7
4
Índice
Introducción Léxico Tipos de datos Instrucciones Subprogramas Estructura de programas Aspectos avanzados
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
8
Tipos de datos
Un tipo de datos es un conjunto de valores con un conjunto de operaciones primitivas asociadas
Tipado fuerte – No se pueden usar valores de un tipo en operaciones de otro tipo sin efectuar una conversión de tipo explícita – Las operaciones dan siempre resultados del tipo correcto
Una clase es la unión de varios tipos con características comunes
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
9
5
Clasificación de los tipos de datos
tipos elementales
compuestos
acceso
escalares discretos
formaciones registros etiquetados privados tareas protegidos tiras numéricos
enumerables caracteres
booleanos
STRL - 30/09/2002
enteros
reales c. flotante
otros modulares con signo
©2001 Juan Antonio de la Puente
c. fija
ordinarios
decimales
10
Tipos discretos
Enumerables Boolean -- predefinido Character -- predefinido type Mode is (Manual, Automatic);
Enteros – Con signo Integer -- predefinido type Index is range 1 .. 10;
– Modulares type Octet is mod 256;
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
11
6
Tipos reales
Coma flotante Float -- predefinido type Length is digits 5 range 0.0 .. 100.0;
Coma fija – Ordinarios Duration -- predefinido type Voltage is delta 0.125 range 0.0 .. 5.25;
– Decimales type Money is delta 0.01 digits 15;
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
12
Ejemplos type Index is range 1 .. 100; -- entero type Length is digits 5 range 0.0 .. 100.0; -- coma flotante First, Last : Index; Front, Side : Length; Last Side Side Side Side
:= := := := :=
First + 15; 2.5*Front; 2*Front; Front + 2*First; Front + 2.0*Length(First);
STRL - 30/09/2002
------
correcto correcto incorrecto incorrecto correcto
©2001 Juan Antonio de la Puente
13
7
Tipos compuestos (1) Formaciones String type Voltages is array (Index) of Voltage; type Matrix is array (1 .. 10, 1 .. 10) of Float;
Elementos: V : Voltages; V(5) := 1.0; V := (1.0, 0.0, 0.0, 0.0, 2.5, 0.0, 0.0, 0.0, 0.0, 0.0); V := (1 => 1.0, 5 => 2.5, others => 0.0);
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
14
Tipos compuestos (2) Registros type State is record Operating_Mode : Mode; Reference : Voltage; end record;
Elementos: X : State X.Reference := 0.0; X := (Automatic, 0.0); X := (Operating_Mode => Automatic, Reference => 0.0);
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
15
8
Tipos acceso
Los objetos de tipos acceso designan valores de otros tipos type State_Reference is access State;
Los objetos a los que se accede a través de un tipo acceso de crean dinámicamente S : State_Reference := new State; Las variables de acceso se inician a null si no se dice nada
Acceso al objeto dinámico: S.Operating_Mode := Manual; S.all := (Operating_Mode => Manual, Reference => 0.0); S := new State := (Manual, 0.0); – No se puede operar con los valores de los tipos acceso – No pueden quedar punteros “colgando”
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
16
Declaraciones
Asocian nombres con definiciones de – tipos type Real is digits 8;
– objetos X : Real := 0.0; J : constant Complex := (0.0, -1.0);
– números Pi : constant := 3.141_592_654;
– subprogramas – otras entidades
¡Ojo! Todas terminan en ';'
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
17
9
Elaboración
Las declaraciones se colocan en zonas declarativas Al entrar en la zona declarativa se elaboran – Puede ser al arrancar el programa o durante la ejecución
La elaboración consiste en la creación de la entidad declarada, seguida por la realización de las operaciones iniciales asociadas a la misma – Ejemplos: » iniciación del valor de una variable » Asignación de memoria para crear un objeto dinámico
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
18
Índice
Introducción Léxico Tipos de datos Instrucciones Subprogramas Estructura de programas Aspectos avanzados
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
19
10
Instrucciones
Simples – Asignación – Llamada a procedimiento – Nula
Compuestas – – – –
Secuencia Bloque Selección Iteración
¡Ojo! Todas las instrucciones terminan con ';'
©2001 Juan Antonio de la Puente
STRL - 30/09/2002
20
Instrucciones simples
Asignación U := 2.0*V(5) + U0;
– El tipo de la expresión debe ser el mismo que el de la variable – No hay conversión implícita de tipos
Llamada a procedimiento Get(V);
Instrucción nula null;
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
21
11
Secuencia Get(V); U := 2.0*V(65) + U0;
Sintaxis: secuencia ::= instrucción {instrucción}
¡Ojo! No se puede omitir ';' en la última instrucción
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
22
Bloque
declare V : Voltages begin Get(V); U := 2.0*V(65) + U0; end;
-- variable local al bloque
-- V deja de existir aquí
Sintaxis: bloque ::= [identificador :] [declare {declaración}] -- parte declarativa begin secuencia end [identificador];
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
23
12
Selección if T = 180.0 then P := 0.0; else P := Control(R,t); end if;
Sintaxis selección-if ::= if expresión-booleana then secuencia {elsif expresión-booleana then secuencia} [else secuencia] end if;
©2001 Juan Antonio de la Puente
STRL - 30/09/2002
24
Selección por casos case Day is when Monday => when Tuesday .. Thursday => when Friday .. Saturday => when others => end case;
Start_Week; Continue_Work; End_Week; Relax;
Sintaxis selección-case ::= case expresión-discreta is alternativa {alternativa} end case; alternativa ::= when lista => secuencia lista ::= opción {|opción} opción ::= expresión |intervalo|others
¡Ojo! Hay que cubrir todos los valores del tipo discreto STRL - 30/09/2002
©2001 Juan Antonio de la Puente
25
13
Iteración (1) Hay tres clases de bucles for I in 1..10 loop Get(V(I)); end loop;
¡Ojo! El índice del bucle for solo está definido en el cuerpo del bucle while T 80.0; V(I) := U; I := I+1; end loop;
Sintaxis exit[identificador] [when expresión-booleana];
– La ejecución continúa inmediatamente después del bucle – Si hay bucles anidados, se sale del interior, o del que tiene el identificador que se indica
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
28
Transferencia de control Sintaxis goto etiqueta; etiqueta ::= instrucción-etiquetada ::= etiqueta instrucción
Hay limitaciones para aumentar la seguridad – La instrucción etiquetada tiene que estar en la misma secuencia y con el mismo grado de anidamiento que la de transferencia – No se puede salir de un subprograma ni de otras entidades de programa
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
29
15
Índice
Introducción Léxico Tipos de datos Instrucciones Subprogramas Estructura de programas Aspectos avanzados
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
30
Subprogramas
Hay dos tipos de subprogramas – procedimiento: abstraccción de acción – función: abstracción de valor
Ambos pueden tener parámetros Un subprograma tiene dos partes – especificación: define la interfaz (nombre y parámetros) – cuerpo: define la acción o el algoritmo que se ejecuta cuando se invoca el subprograma
A veces se puede omitir la especificación En este caso la interfaz se define al declarar el cuerpo
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
31
16
Declaración de subprograma (1) La especificación se declara en una zona declarativa procedure Reset;
-- sin parámetros
procedure Increment(Value : in out Integer; Step : in Integer := 1); function Minimum (X,Y : Integer) return Integer;
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
32
Declaración de subprograma (2) Sintaxis declaración-de-subprograma ::= especificación-de-subprograma; especificación-de-subprograma ::= procedure nombre [parámetros-formales] |function nombre [parámetros-formales] return tipo parámetros formales ::= (definición{, definición}) definición ::= lista : modo tipo [::= valor-pordefecto] lista ::= identificador{, identificador} modo ::= [in] | out | in out valor-por-defecto ::= expresión STRL - 30/09/2002
©2001 Juan Antonio de la Puente
33
17
Declaración de subprograma (3)
Hay tres modos de parámetros formales – in
No se modifica al ejecutar el subprograma Pueden tener un valor por defecto – out El subprograma debe asignar un valor al parámetro – in out El subprograma modifica el valor del parámetro Los parámetros de las funciones solo pueden ser de modo in Los modos no están ligados al mecanismo de paso de parámetros
Puede haber subprogramas homónimos – Se distinguen por sus parámetros formales (y en el caso de las funciones por el tipo del resultado) – El compilador genera la llamada al subprograma adecuado
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
34
Cuerpo de subprograma (1)
Se coloca en una zona declarativa procedure Increment (Value : in out Integer; Step : in Integer := 1) is begin Value := Value + Step; end Increment; function Minimum(X,Y : Integer) return Integer is begin if X X, Step => 2); -- asociación nombrada Increment(X); -- Step => 1 (defecto) W := 2*Minimum(U,V);
Puede formar parte de cualquier secuencia
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
37
19
Llamada a subprograma (2)
Sintaxis llamada-a-subprograma ::= nombre; | nombre parámteros-reales; parámetros-reales ::= (asociación{, asociación}) asociación ::= [nombre-formal =>] parámetro-real parámetro-real ::= expresión | nombre-de-variable
– Los parámetros formales de modo in se asocian a expresiones – Los de modo out o in out se asocian a variables – Con asociación nombrada los parámetros pueden ir en cualquier orden
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
38
Índice
Introducción Léxico Tipos de datos Instrucciones Subprogramas Estructura de programas Aspectos avanzados
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
39
20
Estructura de programas (1)
Los subprogramas son unidades de programa – hay otras: paquetes, tareas, y objetos protegidos – un paquete es un módulo que contiene declaraciones de tipos, objetos, subprogramas, y otras unidades de programa
También son unidades de compilación – los paquetes también lo son – un fichero fuente contiene una (o a veces más) unidad de compilación
Los subprogramas y paquetes compilados forman una biblioteca de compilación Un programa ejecutable se monta a partir de una biblioteca que incluya un procedimiento principal
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
40
Estructura de programas (2)
Un programa Ada se compone de – un procedimiento principal (normalmente sin parámetros) – otros subprogramas o paquetes escritos por el programador – subprogramas y paquetes predefinidos (y precompilados)
Cuando se usan elementos de un paquete hay que importar el paquete con una cláusula with with nombre-de-paquete{, nombre-de-paquete};
La cláusula use permite hacer referencia directa a los nombres declarados en los paquetes importados use nombre-de-paquete{, nombre-de-paquete};
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
41
21
Paquetes predefinidos
Operaciones numéricas – Ada.Numerics, Ada.Numerics.Generic_Elementary_Functions
Operaciones con caracteres y tiras – Ada.Characters, Ada.Strings, etc.
Entrada y salida – Ada.Text_IO, Ada.Integer_Text_IO, Ada.Float_Text_IO, etc.
Interfaces con otros lenguajes Otros
©2001 Juan Antonio de la Puente
STRL - 30/09/2002
42
Entrada y salida
Ada.Text_IO procedure procedure procedure procedure
Get (Item : out String); Put (Item : in String); Put_Line (Item : in String); New_Line;
Ada.Integer_Text_IO procedure Get (Item : out Integer); procedure Put (Item : in Integer);
Ada.Float_Text_IO procedure Get (Item : out Float); procedure Put (Item : in Float);
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
43
22
Ejemplo
with Ada.Text_IO; procedure Hello is begin Put_Line("Hello!"); end Hello;
use Ada.Text_IO;
©2001 Juan Antonio de la Puente
STRL - 30/09/2002
44
Compilación con GNAT
Se parte de un fichero hello.adb. Para compilar se hace: $ gcc -c hello.adb – resultado: ficheros hello.o y hello.ali
Montaje y enlace : $ gnatbind hello.ali $ gnatlink hello.ali – resultado: fichero hello (linux) o hello.exe (Windows)
Se puede hacer todo de una vez: $ gnatmake hello.adb – compila todo lo que haga falta, no sólo hello.adb
Para ejecutarlo se hace (en linux) $ ./hello
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
45
23
Compilación y montaje RTS ALI files gnat.adc
application sources
application ALI files
GNAT binder
application object files
elaboration code
GNAT linker
ELF-32 executable
GNAT compiler
RTS specs RTS & library object files
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
46
Índice
Introducción Léxico Tipos de datos Instrucciones Subprogramas Estructura de programas Aspectos avanzados
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
47
24
Subtipos
Un subtipo es un subconjunto de valores de un tipo, definido por una restricción – La forma más simple de restricción es un intervalo de valores subtype Small_Index is Index range 1 .. 5; subtype Big_Index is Index range 6 .. 10; subtype Low_Voltage is Voltage range 0.0 .. 2.0;
– Hay dos subtipos predefinidos subtype Natural is Integer range 0 .. Integer'Last; subtype Positive is Integer range 1 .. Integer'Last;
Las operaciones con valores de distintos subtipos de un mismo tipo están permitidas Las restricciones se comprueban al compilar o al ejecutar
©2001 Juan Antonio de la Puente
STRL - 30/09/2002
48
Ejemplos A : Small_Index := 1; B : Big_Index; C : Index; A A A A A
:= := := := :=
3; 6; B; C; A + 1;
STRL - 30/09/2002
------
correcto error error error si C > 5 error si A > 4
©2001 Juan Antonio de la Puente
49
25
Tipos derivados
Un tipo derivado es una copia de otro tipo, cuyos valores y operaciones hereda type Surface is new Float;
– Se puede imponer una restricción en el conjunto de valores type Length is new Float range 0.0 .. 100.0; type Width is new Float range 0.0 .. 20.0; S : Surface; L : Length; W : Width; -- tipos distintos
– Los valores no son compatibles, pero se pueden convertir S := L*W; S := Surface(Float(L)*Float(W));
---
incorrecto correcto
– Las restricciones se comprueban al compilar o al ejecutar
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
50
Formaciones irrestringidas
Se pueden declarar tipos formación con un intervalo de índices indefinido (formaciones irrestringidas) type Measurements is array (Positive range ) of Voltage;
– El tipo String está predefinido: type String is array (Positive range ) of Character;
Al declarar objetos hay que restringir los índices M M M S S
: : : : :
STRL - 30/09/2002
Measurements; Measurements (1 .. 10); Measurements := (1..10 => 0.0); String (1 .. 25); String := "ejemplo";
©2001 Juan Antonio de la Puente
------
incorrecto correcto correcto correcto correcto
51
26
Formaciones dinámicas
También se puede declarar formaciones con intervalos dinámicos (que se evalúan al elaborar la declaración) type Measurements is array (1 .. No_Of_Inputs) of Voltage;
Las expresiones que aparecen en los límites tiene que estar definidas en el momento de la elaboración (pero no necesariamente al compilar)
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
52
Registros con discriminantes
Un discriminante es un componente de un registro que permite parametrizar los objetos del tipo type Variable is (Temperature, Pressure); type Measurement (Kind: Variable) is record Value : Voltage; end record; T : Measurement(Temperature); P : Measurement := (Kind => Pressure, Value => 2.5);
El discriminante tiene que ser de un tipo discreto No se puede cambiar una vez asignado
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
53
27
Registros con variantes
Se puede usar un discriminante para declarar tipos registro con partes variantes type Measurement (Kind: Variable) is record Value : Voltage; case Kind is when Temperature => Too_High : Boolean := False; when Pressure => Sensor_Id : Sensor_Range; end case; end record; T : Measurement(Temperature); P : Measurement := (Pressure, 2.5, 4); T.Too_High := True; Id := P.Sensor_Id;
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
54
Conversión de tipos
Se pueden convertir valores de un tipo a otro – entre tipos numéricos – entre formaciones con la misma estructura y tipo de elementos – entre registros con los mismos discriminantes y tipo de componentes – entre un tipo y sus derivados (pero no éstos entre sí)
El nombre del tipo al que se convierte se usa como si fuera una función I : Integer; S : Surface; I := Integer(S); S := Surface(Float(L)*Float(W));
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
55
28
Excepciones
Una excepción es una manifestación de un cierto tipo de error – cuando se produce un error, se eleva la excepción correspondiente – se abandona la ejecución normal y se pasa a ejecutar un manejador asociado a la excepción – se busca un manejador en el mismo cuerpo o bloque – si no lo hay, la excepción se propaga al nivel superior » bloque exterior o punto de invocación de un subprograma
– si no se encuentra ningún manejador, se termina el programa
©2001 Juan Antonio de la Puente
STRL - 30/09/2002
56
Nombres de excepciones
Se pueden declarar excepciones en cualquier zona declarativa (no son objetos) Sensor_Failure
: exception;
– Se elevan con una instrucción raise : raise Sensor_Failure;
Algunas excepciones están predefinidas: Constraint_Error Program_Error Storage_Error Tasking_Error
: : : :
exception; exception; exception; exception;
– Se elevan automáticamente por el entorno de ejecución, o explícitamente con raise
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
57
29
Manejadores de excepciones
Los manejadores se declaran al final de un bloque o cuerpo begin ... exception when Constraint_Error => ...; when Sensor_Failure => ...; when Storage_Error | Program_Error => ...; when others => ...; end;
Un manejador es una secuencia de instrucciones – cuando termina, se devuelve el control al punto de invocación del bloque o cuerpo que falló
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
58
Bibliografía
Ada 95 Language Reference Manual Ada 95 Rationale John Barnes – Programming in Ada 95 GNAT User's Guide
STRL - 30/09/2002
©2001 Juan Antonio de la Puente
59
30
dit UPM
Programación de sistemas grandes Juan Antonio de la Puente DIT/UPM
Objetivos u
u
u
Repasaremos los elementos de los lenguajes de programación que facilitan la realización de sistemas grandes Veremos cómo usar módulos o paquetes para descomponer un sistema y abstraer los detalles de realización Veremos también cómo realizar componentes de software que se puedan reutilizar en varios sistemas
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
1
Contenido u u u u u u u
Introducción Ocultamiento de información Tipos abstractos de datos Compilación separada Objetos Reutilización Programación en C
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
2
Descomposición y abstracción u
Descomposición División de un sistema complejo en componentes más sencillos, hasta conseguir que cada componente pueda ser comprendido y realizado por una o varias personas – diseño descendente
u
Abstracción Especificación de los aspectos esenciales de un componente, dejando para más adelante su diseño detallado – diseño ascendente
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
3
Módulos u
u
u
Un módulo es una colección de declaraciones de tipos, objetos y operaciones relacionados entre sí Los módulos permiten encapsular partes del sistema mediante interfaces bien definidas Los módulos permiten utilizar algunas técnicas que facilitan el desarrollo de sistemas grandes: – ocultamiento de información – tipos abstractos de datos – compilación separada
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
4
Contenido u u u u u u u
Introducción Ocultamiento de información Tipos abstractos de datos Compilación separada Objetos Reutilización Programación en C
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
5
Ocultamiento de información u u
Los módulos permiten controlar la visibilidad de las declaraciones Para ello se distingue entre – interfaz visible (especificación) – cuerpo invisible (implementación) » contiene los detalles que no son visibles desde fuera
u u
Es deseable poder compilar la especificación sin necesidad de escribir el cuerpo Ejemplos – Ada: paquetes – C: ficheros .h y .c
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
6
Paquetes en Ada u
Un paquete (package) tiene dos partes: – especificación: contiene únicamente declaraciones visibles desde otras partes del programa (la interfaz del paquete) – cuerpo: contiene los detalles invisibles desde fuera
u
u
Todos los identificadores definidos en la especificación son visibles a la vez Hay una relación formal entre la especificación y el cuerpo
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
7
Ejemplo (1) u
Especificación de paquete (greetings.ads)
package Greetings is -- procedimientos para saludar procedure Hello; procedure Goodbye; end Greetings;
u u
Contiene la especificación de dos procedimientos Los cuerpos van en el cuerpo del paquete
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
8
Ejemplo (2) u
Cuerpo del paquete (greetings.adb) with Ada.text_IO; use Ada.Text_IO; package body Greetings is procedure Hello is begin Put_Line ("Hello); end Hello; procedure Goodbye is begin Put_Line ("Goodbye"); end Goodbye; end Greetings;
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
9
Uso de los paquetes u
Los identificadores declarados en la especificación van cualificados con el nombre del paquete Greetings.Hello;
u
Se puede evitar la cualificación con una cláusula use: with Greetings; use Greetings; procedure Greet is begin Hello; Goodbye; end Greet;
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
10
Contenido u u u u u u u u
Introducción Ocultamiento de información Tipos abstractos de datos Compilación separada Módulos genéricos Objetos Reutilización Programación en C
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
11
Tipos abstractos de datos u
u
Un TAD es un tipo de datos declarado conjuntamente con un conjunto de operaciones primitivas Los detalles de representación del tipo se ocultan – se dice que el tipo es privado
u
Los detalles sobre la representación del tipo van en una parte privada de la especificación del paquete – la parte privada define la interfaz física del paquete y es invisible desde fuera del mismo – la utiliza el compilador para crear objetos del tipo abstracto
u u
Los tipos limitados no tienen operaciones predefinidas Los demás tipos privados tienen predefinida la asignación (“:=“) y la igualdad (“=“)
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
12
Ejemplo: TAD cola (1)
package Queues is -- tipo abstracto type Queue is limited private; -- operaciones primtivas procedure Create (Q : in out Queue); function Empty (Q : Queue) return Boolean; procedure Insert (Q : in out Queue; E : Element); procedure Remove (Q : in out Queue; E : out Element);
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
13
Ejemplo: TAD cola (2) private -- estas declaraciones no son visibles desde fuera type Queue_Node; type Queue_Node_Pointer is access Queue_Node; type Queue_Node is record Contents : Element; Next : Queue_Node_Pointer; end record; type Queue is limited record Front : Queue_Node_Pointer; Back : Queue_Node_Pointer; end record; end Queues;
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
14
Ejemplo: TAD cola (3) package body Queues is ... end Queues;
declare use Queues; Q1, Q2 : Queue; E : Element; begin if not Empty (Q1) then Remove (Q1,E); Insert (Q2, E); end if; end;
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
15
Contenido u u u u u u u u
Introducción Ocultamiento de información Tipos abstractos de datos Compilación separada Módulos genéricos Objetos Reutilización Programación en C
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
16
Compilación separada u
u
Es interesante compilar por separado los módulos de un programa grande Conviene distinguir – Compilación independiente » los módulos se compilan por separado, pero el compilador no comprueba la interdependencias » la resolución de las dependencias se hace al montar el programa » los errores aparecen al ejecutar el programa
– Compilación separada » el compilador comprueba el uso de las definiciones de unos módulos en otros » se pueden detectar errores al compilar Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
17
Compilación separada en Ada u
u
Un programa grande se puede dividir en unidades de compilación En Ada las unidades de compilación pueden ser: – especificaciones de paquetes – especificaciones de subprogramas – los cuerpos de paquetes y subprogramas son unidades secundarias
u
La dependencia entre unidades se indica con una cláusula with with Greetings; use Greetings; procedure Greet is begin Hello; Goodbye; end Greet;
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
18
Compilación separada con GNAT u
Ahora hay tres ficheros: (especificación de Greetings) (cuerpo de Greetings) (cuerpo del procedimiento Greet)
greetings.ads greetings.adb greet.adb u
Para compilar se hace: $ $ » »
u
gcc -c greet.adb gcc -c greetings.adb ¡ no hace falta compilar greetings.ads ! no importa el orden de compilación
Montaje y enlace : $ gnatbind greet.ali $ gnatlink greet.ali
u
Se puede hacer todo de una vez: $ gnatmake greet
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
19
Biblioteca de compilación u
u
u
Las unidades que forman un programa se almacenan en una biblioteca de compilación La cláusula with establece una relación de dependencia entre unidades Se pueden escribir (y compilar) las especificaciones antes que los cuerpos – – – –
el compilador comprueba que las interfaces son consistentes esto es adecuado para implementar hacia arriba (bottom-up) es compatible con el diseño descendente (top-down) los cuerpos dependen de las especificaciones
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
20
Diagramas de módulos u
Permiten representar gráficamente las dependencias entre unidades de compilación cuerpo
especificación Dispatcher Queues
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
21
Paquetes sin cuerpo u
u u
Los paquetes cuya especificación está completa no tienen cuerpo Por ejemplo, si sólo se declaran tipos, constantes y variables Ejemplo: package Elevation_Definitions is type Elevation_Angle is digits 5 range -30.0 .. 90.0; Maximum_Elevation : constant Elevation_Angle := 60.0; Current_Elevation : Elevation_Angle; end Elevation_Definitions;
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
22
Unidades separadas u
La cláusula separate facilita la implementación hacia abajo – se puede sustituir un cuerpo por un resguardo (stub) que se compila más tarde procedure Main is type Reading is ... type Control_Value is ... procedure Convert (R : Reading; V : out Control_Value) is separate; begin -- Main loop Get (R); Convert (R,V); Put (V); end loop; end Main; separate (Main) procedure Convert (R : Reading; V : out Control_Value) is -- cuerpo del procedimiento end Convert;
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
23
Biblioteca jerárquica u
u
Cuando un programa se hace muy grande, puede haber conflictos de nombres entre unidades de programa Para evitar esto, Ada tiene una biblioteca jerárquica – Un paquete P puede tener uno o más «hijos» P.Q – La especificación de P.Q es una extensión de la especificación de P » En la parte pública sólo se ve la parte pública de P » En la parte privada de P.Q se ve también la parte privada de P
– El cuerpo de P.Q implementa la extensión » Aquí también se ve la parte privada de P
– Cuando se hace with P.Q se importa también P » Pero use P.Q no implica use P
– La jerarquía se puede hacer tan profunda como sea necesario – La especificación de los hijos depende de la del padre Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
24
Ejemplo (1) package Queues.Extended is function First (Q : in out Queue) return Element; end Queues.Extended;
package body Queues.Extended is function First (Q : in out Queue) return Element is begin return Q.Front.Contents; end First; end Queues.Extended;
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
25
Ejemplo (2)
with Queues.Extended; -- se importa también Queues use Queues, Queues.Extended; procedure Advance (Q : Queue) is -- remove first element if equal to some value E : Element; begin if First (Q) = Some_Value then Remove (Q,E); end if; end Advance;
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
26
Diagramas de módulos advance
Queues
Programación de sistemas grandes - 28/09/00
Queues. Extended
©1997-2000, Juan Antonio de la Puente
27
Hijos privados u
u
Sirven para extender la implementación de un paquete sin necesidad de recompilar los clientes del padre La especificación de un hijo privado es una extensión de la parte privada del padre – En su especificación se ve la parte privada del padre – Sólo se puede ver en la parte privada de la jerarquía del padre » cuerpo del padre » cuerpo de los descendientes públicos del padre » especificación y cuerpo de los descendientes privados del padre
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
28
Ejemplo (1) private package Queues.Internals is procedure Copy (E : in Element; Q : in out Queue_Node); end Queues.Internals; package body Queues.Extended is procedure Copy (E : in Element; Q : in out Queue_Node) is begin ... end Copy; end Queues.Extended;
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
29
Diagramas de módulos Queues. Extended
client
hijo privado
Queues. Extended. Debug
hijo público
Queues
hijo privado
Queues. Internals
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
30
Contenido u u u u u u u
Introducción Ocultamiento de información Tipos abstractos de datos Compilación separada Objetos Reutilización Programación en C++
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
31
Programación mediante objetos u
u
Un objeto es un elemento (constante o variable) de un tipo abstracto de datos Para realizar programas a partir de objetos es interesante disponer de – – – –
tipos extensibles con herencia constructores de objetos con iniciación automática destructores con terminación automática selección de operaciones durante la ejecución (dynamic dispatching)
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
32
Tipos extensibles u
u
u
u
En Ada, un tipo derivado hereda las operaciones primitivas del progenitor Se pueden añadir o modificar las operaciones del tipo Si el tipo es un registro extensible (tagged record) se pueden añadir también componentes Una clase es la unión de todos los tipos que derivan de un antepasado común (la raíz de la clase)
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
33
Ejemplo type Point is tagged record X, Y : Float; end record; procedure Plot (P : Point);
type 3D_Point is new Point with record Z : Float; end record; procedure Plot (P : 3D_Point);
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
34
Clases y selección dinámica u
u
Cada tipo extensible T tiene asociado otro tipo T’Class que comprende los valores de T y sus descendientes Las operaciones sobre objetos de este tipo se seleccionan durante la ejecución procedure General_Plot (P : Point’Class) is begin -- otras operaciones Plot (P); end General_Plot;
u
En sistemas de tiempo real hace más difícil el análisis del tiempo de respuesta
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
35
Diagramas de clases (1)
Coordinates
Waypoint
Point
3D_Point
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
36
Diagramas de clases (2) Coordinates
Waypoint
Update
Distance
Point X: Float Y:Float Plot
3D-Point Z: Float Plot
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
37
Tipos controlados u
u
Son derivados de un tipo predefinido Ada.Finalization.Controlled Se pueden definir subprogramas que se ejecutan automáticamente al – crear un objeto – destruir un objeto – asignar un valor a un objeto
Programación de sistemas grandes - 28/09/00
— Initialize — Finalize — Adjust
©1997-2000, Juan Antonio de la Puente
38
Contenido u u u u u u u
Introducción Ocultamiento de información Tipos abstractos de datos Compilación separada Objetos Reutilización Programación en C
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
39
Reutilización de software u
u
La reutilización de componentes mejora la productividad y la calidad del software El tipado fuerte es un inconveniente – por ejemplo, habría que repetir el paquete Queues para distintos tipos de elementos
u
u
Una solución es construir plantillas o componentes genéricos a partir de los cuales se pueden producir ejemplares concretos En Ada, los paquetes y subprogramas pueden ser genéricos
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
40
Ejemplo: colas genéricas generic type Element is private; -- tiene al menos las operaciones ":=" y "=" package Generic_Queues is -- tipo abstracto type Queue is limited private; -- operaciones primtivas procedure Create (Q : in out Queue); function Empty (Q : Queue) return Boolean; procedure Insert (Q : in out Queue; E : Element); procedure Remove (Q : in out Queue; E : out Element); private -- como antes end Generic_Queues;
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
41
Ejemplares declare type Process_Id is ...; package Integer_Queues is new Generic_Queues (Integer); package Process_Queues is new Generic_Queues (Process_Id); use Integer_Queues; use Process_Queues; Value_Queue : Integer_Queues.Queue; Ready_Queue : Process_Queues.Queue; P : Process_Id; begin Create (Value_Queue); -- la operación se selecciona al compilar Create (Ready_Queue); ... Insert (Ready_Queue, P); ... end;
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
42
Parámetros genéricos u
Ada utiliza un modelo de contrato para los parámetros genéricos – Tipos » discretos » enteros » reales
type type type type
T T T T
is is is is
(); range (); digits (); delta ();
» formaciones » derivados, extensibles, privados, privados limitados
– Objetos – Subprogramas – Paquetes
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
43
Diagramas de módulos Integer
type Element
Integer Queues
Generic Queues
Process
Process Queues
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
44
Contenido u u u u u u u
Introducción Ocultamiento de información Tipos abstractos de datos Compilación separada Objetos Reutilización Programación en C
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
45
Programación de sistemas grandes en C u u u u
u
Se pueden construir módulos con ficheros .h y .c No hay relación formal entre ellos No hay tipado fuerte Los detalles de los tipos abstractos se ocultan mediante punteros No hay módulos genéricos
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
46
Ejemplo: cola (1) /* queue.h -- especificación */ typedef int element; struct queue_t; typedef struct queue_t *queue_ptr_t; queue_ptr_t int empty void insert void remove
create (); (queue_ptr_t Q); (queue_ptr_t Q, element E); (queue_ptr_t Q, element *E);
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
47
Ejemplo: cola (2) /* queue.c -- cuerpo */ #include "queue.h” struct queue_node_t { element contents; struct queue_node_t *next; }; struct queue_t { struct queue_node_t *front; struct queue_node_t *back, }; queue_ptr_t create () { queue_ptr_t Q; Q = (struct queue_t) malloc (sizeof(struct queue_t)); Q->front = NULL; Q->back = NULL; return Q; }; /* etc */ Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
48
Ejemplo: cola (3) /* uso del módulo */ #include "queue.h” main () { queue_ptr_t value_queue; element x, y; value_queue = create (); ... insert (value_queue, x); ... remove (value_queue, &y); ... }
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
49
Resumen u
u
El mecanismo básico de descomposición y abstracción es el módulo Los módulos permiten trabajar con – ocultamiento de información – tipos abstractos de datos – compilación separada
u
Otras técnicas asociadas a la programación basada en objetos son – extensión y herencia – iniciación, terminación y ajuste automáticos – selección dinámica de operaciones
u
Los componentes genéricos o plantillas facilitan la reutilización del software
Programación de sistemas grandes - 28/09/00
©1997-2000, Juan Antonio de la Puente
50
dit UPM
Sistemas cíclicos Juan Antonio de la Puente DIT/UPM
Objetivos
Repasar algunos problemas concretos relacionados con la realización de sistemas de tiempo real
Introducir un método de diseño de sistemas basado en una arquitectura síncrona – el elemento fundamental es un ejecutivo cíclico
Evaluar las ventajas e inconvenientes de este tipo de arquitectura
STRL - 30/09/2002
©2001-2002 Juan Antonio de la Puente
1
Concurrencia – Los sistemas de tiempo real controlan actividades del mundo exterior que son simultáneas – Para ello deben ejecutar varias actividades o tareas en paralelo (concurrentemente) – La ejecución de las tareas se multiplexa en el tiempo en uno o varios procesadores
activa A
ejecutándose
inactiva
B C
STRL - 30/09/2002
©2001-2002 Juan Antonio de la Puente
2
Requisitos temporales Los requisitos de tiempo real suelen referirse a
El principio del intervalo de ejecución (esquema de activación) – Tareas periódicas: se ejecutan a intervalos regulares – Tareas esporádicas:: se ejecutan cuando ocurren determinados sucesos (en instantes distribuidos irregularmente )
El final del intervalo de ejecución – Se suele especificar un plazo (relativo al instante de activación) para terminar la ejecución
STRL - 30/09/2002
©2001-2002 Juan Antonio de la Puente
3
Tareas periódicas y esporádicas
T (período)
Tarea periódica T D
D (plazo)
fallo t
T (separación)
Tarea esporádica D
D (plazo)
t
©2001-2002 Juan Antonio de la Puente
STRL - 30/09/2002
4
Modelo de tareas cíclico
Hay muchos sistemas de tiempo real que sólo tienen tareas periódicas – son más fáciles de construir – su comportamiento está completamente determinado
Inicialmente consideramos que no hay comunicación entre tareas (tareas independientes) C
HRT-HOOD :
STRL - 30/09/2002
C
C
©2001-2002 Juan Antonio de la Puente
5
Arquitecturas de software
Definen la estructura general de una clase de sistemas de tiempo real
Hay dos tipos principales de arquitecturas – Arquitectura síncrona » las tareas se ejecutan según un plan de ejecución fijo (realizado por el diseñador) » el sistema operativo se reemplaza por un ejecutivo cíclico
– Arquitectura asíncrona » las tareas se reparten el procesador de forma dinámica (invisible para el diseñador) » cada tarea tiene una prioridad » en cada momento se ejecuta la tarea activa de mayor prioridad
©2001-2002 Juan Antonio de la Puente
STRL - 30/09/2002
6
Arquitectura síncrona reloj ejecutivo cíclico
tarea 1
STRL - 30/09/2002
tarea 2
©2001-2002 Juan Antonio de la Puente
tarea 3
7
Arquitectura asíncrona
tarea 1
tarea 2
tarea 3
sistema operativo
STRL - 30/09/2002
©2001-2002 Juan Antonio de la Puente
8
Planificación cíclica
STRL -
Si todas las tareas son periódicas, se puede confeccionar un plan de ejecución fijo Se trata de un esquema que se repite cada TM = mcm(Ti ) (ciclo principal) El ciclo principal se divide en ciclos secundarios, con (TM = k ⋅ TS) período TS En cada ciclo secundario se ejecutan las actividades correspondientes a determinadas tareas
©2001-2002 Juan Antonio de la Puente
9
Ejemplo 1 C
A
C
T= 20 ms D= 20 ms
B
T= 40 ms D= 40 ms
Plan cíclico: TM = 40 ms TS = 20 ms ciclo principal
ciclo principal
ciclo secundario
ciclo secundario
ciclo secundario
c
d
c
A 0
B 10
STRL - 30/09/2002
A 20
A 30
40
ciclo secundario
d B
50
A 60
©2001-2002 Juan Antonio de la Puente
70
80
10
Ejecutivo cíclico
procedure Cyclic_Executive is type Frame is mod 2; Index :Frame := 0; begin loop Wait_Clock_Interrupt; -- cada 20ms case Index is when 0 => A; B; when 1 => A; end case; Index := Index + 1; end loop; end Cyclic_Executive;
STRL - 30/09/2002
©2001-2002 Juan Antonio de la Puente
11
Plazos de respuesta
Se comprueba que se cumplen los plazos directamente sobre el plan de ejecución Para ello hace falta conocer el tiempo de cómputo de cada tarea Ejemplo: A: B:
T = 20 ms T = 40 ms
A,B
0
A
DA
A
D = 20 ms D = 40 ms
C = 8 ms C = 12 ms
DA DB
B
A
10
20
30
40
©2001-2002 Juan Antonio de la Puente
STRL - 30/09/2002
12
Factor de utilización
La cantidad U =
N
i =1
Ci
∑T
i
se denomina factor de utilización del procesador Es una medida de la carga del procesador para un conjunto de tareas Para poder elaborar un plan de ejecución que garantice los plazos de todas las tareas, debe ser U ≤ 1
STRL -
©2001-2002 Juan Antonio de la Puente
13
Parámetros del plan cíclico
Los períodos de los ciclos principal y secundario deben cumplir ciertas condiciones (Baker&Shaw, 1989) 1. TS ≥ max Ci 2. ∃i : Ti TS − Ti TS = 0 3. ∀i : TS + [TS − mcd(TS ,Ti )] ≤ Di
La última condición permite detectar fallos de tiempo de respuesta – hay un ciclo secundario completo entre la activación y el límite del plazo de respuesta de una tarea – a veces es aceptable exigir únicamente
∀i : TS + [TS − mcd(TS ,Ti )] ≤ Ti
©2001-2002 Juan Antonio de la Puente
STRL - 30/09/2002
14
Ejemplo 2
Tarea T1 T2 T3 T4
C 10 18 10 20
U = 0,76 TM = 200
STRL - 30/09/2002
T D 40 40 50 50 200 200 200 200
1) TS ≥ 20 2 ) TS ∈ {20,40,50,100,200} 3 ) 2TS − mcd(TS ,40 ) ≤ 40 2TS − mcd(TS ,50 ) ≤ 50 2TS − mcd(TS ,200 ) ≤ 200 TS = 20
©2001-2002 Juan Antonio de la Puente
15
Ejemplo 2: plan cíclico
T4 T3 T2 T1
T1 T3 0
T2
T1 40
T4
T2 80
T1
T2
T1
120
T1 160
T2 200
©2001-2002 Juan Antonio de la Puente
STRL - 30/09/2002
16
Tareas aperiódicas
El ejecutivo cíclico sólo permite ejecutar tareas periódicas Las tareas esporádicas se ejecutan con un servidor de consulta (polling server) Es una tarea periódica que consulta si se ha producido el suceso esporádico o no – el período depende de la separación mínima entre eventos y del plazo de respuesta S suceso
C
servidor
START
suceso
STRL - 30/09/2002
©2001-2002 Juan Antonio de la Puente
17
Recursos compartidos
Una tarea (o segmento) se ejecuta sin interrupción hasta que termina No es necesario proteger los recursos compartidos – la exclusión mutua es automática C
Pr
C
Se realiza como un objeto pasivo
STRL - 30/09/2002
©2001-2002 Juan Antonio de la Puente
18
Segmentación de tareas
A veces no es posible confeccionar un plan cíclico que garantice los plazos Si U ≤ 1, es posible planificar la ejecución segmentando una o más tareas Los segmentos son secuencias de instrucciones de la tarea con un tiempo de cómputo conocido
STRL - 30/09/2002
©2001-2002 Juan Antonio de la Puente
19
Ejemplo 3
Tarea T1 T2 T3
C 40 4 10
T 80 20 40
1) TS ≥ 40 2 ) TS ∈ {40,80} 3 ) 2TS − mcd(TS ,80 ) ≤ 80
D 80 5 40
2TS − mcd(TS ,20 ) ≤ 5 2TS − mcd(TS ,40 ) ≤ 40
U = 0,95 TM = 80
Ningún valor cumple (3) No hay solución aceptable
©2001-2002 Juan Antonio de la Puente
STRL - 30/09/2002
20
Ejemplo 3: segmentación
Tarea T1.1 T1.2 T1.3 T1.4 T2 T3
C 6 16 6 12 4 10
T 80 80 80 80 20 40
1) TS ≥ 16 2 ) TS ∈ {20,40,80} 3 ) 2TS − mcd(TS ,80 ) ≤ 80
D 80 80 80 80 5 40
2TS − mcd(TS ,20 ) ≤ 5 2TS − mcd(TS ,40 ) ≤ 40
U = 0,95
TM = 80
STRL - 30/09/2002
Ningún valor cumple (3) Hay una solución aceptable con TS = 20
©2001-2002 Juan Antonio de la Puente
21
Ejemplo 3: plan de ejecución
T3 T2 T1
T2
T3
0
T1.1 T2 20
STRL - 30/09/2002
T1.2
T2 40
T3
T1.3 T2
T1.4
60
80
©2001-2002 Juan Antonio de la Puente
22
Ejemplo 3: ejecutivo cíclico
procedure Cyclic_Executive is type Frame is mod 4; Index :Frame := 0; begin loop Wait_clock_Interrupt; -- cada 20ms case Index is when 0 => T2; T3; T1_1; when 1 => T2; T1_2; when 2 => T2; T3; T1_3; when 3 => T2; T1_4; end case; end loop; end Cyclic_Executive;
STRL - 30/09/2002
©2001-2002 Juan Antonio de la Puente
23
Problemas de la segmentación
A veces es difícil ajustar el tiempo de cómputo de los segmentos Si hay recursos compartidos, cada sección crítica debe estar incluida en un solo segmento Si se modifica una sola tarea hay que rehacer la planificación completa – y posiblemente volver a segmentar de otra manera
STRL - 30/09/2002
©2001-2002 Juan Antonio de la Puente
24
Construcción del plan cíclico
En general, el problema es NP-duro – no hay algoritmos eficientes que resuelvan todos los casos
Se usan algoritmos heurísticos – se construye un árbol de soluciones parciales – se puede empezar colocando las tareas más urgentes – se podan las ramas según algún criterio heurístico
Es más fácil cuando el sistema es armónico – pero esto puede forzar una mayor utilización del procesador
Cuando los períodos son muy dispares es más difícil – muchos ciclos secundarios en cada ciclo principal
STRL - 30/09/2002
©2001-2002 Juan Antonio de la Puente
25
Conclusiones
Los sistemas cíclicos, con arquitectura síncrona, tienen muchas ventajas – implementación sencilla y robusta – determinismo temporal – es posible certificar que son seguros
Pero tienen inconvenientes importantes – mantenimiento difícil y costoso » si se cambia algo hay que empezar desde el principio » la segmentación añade mucha complejidad
– es difícil incluir tareas esporádicas
En general, es un método de bajo nivel
STRL - 30/09/2002
©2001-2002 Juan Antonio de la Puente
26
Bibliografía
Burns & Wellings, Real-Time Systems and Programming Languages, capítulos 7 y 13 Liu, Real-Time Systems, capítulo 5 Kopetz, Real-Time Systems, capítulo 11
STRL - 30/09/2002
©2001-2002 Juan Antonio de la Puente
27
dit UPM
Fiabilidad y tolerancia de fallos Juan Antonio de la Puente DIT/UPM
Transparencias basadas en el capítulo 5 del libro de A. Burns y A. Wellings Real-Time Systems and Programming Languuages, 3ª edición (2001)
Objetivos
Veremos cuáles son los factores que afectan a la fiabilidad de un sistema
También veremos algunas técnicas para tolerar fallos de software
STRL -30/05/01
©2001 Juan Antonio de la Puente
1
1
Índice
Fiabilidad, averías y fallos Modos de fallo Prevención y tolerancia de fallos Redundancia estática y dinámica – Programación con N versiones – Bloques de recuperación
Redundancia dinámica y excepciones Seguridad, fiabilidad y confiabilidad
STRL -30/05/01
©2001 Juan Antonio de la Puente
2
Fallos de funcionamiento
Los fallos de funcionamiento de un sistema pueden tener su origen en – – – –
Una especificación inadecuada Errores de diseño del software Averías en el hardware Interferencias transitorias o permanentes en las comunicaciones
Nos centraremos en el estudio de los errores de software
STRL -30/05/01
©2001 Juan Antonio de la Puente
3
2
Conceptos básicos
La fiabilidad (reliability) de un sistema es una medida de su conformidad con una especificación autorizada de su comportamiento Una avería (failure) es una desviación del comportamiento de un sistema respecto de su especificación Las averías se manifiestan en el comportamiento externo del sistema, pero son el resultado de errores (errors) internos Las causas mecánicas o algorítmicas de los errores se llaman fallos (faults)
©2001 Juan Antonio de la Puente
STRL -30/05/01
4
Fallos encadenados
Los fallos pueden ser consecuencia de averías en los componentes del sistema (que son también sistemas)
avería avería
STRL -30/05/01
fallo fallo
error error
©2001 Juan Antonio de la Puente
avería avería
fallo fallo
5
3
Tipos de fallos
Fallos transitorios – desaparecen solos al cabo de un tiempo – ejemplo: interferencias en comunicaciones
Fallos permanentes – permanecen hasta que se reparan – ejemplo: roturas de hardware, errores de diseño de software
Fallos intermitentes – fallos transitorios que ocurren de vez en cuando – ejemplo: calentamiento de un componente de hardware
Debe impedirse que los fallos de todos estos tipos causen averías ©2001 Juan Antonio de la Puente
STRL -30/05/01
6
Tipos de avería (failure modes)
nunca se avería
avería
valor
error de intervalo
STRL -30/05/01
tiempo
error de valor
pronto
nunca (omisión)
avería silenciosa
parada segura
©2001 Juan Antonio de la Puente
arbitrario
avería por retraso
avería incontrolada
avería controlada
7
4
Prevención y tolerancia de fallos
Hay dos formas de aumentar la fiabilidad de un sistema: – Prevención de fallos » Se trata de evitar que se introduzcan fallos en el sistema antes de que entre en funcionamiento
– Tolerancia de fallos » Se trata de conseguir que el sistema continúe funcionando aunque se produzcan fallos
En ambos casos el objetivo es desarrollar sistemas con tipos de averías bien definidos
©2001 Juan Antonio de la Puente
STRL -30/05/01
8
Prevención de fallos
Se realiza en dos etapas: – Evitación de fallos » Se trata de impedir que se introduzcan fallos durante la construcción del sistema
– Eliminación de fallos » Consiste en encontrar y eliminar los fallos que se producen en el sistema una vez construido
STRL -30/05/01
©2001 Juan Antonio de la Puente
9
5
Técnicas de evitación de fallos
Hardware – Utilización de componentes fiables – Técnicas rigurosas de montaje de subsistemas – Apantallamiento de hardware
Software – – – –
Especificación de requisitos rigurosa o formal Métodos de diseño comprobados Lenguajes con abstracción de datos y modularidad Utilización de entornos de desarrollo con computador (CASE) adecuados para gestionar los componentes
©2001 Juan Antonio de la Puente
STRL -30/05/01
10
Técnicas de eliminación de fallos
Comprobaciones – Revisiones de diseño – Verificación de programas – Inspección de código
Pruebas (tests) – Son necesarias, pero tienen problemas: » » » »
STRL -30/05/01
no pueden ser nunca exhaustivas sólo sirven para mostrar que hay errores, no que no los hay a menudo es imposible reproducir las condiciones reales los errores de especificación no se detectan
©2001 Juan Antonio de la Puente
11
6
Limitaciones de la prevención de fallos
Los componentes de hardware fallan, a pesar de las técnicas de prevención – La prevención es insuficiente si » la frecuencia o la duración de las reparaciones es inaceptable » no se puede detener el sistema para efectuar operaciones de mantenimiento
Ejemplo: naves espaciales no tripuladas
La alternativa es utilizar técnicas de tolerancia de fallos
STRL -30/05/01
©2001 Juan Antonio de la Puente
12
Grados de tolerancia de fallos
Tolerancia completa (fail operational) – El sistema sigue funcionando, al menos durante un tiempo, sin perder funcionalidad ni prestaciones
Degradación aceptable (fail soft, graceful degradation) – El sistema sigue funcionando con una pérdida parcial de funcionalidad o prestaciones hasta la reparación del fallo
Parada segura (fail safe) – El sistema se detiene en un estado que asegura la integridad del entorno hasta que se repare el fallo
El grado de tolerancia de fallos necesario depende de la aplicación
STRL -30/05/01
©2001 Juan Antonio de la Puente
13
7
Ejemplo : control de tráfico aéreo funcionalidad funcionalidad completa completa yy tiempo tiempo de de respuesta respuesta correcto correcto
funcionalidad funcionalidad de de emergencia emergencia (sólo (sólo separación separación entre entre aviones aviones))
funcionalidad funcionalidad mínima mínima para para control control de de tráfico tráfico básico básico
sistema sistema de de reserva reserva para para fallos fallos catastróficos catastróficos
STRL -30/05/01
©2001 Juan Antonio de la Puente
14
Redundancia
La tolerancia de fallos se basa en la redundancia
Se utilizan componentes adicionales para detectar los fallos y recuperar el comportamiento correcto
Esto aumenta la complejidad del sistema y puede introducir fallos adicionales
Es mejor separar los componentes tolerantes del resto del sistema
STRL -30/05/01
©2001 Juan Antonio de la Puente
15
8
Redundancia en hardware
Redundancia estática – Los componentes redundantes están siempre activos – Se utilizan para enmascarar los fallos – Ejemplo: » Redundancia modular triple (ó N), TMR/NMR
Redundancia dinámica – Los componentes redundantes se activan cuando se detecta un fallo – Se basa en la detección y posterior recuperación de los fallos – Ejemplos: » sumas de comprobación » bits de paridad
©2001 Juan Antonio de la Puente
STRL -30/05/01
16
Tolerancia de fallos de software
Técnicas para detectar y corregir errores de diseño
Redundancia estática – Programación con N versiones
Redundancia dinámica – Dos etapas: detección y recuperación de fallos – Bloques de recuperación » Proporcionan recuperación hacia atrás
– Excepciones » Proporcionan recuperación hacia adelante
STRL -30/05/01
©2001 Juan Antonio de la Puente
17
9
Programación con N versiones
Diversidad de diseño – N programas desarrollados independientemente con la misma especificación – sin interacciones entre los equipos de desarrollo
Ejecución concurrente – proceso coordinador (driver) » intercambia datos con los procesos que ejecutan las versiones
– todos los programas tienen las mismas entradas – las salidas se comparan – si hay discrepancia se realiza una votación
©2001 Juan Antonio de la Puente
STRL -30/05/01
18
Programación con N versiones
cordinador estado votos
versión 1
STRL -30/05/01
versión 2
©2001 Juan Antonio de la Puente
versión 3
19
10
Comparación consistente
X1
X2
X3
> x0
> x0 sí
no
> x0
sí
no > y0
> y0
> y0
La comparación de valores reales o texto no es exacta Cada versión produce un resultado correcto, pero diferente de las otras No se arregla comparando con x0+∆, y0+∆
sí
V1
STRL -30/05/01
V2
V3
©2001 Juan Antonio de la Puente
20
Problemas
La correcta aplicación de este método depende de: – Especificación inicial » Un error de especificación aparece en todas las versiones
– Desarrollo independiente » No debe haber interacción entre los equipos » No está claro que distintos programadores cometan errores independientes
– Presupuesto suficiente » Los costes de desarrollo se multiplican ¿sería mejor emplearlos en mejorar una versión única? » El mantenimiento es también más costoso
Se ha utilizado en sistemas de aviónica críticos.
STRL -30/05/01
©2001 Juan Antonio de la Puente
21
11
Redundancia dinámica en software Cuatro etapas: 1. Detección de errores » no se puede hacer nada hasta que se detecta un error
2. Evaluación y confinamiento de los daños » diagnosis: averiguar hasta dónde ha llegado la información errónea
3. Recuperación de errores » llevar el sistema a un estado correcto, desde el que pueda seguir funcionando (tal vez con funcionalidad parcial)
4. Reparación de fallos » Aunque el sistema funcione, el fallo puede persistir y hay que repararlo
©2001 Juan Antonio de la Puente
STRL -30/05/01
22
Detección de errores
Por el entorno de ejecución – hardware (p.ej.. instrucción ilegal) – núcleo o sistema operativo (p.ej. puntero nulo)
Por el software de aplicación – Duplicación (redundancia con dos versiones) – Comprobaciones de tiempo » watchdog timer » deadline checks
– – – –
Inversión de funciones Códigos detectores de error Validación de estado Validación estructural
STRL -30/05/01
©2001 Juan Antonio de la Puente
23
12
Evaluación y confinamiento de daños
Es importante confinar los daños causados por un fallo a una parte limitada del sistema (firewalling)
Se trata de estructurar el sistema de forma que se minimice el daño causado por los componentes defectuosos (compartimentos estancos, firewalls)
Técnicas – Descomposición modular: confinamiento estático – Acciones atómicas: confinamiento dinámico
STRL -30/05/01
©2001 Juan Antonio de la Puente
24
Recuperación de errores
Es la etapa más importante Se trata de situar el sistema en un estado correcto desde el que pueda seguir funcionando Hay dos formas de llevarla a cabo: – Recuperación directa (hacia adelante) (FER) » Se avanza desde un estado erróneo haciendo correcciones sobre partes del estado
– Recuperación inversa (hacia atrás) (BER) » Se retrocede a un estado anterior correcto que se ha guardado previamente
STRL -30/05/01
©2001 Juan Antonio de la Puente
25
13
Recuperación directa
La forma de hacerla es específica para cada sistema Depende de una predicción correcta de los posibles fallos y de su situación Hay que dejar también en un estado seguro el sistema controlado Ejemplos – punteros redundantes en estructuras de datos – códigos autocorrectores
STRL -30/05/01
©2001 Juan Antonio de la Puente
26
Recuperación inversa
Consiste en retroceder a un estado anterior correcto y ejecutar un segmento de programa alternativo (con otro algoritmo) – El punto al que se retrocede se llama punto de recuperación (recovery point) – La acción de guardar el estado se llama chekpointing
No es necesario averiguar la causa ni la situación del fallo – Sirve para fallos imprevistos
¡Pero no puede deshacer los errores que aparecen en el sistema controlado!
STRL -30/05/01
©2001 Juan Antonio de la Puente
27
14
Efecto dominó
Cuando hay tareas concurrentes la recuperación se complica detección de error R11
R12
R13
T1
T2 R21
STRL -30/05/01
R22
Solución: líneas de recuperación consistentes para todas las tareas ©2001 Juan Antonio de la Puente
28
Reparación de fallos
La reparación automática es difícil y depende del sistema concreto Hay dos etapas – Localización del fallo » Se pueden utilizar técnicas de detección de errores
– Reparación del sistema » Los componentes de hardware se pueden cambiar » Los componentes de software se reparan haciendo una nueva versión » En algunos casos puede ser necesario reemplazar el componente defectuoso sin detener el sistema
STRL -30/05/01
©2001 Juan Antonio de la Puente
29
15
Bloques de recuperación
Es una técnica de recuperación inversa integrada en el lenguaje de programación Un bloque de recuperación es un bloque tal que – su entrada es un punto de recuperación – a su salida se efectúa una prueba de aceptación » sirve para comprobar si el módulo primario del bloque termina en un estado correcto
– si la prueba de aceptación falla, » se restaura el estado inicial en el punto de recuperación » se ejecuta un módulo alternativo del mismo bloque
– si vuelve a fallar, se siguen intentando alternativas – cuando no quedan más, el bloque falla y hay que intentar al recuperación en un nivel más alto
©2001 Juan Antonio de la Puente
STRL -30/05/01
30
Esquema de recuperación
restaurar punto de recuperación entrada al bloque
establecer punto de recuperación
más
sí
ejecutar alternativa
no
error
test
ok
abandonar punto de recuperación
fallo del bloque
STRL -30/05/01
©2001 Juan Antonio de la Puente
31
16
Sintaxis ensure by
else by
else by
... else by
else error;
Puede haber bloques anidados – si falla el bloque interior, se restaura el punto de recuperación del bloque exterior
STRL -30/05/01
©2001 Juan Antonio de la Puente
32
Ejemplo: ecuación diferencial
ensure error 0, decrementa S en 1 Si S ≤ 0, la tarea se suspende hasta que S > 0 Incrementa S en 1
Down y Up son indivisibles
Otros nombres comunes para las operaciones de un semáforo son: – Wait / Signal – P / V (passieren / vrijmachen) – Secure / Release,
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
10
Ejemplo
Supongamos una definición como la siguiente (ojo, no está predefinida en Ada) package Semaphores is type Semaphore (Initial : Integer := 1) is limited private; procedure Down procedure Up
(S : in out Semaphore); (S : in out Semaphore);
private ... end Semaphores;
La implementación debe garantizar las propiedades de Down y Up
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
11
Exclusión mutua con semáforos Mutex : Semaphore; -- iniciado a 1 por defecto
task T1; task body T1 is begin loop Wait(Mutex); -- sección crítica 1 Up(Mutex); ... end loop; end T1;
task T2; task body T2 is begin loop Wait(Mutex); -- sección crítica 2 Up(Mutex); ... end loop; end T2;
Mutex es un semáforo binario
©2001-2002 Juan Antonio de la Puente
STRL - Datos comunes - 01/10/2002
12
Sincronización condicional Condition : Semaphore(0); task T1; -- espera task body T1 is begin loop S1A; Down(Condition); S1B; end loop; end T1;
task T2; -- avisa task body T2 is begin loop S2A; -- establece condición Up(Condition); S2B; end loop; end T2;
S1B no se ejecuta hasta que T2 avisa que se cumple la condición
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
13
Productor y consumidor (1) package Buffer is -- objeto abstracto procedure Put(X: in Item); procedure Get(X: out Item); end Buffer; package body Buffer is Size : constant Positive := 32; -- por ejemplo subtype Index is mod Size; type Store is array (Index) of Item; Box : Store; First, Last : Index := Index’First; Mutex : Semaphore(1); -- exclusión mutua Full; : Semaphore(0); -- elementos ocupados Empty : Semaphore(Size); -- elementos libres
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
14
Productor y consumidor (2) procedure Put (X : in Item) is begin Down(Empty); Down(Mutex); Box(Last) := X; Last := Last + 1; Up(Mutex); Up(Full); end Put; procedure Get (X : out Item) is begin Down(Full); Down(Mutex); X := Box(First); First := First + 1; Up(Mutex); Up(Empty); end Get; end Buffer;
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
15
Problemas de los semáforos
Es fácil cometer errores – Un solo Down o Up mal colocado puede hacer que el programa funcione incorrectamente Ejemplos: Up(S); ... Up(S); -- no hay exclusión mutua Down(S); ... Down(S); -- interbloqueo Up(S); ... Down(S); -- depende
Es mejor usar mecanismos más abstractos y fiables – regiones críticas – monitores – objetos protegidos
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
16
Interbloqueo (deadlock)
Dos procesos están interbloqueados si cada uno de ellos espera un condición o un recurso que depende del otro X,Y : Semaphore;
task T1; task body T1 is begin loop Down(X); Down(Y); -- usar recursos Up(Y)); Up(X); end loop; end T1;
STRL - Datos comunes - 01/10/2002
task T2; task body T2 is begin loop Down(Y); Down(X); -- usar recursos Up(X); Up(Y); end loop; end T2;
©2001-2002 Juan Antonio de la Puente
17
Interbloqueos, bloqueos “vivos” e inanición
Se pueden evitar los interbloqueos asignando los recursos de forma ordenada – no siempre es posible
Se puede intentar asignar los recursos de forma más flexible – pueden aparecer otros problemas: » bloqueo “vivo” (livelock) » los procesos se ejecutan, pero ninguno consigue recursos » inanición (starvation) » los procesos se ejecutan, pero algunos no consiguen el recurso nunca
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
18
Regiones críticas condicionales
Una región crítica es una secuencia de instrucciones que se ejecuta en exclusión mutua – el compilador produce el código de bajo nivel necesario – se identifica la variable compartida a la que se accede en una sección crítica
La sincronización condicional se consigue mediante guardas en las regiones críticas – solo se puede entrar en la región crítica cuando la guarda es verdadera
Ejemplo (ojo, no es Ada): V : shared T; ... region V when condición is ... end region; STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
19
Productor y consumidor (1) package body Buffer is Size : constant Positive := 32; -- por ejemplo subtype Index is mod Size; subtype Count is Natural range 0..Size; type Store is array (Index) of Item; type Buffer_Type is record Box : Store; First, Last : Index := Index’First; Number : Count := 0; end record; Data : shared Buffer_Type;
STRL - Datos comunes - 01/10/2002
-- ¡no es Ada!
©2001-2002 Juan Antonio de la Puente
20
Productor y consumidor (2) procedure Put (X : in Item) is begin region Data when Data.Number < Size do -- ¡no es Ada! Data.Box(Data.Last) := X; Data.Last := Data.Last + 1; Data.Number := Data.Number + 1; end region; end Put; procedure Get (X : begin region Data when X := Data.First := Data.Number := end region; end Get;
out Item) is Data.Number > 0 do Data.Box(Data.First); Data.First + 1; Data.Number - 1;
-- ¡no es Ada!
end Buffer;
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
21
Problemas de las regiones críticas
Implementación complicada – cada vez que un proceso sale de una región crítica hay que volver a evaluar las guardas de los procesos que están esperando en otras regiones con la misma variable – para ello hay que reanudar el proceso que espera, que se puede volver a suspender si la guarda es falsa – potencialmente, muchos cambios de contexto
No es obligatorio que estén confinadas en módulos – el programa puede ser difícil de comprobar y mantener
Una solución mejor son los monitores
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
22
Monitores
Un monitor es un módulo cuyas operaciones se ejecutan en exclusión mutua – el compilador produce el código de bajo nivel necesario
La sincronización condicional se obtiene con variables de condición – dos operaciones primitivas: signal y wait » wait suspende el proceso de forma incondicional y lo pone en una cola asociada a la condición que espera » signal reanuda el primer proceso que espera en la señal » no hay memoria: si no espera nadie, la señal se pierde
– un proceso que espera una condición libera el monitor
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
23
Productor y consumidor (1) monitor Buffer is procedure Put(X: in Item); procedure Get(X: out Item); end Buffer; monitor body Buffer is
-- ¡ojo! no es Ada
-- ¡ojo! no es Ada
Size : constant Positive := 32; -- por ejemplo subtype Index is mod Size; subtype Count is Natural range 0..Size; type Store is array (Index) of Item Box First, Last Number Non_Full Non_Empty
STRL - Datos comunes - 01/10/2002
: : : : :
Store; Index := Index’First; Count := 0; Condition := True; -- ¡ojo! no es Ada Condition := False; -- ¡ojo! no es Ada
©2001-2002 Juan Antonio de la Puente
24
Productor y consumidor (2) procedure Put (X : in Item) is begin if Number = Size then Wait(Non_Full); end if; Box(Last) := X; Last := Last + 1; Number := Number + 1; Signal(Non_Empty); end Put; procedure Get (X : out Item) is begin if Number = 0 then Wait(Non_Empty); end if; X := Box(First); First := First + 1; Number := Number - 1; Signal(Non_Full); end Get; end Buffer;
STRL - Datos comunes - 01/10/2002
-- ¡ojo! no es Ada
-- ¡ojo! no es Ada
-- ¡ojo! no es Ada
-- ¡ojo! no es Ada
©2001-2002 Juan Antonio de la Puente
25
Problemas de los monitores
Las variables de condición son un mecanismo de bajo nivel
La semántica de signal presenta problemas: – Cuando un proceso hace signal puede haber dos procesos activos en el monitor – Hay varias formas de evitar que se viole la exclusión mutua » permitir signal solo si es la última instrucción de un subprograma » forzar una salida del monitor al hacer signal » suspender el proceso que hace signal si se reanuda otro proceso
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
26
Objetos protegidos en Ada
Combinación de monitores y regiones críticas condicionales Un objeto protegido es un objeto compuesto cuyas operaciones se ejecutan en exclusión mutua – se pueden declarar tipos protegidos u objetos protegidos únicos – en ambos casos hay especificación y cuerpo. » la especificación contiene la interfaz visible desde otras unidades de programa.
– los tipos y objetos protegidos son unidades de programa, pero no de compilación. » deben estar declarados en una unidad de compilación (paquete o subprograma).
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
27
Ejemplo: entero compartido (1) protected type Shared_Integer(Initial_Value : Integer) is function Value return Integer; procedure Change(New_Value : Integer); private Data : Integer := Initial_Value; end Shared_Integer;
Las operaciones (subprogramas) se declaran en la parte pública Los detalles de implementación del tipo van en la parte privada – solo son visibles en el cuerpo – no se pueden declarar tipos de datos
Es parecido a un registro Puede tener discriminantes – tienen que ser de tipos discretos o acceso
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
28
Ejemplo: entero compartido (2) protected body Shared_Integer is function Value return Integer is begin return Data; end Value; procedure Change(New_Value : Integer) is begin Data := New_Value; end Change; end Shared_Integer;
Los cuerpos de las operaciones van en el cuerpo del tipo protegido No se pueden declarar tipos ni objetos en el cuerpo
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
29
Ejemplo: entero compartido (3) declare X : Shared_Integer(0); Y : Shared_Integer(1); begin X.Change(Y.Value + 1); -- ahora X.Value es 2 end;
No hay cláusula use para los objetos protegidos Las operaciones deben ir siempre cualificadas con el nombre del objeto
©2001-2002 Juan Antonio de la Puente
STRL - Datos comunes - 01/10/2002
30
Diagramas de procesos
Se usan para representar la interacción entre tareas mediante objetos protegidos
T1 op1 op2
P
op3 T2
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
31
Subprogramas protegidos
Con los objetos protegidos solo se pueden efectuar operaciones protegidas – Un procedimiento protegido da acceso exclusivo en lectura y escritura a los datos privados. – Una función protegida da acceso concurrente en lectura sólo a los datos privados
Se pueden ejecutar concurrentemente varias llamadas a una función protegida, pero no a un procedimiento protegido, ni a ambos a la vez. El núcleo de ejecución realiza la exclusión mutua mediante mecanismos más primitivos – ¡ojo! una tarea que está intentando acceder a un objeto protegido no se considera suspendida » la operaciones protegidas son cortas y no se pueden suspender
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
32
Entradas protegidas y sincronización condicional
Una entrada es una operación protegida con una interfaz semejante a la de un un procedimiento entry E (...);
En el cuerpo se le asocia una barrera booleana entry E (...) when B is ...
– si la barrera es falsa cuando se invoca la operación, la tarea que llama se suspende en una cola de espera – cuando la barrera es verdadera, la tarea puede continuar
Las entradas se usan para realizar sincronización condicional
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
33
Ejemplo: productor y consumidor (1) -- tampón limitado Size : constant Positive := 10; -- por ejemplo type Index is mod Size; subtype Count is Natural range 0 .. Size; type Buffer_Store is array (Index) of Item; protected type Bounded_Buffer is entry Put(X : in Item); entry Get(X : out Item); private First : Index := Index’First; Last : Index := Index'Last; Number : Count := 0; Store : Buffer_Store; end Bounded_Buffer; Buffer : Bounded_Buffer;
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
34
Productor y consumidor (2) protected body Bounded_Buffer is entry Put (X : in Item) when Number < Size is begin Last := Last + 1; Store(Last) := X; Number := Number + 1; end Put; entry Get (X : out Item) when Number > 0 is begin X := Store(First); First := First + 1; Number := Number - 1; end Get; end Bounded_Buffer;
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
35
Productor y consumidor (3) procedure Producer_Consumer is task Producer; task Consumer; task body Producer is X : Item; begin loop Produce(X); Buffer.Put(X); end loop; end Producer; task body Consumer is X : Item; begin loop Buffer.Get(X); Consume(X); end loop; end Consumer; end Producer_Consumer;
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
36
Evaluación de las barreras
Las barreras se evalúan cuando – una tarea llama a una entrada y la barrera hace referencia a una variable que puede haber cambiado desde la última evaluación – una tarea termina la ejecución de un procedimiento o entrada y hay tareas esperando en entradas cuyas barreras hacen referencia a variables que pueden haber cambiado desde la última evaluación
No se deben usar variables globales en las barreras
La corrección de un programa no debe depender del momento en que se evalúan las barreras (se puede hacer con más frecuencia de lo indicado).
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
37
Ejemplo: control de recursos protected Resource_Control is entry Allocate; procedure Deallocate; private Free : Boolean := True; end Resource_Control; protected body Resource_Control is entry Allocate when Free is begin Free := False; end Allocate; procedure Deallocate is begin Free := True; end Deallocate; end Resource_Control;
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
38
Exclusión mutua y barreras
Las tareas esperando en barreras tienen preferencia sobre las que esperan acceder al objeto – de esta forma se evitan condiciones de carrera en la implementación
Este modelo se llama cáscara de huevo (eggshell)
tareas esperando entrar tareas esperando en barreras una tarea dentro como máximo
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
39
Restricciones
En el cuerpo de una operación protegida no se pueden ejecutar operaciones "potencialmente bloqueantes": – – – –
llamadas a entradas retardos creación o activación de tareas llamadas a subprogramas que contengan operaciones potencialmente bloqueantes
Tampoco puede haber llamadas al mismo objeto
El objetivo de estas restricciones es evitar que una tarea se quede suspendida indefinidamente en el acceso a un subprograma protegido
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
40
Ejemplo: radiado de mensajes (1)
protected type Broadcast is entry Receive (M : out Message); procedure Send (M : in Message); private New_Message : Message; Message_Arrived : Boolean := False; end Broadcast;
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
41
Radiado de mensajes (2) protected body Broadcast is entry Receive (M : out Message) when Message_Arrived is begin M := New_Message; if Receive'Count = 0 then -- ¡el último cierra! Message_Arrived := False; end if; end Receive; procedure Send (M : in Message) is begin if Receive'Count > 0 then Message_Arrived := True; New_Message := M; end if; end Send; end Broadcast;
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
42
Ejemplo: sucesos (1) package Events is type Event is limited private; procedure Wait (E : Event); procedure Signal (E : Event); private protected type Event is entry Wait; procedure Signal; private Occurred : Boolean := False; end Event; end Events;
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
43
Sucesos (2) package body Events is protected body Event is entry Wait when Occurred is begin if Wait'Count = 0 then Occurred := False; end if; end Wait; procedure Signal is begin if Wait’Count > 0 then Occurred := True; end if; end Signal; end Event;
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
44
Sucesos (3)
procedure Wait (E : Event) is begin E.Wait; end Wait; procedure Signal (E : Event) is begin E.Signal; end Signal; end Events;
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
45
Ejemplo: tarea esporádica with Events; use Events; ... Button_Pressed : Event; ... task body Sporadic is begin loop Wait (Button_Pressed); -- acción esporádica end loop; end Sporadic; task body Event_Handler is begin ... Signal (Button_Pressed); -- puede activar varias tareas ... end Event_Handler;
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
46
Objetos de suspensión
Proporcionan una funcionalidad similar cuando sólo hay una tarea que espera
package Ada.Synchronous_Task_Control is type Suspension_Object is limited private; procedure Set_True (S : in out Suspension_Object); procedure Set_False (S : in out Suspension_Object); function Current_State (S : Suspension_Object) return Boolean; procedure Suspend_Until_True (S : in out Suspension_Object); -- Raises Program_Error if more than one task tries to -- suspend on S at once -- Sets S to False private ... end Ada.Synchronous_Task_Control;
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
47
Ejemplo: tarea esporádica with Ada.Synchronous_Task_Control; use Ada.Synchronous_Task_Control; ... Button_Pressed : Suspension_Object; task body Sporadic is ... begin loop Suspend_Until_True (Button_Pressed); -- acción esporádica end loop; end Sporadic; task body Event_Handler is ... begin ... Set_To_True (Button_Pressed); ... end Event_Handler;
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
48
Sincronización en C/POSIX.1c
Hay dos mecanismos que permiten emular monitores con interfaz de procedimiento – Un mutex es una variable que proporciona exclusión mutua mediante dos operaciones, lock y unlock – una variable de condición proporciona sincronización condicional mediante dos operaciones, wait y signal
Ambos tipos de variables pueden tener atributos Otras operaciones: crear y destruir, espera temporizada
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
49
Definiciones /* pthreads.h */ typedef ... pthread_mutext_t; typedef ... pthread_cond_t; ... int pthread_mutex_lock (pthread_mutext_t *mutex); int pthread_mutex_unlock(pthread_mutex_t *mutex); int pthread_cond_wait(pthread_cond_t *cond , pthread_mutext_t *mutex); /* espera y libera el mutex */ int pthread_cond_signal(pthread_cond_t *cond); /* puede reanudar más de un thread */ ...
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
50
Ejemplo: productor y consumidor (1)
#include #define BUFF_SIZE 10 typedef struct { pthread_mutext_t mutex; pthread_cond_t buffer_non_full; pthread_cond_t buffer_non_empty; int count, first, last; int store[BUFF_SIZE]; } buffer_t;
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
51
Productor y consumidor (2) int put(int item, buffer_t *buffer) { pthread_mutex_lock(&buffer->mutex); while (buffer->count == BUFF_SIZE) pthread_cond_wait(&buffer->non_full, &buffer->mutex); buffer[last] = item; last = (last++)%BUFF_SIZE; count++; pthread_cond_signal(&buffer->non_empty); pthread_mutex_unlock(&buffer->mutex); return 0; } int get(int *item, buffer_t *buffer) { pthread_mutex_lock(&buffer->mutex); while (buffer->number == 0) pthread_cond_wait(&buffer->non_empty, &buffer->mutex); item = buffer[first]; first = (first++)% BUFF_SIZE; count--; pthread_cond_signal(&buffer->non_full); pthread_mutex_unlock(&buffer->mutex); return 0; } /* ¡ojo! hay que iniciar el mutex y las variables de condición */
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
52
Resumen
El acceso de dos o más tareas concurrentes a las variables comunes debe realizarse en exclusión mutua Otra forma de sincronización está ligada al cumplimento de una condición Algunos mecanismos que permiten conseguir ambas formas de sincronización son: – semáforos – regiones críticas condicionales – monitores
Los objetos protegidos reúnen las ventajas de las regiones críticas condicionales y los monitores Los mutex y las variables condicionales de POSIX proporcionan un mecanismo similar a los monitores
STRL - Datos comunes - 01/10/2002
©2001-2002 Juan Antonio de la Puente
53
dit UPM
Comunicación mediante mensajes Juan Antonio de la Puente DIT/UPM
Transparencias basadas en el capítulo 9 del libro de A. Burns y A. Wellings Real-Time Systems and Programming Languages, 3ª edición (2001)
Objetivos
Comprender los problemas relacionados con la comunicación entre procesos basada en el intercambio de mensajes
Estudiar la forma de realizar este tipo de comunicación en Ada y C/POSIX
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
1
Comunicación mediante mensajes
Las tareas se pueden comunicar y sincronizar mediante mensajes Esta forma de comunicación no necesita memoria común Se usan los mismos mecanismos para la sincronización y la comunicación Hay tres aspectos de interés: – Sincronización – Identificación del proceso emisor y receptor – Estructura de los mensajes
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
2
Diagramas de secuencia de mensajes
A
send
B
mensaje
STRL - Mensajes - 15/10/2002
Representan la interacción entre procesos mediante el intercambio de mensajes El tiempo va hacia abajo
receive
©2001-2002 Juan Antonio de la Puente
3
Sincronización en el envío de mensajes
El proceso receptor siempre espera si el mensaje no ha llegado todavía. Para el proceso emisor hay tres modelos básicos: – Comunicación asíncrona: el emisor continúa su ejecución – Comunicación síncrona (cita): el emisor espera a que el receptor reciba el mensaje – Invocación remota (cita extendida): el emisor espera a que el receptor reciba el mensaje, y la respuesta de éste
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
4
Comunicación asíncrona A
– capacidad potencialmente ilimitada – si es limitado puede bloquearse el emisor
B
send
Hace falta usar un tampón
mensaje
El emisor puede requerir un reconocimiento – diseño complicado
receive
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
5
Comunicación síncrona A
B
No hace falta tampón Se puede construir a partir de la comunicación asíncrona: A send(m); receive(ack);
send
B receive(m); send(ack);
suspendido mensaje
STRL - Mensajes - 15/10/2002
receive
©2001-2002 Juan Antonio de la Puente
6
Invocación remota
A
B
send
mensaje
suspendido
receive reply
STRL - Mensajes - 15/10/2002
No hace falta tampón Se puede construir a partir de la comunicación síncrona: A s_send(m);
B s_receive(m); preparar r s_receive(r); s_send(r);
©2001-2002 Juan Antonio de la Puente
7
Identificación del emisor y el receptor
Identificación directa o indirecta » directa: el emisor identifica explíctamente el receptor send mensaje to proceso
» indirecta: se utiliza un intermediario (buzón, canal, tubería, etc.) send mensaje to buzón
Simetría » Comunicación simétrica: el emisor identifica el receptor, y viceversa send mensaje to proceso (buzón) receive mensaje from proceso (buzón) » Comunicación asimétrica: el receptor acepta mensajes de cualquier emisor o buzón » Este tipo de comunicación es adecuado para realizar servidores
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
8
Estructura de los mensajes
Deberían poderse enviar objetos de cualquier tipo Es difícil de conseguir en un entorno distribuido – diferentes representaciones de tipos de datos – problemas con punteros
Se puede hacer con bibliotecas estándar de “aplanamiento” de tipos – convierten cualquier tipo en una secuencia de octetos
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
9
Índice
Comunicación mediante mensajes Comunicación entre tareas en Ada – cita extendida – espera selectiva – llamada selectiva
Comunicación entre threads en C/POSIX
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
10
Comunicación entre tareas en Ada
Se basa en un mecanismo de cita extendida – invocación remota directa y asimétrica
Una tarea puede recibir mensajes a través de entradas declaradas en su especificación – la especificación de una entrada es similar a la de un procedimiento – Ejemplo: task type Screen is entry Put (Char : Character; X,Y : Coordinate); end Screen; Display : Screen;
– otras tareas pueden llamar a la entrada Display.Put('A',50,24);
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
11
Entradas
Puede haber entradas homónimas, siempre que tengan distintos parámetros
Se pueden definir familias de entradas con un discriminante discreto
– También puede haber entradas homónimas con subprogramas type Channel is range 0..7; task Multiplexor is entry Get(Channel)(Data : Input_Data); end Multiplexor;
Puede haber entradas privadas task type Telephone_Operator is entry Directory_Enquiry (Person : in Name; Phone : out Number); entry Report_Fault (Phone : in Number); private entry Allocate_Repair_Worker (Id : out Worker_Id); end Telephone_Operator;
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
12
Llamada
Para llamar a una entrada hay que identificar la tarea receptora (no hay cláusula use) Display.Put('A',50,24); Multiplexor.Get(3)(X); Operator.Directory_Enquiry("Juan Pérez", No_de_Juan);
Se puede renombrar una entrada como un procedimiento procedure Enquiry (Person : in Name; Phone : out Number) renames Operator.Directory_Enquiry;
Si se llama a una entrada de una tarea que no está activa, se eleva la excepción Tasking_Error
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
13
Aceptación (1)
Para que se lleve a cabo una cita, la tarea receptora debe aceptar la llamada al punto de entrada correspondiente accept Put(Char : Character; X,Y : Coordinate) do -- escribir Char en la posición (X,Y) end Put; accept Get(3)(Data : Input_Data) do -- leer Data del canal 3 end Get;
– Debe haber al menos un accept por cada entrada (puede haber más) – El índice identifica cuál de las entradas de una familia se acepta » debe haber un accept para cada miembro de la familia
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
14
Aceptación (2)
Una instrucción accept se puede poner en cualquier lugar del cuerpo de una tarea – en particular, se puede poner dentro de otro accept (siempre que sea de distinta entrada) – no se pude poner en un procedimiento
El cuerpo del accept especifica las acciones que se ejecutan cuando se acepta la llamada – La secuencia de instrucciones puede incluir manejadores de excepciones
Si el cuerpo es nulo, se puede usar una forma simplificada: accept E;
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
15
Diagrama de procesos
T2.E
STRL - Mensajes - 15/10/2002
T1
E
T2
accept E
©2001-2002 Juan Antonio de la Puente
16
Ejecución de una cita extendida
Las dos tareas deben estar listas para realizar la comunicación. – la que llega primero a la cita se suspende hasta que la otra ejecuta la instrucción complementaria (llamada o aceptación)
Cuando las dos están listas – se pasan los parámetros de entrada a la tarea llamada – se ejecuta el cuerpo del accept – se copian los parámetros de salida al cliente
A continuación, las dos continúan su ejecución asíncronamente. Si varias tareas invocan el mismo punto de entrada de otra tarea, se colocan en una cola Una tarea que espera para poder realizar una cita permanece suspendida durante el tiempo que dura la espera
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
17
Sincronización (1)
A
B.E(X,Y)
B
X accept E(X : in T; Y : out T) Y := X; end E;
Y
©2001-2002 Juan Antonio de la Puente
STRL - Mensajes - 15/10/2002
do
18
Sincronización (2)
A
B
accept E(X : in T; Y : out T) X B.E(X,Y) Y
STRL - Mensajes - 15/10/2002
do Y := X; end E;
©2001-2002 Juan Antonio de la Puente
19
Excepciones en citas
Puede elevarse una excepción cuando se está ejecutando una cita – si hay un manejador en el cuerpo del accept, la cita termina normalmente – si la excepción no se maneja dentro del accept, » la cita termina inmediatamente » la excepción se vuelve a elevar en las dos tareas (puede ser anónima en la que llama)
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
20
Ejemplo accept Directory_Enquiry (Person : in Name; Phone : out Number) do Data_Base.Lookup (Person, Phone_Record); Phone := Phone_Record.Phone_Number; exception when Data_Base.Not_Found => Phone := No_Phone; end Directory_Enquiry;
– Si durante la ejecución de Lookup se produce la excepción Not_Found, se recupera el error dando un valor nulo al parámetro Phone y se termina la cita – El cliente y el servidor continúan normalmente – Si se produce cualquier otra excepción, la cita termina y la excepción se propaga en los dos, inmediatamente después de la llamada en el cliente, y de la aceptación en el servidor
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
21
Espera selectiva
A menudo no es posible prever en qué orden se van a invocar las distintas entradas de una tarea Esto ocurre cuando sobre todo en las tareas servidoras – Un servidor es una tarea que acepta llamadas a una o más entradas, y ejecuta un servicio para cada una de ellas – un cliente es una tarea que solicita servicios llamando a las entradas de un servidor – Los servidores no saben en qué orden les van a llamar los clientes » deben estar dispuestos a aceptar cualquier llamada cuando no están ocupados
Es necesario que una tarea pueda esperar simultáneamente llamadas en varias entradas
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
22
Aceptación selectiva en Ada
Es una estructuraa de control que permite la espera selectiva en varias alternativas select accept entrada_1 do -- alternativa_1 ... end entrada_1; [secuencia_de_instrucciones] or accept entrada_2 do -- alternativa 2 ... end entrada_2; [secuencia_de_instrucciones] or ... end select;
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
23
Ejemplo
task body Telephone_Operator is begin loop select accept Directory_Enquiry (Person : in Name; Phone : out Number) do -- buscar el número y asignar el valor a Phone end Directory_Enquiry; or accept Report_Fault (Phone : Number) do -- avisar al servicio de mantenimiento end Report_Fault; end select; end loop; end Telephone_Operator;
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
24
Alternativas guardadas
A veces es necesario que alguna de las alternativas de una selección se acepte sólo en determinadas condiciones. Se pueden poner guardas en las alternativas. Una guarda es una expresión booleana. when condición => alternativa
Las guardas se evalúan al ejecutar el select – Las alternativas cuyas guardas son verdaderas se tienen en cuenta para la selección. Se dice que estas alternativas están abiertas – Las alternativas cuyas guardas son falsas se ignoran. Se dice que estas alternativas están cerradas – Se considera un error que todas alternativas estén cerradas
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
25
Ejemplo
task body Telephone_Operator is begin loop select accept Directory_Enquiry(Person : in Name; Phone : out Number) do -- buscar el número y asignar el valor a Phone end Directory_Enquiry; or when Today in Weekday => accept Report_Fault (Phone : Number) do -- avisar al servicio de mantenimiento -- (sólo en días laborables) end Report_Fault; end select; end loop; end Telephone_Operator;
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
26
Selección condicional
Una instrucción select puede tener una parte final de la forma: select alternativa {or alternativa} else secuencia_de_instrucciones end select;
– La parte else se ejecuta si al llegar al select no se puede aceptar inmediatamente ninguna otra alternativa – No puede haber parte else y alternativas temporizadas en un mismo select – La parte else no es una alternativa y, por tanto, no puede estar guardada STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
27
Alternativa terminate
Una de las alternativas de un select puede tener la forma: terminate;
Esta alternativa se selecciona cuando – el tutor de la tarea ha completado su ejecución – todas las tareas que dependen del mismo dueño están terminadas o esperando en un select con una alternativa terminate » En este caso terminan todas ellas simultáneamente
Es conveniente que las tareas servidoras terminen así La alternativa terminate puede estar guardada Es incompatible con las alternativas temporizadas y con la parte else
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
28
Resumen de la aceptación selectiva
Se evalúan las guardas; sólo se consideran las alternativas abiertas (guardas verdaderas) – si todas las alternativas están cerradas se eleva Program_Error
Si hay llamadas en una o más alternativas abiertas, se elige una de forma indeterminista – se ejecuta el accept y la secuencia que le sigue, y termina el select
Si no hay llamadas pendientes – si hay parte else se ejecuta inmediatamente y se termina el select – si no, la tarea se suspende hasta que llegue una llamada a una de las alternativas abiertas – si hay alternativa terminate y ya no se pueden recibir más llamadas, termina la tarea
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
29
Llamada condicional
La llamada condicional permite que un cliente retire su petición si no es aceptada inmediatamente select llamada_a_entrada; [secuencia_de_instrucciones] else secuencia de instrucciones end select;
– Si la llamada no se acepta inmediatamente, se abandona y se ejecuta la parte else – Aquí tampoco puede haber más de una alternativa – Sólo se debe usar si la tarea puede realizar trabajo útil cuando no se acepta la llamada
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
30
Tareas y exclusión mutua
Una tarea sólo puede ejecutar una instrucción accept en un momento dado. – Los cuerpos de las instrucciones accept están en exclusión mutua – Esto asegura la integridad de los recursos de las tareas servidoras – Se puede usar para emular un objeto protegido en Ada 83
Ejemplo task type Server is -- gestiona un recurso global entry S1(...); -- servicio S1 entry S2(...); -- servicio S2 ... -- etc. end Server;
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
31
Esquema de servidor task body Server is -- estructura de datos del recurso begin loop select accept S1 (...) do ... end S1; or accept S2 (...) do ... end S2; ... or ... end select; ... end loop; end Server;
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
32
Mensajes en C/POSIX.1c
Las colas de mensajes permiten efectuar comunicación asíncrona, indirecta y simétrica entre threads o procesos Una cola de mensajes puede tener varios escritores y lectores Las colas tienen nombre Cada cola tiene un tampón asociado – si se llena, se bloquea el emisor (se puede anular) – el receptor se bloquea si el tampón está vacío – Si hay varios threads bloqueados se reanuda uno arbitrariamente » se puede especificar que se reanude el más prioritario
Hay más opciones, bastante complicadas
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
33
Definiciones
/* mqueue.h */ typedef ... mqd_t; struct mq_attr { long mq_flags; long mq_maxmsg; long mq_msgsize; long mq_curmsgs }
/* message queue descriptor */ /* /* /* /*
message queue flags */ maximum number of messsages */ maximum message size */ number of messages queued */
mqdt_t mq_open(const char *name, int oflag); int mq_close(mqd_t mqdes); int mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned int msg_prio); sssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned int *msg_prio);
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
34
Resumen
En Ada las tareas pueden comunicarse por medio de citas, según un modelo de clientes y servidores – Una tarea puede tener entradas, que se pueden llamar desde otras tareas – La tarea receptora debe aceptar la llamada para que se produzca la cita – La tarea que llama espera si la llamada todavía no se ha aceptado
La aceptación selectiva permite: – Esperar simultáneamente llamadas en varias entradas – Ejecutar acciones alternativas cuando no hay llamadas pendientes – Terminar la ejecución de un servidor cuando ya no es necesario
La llamada condicional permite evitar que una tarea se quede esperando la aceptación de una cita Las colas de mensajes de POSIX permiten efectuar comunicación asíncrona, indirecta y simétrica
STRL - Mensajes - 15/10/2002
©2001-2002 Juan Antonio de la Puente
35
dit dit UPM UPM
Sucesos asíncronos Juan Antonio de la Puente DIT/UPM
Transparencias basadas en el capítulo 10del libro de A. Burns y A. Wellings Real-Time Systems and Programming Languages, 3ª edición (2001)
Sucesos asíncronos
Un suceso asíncrono es una señal generada por un proceso que requiere atención por parte de otro proceso, independientemente de lo que esté haciendo Dos formas de continuar después de atender el suceso: – reanudación » ej.: señales de POSIX
– terminación » ej.: transferencia de control asíncrona en Ada
STRL - sucesos asíncronos - 15/10/2002
©2001-2002 Juan Antonio de la Puente
2
1
Aplicaciones
Recuperación de errores – cuando varios procesos colaboran la recuperación hay que hacerla conjuntamente
Cambios de modo – debidos a cambios en el entrono o a averías
Cómputo impreciso – se hace lo que se puede hasta que se agota el tiempo disponible
Interrupciones del operador – a veces hay que dejar lo que se está haciendo y empezar de nuevo o cambiar de modo
STRL - sucesos asíncronos - 15/10/2002
©2001-2002 Juan Antonio de la Puente
3
Señales en POSIX.1
Una señal representa un suceso asíncrono que afecta a uno o más procesos o threads
Una señal se puede producir o generar de varias formas, por ejemplo: – fallos de hardware – expiración de temporizadores – un acción explícita de otro proceso o thread, invocando la función kill u otra similar
STRL - sucesos asíncronos - 15/10/2002
©2001-2002 Juan Antonio de la Puente
4
2
Identificadores de señal
Cada tipo de señal se identifica mediante un número positivo Se definen constantes para dar nombres simbólicos a las señales Ejemplos: – SIGABRT – SIGALRM – SIGUSR1, SIGUSR2
STRL - sucesos asíncronos - 15/10/2002
Terminación anormal Temporizador Definidas por el usuario
©2001-2002 Juan Antonio de la Puente
5
Generación y entrega
Una señal se genera cuando ocurre el suceso que la produce Una señal se entrega cuando se produce la acción asociada en el proceso o thread: – Ignorar la señal – Ejecutar la acción por defecto asociada a la señal (normalmente terminar el proceso) – Manejar la señal mediante una función definida por el programador
STRL - sucesos asíncronos - 15/10/2002
©2001-2002 Juan Antonio de la Puente
6
3
Bloqueo de señales
Un proceso puede enmascarar o bloquear un tipo de señales – cada proceso o thread tiene una máscara que define las señales bloqueadas – la máscara se hereda inicialmente del padre
Una señal bloqueada se acepta cuando se invoca una función sigwait – esta función se define en POSIX.1b
©2001-2002 Juan Antonio de la Puente
STRL - sucesos asíncronos - 15/10/2002
7
Esquema general
ignorar
terminar entregar
fin manejar
generar
thread
pendiente
STRL - sucesos asíncronos - 15/10/2002
aceptación
©2001-2002 Juan Antonio de la Puente
8
4
Señales de tiempo real (POSIX.1b)
Tienen identificadores en el intervalo SIGRTMIN .. SIGRTMAX – como mínimo 32 señales
Las señales de tiempo real tienen propiedades especiales: – se encolan – se aceptan en orden de prioridad (número de señal) – tienen un campo adicional de información
Todas las señales se pueden aceptar de forma síncrona mediante la función sigwait – para ello deben estar enmascaradas (bloqueadas)
STRL - sucesos asíncronos - 15/10/2002
©2001-2002 Juan Antonio de la Puente
9
Señales y threads
Las señales generadas por un error de un thread se envían sólo a ese thread Las generadas por un suceso asíncrono (p.ej. E/S) se envían al proceso Las generadas por programa se pueden enviar a un thread o a todo un proceso Una señal generada para un thread en el que está bloqueda se queda pendiente hasta que se acepta con sigwait Una señal generada para un proceso que está bloqueada en todos los threads se envía a un solo thread de los que hacen sigwait en la señal
STRL - sucesos asíncronos - 15/10/2002
©2001-2002 Juan Antonio de la Puente
10
5
Conjuntos de señales
/* signal.h */ typedef ... sigset_t; int int int int int
sigemptyset sigfillset sigaddset sigdelset sigismember
(sigset_t *set); (sigset_t *set); (sigset_t *set, int signo); (sigset_t *set, int signo); (const sigset_t *set, int signo);
STRL - sucesos asíncronos - 15/10/2002
©2001-2002 Juan Antonio de la Puente
11
Bloqueo de señales /* signal.h */ int sigprocmask (int how, const sigset_t *set, sigset_t *oset); int pthread_sigmask (int how, const sigset_t *set, sigset_t *oset);
how: indica qué operación se hace: – SIG_BLOCK : – SIG_UNBLOCK: – SIG_SETMASK:
se bloquean las señales de set se desbloquean las señales de set se hace la máscara igual a set
oset: devuelve las señales que estaban bloqueadas antes set y oset pueden valer NULL
STRL - sucesos asíncronos - 15/10/2002
©2001-2002 Juan Antonio de la Puente
12
6
Envío y aceptación de señales /* signal.h */ int kill (pid_t pid, int sig); int pthread_kill (pthread_t thread, int sig);
/* signal.h */ int sigwait (const sigset_t *set, int *sig); int sigwaitinfo (const sigset_t *set, siginfo_t *siginfo); int sigtimedwait (const sigset_t *set, siginfo_t *siginfo, const struct timespec *timeout);
STRL - sucesos asíncronos - 15/10/2002
©2001-2002 Juan Antonio de la Puente
13
Ejemplo (1) /* thread que acepta SIGINT (^C) y escribe un mensaje */ #include #include void wait_sigint (void) { sigset_t set; int sig; int counter = 0; sigemptyset(&set); sigaddset(&set,SIGINT); pthread_sigmask(SIG_BLOCK, &set, NULL); /* bloquea SIGINT */ /* todos los demás threads deben bloquear también SIGINT */
STRL - sucesos asíncronos - 15/10/2002
©2001-2002 Juan Antonio de la Puente
14
7
Ejemplo (2) if (sigwait(&set, &sig) != 0) { /* error en sigwait */ pthread_exit( (void *)-1); } if (sig == SIGINT) { printf ("recibido SIGINT\n"); pthread_exit(0); } else { /* señal inesperada */ pthread_exit ((void *)-1); } }
STRL - sucesos asíncronos - 15/10/2002
©2001-2002 Juan Antonio de la Puente
15
Manejadores de señales /* signal.h */ struct sigaction { void (*)() sa_handler; sigset_t sa_mask; int sa_flags; void (*)(int, siginfo_t *, void *) sa_sigaction; } int sigaction (int sig, const struct sigaction *reaction, struct sigaction *old_reaction);
sa_handler puede ser SIG_DFL, SIG_IGN o un puntero a una función sa_sigaction se usa con señales de tiempo real
STRL - sucesos asíncronos - 15/10/2002
©2001-2002 Juan Antonio de la Puente
16
8
Transferencia de control asíncrona en Ada
Es una forma especial de select: select suceso; secuencia de instrucciones then abort secuencia de instrucciones end select;
El suceso puede ser – Una llamada a una entrada Objeto.Entrada (...); -- puede ser una llamada a una tarea
– Un retardo delay ...;
STRL - sucesos asíncronos - 15/10/2002
©2001-2002 Juan Antonio de la Puente
17
9
dit UPM
Tiempo real Juan Antonio de la Puente DIT/UPM
Transparencias basadas en el capítulo 12 del libro de A. Burns y A. Wellings Real-Time Systems and Programming Languages, 3ª edición (2001)
Tiempo real
Objetivo – Comprender el papel del tiempo en el diseño y realización de sistemas de tiempo real
Contenido: – – – – –
Sistemas de referencia de tiempo Relojes, retardos y límites temporales (time-outs) Requisitos temporales Ámbitos temporales Tolerancia de fallos
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
1
Necesidades
Acceso al tiempo real – leer el paso del tiempo en relojes – retrasar la ejecución de los procesos durante un tiempo – definir límites temporales para la ocurrencia de un suceso (time-outs)
Representación de los requisitos temporales – períodos de activación – plazos de ejecución
Análisis del cumplimiento de los requisitos temporales – lo veremos en el próximo tema
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
2
Tiempo universal
TU ó UT (Universal Time) – tiempo solar medio en el meridiano 0 (Greenwich) » definido en 1884 (entonces se llamaba GMT)
1 s = 1/86 400 de un día solar medio » definición oficial hasta 1955
Relativamente impreciso y difícil de determinar – la duración del día no es constante » pérdida de energía por las mareas » otros fenómenos irregulares
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
Sistemas de referencia de tiempo - 3
Tiempo de efemérides
Año trópico – tiempo transcurrido entre dos pasos de la Tierra por el punto γ 1s = 1/31 566 925,9747 del año trópico 1900 » definición oficial entre 1955 y 1967
Correcciones del tiempo universal (UT0) – UT1: UT0 corregido por el movimiento de los polos – UT2: UT1 corregido por variaciones en la rotación de la Tierra
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
Sistemas de referencia de tiempo - 4
Tiempo atómico
Los relojes atómicos proporcionan medidas estables y precisas 1 s = 9 192 631 770 períodos de la radiación correspondiente a la transición entre los dos niveles hiperfinos del estado fundamental del átomo de Cesio 133 en reposo a una temperatura de 0 K » definición oficial (SI) desde 1967 » precisión del orden de 10-13 (1 s en 300 000 años)
TAI (tiempo atómico internacional) – definido en 1970 – sincronizado con UT en 1958-01-01:00:00:00 » mantenido por una red coordinada por el BIPM (Bureau International de Poids et Mesures)
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
Sistemas de referencia de tiempo - 5
Tiempo universal coordinado
El TAI se aparta lentamente del UT » La duración del día solar medio va en aumento » En 2001, la diferencia es aproximadamente de 32 s
UTC (Universal Time Coordinated) – Definido en 1972 – UTC = TAI + H » H se elige de forma que |UT2 - UTC| ≤ 0,9 s
– Se añade un segundo intercalar al UTC cuando es necesario. » 30 de junio o 31 de diciembre a las 24:00 » Lo decide el IERS (International Earth Rotation Service)
– La hora oficial (TO u OT) en cada país se basa en el UTC » TO = UTC + Z + C
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
Sistemas de referencia de tiempo - 6
Segundos intercalares en el UTC
Desde 1972 se ha añadido un segundo intercalar al UTC 21 veces La adición de un segundo intercalar se puede producir el 1 de enero o el 1 de julio a las 0h – Se anuncia en el Boletín C del IERS http://hpiers.obspm.fr/eop-pc/
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
7
Diferencias entre UT, UTC y TAI
0,0000 -5,0000
UT-TAI (s)
-15,0000
UTC-TA I (s)
-10,0000
-25,0000
-20,0000
-30,0000 -35,0000 1960
1965
1970
1975
1980
1985
1990
1995
2000
2005
Año
©2001-2002 Juan Antonio de la Puente
STRL - 29/10/2002
Sistemas de referencia de tiempo - 8
El calendario
Calendarios antiguos: solares y lunares – año, mes, semana
Calendario juliano – 1 año = 365,25 días » un día adicional (año bisiesto) cada 4 años
Calendario gregoriano (1582) – 1 año = 365,2425 días » se suprimen 3 días cada 400 años » sólo los múltiplos de 100 que también lo son de 400 son bisiestos
– se mantiene un error de 1 día cada 2500 años, aproximadamente
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
Sistemas de referencia de tiempo - 9
Referencias de tiempo
El UTC es adecuado para la comunicación con personas Pero presenta saltos (segundos intercalares) que lo hacen inadecuado para medidas de tiempo precisas – peor todavía si consideramos el calendario y la hora oficial
EL TAI es una referencia más adecuada para controlar la ejecución de tareas de tiempo real Lo que hace falta es una referencia de tiempo – estable: sin variaciones grandes a lo largo del tiempo – exacta: diferencia con el TAI acotada » excepto una constante: puede tener una época (origen) cualquiera
– precisa: la diferencia entre dos lecturas sucesivas está acotada – monótona no decreciente: sin saltos hacia atrás
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
Sistemas de referencia de tiempo -10
Relojes
Los relojes son módulos de hardware y software que permiten medir el tiempo real. Pueden ser internos o externos Características importantes: – Características estáticas (representación del tiempo) » Resolución » Intervalo de valores
– Características dinámicas » Granularidad » Exactitud » Estabilidad variación o movimiento
STRL - 29/10/2002
1− ρ ≤
τ (t ′) − τ (t ) t′ −t
©2001-2002 Juan Antonio de la Puente
≤ 1+ ρ
Relojes - 11
Relojes en Ada
En Ada hay dos paquetes predefinidos que proporcionan funciones de reloj: Ada.Calendar – Define un tipo abstracto Time – La función Clock da un valor de tiempo para uso externo – Los intervalos de tiempo se representan con el tipo predefinido Duration
Ada.Real_Time – Define un tipo abstracto Time – La función Clock da un valor monótono, sin saltos – Los intervalos de tiempo se representan con el tipo abstracto Time_Span
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
Relojes en Ada- 12
Intervalos de tiempo
El tipo Duration representa intervalos de tiempo en segundos
Es un tipo de coma fija: type Duration is delta ... range ...; – Su resolución, Duration’Small, no debe ser mayor que 20ms (se recomienda que no sobrepase los 100µs) – El intervalo de valores debe comprender ±1 día (-86_400.0 .. +86_400.0)
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
Relojes en Ada- 13
Ada.Calendar (1) package Ada.Calendar is type Time is private; subtype subtype subtype subtype
Year_Number Month_Number Day_Number Day_Duration
is is is is
Integer Integer Integer Duration
range range range range
1901..2099; 1..12; 1..31; 0.0..86_400.0;
function Clock return Time; function function function function
Year (Date Month (Date Day (Date Seconds(Date
: : : :
procedure Split(Date Year Month Day Seconds
Time) Time) Time) Time)
return return return return
: : : : :
Time; Year_Number; Month_Number; Day_Number; Day_Duration);
in out out out out
Year_Number; Month_Number; Day_Number; Day_Duration;
©2001-2002 Juan Antonio de la Puente
STRL - 29/10/2002
Relojes en Ada- 14
Ada.Calendar (2) function Time_Of (Year : Year_Number; Month : Month_Number; Day : Day_Number; Seconds : Day_Duration := 0.0) return Time; function function function function
"+" "+" "-" "-"
(Left (Left (Left (Left
function function function function
"="
: : : :
(Left, (Left, (Left, (Left,
Time; Duration; Time; Time; Right Right Right Right
: : : :
Right Right Right Right
Time) Time) Time) Time)
: : : :
Duration) Time) Duration) Time)
return return return return
return return return return
Time; Time; Time; Duration;
Boolean; Boolean; Boolean; Boolean;
Time_Error : exception; end Ada.Calendar;
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
Relojes en Ada- 15
Comentarios a Ada.Calendar
Los valores del tipo Time combinan la fecha y la hora
La hora se da en segundos desde medianoche – cuando hay un segundo intercalar se llega a 86_400.0
El reloj se supone sincronizado con una referencia externa (UTC o TO) – los detalles se dejan para el entorno (SO)
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
Relojes en Ada- 16
Ejemplo
declare use Ada.Calendar; Start, Finish : Time; Interval : Duration; begin Start := Clock; -- instrucciones cuya duración se mide Finish := Clock; Interval := Finish - Start; end;
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
Relojes en Ada- 17
Ada.Real_Time (1) package Ada.Real_Time is type Time is Time_First : Time_Last : Time_Unit :
private; constant Time; constant Time; constant := -- real number;
type Time_Span is private; Time_Span_First : constant Time_Span_Last : constant Time_Span_Zero : constant Time_Span_Unit : constant
Time_Span; Time_Span; Time_Span; Time_Span;
Tick : constant Time_Span; function Clock return Time; function function function function
"+" "+" "-" "-"
(Left (Left (Left (Left
: : : :
function function function function
"="
(Left, (Left, (Left, (Left,
Time; Time_Span; Time; Time; Right Right Right Right
: : : :
Right Right Right Right
Time) Time) Time) Time)
: : : :
Time_Span) return Time; Time) return Time; Time_Span) return Time; Time) return Time_Span;
return return return return
Boolean; Boolean; Boolean; Boolean;
©2001-2002 Juan Antonio de la Puente
STRL - 29/10/2002
Relojes en Ada- 18
Ada.Real_Time (2) function "+" (Left, Right : Time_Span) return Time_Span; function "-" (Left, Right : Time_Span) return Time_Span; function "-" (Right : Time_Span) return Time_Span; function "*" (Left : Time_Span; Right : Integer) return Time_Span; function "*" (Left : Integer; Right : Time_Span)return Time_Span; 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;
function To_Duration (TS : Time_Span) function To_Time_Span (D : Duration)
return Duration; return Time_Span;
function Nanoseconds (NS : integer) function Microseconds (US : integer) function Milliseconds (MS : integer)
return Time_Span; return Time_Span; return Time_Span;
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
Relojes en Ada- 19
Ada.Real_Time (3)
type Seconds_Count is new Integer range ...; procedure Split (T : SC : TS : function Time_Of (SC return Time;
Time; out Seconds_Count; out Time_Span); : Seconds_Count; TS : Time_Span)
end Ada.Real_Time;
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
Relojes en Ada- 20
Comentarios sobre Ada.Real_Time (1)
El tipo Time representa valores de tiempo absolutos. – Un valor T de tipo Time representa un intervalo de duración [E + T ·Time_Unit, E + (T+1) · Time_Unit] » Time_Unit no debe ser mayor de 20ms.. » El valor de E no está definido
– El intervalo de valores del tipo Time debe alcanzar al menos 50 años desde el arranque del sistema.
El tipo Time_Span representa intervalos de tiempo. – Un valor S de tipo Time_Span representa un intervalo de duración igual a S · Time_Span_Unit . » Time_Span_Unit =Time_Unit » Duration’Small debe ser un múltiplo entero de Time_Span_Unit.
– El intervalo de valores del tipo Time_Span debe abarcar por lo menos -3600..+3600 s . STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
Relojes en Ada- 21
Comentarios sobre Ada.Real_Time (2)
La función Clock proporciona el tiempo absoluto transcurrido desde la época.
Tick es el valor medio del intervalo durante el cual el valor de Clock permanece constante. No debe ser mayor de 1ms – Se recomienda que el valor de Tick sea igual al de Time_Span_Unit, o un múltiplo exacto de éste.
El valor de Clock no debe disminuir en ningún momento (es decir, el reloj es monótono no decreciente).
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
Relojes en Ada- 22
Ejemplo
declare use Ada.Real_Time; Start, Finish : Time; Frame : Time_Span := Milliseconds(10); begin Start := Clock; -- instrucciones Finish := Clock; if Finish - Start > Frame then raise Time_Error; -- excepción definida por el programador end if; end;
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
Relojes en Ada- 23
Medida del tiempo de ejecución
Se usa una técnica de doble bucle Sólo es válido si la secuencia de instrucciones se ejecuta de una vez (sin ceder el procesador a otras tareas o al núcleo)
declare begin
end;
T0, T1, T2 : Ada.Real_Time.Time; Execution_Time : Ada.Real_Time.Time_Span; N : constant Positive := ...; 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;
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
Relojes en Ada- 24
Relojes en Java
Reloj de hora del día (Java) – java.lang.System.currentTimeMillis da el número de milisegundos transcurridos desde UT 1970-01-01:00:00 – java.util.Date usa este valor para dar la fecha y hora del día » muchos detalles complicados (por ejemplo, el mes va de 0 a 11)
Tipos de datos de alta resolución (RT Java) – representación del tiempo con resolución de 1 ns
Relojes y temporizadores (RT Java) – adecuados para sistemas de tiempo real
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
Relojes en Java -
25
Tiempo de alta resolución public abstract class HighResolutionTime implements java.lang.Comparable { ...} public class AbsoluteTime extends HighResolutionTime {...} public class RelativeTime extends HighResolutionTime {...} public class RationalTime extends RelativeTime {...}
Un valor de tiempo se compone de un número entero de milisegundos y un número entero de nanosegundos El tiempo absoluto se cuenta desde 1970-01-01:00:00:00 Un valor de tiempo racional representa un intervalo compuesto de subintervalos con una frecuencia determinada Las definiciones de estas clases contienen constructores, operaciones aritméticas y otras
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
Relojes en Java -
26
Relojes public abstract class Clock { public Clock(); public static Clock getRealtimeClock(); public abstract RelativeTime getResolution(); public AbsoluteTime getTime(); public abstract void setTime(AbsoluteTime time); public abstract void setResolution(RelativeTime resolution); }
Siempre hay disponible al menos un reloj de tiempo real Puede haber clases derivadas que definen relojes especializados
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
Relojes en Java -
27
Ejemplo
AbsoluteTime start, finish; RelativeTime interval; Clock clock = Clock.getRealtimeClock(); start = clock.getTime(); // secuencia de instrucciones finish = clock.getTime(); interval = finish.subtract(start);
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
Relojes en Ada- 28
Temporizadores public abstract class Timer extends AsyncEvent { protected Timer(HighResolutionTime t, Clock c, AsyncEventHandler handler); ... public void reschedule(HighResolutionTime time); public void start(); } public class OneShotTimer extends Timer {...} public class PeriodicTimer extends Timer {...}
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
29
Relojes en C / POSIX
Hay también dos tipos Reloj calendario (ANSI C) – Proporciona valores de tiempo con resolución de 1s
Relojes de tiempo real (POSIX) – Se pueden definir distintos relojes – Por lo menos debe haber uno denominado CLOCK_REALTIME – La resolución de la representación es de 1ns – La granularidad depende de la implementación » como máximo 20 ms
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
30
Reloj-calendario
Proporciona una medida de tiempo con resolución de 1s #include time_t time (time_t *tloc);
El tipo time_t representa un número entero de segundos El tiempo se mide desde las 0h UT del 1 de enero de 1970 Hay otras operaciones y otros tipos que facilitan el uso de unidades corrientes (año, mes, día, hora, ...)
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
31
Relojes de tiempo real en POSIX
El tiempo se representa mediante el tipo timespec struct timespec { time_t tv_sec; long tv_nsec }
/* segundos */ /* nanosegundos */
El tipo clockid_t sirve para identificar distintos relojes CLOCK_REALTIME es una constante de este tipo La resolución máxima del reloj es de 20ms Puede haber otros relojes
©2001-2002 Juan Antonio de la Puente
STRL - 29/10/2002
32
Operaciones con relojes
Leer la hora: #include int clock_gettime (clockid_t clockid, struct timespec *tp);
Poner en hora #include int clock_settime (clockid_t clockid, const struct timespec *tp);
Resolución del reloj #include int clock_getres (clockid_t clockid, struct timespec *res);
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
33
Índice Medida
del tiempo y relojes Retardos Límites temporales (time-outs) Requisitos temporales Tolerancia de fallos
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
34
Retardos
Un retardo suspende la ejecución de una tarea durante un cierto tiempo
Hay dos tipos – Retardo relativo: la ejecución se suspende durante un intervalo de tiempo relativo al instante actual – Retardo absoluto: la ejecución se suspende hasta que se llegue a un instante determinado de tiempo absoluto
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
35
Retardo relativo en Ada
En Ada hay una instrucción delay expresión;
que suspende la ejecución de la tarea que la invoca durante un intervalo de tiempo La expresión es de tipo Duration Una instrucción delay con argumento cero o negativo no produce ningún retardo
©2001-2002 Juan Antonio de la Puente
STRL - 29/10/2002
36
Retardo relativo en C/POSIX
La función unsigned int sleep (unsigned int seconds);
suspende el thread que la invoca durante un número entero de segundos La función #include int nanosleep (const struct timespec *rqtp, struct timespec *rmtp;)
permite especificar retardos con mayor precisión La duración del retardo es *rqtp
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
37
Retardo absoluto en Ada
La instrucción delay until expresión;
suspende la ejecución de la tarea que la invoca hasta que el valor del reloj sea igual al especificado por la expresión La expresión es de uno de estos tipos: – Ada.Calendar.Time – Ada.Real_Time.Time
Se usa el reloj correspondiente al tipo Time utilizado Si se especifica un tiempo anterior al valor actual del reloj, no se produce ningún retardo
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
38
Aproximación con retardo relativo
La instrucción delay until T;
se puede aproximar mediante delay (T - Clock);
pero el efecto no es exactamente el mismo La expresión (T - Clock) tendría que ejecutarse de forma atómica
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
39
Retardos en RT Java
En Java hay un método sleep con características similares al sleep de Posix
En RT Java hay un sleep de alta resolución (definido en la clase RealtimeThread) public static void sleep (HighResolutionTime time) throws Interrupted Exception;
El retardo puede ser absoluto o relativo, según la clase a la que pertenezca el parámetro time
©2001-2002 Juan Antonio de la Puente
STRL - 29/10/2002
40
Ejecución de un retardo el retardo termina aquí
instrucción de retardo
retardo especificado
STRL - 29/10/2002
error de interrupción granularidad inhibida preparado
©2001-2002 Juan Antonio de la Puente
ejecución
41
Índice Medida
del tiempo y relojes Retardos Límites temporales (time-outs) Requisitos temporales Tolerancia de fallos
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
42
Limitación del tiempo de espera
A menudo conviene limitar el tiempo durante el cual se espera que ocurra un suceso Ejemplos: – Acceso a una sección crítica: La espera está limitada por la duración de la sección crítica – Sincronización condicional » Ada: Llamada a una entrada protegida con barreras » POSIX: Espera en variable de condición o un semáforo
– Cita entre dos tareas – Ejecución de una acción
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
43
Ejemplo task Controller is entry Call (T : Temperature); end Controller; task body Controller is -- declaraciones begin loop accept Call (T : Temperature) do New_Temp := T; end Call; -- otras acciones end loop; end Controller;
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
44
Aceptación temporizada
Se puede especificar una acción alternativa en caso de que la llamada no se reciba dentro de un cierto intervalo mediante una aceptación temporizada: select accept Call (T : Temperature) do New_Temp := T; end Call; or delay 10.0; -- acción alternativa end select;
El retardo puede ser también absoluto
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
45
Llamada temporizada
Se puede limitar el tiempo que tarda en aceptarse la llamada mediante una llamada temporizada loop -- leer el nuevo valor de T select Controller.Call(T); or delay 0.5; -- acción alternativa end select; end loop;
Aquí también puede usarse un retardo absoluto
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
46
Llamada condicional
Se usa cuando se quiere ejecutar una acción alternativa si la llamada no se acepta inmediatamente select Controller.Call(T); else -- acción alternativa end select;
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
47
Entradas protegidas
La llamada temporizada se puede usar para limitar el tiempo de espera en una entrada protegida select P.E(...); -- P es un objeto protegido or delay 0.5; end select;
También se pueden hacer llamadas condicionales a entradas protegidas
©2001-2002 Juan Antonio de la Puente
STRL - 29/10/2002
48
Acciones temporizadas
Se puede usar una transferencia asíncrona de control (ATC) para limitar el tiempo de ejecución de una acción: select delay 0.1; then abort -- acción end select;
Es útil para detectar y recuperar fallos
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
49
Aplicación al cómputo impreciso
Se trata de ejecutar rápidamente un parte obligatoria de un cálculo, y de iterar sobre una parte opcional que mejora el resultado mientras haya tiempo begin -- parte obligatoria select delay until Completion_Time; then abort loop -- mejorar el resultado end loop; end select; end;
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
50
Espera temporizada en C/POSIX (1)
La función #include int pthread_cond_timedwait (pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime);
permite limitar el tiempo durante el cual se espera una condición El límite es absoluto y su valor es *abstime
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
51
Espera temporizada en C/POSIX (2)
Para limitar el tiempo de espera de una señal se usa #include int sigtimedwait (const sigset_t *set, siginfo_t *info, const struct timespec *timeout);
Aquí timeout es un intervalo de tiempo relativo
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
52
Temporizadores en POSIX
Se pueden crear temporizadores asociados a relojes Cada temporizador se identifica mediante un valor del tipo timer_t El tiempo de espera se especifica mediante un valor de tipo itimerspec: struct itimerspec { struct timespec it_interval; /* período */ struct timespec it_value} /* expiración */
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
53
Creación y destrucción de temporizadores
La función #include #include int timer_create (clockid_t clock_id, struct sigevent *evp, timer_t *timerid);
crea un temporizador asociado al reloj clock_id – *evp indica el tipo de notificación que se produce al expirar el temporizador – el identificador del temporizador se devuelve en *timer_id
Se puede destruir un temporizador con int timer_delete (timer_t timerid);
©2001-2002 Juan Antonio de la Puente
STRL - 29/10/2002
54
Armar un temporizador
Se usa la función int timer_settime (timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue);
La temporización puede ser relativa o absoluta, según el valor de flag El funcionamiento se repite periódicamente si value.it_period > 0 En *ovalue se devuelve el valor que quedaba de la temporización anterior
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
55
Índice Medida
del tiempo y relojes Retardos Límites temporales (time-outs) Requisitos temporales Tolerancia de fallos
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
56
Requisitos temporales Hay dos formas de enfocar este tema: Métodos formales: – Especificar las propiedades temporales con un modelo formal – Validar la especificación – Comprobar que la implementación satisface las propiedades temporales
Métodos analíticos: – Analizar las propiedades temporales desde el punto de vista de la planificación de las tareas
Seguiremos en detalle este último enfoque
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
57
Atributos temporales
Los atributos temporales de una secuencia de instrucciones definen un marco temporal para su ejecución
suceso de activación tiempo de respuesta R latencia c1
c2
tiempo de cómputo C = c1 + c2
tr
tf
©2001-2002 Juan Antonio de la Puente
STRL - 29/10/2002
58
Parámetros temporales
Parámetros D
Plazo de respuesta (R ≤ D)
L Jmin Jmax C
Tiempo límite (tf ≤ L) Latencia mínima Latencia máxima Tiempo de cómputo máximo
T O
Período Fase Irregular, a ráfagas, estocástica Separación mínima
Activación – Periódica – Aperiódica – Esporádica
STRL - 29/10/2002
T
©2001-2002 Juan Antonio de la Puente
59
Requisitos temporales de tareas
Los marcos temporales suelen ir asociados a tareas o procesos Generalmente se trata de – Ejecutar tareas periódicas – Ejecutar tareas esporádicas cuando ocurren los sucesos correspondientes – Completar la ejecución de todas las tareas dentro de su plazo de respuesta
A veces se exige que la entrada o salida de una tarea se efectúe a intervalos regulares La desviación se llama variación o jitter
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
60
Criticidad Una tarea de tiempo real puede ser Crítica (hard) : No se puede admitir que se sobrepase el plazo de respuesta especificado ni una sola vez Acrítica (soft) : Es admisible que se sobrepase el plazo ocasionalmente Firme (firm) : El plazo no es crítico, pero una respuesta tardía no sirve para nada Interactiva : No se especifican plazos de respuesta, sino tiempos de respuesta medios
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
61
Tareas periódicas en Ada Se construyen con un retardo absoluto: use Ada.Real_Time; task body Periodic is Period : constant Time_Span := ...; Next_Time : Time := ...; begin -- iniciación loop delay until Next_Time; -- acción periódica Next_Time := Next_Time + Period; end loop; end Periodic;
©2001-2002 Juan Antonio de la Puente
STRL - 29/10/2002
62
Ejecución de una tarea periódica
instante inicial delay until 0 delay until 100
delay until 200
40ms
delay until 300
60ms
75ms
t 0
STRL - 29/10/2002
60
100
140
200 225
©2001-2002 Juan Antonio de la Puente
300
63
Tarea periódica con límite de tiempo use Ada.Real_Time; task body Periodic is Period : constant Time_Span := ...; Budget : constant Time_span := ...; Next_Time, Limit : Time := ...; Overrun : exception; begin -- iniciación loop delay until Next_Time; Limit := Clock + Budget; select delay until Limit; raise Overrun; then abort -- acción periódica end select; Next_Time := Next_Time + Period; end loop; exception when Overrun => ...; end Periodic;
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
64
Tareas esporádicas en Ada (1) El suceso de activación se implementa mediante un objeto protegido protected type Event is procedure Signal; entry Wait; private Occurred : Boolean := False; end Event;
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
65
Tareas esporádicas en Ada (2) protected body Event is procedure Signal is begin Occurred := True; end Signal; entry Wait when Occurred is begin Occurred := False; end Wait; end Event;
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
66
Tareas esporádicas en Ada (3) La tarea esporádica se activa cuando ocurre el suceso:
Activation : Event; task body Sporadic is begin -- iniciación loop Activation.Wait; -- acción esporádica end loop; end Sporadic;
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
67
Separación mínima (1)
use Ada.Real_Time.Time; ... protected type Event is procedure Signal; entry Wait (Event_Time : out Time); private Occurred : Boolean := False; Occurrence_Time : Time; end Event;
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
68
Separación mínima (2)
protected body Event is procedure Signal is begin Occurred := True; Occurrence_Time := Clock; end Signal; entry Wait (Event_Time : out Time) when Occurred is begin Occurred := False; Event_Time := Occurrence_Time; end Wait; end Event;
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
69
Separación mínima (3)
Activation : Event; task body Sporadic is Separation : Time_Span; Next_Time, Activation_Time : Time; begin -- iniciación loop Activation.Wait (Activation_Time); Next_Time := Activation_Time + Separation; -- acción esporádica delay until Next_Time; end loop; end Sporadic;
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
70
Tareas periódicas en C/POSIX (1)
Se pueden realizar con temporizadores #include #include #include void * periodic { struct timespec period; struct itimerspec timer_parameters; timer_t timer_id; struct sigevent event; sigset signals; int t_signal, r_signal;
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
71
Tareas periódicas en C/POSIX (2)
Iniciación de datos y creación del temporizador period.tv_sec = ...; period.tv_nsec = ...; timer_parameters.it_interval = period; timer_parameters.it_value = period; t_signal = ...; event.sigev_notify = SIGEV_SIGNAL; event.sigevent_signo = t_signal; sigemptyset (&signals); sigaddset (&signals, t_signal); pthread_sigmask (SIG_BLOCK, &signals, NULL); timer_create (CLOCK_REALTIME, event, &timer_id); timer_settime(timer_id,0,&timer_parameters,NULL);
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
72
Tareas periódicas en C/POSIX (3) Parte cíclica del thread periódico while (1) { sigwait (&signals, &r_signal); /* acción periódica */ } }
/* end periodic */
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
73
Tareas periódicas en C/POSIX (4)
main () { pthread_t periodic_id; pthread_attr_t periodic_attr; sigset_t signals; int t_signal; t_signal = ...; /* ¡la misma de antes! */ sigemptyset (&signals); sigaddset (&signals, t_signal; pthread_sigmask (SIG_BLOCK, &signals, NULL); pthread_attr_init (&periodic_attr); pthread_create (&periodic_id, &periodic_attr, periodic, NULL); pthread_join (&periodic_id); }
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
74
Tareas de tiempo real en RT
Objetos que implementan la interfaz Schedulable
Para cada objeto se especifica: – requisitos de memoria, con la clase MemoryParameters – requisitos de planificación, con la clase ScheduingParameters – requisitos de tiempo con la clase ReleaseParameters y sus extensiones (para tareas periódicas y esporádicas)
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
75
Release Parameters public abstract class ReleaseParameters { protected ReleaseParameters( RelativeTime cost, RelativeTime deadline, AsyncEventHandler overrunHandler, AsyncEventHandler missHandler); public RelativeTime getCost(); public AsyncEventHandler getCostOverrunHandler(); public RelativeTime getDeadline(); public AsyncEventHandler getDeadlineMissHandler(); public void setCost(RelativeTime cost); public void setCostOverrunHandler(AsyncEventHandler handler); public void setDeadline(RelativeTime deadline); public void setDeadlineMissHandler(AsyncEventHandler handler); }
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
76
Parámetros temporales
Un objeto puede tener asociados: – un coste (tiempo de ejecución máximo) – un plazo
Si el objeto está en ejecución y se sobrepasa el coste o el plazo, se ejecutan los manejadores asociados – no se exige que el núcleo vigile el tiempo de ejecución – pero sí que se detecten los fallos de plazo – no está bien definido cómo se ejecutan las hebras esporádicas y aperiódicas – se puede especificar un manejador nulo si no se quiere hacer nada cuando se pierde un plazo
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
77
Periodic Parameters public class PeriodicParameters extends ReleaseParameters { public PeriodicParameters( HighResolutionTime start, RelativeTime period, RelativeTime cost, RelativeTime deadline, AsyncEventHandler overrunHandler, AsyncEventHandler missHandler);
}
public public public public
STRL - 29/10/2002
RelativeTime getPeriod(); HighResolutionTime getStart(); void setPeriod(RelativeTime period); void setStart(HighResolutionTime start);
©2001-2002 Juan Antonio de la Puente
78
Aperiodic & Sporadic Parameters public class AperiodicParameters extends ReleaseParameters { public AperiodicParameters( RelativeTime cost, RelativeTime deadline, AsyncEventHandler overrunHandler, AsyncEventHandler missHandler); } public class SporadicParameters extends AperiodicParameters { public SporadicParameters( RelativeTime minInterarrival, RelativeTime cost, RelativeTime deadline, AsyncEventHandler overrunHandler, AsyncEventHandler missHandler);
}
public RelativeTime getMinimumInterarrival(); public void setMinimumInterarrival(RelativeTime minimum);
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
79
Real-Time Threads (resumen) public class RealtimeThread extends java.lang.Thread implements Schedulable { public RealtimeThread(SchedulingParameters s, ReleaseParameters r); ... // methods for implementing the Schedulable interface public synchronized void addToFeasibility(); ... public static RealtimeThread currentRealtimeThread(); public synchronized void schedulePeriodic(); // add the thread to the list of schedulable objects public synchronized void deschedulePeriodic(); // remove the thread from the list of schedulable object // when it next issues a waitForNextPeriod public boolean waitForNextPeriod() throws ...; public synchronized void interrupt(); // overrides java.lang.Thread.interrupt()
}
public static void sleep(Clock c, HighResolutionTime time) throws ...;
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
80
Tarea periódica public class Periodic extends RealtimeThread { public Periodic( PriorityParameters PP, PeriodicParameters P) { ... }; public void run() { while(true) { // code to be run each period ... waitForNextPeriod(); } } } STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
81
Tarea periódica (continuación) { AbsoluteTime A = new AbsoluteTime(...); PeriodicParameters P = new PeriodicParameters( A, // start new RelativeTime(10,0), // period new RelativeTime(1,0), // cost new RelativeTime(5,0), // deadline null, null ); // handlers PriorityParameters PP = new PriorityParameters(...); Periodic ourThread = new Periodic(PP, P); //create thread ourThread.start();
// release it
} STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
82
Fallos temporales Una tarea puede incumplir su plazo por varias razones, por ejemplo: El tiempo de cómputo no está bien calculado El análisis de tiempos de respuesta no es realista Las herramientas de análisis contienen errores No se cumplen las hipótesis de diseño (por ejemplo, separación mínima entre eventos) En estos casos hay que detectar los fallos Si el sistema es crítico, debe recuperarse
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
83
Detección de fallos temporales
Fallos que se refieren al tiempo transcurrido (por ejemplo, incumplimiento de plazo) : – Transferencia de control temporizada (Ada) – Temporizador con manejador de señal (POSIX)
Fallos que se refieren al tiempo de cómputo – Hace falta un reloj de tiempo de cómputo – No es estándar en Ada ni en POSIX – Hay soluciones particulares en algunos sistemas operativos
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
84
Recuperación de fallos
Se aplican esquemas de recuperación directa o inversa Esquema: Grupos de recuperación – Generalmente varias tareas cooperan para conseguir una funcionalidad común – Grupo de recuperación: Conjunto de tareas primarias con una tarea de recuperación común – Cuando hay un fallo se terminan todas las tareas primarias y se arranca la tarea de recuperación – Esta proporciona una funcionalidad degradada – Si falla otra vez, se activa una tarea de recuperación global del sistema
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
85
Resumen
Hay cuatro aspectos importantes relacionados con el tratamiento del tiempo – – – –
medida del tiempo mediante relojes retardos limitación del tiempo de espera especificación de requisitos temporales
Los atributos más importantes de un marco temporal (generalmente asociado a una tarea) son: – – – –
esquema de activación (periódico, esporádico) plazo de terminación latencia de activación tiempo de cómputo máximo
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
86
Índice Medida
del tiempo y relojes Retardos Límites temporales (time-outs) Requisitos temporales Tolerancia de fallos
STRL - 29/10/2002
©2001-2002 Juan Antonio de la Puente
87
dit UPM
Esquemas de tareas de tiempo real Juan Antonio de la Puente DIT/UPM
Objetivos
Reconocer un conjunto de esquemas básicos para construir sistemas de tiempo real – – – –
Tareas periódicas Tareas esporádicas Recursos compartidos Sincronización
Veremos esquemas basados en HRT-HOOD – También algunos esquemas más generales
STRL - 29/10/2002
©2001 Juan Antonio de la Puente
1
HRT-HOOD
Un sistema de tiempo real se representa mediante un conjunto de objetos – Objetos no terminales: se descomponen en otros más simples – Objetos terminales: no se pueden descomponer más
Un objeto se caracteriza por sus: – Operaciones: que pueden invocar otros objetos (modelo de llamada a procedimiento) – Comportamiento » Activo (cíclico, esporádico) / pasivo / protegido » Restricciones en las operaciones Sincronización Estado
©2001 Juan Antonio de la Puente
STRL - 29/10/2002
2
Objetos y relaciones
C
op1
El objeto parent contiene los objetos child_1 y child_2
parent
A
child_1
datos
uncle
op
op2
excepción Pr PSER
op
child_2
parent usa uncle child_1 usa child_2 y uncle child_1.op implementa parent.op1 child_2.op implementa parent.op2 child_2.op tiene una restricción de sincronización
STRL - 29/10/2002
©2001 Juan Antonio de la Puente
3
Objeto cíclico
C
Name
Name
thread
STRL - 29/10/2002
©2001 Juan Antonio de la Puente
4
Objeto cíclico: realización with Ada.Real_Time; use Ada.Real_Time; with System; use System; package Name is Start_Time : Time := ... ; Period : Time_Span := ... ; Thread_Priority : Priority := ... ; pragma Elaborate_Body (Name); end Name;
No hay operaciones visibles – Elaborate_Body indica que el paquete tiene cuerpo Atributos temporales – Start_Time – Period – Thread_Priority No se detecta si se excede el plazo de ejecución o el tiempo de cómputo STRL - 29/10/2002
with Ada.Real_Time; use Ada.Real_Time; -- other context clauses package body Name is task Thread is pragma Priority (Thread_Priority); end Thread; task body Thread is Next_Time : Time := Start_Time ; begin -- thread initialization loop delay until Next_Time; Periodic_Action; Next_Time := Next_Time + Period; end loop; end Thread; begin -- package initialization end Name;
©2001 Juan Antonio de la Puente
5
Objeto esporádico Name
S
Name
thread Start
START
Wait_Start
Start
Control
©2001 Juan Antonio de la Puente
STRL - 29/10/2002
6
Objeto esporádico: realización with System; use System; package Name is Thread_Priority : Priority
:= ... ;
task Thread is pragma Priority (Thread_Priority); end Thread;
procedure Start; end Name;
Control : Suspension_Object;
La única operación visible es Start
No se vigila el cumplimiento de la separación mínima entre sucesos No se detecta si se excede el plazo de ejecución o el tiempo de cómputo
STRL - 29/10/2002
with Ada.Synchronous_Task_Control; use Ada.Synchronous_Task_Control; -- other context clauses package body Name is
task body Thread is begin -- thread initialization loop Suspend_Until_True(Control); Sporadic_Action; end loop; end Thread; procedure Start is begin Set_True (Control); end Start; begin -- package initialization end Name;
©2001 Juan Antonio de la Puente
7
Objeto esporádico: Sincronización con objeto protegido (1) private
with System; use System; package Name is Thread_Priority : Priority Control_Priority: Priority
:= ... ; := ... ;
procedure Start;
protected Control is pragma Priority (Control_Priority); procedure Start; entry Wait_Start; private Started : Boolean := False; end Control; procedure Start renames Control.Start; end Name;
El objeto de sincronización se sustituye por un objeto protegido Funcionalmente es equivalente, aunque menos eficiente Es fácil de extender para tener en cuenta la separación mínima entre sucesos Permite poner parámetros en las operaciones
STRL - 29/10/2002
©2001 Juan Antonio de la Puente
8
Objeto esporádico: Sincronización con objeto protegido (2) with System; use System; package body Name is task Thread is pragma Priority (Thread_Priority); end Thread; task body Thread is begin -- thread initialization loop Control.Wait_Start; Sporadic_Action; end loop; end Thread;
STRL - 29/10/2002
protected body Control is procedure Start is begin Started := True; end Start; entry Wait_Start when Started is begin Started := False; end Wait_Start; end Control; begin -- package initialization end Name;
©2001 Juan Antonio de la Puente
9
Objeto esporádico: Separación mínima (1) private
with Ada.Real_Time; use Ada.Real_Time; with System; use System; package Name is
protected Control is pragma Priority (Control_Priority); procedure Start; entry Wait_Start (Start_Time : out Time); private Started : Boolean := False; Event_Time : Time; end Control;
Separation : Time_Span := ... ; Thread_Priority : Priority := ... ; Control_Priority: Priority := ... ; procedure Start;
procedure Start renames Control.Start; end Name;
El objeto Control registra el tiempo en que se hace Start (no es necesariamente el mismo en que se ejecuta la acción esporádica)
STRL - 29/10/2002
©2001 Juan Antonio de la Puente
10
Objeto esporádico: Separación mínima (2) protected body Control is procedure Start is begin Started := True; Event_Time := Ada.Real_Time.Clock; end Start;
with Ada.Real_Time; use Ada.Real_Time; with System; use System; package body Name is task Thread is pragma Priority (Thread_Priority); end Thread; task body Thread is Start_Time : Time; begin -- thread initialization loop Control.Wait_Start(Start_Time); Sporadic_Action; delay until Start_Time + Separation; end loop; end Thread;
entry Wait_Start (Start_Time : out Time) when Started is begin Started := False; Start_Time := Event_Time; end Wait_Start; end Control; begin -- package initialization end Name;
Inconveniente: dos cambios de contexto –
si se está seguro de la separación mínima es mejor el esquema anterior
STRL - 29/10/2002
©2001 Juan Antonio de la Puente
11
Objeto protegido
Name Pr
Name Op1
Op1 Op2 ...
Op2
Control
...
©2001 Juan Antonio de la Puente
STRL - 29/10/2002
12
Objeto pasivo
Name Pa
Name Op1
Op1 Op2 ...
STRL - 29/10/2002
Op2 ...
©2001 Juan Antonio de la Puente
13
Ejemplo: control de una bomba de agua operador arranca/para
bomba
Sistema de control
motor
nivel alto nivel bajo
arqueta
©2001 Juan Antonio de la Puente
STRL - 29/10/2002
14
Diseño con HRT-HOOD (1) A
Pump controller
Motor
Pr set pump
A HL Water sensor high sensor low sensor
set pump
Motor Hw
STRL - 29/10/2002
©2001 Juan Antonio de la Puente
15
Diseño con HRT-HOOD (2) A
High Low Water Sensor Pr
HLW controller
sensor high IH sensor low IH high sensor low sensor S
HLW handler start
STRL - 29/10/2002
©2001 Juan Antonio de la Puente
motor
16
Realización: Motor (1) package Motor is -- protected object type Pump_Status is (On, Off); procedure Set_Pump (To : Pump_Status); end Motor;
with Motor.HW; package body Motor is -- protected object protected Control is procedure Set_Pump (To : Pump_Status); private Motor_Status : Pump_Status := Off; end Control; procedure Set_Pump (To : Pump_Status) is begin Control.Set_Pump (To); end Set_Pump
STRL - 29/10/2002
©2001 Juan Antonio de la Puente
17
Realización: Motor (2) protected body Control is procedure Set_Pump (To : Pump_Status) is begin case To is when On => Motor.HW.Start; Control.Motor_Status := On; when Off => Motor.HW.Stop; Control.Motor_Status := Off; end case; end Set_Pump; end Control; end Motor;
STRL - 29/10/2002
©2001 Juan Antonio de la Puente
18
Realización: HLW Controller (1) package HLW_Controller is -- protected object procedure Sensor_High_IH; procedure Sensor_Low_IH; end HLW_Controller;
with HLW_Handler; ... package body HLW_Controller is -- protected object protected Control is procedure Sensor_High_IH; procedure Sensor_Low_IH; -- we will see later how to attach these procedures -- to interrupt sources end Control;
STRL - 29/10/2002
©2001 Juan Antonio de la Puente
19
Realización: HLW Controller (2)
protected body Control is procedure Sensor_High_IH is begin HLW_Handler.Start (High); end Sensor_High_IH; procedure Sensor_Low_IH is begin HLW_Handler.Start (Low); end Sensor_Low_IH; end Control; end HLW_Controller ;
©2001 Juan Antonio de la Puente
STRL - 29/10/2002
20
Realización: HLW Handler (1) package HLW_Handler is -- sporadic object type Water_Mark is (High,Low); procedure Start (Level : Water_Mark); end HLW_Handler;
package body HLW_Handler is -- sporadic object procedure Sporadic_Code (Level : Water_Mark) is begin case Level is when High => Motor.Set_Pump(On); when Low => Motor.Set_Pump(Off); end case; end Sporadic_Code; task Thread;
STRL - 29/10/2002
©2001 Juan Antonio de la Puente
21
Realización: HLW Handler (2) protected Control is procedure Start (Level : Water_Mark); entry Wait_Start (Level : out Water_Mark); private Started : Boolean := False; Water : Water_Mark; end Control; task body Thread is Level : Water_Mark; begin loop Control.Wait_Start(Level); Sporadic_Code(Level); end loop; end Thread;
©2001 Juan Antonio de la Puente
STRL - 29/10/2002
22
Realización: HLW Handler (3) protected body Control is procedure Start (Level : begin Water := Level; Started := True; end Start;
Water_Mark) is
entry Wait_Start (Level : out Water_Mark) when Started is begin Level := Water; Started := False; end Wait_Start; end Control; end HLW_Handler;
STRL - 29/10/2002
©2001 Juan Antonio de la Puente
23
Realización: procedimiento principal with Motor, HLW_Controller, HLW_Handler; procedure Pump_Control_System is begin null; end Pump_Control_System;
¡El procedimiento principal no hace nada! La tarea de entorno elabora los paquetes – al elaborar HLW_Handler arranca la tarea esporádica
y luego llama al procedimiento principal ¡Una tarea de Ada no termina hasta que han terminado todos sus descendientes! – la tarea de entorno espera que termine la tarea esporádica STRL - 29/10/2002
©2001 Juan Antonio de la Puente
24
dit
UPM
Planificación de tareas Juan Antonio de la Puente DIT/UPM
Transparencias basadas en el capítulo 13 del libro de A. Burns y A. Wellings Real-Time Systems and Programming Languages, 3ª edición (2001)
Objetivos
Veremos cómo planificar el uso de los recursos para poder garantizar los requisitos temporales
Un método de planificación tiene dos aspectos importantes:
– Un algoritmo de planificación que determina el orden de acceso de las tareas a los recursos del sistema (en particular al procesador) – Un método de análisis que permite calcular el comportamiento temporal del sistema » Así se pude comprobar si los requisitos temporales están garantizados en todos los casos posibles » En general se estudia el peor comportamiento posible
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 1
1
Índice
Introducción Planificación con ejecutivos cíclicos Multiprogramación – – – – –
Planificación con prioridades fijas Tareas periódicas independientes Tareas esporádicas y aperiódicas Interacción entre tareas y bloqueos Modelo de tareas generalizado
Realización de sistemas con prioridades
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 2
Planificación de tareas
Un método de planificación puede ser – estático: el análisis se puede hacer antes de la ejecución – dinámico: el análisis se hace durante la ejecución
Un método estático muy utilizado es el de
planificación con prioridades fijas y desalojo – La prioridad es un parámetro relacionado con la urgencia o la importancia de la tarea – En cada momento se ejecuta la tarea con mayor prioridad de todas las ejecutables
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 3
2
Modelo de tareas Inicialmente consideraremos un modelo simple: – El conjunto de tareas es estático – Todas las tareas son periódicas – Las tareas son independientes unas de otras – Los plazos de respuesta de todas las tareas son iguales a los períodos respectivos – El tiempo de ejecución máximo de cada tarea es conocido – Las operaciones del núcleo de multiprogramación son instantáneas
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 4
Parámetros de planificación N T C D R P
Número de tareas Período de activación Tiempo de ejecución máximo Plazo de respuesta Tiempo de respuesta máximo Prioridad
En el modelo anterior, para todas las tareas τi : Ci ≤ Di = Ti
Se trata de asegurar que Ri ≤ Di
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 5
3
Hiperperíodo
En el modelo de tareas simple, el valor H = mcm (Ti )
se denomina hiperperíodo del sistema
El comportamiento temporal se repite cada hiperperíodo
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 6
Planificación con ejecutivos cíclicos
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 7
4
Planificación cíclica
Si todas las tareas son periódicas, se puede confeccionar
un plan de ejecución fijo Se trata de un esquema que se repite cada TM = mcm(Ti )
(ciclo principal) El ciclo principal se divide en ciclos secundarios, con período (TM = k ⋅ TS)
TS
En cada ciclo secundario se ejecutan las actividades correspondientes a determinadas tareas
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 8
Ejemplo Tarea A B C D E
T C 25 10 25 8 50 5 50 4 100 2
– El sistema es armónico – El ciclo principal dura 100ms – Se compone de 4 ciclos secundarios de 25ms cada uno TM = 100ms
Ts = 25ms
A 0
STRL -11/11/2003
B
C
A 25
B
D E
A
B
50
©2001-2002 Juan Antonio de la Puente
C
A 75
B
D 100
Planificación - 9
5
Ejecutivo cíclico procedure Cyclic_Executive is type Cycle is mod 4; Frame : Cycle := 0; begin loop Wait_for_Interrupt; case Frame is when 0 => A; B; C; when 1 => A; B; D; E; when 2 => A; B; C; when 3 => A; B; D; end case; Frame := Frame + 1; end loop; end Cyclic_Executive;
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 10
Propiedades
No hay concurrencia en la ejecución – Cada ciclo secundario es una secuencia de invocaciones de procedimientos
Los procedimientos pueden compartir datos
– No hace falta usar mecanismos de exclusión mutua
Los períodos deben ser armónicos
– Puede ser necesario utilizar períodos más cortos de lo necesario
No hace falta analizar el comportamiento temporal – El sistema es correcto por construcción
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 11
6
Problemas
Las tareas esporádicas son difíciles de tratar – Se puede utilizar un servidor de consulta
El plan cíclico es difícil de construir – Si los períodos son de diferentes órdenes de magnitud el número de ciclos secundarios se hace muy grande – Puede ser necesario partir una tarea en varios procedimientos – En el caso más general es NP-duro
Es poco flexible y difícil de mantener
– Cada vez que se cambia una tarea hay que rehacer toda la planificación
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 12
Multiprogramación con prioridades fijas
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 13
7
Multiprogramación
Las tareas se realizan como procesos concurrentes Una tarea puede estar en varios estados Las tareas ejecutables se despachan para su ejecución de acuerdo con un método de planificación:
suspendida activar
– prioridades fijas (fixed-priority scheduling, FPS) – primero el más urgente (earliest deadline first, EDF) – primero el más valioso (value-based scheduling, VBS)
STRL -11/11/2003
suspender ejecutable despachar
desalojar
ejecutándose activa
©2001-2002 Juan Antonio de la Puente
Planificación - 14
Planificación con prioridades fijas
Es el método más corriente en sistemas operativos de
tiempo real Cada tarea tiene una prioridad fija – planificación estática
Las tareas ejecutables se despachan para su ejecución
en orden de prioridad El despacho puede hacerse – con desalojo – sin desalojo – con desalojo limitado
En general supondremos prioridades fijas con desalojo – mejor tiempo de respuesta para las tareas de alta prioridad
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 15
8
Primero el más urgente
Las tareas ejecutables se despachan por orden de sus
respectivos tiempos límite (plazos absolutos) La primera tarea que se ejecuta es la más urgente (aquélla cuyo plazo vence antes) Los tiempos límites se calculan durante la ejecución – planificación dinámica
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 16
Primero el más valioso
Cuando hay posibilidad de sobrecargas los métodos anteriores no son suficientes
– métodos de planificación adaptativos
Se asigna un valor a cada tarea, y se de decida sobre la marcha qué tarea se despacha primero mediante un método de planificación basado en el valor de las tareas
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 17
9
Prioridades monótonas en frecuencia
La asignación de mayor prioridad a las tareas de menor período (rate monotonic scheduling) es óptima para el modelo de tareas simple – tareas periódicas, – independientes, – con plazos iguales a los períodos
Si se pueden garantizar los plazos de un sistema de tareas con otra asignación de prioridades, se pueden garantizar con la asignación monótona en frecuencia
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 18
Análisis del factor de utilización
La cantidad U =
∑ CT N
i
i =1
i
es el factor de utilización del procesador Es una medida de la carga del procesador para un conjunto de tareas En un sistema monoprocesador debe ser
U ≤ 1
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 19
10
Condición de garantía de los plazos basada en la utilización
Para el modelo simple, con prioridades monótonas en frecuencia, los plazos están garantizados si
U =
∑ CT N
i =1
i
≤ N ⋅ ( 21 N − 1)
i
La cantidad U0 (N ) = N ⋅ ( 21 N − 1)
es la utilización mínima garantizada para N tareas
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 20
Utilización mínima garantizada
N 1 2 3 4 5
U0 1,000 0,828 0,779 0,756 0,743
limn→∞ U0 (N ) = log 2 ≈ 0,693
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 21
11
Ejemplo 1
Tarea
T
C P
τ1 τ2 τ3
30 40 50
10 3 10 2 12 1
El sistema no cumple la prueba de utilización (U > 0,779) La tarea 3 falla en t = 50
U 0,333 0,250 0,240 0,823
τ1 τ2
¡fallo!
τ3 0
20
40
60
80
100
120
140
160
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 22
Ejemplo 2
Tarea
T
C P
τ1 τ2 τ3
16 40 80
4 3 5 2 32 1
Este sistema está garantizado (U < 0,779)
U 0,250 0,125 0,400 0,775
τ1 τ2 τ3 0
STRL -11/11/2003
10
20
30
40
50
60
©2001-2002 Juan Antonio de la Puente
70
80
Planificación - 23
12
Ejemplo 3
Tarea
T
C P
τ1 τ2 τ3
20 40 80
5 3 10 2 40 1
Este sistema no pasa la prueba (U > 0,779), pero se cumplen los plazos
U 0,250 0,250 0,500 1,000
τ1 τ2 τ3 0
10
20
30
40
50
60
70
80
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 24
Factor de utilización con EDF
Los plazos están garantizados si y sólo si U=
∑ CT N
i =1
i
≤1
i
EDF permite una mayor utilización del procesador – pero tiene inconvenientes » » » »
STRL -11/11/2003
más difícil de realizar el núcleo de multiprogramación es más complejo tiene un comportamiento imprevisible en caso de sobrecarga requiere que todas las tareas tengan plazos asignados (FPS es más flexible en esto)
©2001-2002 Juan Antonio de la Puente
Planificación - 25
13
Ejemplo 1 - EDF
Tarea
T
C P
τ1 τ2 τ3
30 40 50
10 3 10 2 12 1
Con planificación EDF los plazos están garantizados (U < 1,0)
U 0,333 0,250 0,240 0,823
τ1 τ2 τ3 0
STRL -11/11/2003
20
40
60
80
100
120
©2001-2002 Juan Antonio de la Puente
140
160
Planificación - 26
Problemas del análisis de utilización
La prueba del factor de utilización no es exacta, ni se
puede generalizar a modelos de tareas más complejos – pero es eficiente, O(N)
Veremos una prueba basada en el cálculo del tiempo de respuesta de cada tarea
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 27
14
Análisis del tiempo de respuesta
Es un método más completo y flexible que el del factor de utilización para FPS
– es fácil de generalizar a otros modelos de tareas – proporciona una condición necesaria y suficiente para que los plazos estén garantizados
Se trata de calcular el tiempo de respuesta en el peor
caso de cada tarea, Ri, y comprobar directamente que es menor que el plazo correspondiente:
Ri ≤ Di
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 28
Ecuación del tiempo de respuesta
τj τi Ri
Ri = Ci + Ii
El tiempo de respuesta de una tarea es la suma de su tiempo de cómputo más la interferencia que sufre por la ejecución de tareas más prioritarias
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 29
15
Instante crítico
La interferencia es máxima cuando todas las tareas se activan a la vez – el instante inicial se denomina instante crítico Cj
τj
Cj
Cj
Cj
τi Ri Cj
τj
Cj
Cj
Cj
τi Ri ©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 30
Cálculo de la interferencia τj
Cj
Cj
τi Ri
El número de veces que una tarea de prioridad superior τj se ejecuta durante el intervalo [0,Ri) es: R i T j
función techo: x = min k ∈ Z : k ≥ x
Por tanto, el valor de la interferencia de τj sobre τi es
Ii j = STRL -11/11/2003
R i Tj
⋅ Cj ©2001-2002 Juan Antonio de la Puente
Planificación - 31
16
Cálculo del tiempo de respuesta
La interferencia total que sufre τi es Ii =
∑
hp(i ) = {j : 1..N | Pj > Pi }
R i ⋅C j T j ∈hp (i ) j
La ecuación del tiempo de respuesta queda así: Ri = Ci +
∑
R i j ∈ hp ( i ) Tj
⋅ Cj
– La ecuación no es continua ni lineal – No se puede resolver analíticamente
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 32
Iteración lineal
La ecuación del tiempo de respuesta se puede resolver mediante la relación de recurrencia
w in +1 = Ci +
∑
w n i ⋅Cj T j ∈hp ( i ) j
K K
– la sucesión (w i0 ,w i1, w in , ) es monótona no decreciente – un valor inicial aceptable es w i0 = Ci – se termina cuando » a) win+1 = win (y entonces Ri = win), o bien » b) win+1 > Ti (no se cumple el plazo)
– converge siempre que U < 100%
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 33
17
Ejemplo 4
Tarea
T
C P
τ1 τ2 τ3
7 12 20
3 3 5
3 2 1
w 30 = 5
R 3 6 20
w 32 = 5 +
R1 = 3
w 33 = 5 +
w 20 = 3 3 ⋅3 7 6 = 3 + ⋅3 7
5 5 ⋅3 + ⋅ 3 = 11 7 12 11 11 ⋅3 + ⋅ 3 = 14 7 12 14 14 ⋅3 + ⋅ 3 = 17 7 12 17 17 ⋅ 3 + ⋅ 3 = 20 7 12 20 20 ⋅ 3 + ⋅ 3 = 20 7 12
w 31 = 5 +
w 12 = 3 +
=6
w 34 = 5 +
w 22
= 6; R2 = 6
w 35 = 5 +
R3 = 20
Todas las tareas tienen sus plazos garantizados
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 34
Ejemplo 3 (repaso) Tarea
T
C P
τ1 τ2 τ3
20 40 80
5 10 40
3 2 1
U 0,250 0,250 0,500 1,000
R1 = 5 w = 10 0 2
w = 10 + 1 2
w = 10 + 2 2
10 ⋅5 20 15 20 ⋅ 5
R 5 15 80
w 30 = 40 40 40 ⋅5 + ⋅ 10 20 40
= 60
60 60 ⋅ 5 + 40 ⋅ 10 20
= 75
75 75 ⋅ 5 + 40 ⋅ 10 20
= 80
80 80 ⋅ 5 + 40 ⋅ 10 20
= 80 R3 = 80
w 31 = 40 +
= 15 = 15; R 2 = 15
w 32 = 40 + w 33 = 40 + w 34 = 40 +
Todas las tareas tienen sus plazos garantizados STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 35
18
Propiedades del análisis de tiempo de respuesta
Proporciona una condición necesaria y suficiente para la garantía de los plazos
∀i Ri ≤ Di
Permite un análisis del comportamiento temporal del
sistema más exacto que la prueba del factor de utilización El elemento crítico es el cálculo del tiempo de cómputo de cada tarea – optimista: los plazos puedes fallar aunque el análisis sea positivo – pesimista: él análisis puede ser negativo aunque los plazos no fallen en realidad
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 36
Tiempo de cómputo
Interesa el tiempo de ejecución en el peor caso
(WCET, worst case execution time) Hay dos formas de obtener el WCET de una tarea: – Medida del tiempo de ejecución » no es fácil saber cuándo se ejecuta el peor caso posible
– Análisis del código ejecutable » se descompone el código en un grafo de bloques secuenciales » se calcula el tiempo de ejecución de cada bloque » se busca el camino más largo
Puede ser muy pesimista » es difícil tener en cuenta los efectos de los dispositivos de hardware (caches, pipelines, estados de espera de la memoria, etc..) » hace falta tener un modelo adecuado del procesador
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 37
19
Análisis estático del WCET
Generalmente se hace en tres pasos: 1. Descomposición del código en un grafo dirigido compuesto por bloques básicos (secuencias) 2. Cálculo del WCET de cada bloque básico a partir del código de máquina y del modelo del procesador 3. Cálculo del WCET total a partir del camino más largo del grafo
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 38
Mejora con información semántica
Ejemplo: for I in 1.. 10 loop if Cond then -- bloque básico con coste 100 else -- bloque básico con coste 10 end if; end loop; – Sin más información, el coste peor es 10 × 100 = 1000 – Si sabemos que Cond sólo es verdadera 3 veces, entonces el coste es 3×100 + 7×10 = 370
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 39
20
Restricciones en el código
Para poder calcular el tiempo de cómputo hay que evitar utilizar estructuras con tiempo de cómputo no acotado, como: – – – –
bucles no acotados recursión no acotada objetos dinámicos tareas dinámicas
Para construir sistemas de tiempo real estricto se utilizan subconjuntos del lenguaje de programación que no usan estos elementos Ejemplos: » SPARK (parte secuencial de Ada) » Ravenscar (parte concurrente)
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 40
Tareas esporádicas y aperiódicas
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 41
21
Tareas esporádicas
Para incluir tareas esporádicas hace falta modificar el modelo simple de tareas:
– El parámetro T representa la separación mínima entre dos sucesos de activación consecutivos – Suponemos que en el peor caso la activación es pseudoperiódica (con período T) – El plazo de respuesta puede ser menor que el período (D ≤ T)
El análisis de tiempo de respuesta sigue siendo válido Funciona bien con cualquier orden de prioridad STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 42
Prioridades monótonas en plazos Cuando los plazos son menores o iguales que los períodos, la asignación de mayor prioridad a las tareas de menor plazo de respuesta (deadline monotonic scheduling) es óptima
El tiempo de respuesta se calcula de la misma forma que con la asignación monótona en frecuencia – se termina cuando win+1 = win, – o cuando win+1 > Di
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 43
22
Ejemplo 5 Tarea
T
D
C P
τ1 τ2 τ3 τ4
20 15 10 20
5 7 10 20
3 3 4 3
4 3 2 1
R 3 6 10 20
Con prioridades monótonas en frecuencia los plazos no están garantizados: Tarea
T
D
C P
τ3 τ2 τ1 τ4
10 15 20 20
10 7 5 20
4 3 3 3
STRL -11/11/2003
4 3 2 1
R 4 7 10 20
©2001-2002 Juan Antonio de la Puente
Planificación - 44
Tareas críticas y acríticas
A menudo los tiempos de cómputo en el peor caso de las tareas esporádicas son mucho más altos que los medios – interrupciones en rachas, tratamiento de errores – planteamiento demasiado pesimista
No todas las tareas esporádicas son críticas – Deben garantizarse los plazos de todas las tareas en condiciones “normales” » con separación entre activaciones y tiempos de cómputo medios
Puede haber una sobrecarga transitoria – Deben garantizarse los plazos de las tareas críticas en las peores condiciones » con separación entre activaciones y tiempos de cómputo peores
Esto asegura un comportamiento correcto en caso de sobrecarga transitoria STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 45
23
Tareas aperiódicas
Son tareas acríticas sin separación mínima Se pueden ejecutar con prioridades más bajas que las tareas críticas (periódicas y esporádicas)
– el tiempo de respuesta puede ser muy largo – en condiciones normales sobra tiempo de cómputo de las tareas críticas
Es mejor utilizar un servidor
– el servidor asegura que las tareas críticas tienen asegurados sus recursos – pero asignan los recursos que no se utilizan a las tareas acríticas
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 46
Servidor esporádico
Un servidor esporádico (SS, sporadic server) es un proceso periódico
– Parámetros: período Ts, tiempo de cómputo Cs, prioridad máxima » Cs es la capacidad inicial del servidor » Ts y Cs se eligen de forma que las tareas críticas estén garantizadas
– Cuando se activa una tarea aperiódica, se ejecuta con prioridad máxima mientras quede capacidad disponible – Cuando se agota la capacidad se ejecuta con prioridad baja – La capacidad se rellena cuando ha pasado un tiempo Ts desde la activación de la tarea aperiódica
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 47
24
Interacción entre tareas
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 48
Interacción entre tareas
En la mayoría de los sistemas de interés práctico las tareas interaccionan mediante – datos comunes (protegidos) – citas o mensajes
En todos estos casos puede ocurrir que una tarea tenga
que esperar un suceso de otra menos prioritaria Esta situación se denomina bloqueo, bloqueo y produce una inversión de prioridad indeseable La inversión de prioridad no se puede eliminar completamente, pero es posible limitar su duración
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 49
25
Ejemplo 6
τ1
τ2
τ3
X
Y
Tarea P ta τ1 τ2 τ3 τ4
4 3 2 1
τ4
4 2 2 0
N: ejecución de código propio X: ejecución con acceso a X Y: ejecución con acceso a Y (durante 1 unidad de tiempo)
Acciones NNXYN NYYN NN NXXXXN
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 50
Ejemplo 6 : inversión de prioridad
bloqueo
τ1 τ2 τ3 τ4 0
STRL -11/11/2003
2
4
6
8
10
12
©2001-2002 Juan Antonio de la Puente
14
16
18
Planificación - 51
26
Herencia de prioridad
Una forma de reducir la duración de los bloqueos es variar
dinámicamente la prioridad de las tareas Cuando una tarea está bloqueando a otra más prioritaria, hereda la prioridad de ésta La prioridad dinámica de una tarea es el máximo de – su prioridad básica – las prioridades de todas las tareas bloqueadas por ella
La herencia de prioridad es transitiva
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 52
Ejemplo 6 : herencia de prioridad
4
τ1 3
4
3
τ2 2
τ3 1
4
1
τ4 0
STRL -11/11/2003
2
4
6
8
10
12
©2001-2002 Juan Antonio de la Puente
14
16
18
Planificación - 53
27
Duración máxima del bloqueo
Con el protocolo de herencia de prioridad, una tarea se pude bloquear como máximo
– una vez por cada recurso – una vez por cada tarea de prioridad inferior
La duración total máxima de los bloqueos es Bi = K u(k,i)
∑ u (k , i ) ⋅ C ( k ) K
k =1
Ck
número de secciones críticas 1 si algún τj, Pj < Pi, accede a k 0 si no tiempo de ejecución de la sección crítica k
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 54
Ejemplo 6 : cálculo del bloqueo K =4 B1 B2 B3 B4
( X1,Y1,Y2, X 4 ) = 0 ⋅ 1 + 0 ⋅ 1 + 1 ⋅ 2 + 1⋅ 4 = 0 ⋅ 1 + 0 ⋅ 1 + 0 ⋅ 2 + 1⋅ 4 = 0 ⋅ 1 + 0 ⋅ 1 + 0 ⋅ 2 + 1⋅ 4 = 0 ⋅1+ 0 ⋅1+ 0 ⋅ 2 + 0 ⋅ 4
=6 =4 =4 =0
– Una tarea puede bloquearse por recursos a los que no accede (por ejemplo, τ2) – Una tarea puede sufrir bloqueo aunque no acceda a recursos compartidos (por ejemplo, τ3) – La tarea de menor prioridad (τ4) no sufre bloqueo
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 55
28
Tiempo de respuesta con bloqueos
Cuando hay bloqueos, la ecuación del tiempo de respuesta queda así: Ri = Ci + Bi +
∑
j ∈hp(i)
R i T j
⋅ Cj
La solución se obtiene mediante la relación de recurrencia w in + 1 = Ci + Bi +
∑
j ∈hp(i)
w n i T j
⋅ Cj
¡Ahora el cálculo puede ser pesimista!
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 56
Protocolos de techo de prioridad
El techo de prioridad de un recurso es la máxima prioridad de las tareas que lo usan
El protocolo del techo de prioridad (CPP) consiste en : – la prioridad dinámica de una tarea es el máximo de su prioridad básica y las prioridades de las tareas a las que bloquea – una tarea sólo puede usar un recurso si su prioridad dinámica es mayor que el techo de todos los recursos en uso por otras tareas
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 57
29
Ejemplo 6 : techo de prioridad
4
τ1 3
τ2 2
τ3 1
3
1
1
4
τ4 0
2
4
6
8
10
12
14
16
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
18
Planificación - 58
Propiedades
Cuando se usa el protocolo del techo de prioridad en un sistema monoprocesador,
– Cada tarea se puede bloquear una vez, como máximo, en cada ciclo – No puede haber interbloqueos – No puede haber bloqueos encadenados
La duración máxima del bloqueo es ahora Bi = max u ( k , i ) ⋅ C k K ∈(1 ..K )
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 59
30
Protocolo del techo de prioridad inmediato (ICPP)
Con este protocolo, una tarea que accede a un recurso
hereda inmediatamente el techo de prioridad del recurso – la prioridad dinámica de una tarea es el máximo de su prioridad básica y los techos de prioridad de los recursos que usa
Las propiedades son las mismas que las del protocolo del techo de prioridad, y además,
– si una tarea se bloquea, lo hace al principio del ciclo
La duración máxima del bloqueo es igual que en CPP: Bi = max u ( k , i ) ⋅ C k K ∈(1 ..K )
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 60
Ejemplo 6 : techo de prioridad inmediato
4
τ1 3
4
3
τ2 2
τ3 1
4
1
τ4 0
STRL -11/11/2003
2
4
6
8
10
12
©2001-2002 Juan Antonio de la Puente
14
16
18
Planificación - 61
31
Ejemplo 6 : cálculo del bloqueo con ICPP
K =4 B1 B2 B3 B4
STRL -11/11/2003
( X1,Y1,Y2, X 4 ) = max (0 ⋅ 1, 0 ⋅ 1, 1⋅ 2, 1⋅ 4) = max (0 ⋅ 1, 0 ⋅ 1, 0 ⋅ 2, 1⋅ 4 ) = max (0 ⋅ 1, 0 ⋅ 1, 0 ⋅ 2, 1⋅ 4 ) = max (0 ⋅ 1, 0 ⋅ 1, 0 ⋅ 2, 0 ⋅ 4 )
=4 =4 =4 =0
©2001-2002 Juan Antonio de la Puente
Planificación - 62
CPP e ICPP
Los dos protocolos tienen las mismas propiedades,pero – ICPP es más fácil de realizar » no hay que seguir las relaciones de bloqueo transitivas
– ICPP produce menos cambios de contexto » el bloqueo se produce antes de la ejecución
– ICPP produce más cambios de prioridad » se hereda la prioridad techo aunque no haya bloqueo
El protocolo ICPP se conoce también con otros nombres: – – – –
Ceiling Locking (Ada 95) Priority Protect Protocol (POSIX) Priority Ceiling Emulation (RT Java) Highest Locker
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 63
32
Ejemplo 7 τ1
τ2
P1
τ3
τ4
P2
τ5
P3
FPS ICPP Atributos temporales
τ
T
C
D
Acceso a OP P1
P2
P3
τ1
S
120
2
5
1
—
—
τ2
P
50
10
50
—
—
1
τ3
P
30
6
30
—
1
—
τ4
S
300
16
32
—
2
—
τ5
S
120
12
15
2
—
2
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 64
Ejemplo 7 — Prioridades
Las prioridades de las tareas se asignan por DMS (más prioridad a las tareas de menor plazo) El techo de prioridad de cada objeto protegido es la prioridad máxima de las tareas que lo usan Atributos temporales
τ
Acceso a OP
P
T
C
D
P1
P3
P2
1
—
—
τ1
S
5
120
2
5
τ5
S
4
120
12
15
2
2
—
τ3
P
3
30
6
30
—
—
1
τ4
S
2
300
16
32
—
—
2
τ2
P
1
50
10
50
—
1
—
5
4
3
CP
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 65
33
Ejemplo 7 — Bloqueos Bi = max u (k , i ) ⋅ C k K ∈(1..K )
Atributos temporales
τ
P
T
C
B
Acceso a OP D
P1
P3
P2
τ1
S
5
120
2
2
5
1
—
—
τ5
S
4
120
12
1
15
2
2
—
τ3
P
3
30
6
2
30
—
—
1
τ4
S
2
300
16
1
32
—
—
2
τ2
P
1
50
10
0
50
—
1
—
5
4
3
CP
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 66
Ejemplo 7 — Tiempos de respuesta R1 = C1 + B1 = 2 + 2 = 4 R5 ·C1 T1
R5 = C5 + B5 +
R5 ·2 120
= 12 + 1 +
R3 R3 ·C5 ·C1 + T1 T5
= 6+2+
R4 R4 ·C1 + ·C 5 T1 T5
+
R2 R2 ·C1 + ·C5 T1 T5
+
R3 = C3 + B3 +
R 4 = C 4 + B4 + R2 = C2 + B2 +
R3 R3 ·2 + ·12 120 120
R4 ·C 3 T3
= 16 + 1 +
R2 ·C3 T3
+
R4 R R ·2 + 4 ·12 + 4 ·6 120 120 30
R2 ·C 4 T4
R R R R = 10 + 0 + 2 ·2 + 2 ·12 + 2 ·6 + 2 ·16 120 120 30 300
Atributos temporales
τ
Acceso a OP
P
T
C
B
R
D
P1
P3
P2
τ1
S
5
120
2
2
4
5
1
—
—
τ5
S
4
120
12
1
15
15
2
2
—
τ3
P
3
30
6
2
22
30
—
—
1
τ4
S
2
300
16
1
43
32
—
—
2
τ2
P
1
50
10
0
52
50
—
1
—
5
4
3
CP STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 67
34
Modelo de tareas generalizado
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 68
Generalización el modelo de tareas
El modelo de tareas básico que hemos visto incluye – tareas periódicas, esporádicas y aperiódicas – plazos menores o iguales que los períodos – interacción mediante secciones críticas
El análisis del tiempo de respuesta se puede extender con – – – – – –
planificación cooperativa variación (jitter) en el esquema de activación plazos arbitrarios (también mayores que los períodos) tolerancia de fallos desfases (offsets) asignación de prioridades óptima
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 69
35
Planificación cooperativa
En sistemas críticos a veces no es aceptable la planificación con desalojo – el desalojo introduce indeterminismo
La planificación cooperativa es una alternativa – las tareas se segmentan en bloques de duración igual o menor que BMAX (el bloqueo máximo con desalojo) – al final de cada bloque se ofrece un cambio de contexto (si hay alguna tarea más prioritaria) – las secciones críticas se meten dentro de un solo bloque
Ventajas: – se pueden garantizar sistemas que no están garantizados con desalojo » el último bloque no sufre interferencia
– se puede hacer un cálculo de WCET más exacto
Inconveniente – el coste de ofrecer un cambio de contexto puede ser alto (e innecesario)
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 70
Tiempo de respuesta con planificación cooperativa
El último bloque de una tarea no puede sufrir interferencia La ecuación del tiempo de respuesta queda así: w in +1 = BMAX + C i − Fi +
∑
w n i ⋅C j T j∈hp ( i ) j
Ri = w in + Fi , para w in +1 = w in
Fi es el tiempo de cómputo del último bloque
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 71
36
Activación irregular (release jitter)
Es importante en sistemas distribuidos – Por ejemplo, sea una tarea esporádica activada por un suceso producido por una tarea periódica situada en otro procesador » el tiempo de respuesta de la tarea periódica puede variar entre Cp y Rp T
τP CP
RP
T - (RP - CP)
J = Rp-Cp
τS 0
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
34
36
Planificación - 72
Tareas esporádicas con jitter
En el peor caso, la tarea esporádica se activa en 0, T-J,
2T-J, ... La tarea τs interfiere a otra tarea cualquiera τi: – 1 vez si Ri ∈ [0, T-J) – 2 veces si Ri ∈[T-J, 2T-J), – etc.
o Ri + J ∈ [0, T) o Ri + J ∈ [T, 2T)
La ecuación del tiempo de respuesta queda así: w
n+1 i
= Ci + Bi +
∑
j ∈hp(i)
w in + Tj
Jj
⋅ Cj
Ri = w in , para w in + 1 = w in STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 73
37
Tareas periódicas con jitter
Las tareas periódicas no suelen tener jitter Puede haberlo si la planificación se hace con una
granularidad apreciable El tiempo de respuesta se calcula con w
n +1 i
= Ci + Bi +
∑
j ∈hp(i)
w in + Tj
Jj
⋅ Cj
Ri = w in + Ji , para w in + 1 = w in
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 74
Plazos arbitrarios
Si el plazo es mayor que el período, puede haber varias ejecuciones de una tarea pendientes en un ciclo
– suponemos que no se activa una ejecución hasta que termina la anterior
Para analizar esta situación construimos una sucesión de
ventanas wi(q), donde q + 1 es el número de activaciones de τi pendientes Para cada ventana se obtiene un valor de Ri con w in + 1(q) = (q + 1) ⋅ Ci + Bi +
∑
j ∈hp(i)
w n(q) i T j
⋅ Cj
Ri(q) = w in(q) − q ⋅ Ti STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 75
38
Tiempo de respuesta máximo
Se calcula Ri(q) para q = 0, 1, ... , qmax, donde qmax es el menor valor que cumple
Ri(qmax) ≤ Ti En esta situación ya no hay solape con la siguiente activación
El tiempo de respuesta en el peor caso es Ri = max Ri (q ) q = 0,..qmax
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 76
Caso general
Si consideramos plazos arbitrarios y jitter, el tiempo de respuesta se obtiene con
w in + 1(q) = (q + 1) ⋅ Ci + Bi +
∑
i ∈hp(i)
w in(q) + Tj
Jj
⋅ Cj
Ri(q) = w in(q) − q ⋅ Ti + Ji
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 77
39
Tolerancia de fallos
Cuando hay tolerancia de fallos, el tiempo de cómputo en el peor caso es mayor
– por ejemplo, manejadores de excepciones
Los plazos deben estar garantizados incluso son cierto nivel de fallos
– esto se llama modelo de fallos
El tiempo de respuesta se calcula con Ri = Bi + Ci +
∑
R i j∈hp ( i ) T j
Cj
+ max C fj j∈hep ( i )
– hep(i) es el conjunto de tareas con prioridad igual o mayor que Pi – Cjf es el tiempo de cómputo de la parte de recuperación de fallos de τj
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 78
Tolerancia de fallos múltiples
Si se pueden tolerar F fallos del mismo tipo, Ri = Bi + Ci +
∑
R i Cj T j∈hp ( i ) j
+ max FC fj j ∈hep ( i )
Si los fallos ocurren en ráfagas y se puede especificar un tiempo mínimo entre fallos Tf, Ri = Bi + Ci +
STRL -11/11/2003
∑
R i j∈hp ( i ) Tj
Cj
R f i C j j∈hep ( i ) T j
+ max
©2001-2002 Juan Antonio de la Puente
Planificación - 79
40
Fase inicial
Hasta ahora hemos supuesto que la fase inicial (offset) de todas las tareas es nulo
t r (k ) = (k − 1) ⋅ T + O
Si no lo es, se puede mejorar la planificación – en algunos casos no hay instantes críticos – los tiempos de respuesta son más cortos
El análisis es muy complejo (NP-duro) – pero algunos sistemas se pueden analizar de forma eficiente
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 80
Ejemplo 7 Tarea
T
D
C P
a b c
8 20 20
5 10 12
4 4 4
R 4 8 16
3 2 1
¡La tarea c falla !
a b c
0
4
STRL -11/11/2003
8
12
16
20
24
©2001-2002 Juan Antonio de la Puente
28
32
36
Planificación - 81
41
Ejemplo 7: fase > 0
0
Tarea
T
D
C O P
a b c
8 20 20
5 10 12
4 4 4
4
8
12
0 3 0 2 10 1
16
R 4 8 8
20
¡Con O = 10, la tarea c no falla!
24
28
32
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
36
Planificación - 82
Ejemplo 7: análisis
Las tareas b y c equivalen a una tarea ficticia con T = Tb / 2 = Tc / 2 C = max (Cb ,Cc ) D = min(Db , Dc )
P = max (Pb , Pc )
También se pueden analizar otros tipos de sistemas con desfases
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 83
42
Asignación de prioridades
Con el modelo general que hemos, la ordenación de
prioridades monótona en frecuencia (RMS) o en plazos no es óptima Se aplica el siguiente teorema: Si una tarea τ cumple su plazo con la prioridad más baja del sistema, y existe un orden de prioridades admisible para todo el sistema, entonces hay un orden de prioridades que garantiza todas las tareas en el cual τ tiene la prioridad más baja
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 84
Algoritmo procedure Assign_Priority (System: in out Task_Set; N : Natural; OK : out Boolean) is begin for k in 1 .. N loop for next in k ..N loop Swap (System, k, next); Test (System, k, OK); exit when OK; end loop; exit when not OK; -- no hay ninguna tarea garantizada end loop; end Assign_Priority;
System(1) tiene la prioridad mínima y System(N) la máxima Test comprueba el plazo de la tarea System (k)
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 85
43
Planificación dinámica
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 86
Sistemas dinámicos
Hay sistemas de tiempo real en los que no se conocen de antemano los tiempos de cómputo ni los esquemas de activación – las tareas se crean y se destruyen durante la ejecución – hay que hacer el análisis sobre la marcha
El algoritmo EDF es óptimo y se adapta bien a los sistemas dinámicos
– pero funciona mal en caso de sobrecarga
Se complementa con un módulo de control de admisión – cuando llega una tarea nueva se decide si se admite o no – el objetivo es garantizar el buen funcionamiento del método EDF
Criterios de admisión
– evitar sobrecargas – maximizar el valor de las tareas que se ejecutan
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 87
44
Asignación de valor a las tareas
Se puede hacer de varias formas: – asignación estática: cada ejecución de la misma tarea tiene el mismo valor – asignación dinámica: el valor de la ejecución de una tarea se calcula en el momento de su activación – asignación adaptativa: el valor cambia durante la ejecución de la tarea
Hay que encontrar un compromiso entre lo que se gana
con la planificación dinámica y lo que se pierde en términos del tiempo necesario para tomar las decisiones
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 88
Realización de sistemas planificados con prioridades
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 89
45
Planificación de tareas en Ada
En el anexo de tiempo real se define un modelo de
planificación con prioridades y desalojo La prioridad de una tarea es de un subtipo definido en el paquete System subtype Any_Priority is Integer range intervalo; subtype Priority is Any_Priority range Any_Priority’First .. valor; subtype Interrupt_Priority is Any_Priority range Priority’Last + 1 .. Any_Priority’Last;
Los valores mayores denotan prioridades más altas Debe haber al menos 30 valores de Priority y 1 de Interrupt_Priority
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 90
Prioridad básica
La prioridad básica de una tarea o un tipo tarea se especifica con un pragma Priority
task Controller is pragma Priority (10); end Controller; task type Server (Task_Priority : System.Priority) is entry Service_1 (...); ... pragma Priority (Task_Priority); end Server;
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 91
46
Techo de prioridad inmediato
Cada objeto protegido tiene una prioridad techo (ceiling
priority) mayor o igual que la prioridad de las tareas que usan el objeto – por omisíón es System.Priority'Last
Cuando una tarea llama a una operación de un objeto protegido, hereda la prioridad techo del objeto
– si la prioridad de la tarea es mayor que el techo se eleva Program_Error
El protocolo del techo de prioridad inmediato basta para asegurar la exclusión mutua en un monoprocesador
– si una tarea que quiere ejecutar una operación protegida se está ejecutando, el objeto no puede estar ocupado STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 92
Prioridad techo
Para usar el protocolo del techo de prioridad inmediato hay que poner un pragma de configuración pragma Locking_Policy (Ceiling_Locking);
– afecta a todo el programa (con GNAT se pone en gnat.adc)
El techo de prioridad de un objeto o un tipo protegido se especifica mediante un pragma Priority
protected type Resource(Ceiling : System.Priority)is ... pragma Priority (Ceiling); end Resource;
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 93
47
Ejecución de operaciones protegidas
Cuando se usa el protocolo del techo de prioridad
inmediato se pueden implementar las barreras de forma muy eficiente (proxy model): – cuando termina un procedimiento o entrada protegida se ejecutan las entradas que se puedan haber abierto como consecuencia – esto se hace con el mismo flujo de control de la tarea que llama a la primera operación – se reduce el número de cambios de contexto – todo esto es posible porque las operaciones se ejecutan con prioridad elevada
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 94
Ejemplo protected Gate_Control is pragma Priority(28); entry Stop_And_Close; procedure Open; private Gate : Boolean := False; end Gate_Control; protected body Gate_Control is entry Stop_And_Close when Gate is begin Gate := False; end; procedure Open is begin Gate := True; end; end Gate_Control;
STRL -11/11/2003
Supongamos que – una tarea T (prioridad = 20) llama a Stop_and_Close y se suspende – otra tarea S (prioridad =27) llama a Open
La hebra de S ejecuta: – el código de Open – la evaluación de la barrera – el código de Stop_and Close (por cuenta de T) – la evaluación de la barrera otra vez – la vuelta al punto donde S llamó a Open
No hay cambio de contexto
©2001-2002 Juan Antonio de la Puente
Planificación - 95
48
Prioridad activa
La prioridad activa de una tarea es el máximo de su prioridad básica y la prioridad heredada de otras
Una tarea puede heredar prioridad de varias formas : – cuando ejecuta una operación protegida hereda el techo de prioridad del objeto – cuando ejecuta una instrucción accept hereda la prioridad de la tarea que llama al punto de entrada – durante su activación hereda la prioridad de su progenitor
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 96
Protocolo de despacho
Se puede especificar un protocolo de despacho mediante un pragma de configuración:
pragma Task_Dispatching_Policy (FIFO_within_Priority);
– Hay una cola conceptual por cada nivel de prioridad – El núcleo de ejecución despacha la primera tarea de la cola de mayor prioridad que no esté vacía – Cuando una tarea se activa se coloca al final de la cola correspondiente a su prioridad activa – Las tareas desalojadas se colocan al principio de su cola
Puede haber otros protocolos de despacho, pero no son obligatorios
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 97
49
Otros mecanismos de planificación
Prioridades dinámicas (que se pueden cambiar por el
programa) Colas ordenadas por prioridades en puntos de entrada pragma Queuing_Policy (Priority_Queuing);
Identificadores y atributos de tareas Control síncrono y asíncrono de tareas Aborto inmediato Restricciones para facilitar el análisis de tiempos Requisitos sobre documentación de tiempos STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 98
Planificación en POSIX
POSIX
define un modelo de planificación con prioridades y desalojo La prioridad básica de una tarea se puede cambiar dinámicamente Se puede especificar el protocolo de despacho FIFO (como en Ada) – otros: Round-Robin, Sporadic Server, ... – debe al menos 32 prioridades distintas
Se puede especificar que todos los threads de un sistema se planifiquen globalmente (system contention)
– la política de planificación se puede ajustar por procesos o por threads
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 99
50
Ámbito de planificación
El ámbito de la planificación se define con #include int pthread_attr_setscope (pthread_attr_t *attr, int contentionscope);
También hay que especificar si los atributos de planificación son específicos de cada thread:
int pthread_attr_setinheritsched ( pthread_attr_t *attr, int inheritsched);
Normalmente se pone – PTHREAD_SCOPE_SYSTEM para contentionscope – PTHREAD_EXPLICIT_SCHED para inheritsched STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 100
Política de planificación
La política de planificación dentro del mismo nivel de prioridad se define con
int pthread_attr_setschedpolicy ( pthread_attr_t *attr, int policy);
El parámetro policy puede ser – SCHED_FIFO (orden de llegada) – SCHED_RR (turno circular con rodajas de tiempo) – SCHED_OTHER (dependiente de la implementación)
En general, hay que poner SCHED_FIFO
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 101
51
Prioridades
La prioridad de un thread es un parámetro de planificación:
#include struct sched_param { int sched_priority; ... }
y se especifica con int pthread_attr_setschedparam ( const pthread_attr_t *attr, const struct sched_param *param);
Los atributos se usan para crear el thread STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 102
Protocolo de acceso a mutex
Se puede especificar un protocolo de acceso con #include int pthread_mutexattr_setprotocol ( pthread_mutex_attr_t *attr, int *protocol);
El protocolo puede ser – PTHREAD_PRIO_INHERIT (herencia de prioridad) – PTHREAD_PRIO_PROTECT (techo de prioridad inmediato) – PTHREAD_PRIO_NONE (no hay herencia de prioridad)
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 103
52
Prioridad techo
Se especifica con int pthread_mutexattr_setprioceiling ( pthread_mutexattr_t *attr, int prioceiling);
Los atributos se usan para iniciar el mutex
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 104
Servidor esporádico
Un servidor esporádico es un thread que tiene una
capacidad limitada para ejecutar tareas esporádicas con prioridad alta – si se agota la capacidad se sigue ejecutando con prioridad baja – parámetros: capacidad, intervalo de relleno, prioridades alta y baja
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 105
53
Planificación en RT Java
Interfaz Schedulable – implementada por RealtimeThread, NoHeapRealtimeThread AsyncEventHandler y otros
Planificación con prioridades y desalojo – al menos 28 valores de prioridad – los threads que no son de tiempo real van pro debajo – los threads desalojados no se ponen al principio de la cola
En general, enfoque más dinámico que en Ada y POSIX
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 106
Interfaz Schedulable public Interface Schedulable extends java.lang.Runnable { public void addToFeasibility(); public void removeFromFeasibility(); public MemoryParameters getMemoryParameters(); public void setMemoryParameters(MemoryParameters memory); public ReleaseParameters getReleaseParameters(); public void setReleaseParameters(ReleaseParameters release); public SchedulingParameters getSchedulingParameters(); public void setSchedulingParameters( SchedulingParameters scheduling); public Scheduler getScheduler(); public void setScheduler(Scheduler scheduler); } STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 107
54
Scheduling Parameters public abstract class SchedulingParameters { public SchedulingParameters(); } public class PriorityParameters extends SchedulingParameters { public PriorityParameters(int priority); public int getPriority(); // at least 28 priority levels public void setPriority(int priority) throws IllegalArgumentException; ... } public class ImportanceParameters extends PriorityParameters { public ImportanceParameters(int priority, int importance); public int getImportance(); public void setImportance(int importance); ... } STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 108
Planificación de alto nivel
La clase Scheduler permite definir un planificador de alto nivel
– decidir se se pueden admitir nuevos objetos planificables (threads) – ajustar las prioridades de los objetos planificables
Todo ello de acuerdo con un algoritmo de aceptación (feasibility algorithm)
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 109
55
Scheduler public abstract class Scheduler { public Scheduler(); protected abstract void addToFeasibility(Schedulable s); protected abstract void removeFromFeasibility(Schedulable s); public abstract boolean isFeasible(); // checks the current set of schedulable objects public boolean changeIfFeasible(Schedulable schedulable, ReleaseParameters release, MemoryParameters memory); public static Scheduler getDefaultScheduler(); public static void setDefaultScheduler(Scheduler scheduler); public abstract java.lang.String getPolicyName(); } STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 110
Priority Scheduler class PriorityScheduler extends Scheduler { public PriorityScheduler() protected void addToFeasibility(Schedulable s); ... public void fireSchedulable(Schedulable schedulable); public int getMaxPriority(); public int getMinPriority(); public int getNormPriority(); public static PriorityScheduler instance(); ... }
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 111
56
Otros mecanismos
Herencia de prioridades y techo de prioridad (priority ceiling emulation)
Threads periódicos y aperiódicos – grupos de threads aperiódicos
Colas ordenadas por prioridades
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 112
Resumen
Un método de planificación tiene dos partes: – un algoritmo de reparto de recursos – un método de análisis del comportamiento temporal
El método tradicional se basa en un ejecutivo cíclico – el análisis es inmediato (por construcción) – es poco flexible y de bajo nivel
Un método mejor se basa en el uso de prioridades fijas – las prioridades se asignan por orden de períodos, plazos o de forma arbitraria – se puede analizar el tiempo de respuesta de las tareas – se pueden analizar tareas con interacción si se usa un protocolo de herencia o techo de prioridad
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 113
57
dit
UPM
Planificación de tareas Juan Antonio de la Puente DIT/UPM
Transparencias basadas en el capítulo 13 del libro de A. Burns y A. Wellings Real-Time Systems and Programming Languages, 3ª edición (2001)
Objetivos
Veremos cómo planificar el uso de los recursos para poder garantizar los requisitos temporales
Un método de planificación tiene dos aspectos importantes:
– Un algoritmo de planificación que determina el orden de acceso de las tareas a los recursos del sistema (en particular al procesador) – Un método de análisis que permite calcular el comportamiento temporal del sistema » Así se pude comprobar si los requisitos temporales están garantizados en todos los casos posibles » En general se estudia el peor comportamiento posible
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 1
1
Índice
Introducción Planificación con ejecutivos cíclicos Multiprogramación – – – – –
Planificación con prioridades fijas Tareas periódicas independientes Tareas esporádicas y aperiódicas Interacción entre tareas y bloqueos Modelo de tareas generalizado
Realización de sistemas con prioridades
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 2
Planificación de tareas
Un método de planificación puede ser – estático: el análisis se puede hacer antes de la ejecución – dinámico: el análisis se hace durante la ejecución
Un método estático muy utilizado es el de
planificación con prioridades fijas y desalojo – La prioridad es un parámetro relacionado con la urgencia o la importancia de la tarea – En cada momento se ejecuta la tarea con mayor prioridad de todas las ejecutables
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 3
2
Modelo de tareas Inicialmente consideraremos un modelo simple: – El conjunto de tareas es estático – Todas las tareas son periódicas – Las tareas son independientes unas de otras – Los plazos de respuesta de todas las tareas son iguales a los períodos respectivos – El tiempo de ejecución máximo de cada tarea es conocido – Las operaciones del núcleo de multiprogramación son instantáneas
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 4
Parámetros de planificación N T C D R P
Número de tareas Período de activación Tiempo de ejecución máximo Plazo de respuesta Tiempo de respuesta máximo Prioridad
En el modelo anterior, para todas las tareas τi : Ci ≤ Di = Ti
Se trata de asegurar que Ri ≤ Di
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 5
3
Hiperperíodo
En el modelo de tareas simple, el valor H = mcm (Ti )
se denomina hiperperíodo del sistema
El comportamiento temporal se repite cada hiperperíodo
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 6
Planificación con ejecutivos cíclicos
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 7
4
Planificación cíclica
Si todas las tareas son periódicas, se puede confeccionar
un plan de ejecución fijo Se trata de un esquema que se repite cada TM = mcm(Ti )
(ciclo principal) El ciclo principal se divide en ciclos secundarios, con período (TM = k ⋅ TS)
TS
En cada ciclo secundario se ejecutan las actividades correspondientes a determinadas tareas
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 8
Ejemplo Tarea A B C D E
T C 25 10 25 8 50 5 50 4 100 2
– El sistema es armónico – El ciclo principal dura 100ms – Se compone de 4 ciclos secundarios de 25ms cada uno TM = 100ms
Ts = 25ms
A 0
STRL -11/11/2003
B
C
A 25
B
D E
A
B
50
©2001-2002 Juan Antonio de la Puente
C
A 75
B
D 100
Planificación - 9
5
Ejecutivo cíclico procedure Cyclic_Executive is type Cycle is mod 4; Frame : Cycle := 0; begin loop Wait_for_Interrupt; case Frame is when 0 => A; B; C; when 1 => A; B; D; E; when 2 => A; B; C; when 3 => A; B; D; end case; Frame := Frame + 1; end loop; end Cyclic_Executive;
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 10
Propiedades
No hay concurrencia en la ejecución – Cada ciclo secundario es una secuencia de invocaciones de procedimientos
Los procedimientos pueden compartir datos
– No hace falta usar mecanismos de exclusión mutua
Los períodos deben ser armónicos
– Puede ser necesario utilizar períodos más cortos de lo necesario
No hace falta analizar el comportamiento temporal – El sistema es correcto por construcción
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 11
6
Problemas
Las tareas esporádicas son difíciles de tratar – Se puede utilizar un servidor de consulta
El plan cíclico es difícil de construir – Si los períodos son de diferentes órdenes de magnitud el número de ciclos secundarios se hace muy grande – Puede ser necesario partir una tarea en varios procedimientos – En el caso más general es NP-duro
Es poco flexible y difícil de mantener
– Cada vez que se cambia una tarea hay que rehacer toda la planificación
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 12
Multiprogramación con prioridades fijas
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 13
7
Multiprogramación
Las tareas se realizan como procesos concurrentes Una tarea puede estar en varios estados Las tareas ejecutables se despachan para su ejecución de acuerdo con un método de planificación:
suspendida activar
– prioridades fijas (fixed-priority scheduling, FPS) – primero el más urgente (earliest deadline first, EDF) – primero el más valioso (value-based scheduling, VBS)
STRL -11/11/2003
suspender ejecutable despachar
desalojar
ejecutándose activa
©2001-2002 Juan Antonio de la Puente
Planificación - 14
Planificación con prioridades fijas
Es el método más corriente en sistemas operativos de
tiempo real Cada tarea tiene una prioridad fija – planificación estática
Las tareas ejecutables se despachan para su ejecución
en orden de prioridad El despacho puede hacerse – con desalojo – sin desalojo – con desalojo limitado
En general supondremos prioridades fijas con desalojo – mejor tiempo de respuesta para las tareas de alta prioridad
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 15
8
Primero el más urgente
Las tareas ejecutables se despachan por orden de sus
respectivos tiempos límite (plazos absolutos) La primera tarea que se ejecuta es la más urgente (aquélla cuyo plazo vence antes) Los tiempos límites se calculan durante la ejecución – planificación dinámica
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 16
Primero el más valioso
Cuando hay posibilidad de sobrecargas los métodos anteriores no son suficientes
– métodos de planificación adaptativos
Se asigna un valor a cada tarea, y se de decida sobre la marcha qué tarea se despacha primero mediante un método de planificación basado en el valor de las tareas
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 17
9
Prioridades monótonas en frecuencia
La asignación de mayor prioridad a las tareas de menor período (rate monotonic scheduling) es óptima para el modelo de tareas simple – tareas periódicas, – independientes, – con plazos iguales a los períodos
Si se pueden garantizar los plazos de un sistema de tareas con otra asignación de prioridades, se pueden garantizar con la asignación monótona en frecuencia
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 18
Análisis del factor de utilización
La cantidad U =
∑ CT N
i
i =1
i
es el factor de utilización del procesador Es una medida de la carga del procesador para un conjunto de tareas En un sistema monoprocesador debe ser
U ≤ 1
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 19
10
Condición de garantía de los plazos basada en la utilización
Para el modelo simple, con prioridades monótonas en frecuencia, los plazos están garantizados si
U =
∑ CT N
i =1
i
≤ N ⋅ ( 21 N − 1)
i
La cantidad U0 (N ) = N ⋅ ( 21 N − 1)
es la utilización mínima garantizada para N tareas
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 20
Utilización mínima garantizada
N 1 2 3 4 5
U0 1,000 0,828 0,779 0,756 0,743
limn→∞ U0 (N ) = log 2 ≈ 0,693
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 21
11
Ejemplo 1
Tarea
T
C P
τ1 τ2 τ3
30 40 50
10 3 10 2 12 1
El sistema no cumple la prueba de utilización (U > 0,779) La tarea 3 falla en t = 50
U 0,333 0,250 0,240 0,823
τ1 τ2
¡fallo!
τ3 0
20
40
60
80
100
120
140
160
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 22
Ejemplo 2
Tarea
T
C P
τ1 τ2 τ3
16 40 80
4 3 5 2 32 1
Este sistema está garantizado (U < 0,779)
U 0,250 0,125 0,400 0,775
τ1 τ2 τ3 0
STRL -11/11/2003
10
20
30
40
50
60
©2001-2002 Juan Antonio de la Puente
70
80
Planificación - 23
12
Ejemplo 3
Tarea
T
C P
τ1 τ2 τ3
20 40 80
5 3 10 2 40 1
Este sistema no pasa la prueba (U > 0,779), pero se cumplen los plazos
U 0,250 0,250 0,500 1,000
τ1 τ2 τ3 0
10
20
30
40
50
60
70
80
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 24
Factor de utilización con EDF
Los plazos están garantizados si y sólo si U=
∑ CT N
i =1
i
≤1
i
EDF permite una mayor utilización del procesador – pero tiene inconvenientes » » » »
STRL -11/11/2003
más difícil de realizar el núcleo de multiprogramación es más complejo tiene un comportamiento imprevisible en caso de sobrecarga requiere que todas las tareas tengan plazos asignados (FPS es más flexible en esto)
©2001-2002 Juan Antonio de la Puente
Planificación - 25
13
Ejemplo 1 - EDF
Tarea
T
C P
τ1 τ2 τ3
30 40 50
10 3 10 2 12 1
Con planificación EDF los plazos están garantizados (U < 1,0)
U 0,333 0,250 0,240 0,823
τ1 τ2 τ3 0
STRL -11/11/2003
20
40
60
80
100
120
©2001-2002 Juan Antonio de la Puente
140
160
Planificación - 26
Problemas del análisis de utilización
La prueba del factor de utilización no es exacta, ni se
puede generalizar a modelos de tareas más complejos – pero es eficiente, O(N)
Veremos una prueba basada en el cálculo del tiempo de respuesta de cada tarea
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 27
14
Análisis del tiempo de respuesta
Es un método más completo y flexible que el del factor de utilización para FPS
– es fácil de generalizar a otros modelos de tareas – proporciona una condición necesaria y suficiente para que los plazos estén garantizados
Se trata de calcular el tiempo de respuesta en el peor
caso de cada tarea, Ri, y comprobar directamente que es menor que el plazo correspondiente:
Ri ≤ Di
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 28
Ecuación del tiempo de respuesta
τj τi Ri
Ri = Ci + Ii
El tiempo de respuesta de una tarea es la suma de su tiempo de cómputo más la interferencia que sufre por la ejecución de tareas más prioritarias
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 29
15
Instante crítico
La interferencia es máxima cuando todas las tareas se activan a la vez – el instante inicial se denomina instante crítico Cj
τj
Cj
Cj
Cj
τi Ri Cj
τj
Cj
Cj
Cj
τi Ri ©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 30
Cálculo de la interferencia τj
Cj
Cj
τi Ri
El número de veces que una tarea de prioridad superior τj se ejecuta durante el intervalo [0,Ri) es: R i T j
función techo: x = min k ∈ Z : k ≥ x
Por tanto, el valor de la interferencia de τj sobre τi es
Ii j = STRL -11/11/2003
R i Tj
⋅ Cj ©2001-2002 Juan Antonio de la Puente
Planificación - 31
16
Cálculo del tiempo de respuesta
La interferencia total que sufre τi es Ii =
∑
hp(i ) = {j : 1..N | Pj > Pi }
R i ⋅C j T j ∈hp (i ) j
La ecuación del tiempo de respuesta queda así: Ri = Ci +
∑
R i j ∈ hp ( i ) Tj
⋅ Cj
– La ecuación no es continua ni lineal – No se puede resolver analíticamente
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 32
Iteración lineal
La ecuación del tiempo de respuesta se puede resolver mediante la relación de recurrencia
w in +1 = Ci +
∑
w n i ⋅Cj T j ∈hp ( i ) j
K K
– la sucesión (w i0 ,w i1, w in , ) es monótona no decreciente – un valor inicial aceptable es w i0 = Ci – se termina cuando » a) win+1 = win (y entonces Ri = win), o bien » b) win+1 > Ti (no se cumple el plazo)
– converge siempre que U < 100%
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 33
17
Ejemplo 4
Tarea
T
C P
τ1 τ2 τ3
7 12 20
3 3 5
3 2 1
w 30 = 5
R 3 6 20
w 32 = 5 +
R1 = 3
w 33 = 5 +
w 20 = 3 3 ⋅3 7 6 = 3 + ⋅3 7
5 5 ⋅3 + ⋅ 3 = 11 7 12 11 11 ⋅3 + ⋅ 3 = 14 7 12 14 14 ⋅3 + ⋅ 3 = 17 7 12 17 17 ⋅ 3 + ⋅ 3 = 20 7 12 20 20 ⋅ 3 + ⋅ 3 = 20 7 12
w 31 = 5 +
w 12 = 3 +
=6
w 34 = 5 +
w 22
= 6; R2 = 6
w 35 = 5 +
R3 = 20
Todas las tareas tienen sus plazos garantizados
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 34
Ejemplo 3 (repaso) Tarea
T
C P
τ1 τ2 τ3
20 40 80
5 10 40
3 2 1
U 0,250 0,250 0,500 1,000
R1 = 5 w = 10 0 2
w = 10 + 1 2
w = 10 + 2 2
10 ⋅5 20 15 20 ⋅ 5
R 5 15 80
w 30 = 40 40 40 ⋅5 + ⋅ 10 20 40
= 60
60 60 ⋅ 5 + 40 ⋅ 10 20
= 75
75 75 ⋅ 5 + 40 ⋅ 10 20
= 80
80 80 ⋅ 5 + 40 ⋅ 10 20
= 80 R3 = 80
w 31 = 40 +
= 15 = 15; R 2 = 15
w 32 = 40 + w 33 = 40 + w 34 = 40 +
Todas las tareas tienen sus plazos garantizados STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 35
18
Propiedades del análisis de tiempo de respuesta
Proporciona una condición necesaria y suficiente para la garantía de los plazos
∀i Ri ≤ Di
Permite un análisis del comportamiento temporal del
sistema más exacto que la prueba del factor de utilización El elemento crítico es el cálculo del tiempo de cómputo de cada tarea – optimista: los plazos puedes fallar aunque el análisis sea positivo – pesimista: él análisis puede ser negativo aunque los plazos no fallen en realidad
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 36
Tiempo de cómputo
Interesa el tiempo de ejecución en el peor caso
(WCET, worst case execution time) Hay dos formas de obtener el WCET de una tarea: – Medida del tiempo de ejecución » no es fácil saber cuándo se ejecuta el peor caso posible
– Análisis del código ejecutable » se descompone el código en un grafo de bloques secuenciales » se calcula el tiempo de ejecución de cada bloque » se busca el camino más largo
Puede ser muy pesimista » es difícil tener en cuenta los efectos de los dispositivos de hardware (caches, pipelines, estados de espera de la memoria, etc..) » hace falta tener un modelo adecuado del procesador
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 37
19
Análisis estático del WCET
Generalmente se hace en tres pasos: 1. Descomposición del código en un grafo dirigido compuesto por bloques básicos (secuencias) 2. Cálculo del WCET de cada bloque básico a partir del código de máquina y del modelo del procesador 3. Cálculo del WCET total a partir del camino más largo del grafo
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 38
Mejora con información semántica
Ejemplo: for I in 1.. 10 loop if Cond then -- bloque básico con coste 100 else -- bloque básico con coste 10 end if; end loop; – Sin más información, el coste peor es 10 × 100 = 1000 – Si sabemos que Cond sólo es verdadera 3 veces, entonces el coste es 3×100 + 7×10 = 370
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 39
20
Restricciones en el código
Para poder calcular el tiempo de cómputo hay que evitar utilizar estructuras con tiempo de cómputo no acotado, como: – – – –
bucles no acotados recursión no acotada objetos dinámicos tareas dinámicas
Para construir sistemas de tiempo real estricto se utilizan subconjuntos del lenguaje de programación que no usan estos elementos Ejemplos: » SPARK (parte secuencial de Ada) » Ravenscar (parte concurrente)
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 40
Tareas esporádicas y aperiódicas
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 41
21
Tareas esporádicas
Para incluir tareas esporádicas hace falta modificar el modelo simple de tareas:
– El parámetro T representa la separación mínima entre dos sucesos de activación consecutivos – Suponemos que en el peor caso la activación es pseudoperiódica (con período T) – El plazo de respuesta puede ser menor que el período (D ≤ T)
El análisis de tiempo de respuesta sigue siendo válido Funciona bien con cualquier orden de prioridad STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 42
Prioridades monótonas en plazos Cuando los plazos son menores o iguales que los períodos, la asignación de mayor prioridad a las tareas de menor plazo de respuesta (deadline monotonic scheduling) es óptima
El tiempo de respuesta se calcula de la misma forma que con la asignación monótona en frecuencia – se termina cuando win+1 = win, – o cuando win+1 > Di
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 43
22
Ejemplo 5 Tarea
T
D
C P
τ1 τ2 τ3 τ4
20 15 10 20
5 7 10 20
3 3 4 3
4 3 2 1
R 3 6 10 20
Con prioridades monótonas en frecuencia los plazos no están garantizados: Tarea
T
D
C P
τ3 τ2 τ1 τ4
10 15 20 20
10 7 5 20
4 3 3 3
STRL -11/11/2003
4 3 2 1
R 4 7 10 20
©2001-2002 Juan Antonio de la Puente
Planificación - 44
Tareas críticas y acríticas
A menudo los tiempos de cómputo en el peor caso de las tareas esporádicas son mucho más altos que los medios – interrupciones en rachas, tratamiento de errores – planteamiento demasiado pesimista
No todas las tareas esporádicas son críticas – Deben garantizarse los plazos de todas las tareas en condiciones “normales” » con separación entre activaciones y tiempos de cómputo medios
Puede haber una sobrecarga transitoria – Deben garantizarse los plazos de las tareas críticas en las peores condiciones » con separación entre activaciones y tiempos de cómputo peores
Esto asegura un comportamiento correcto en caso de sobrecarga transitoria STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 45
23
Tareas aperiódicas
Son tareas acríticas sin separación mínima Se pueden ejecutar con prioridades más bajas que las tareas críticas (periódicas y esporádicas)
– el tiempo de respuesta puede ser muy largo – en condiciones normales sobra tiempo de cómputo de las tareas críticas
Es mejor utilizar un servidor
– el servidor asegura que las tareas críticas tienen asegurados sus recursos – pero asignan los recursos que no se utilizan a las tareas acríticas
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 46
Servidor esporádico
Un servidor esporádico (SS, sporadic server) es un proceso periódico
– Parámetros: período Ts, tiempo de cómputo Cs, prioridad máxima » Cs es la capacidad inicial del servidor » Ts y Cs se eligen de forma que las tareas críticas estén garantizadas
– Cuando se activa una tarea aperiódica, se ejecuta con prioridad máxima mientras quede capacidad disponible – Cuando se agota la capacidad se ejecuta con prioridad baja – La capacidad se rellena cuando ha pasado un tiempo Ts desde la activación de la tarea aperiódica
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 47
24
Interacción entre tareas
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 48
Interacción entre tareas
En la mayoría de los sistemas de interés práctico las tareas interaccionan mediante – datos comunes (protegidos) – citas o mensajes
En todos estos casos puede ocurrir que una tarea tenga
que esperar un suceso de otra menos prioritaria Esta situación se denomina bloqueo, bloqueo y produce una inversión de prioridad indeseable La inversión de prioridad no se puede eliminar completamente, pero es posible limitar su duración
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 49
25
Ejemplo 6
τ1
τ2
τ3
X
Y
Tarea P ta τ1 τ2 τ3 τ4
4 3 2 1
τ4
4 2 2 0
N: ejecución de código propio X: ejecución con acceso a X Y: ejecución con acceso a Y (durante 1 unidad de tiempo)
Acciones NNXYN NYYN NN NXXXXN
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 50
Ejemplo 6 : inversión de prioridad
bloqueo
τ1 τ2 τ3 τ4 0
STRL -11/11/2003
2
4
6
8
10
12
©2001-2002 Juan Antonio de la Puente
14
16
18
Planificación - 51
26
Herencia de prioridad
Una forma de reducir la duración de los bloqueos es variar
dinámicamente la prioridad de las tareas Cuando una tarea está bloqueando a otra más prioritaria, hereda la prioridad de ésta La prioridad dinámica de una tarea es el máximo de – su prioridad básica – las prioridades de todas las tareas bloqueadas por ella
La herencia de prioridad es transitiva
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 52
Ejemplo 6 : herencia de prioridad
4
τ1 3
4
3
τ2 2
τ3 1
4
1
τ4 0
STRL -11/11/2003
2
4
6
8
10
12
©2001-2002 Juan Antonio de la Puente
14
16
18
Planificación - 53
27
Duración máxima del bloqueo
Con el protocolo de herencia de prioridad, una tarea se pude bloquear como máximo
– una vez por cada recurso – una vez por cada tarea de prioridad inferior
La duración total máxima de los bloqueos es Bi = K u(k,i)
∑ u (k , i ) ⋅ C ( k ) K
k =1
Ck
número de secciones críticas 1 si algún τj, Pj < Pi, accede a k 0 si no tiempo de ejecución de la sección crítica k
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 54
Ejemplo 6 : cálculo del bloqueo K =4 B1 B2 B3 B4
( X1,Y1,Y2, X 4 ) = 0 ⋅ 1 + 0 ⋅ 1 + 1 ⋅ 2 + 1⋅ 4 = 0 ⋅ 1 + 0 ⋅ 1 + 0 ⋅ 2 + 1⋅ 4 = 0 ⋅ 1 + 0 ⋅ 1 + 0 ⋅ 2 + 1⋅ 4 = 0 ⋅1+ 0 ⋅1+ 0 ⋅ 2 + 0 ⋅ 4
=6 =4 =4 =0
– Una tarea puede bloquearse por recursos a los que no accede (por ejemplo, τ2) – Una tarea puede sufrir bloqueo aunque no acceda a recursos compartidos (por ejemplo, τ3) – La tarea de menor prioridad (τ4) no sufre bloqueo
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 55
28
Tiempo de respuesta con bloqueos
Cuando hay bloqueos, la ecuación del tiempo de respuesta queda así: Ri = Ci + Bi +
∑
j ∈hp(i)
R i T j
⋅ Cj
La solución se obtiene mediante la relación de recurrencia w in + 1 = Ci + Bi +
∑
j ∈hp(i)
w n i T j
⋅ Cj
¡Ahora el cálculo puede ser pesimista!
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 56
Protocolos de techo de prioridad
El techo de prioridad de un recurso es la máxima prioridad de las tareas que lo usan
El protocolo del techo de prioridad (CPP) consiste en : – la prioridad dinámica de una tarea es el máximo de su prioridad básica y las prioridades de las tareas a las que bloquea – una tarea sólo puede usar un recurso si su prioridad dinámica es mayor que el techo de todos los recursos en uso por otras tareas
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 57
29
Ejemplo 6 : techo de prioridad
4
τ1 3
τ2 2
τ3 1
3
1
1
4
τ4 0
2
4
6
8
10
12
14
16
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
18
Planificación - 58
Propiedades
Cuando se usa el protocolo del techo de prioridad en un sistema monoprocesador,
– Cada tarea se puede bloquear una vez, como máximo, en cada ciclo – No puede haber interbloqueos – No puede haber bloqueos encadenados
La duración máxima del bloqueo es ahora Bi = max u ( k , i ) ⋅ C k K ∈(1 ..K )
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 59
30
Protocolo del techo de prioridad inmediato (ICPP)
Con este protocolo, una tarea que accede a un recurso
hereda inmediatamente el techo de prioridad del recurso – la prioridad dinámica de una tarea es el máximo de su prioridad básica y los techos de prioridad de los recursos que usa
Las propiedades son las mismas que las del protocolo del techo de prioridad, y además,
– si una tarea se bloquea, lo hace al principio del ciclo
La duración máxima del bloqueo es igual que en CPP: Bi = max u ( k , i ) ⋅ C k K ∈(1 ..K )
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 60
Ejemplo 6 : techo de prioridad inmediato
4
τ1 3
4
3
τ2 2
τ3 1
4
1
τ4 0
STRL -11/11/2003
2
4
6
8
10
12
©2001-2002 Juan Antonio de la Puente
14
16
18
Planificación - 61
31
Ejemplo 6 : cálculo del bloqueo con ICPP
K =4 B1 B2 B3 B4
STRL -11/11/2003
( X1,Y1,Y2, X 4 ) = max (0 ⋅ 1, 0 ⋅ 1, 1⋅ 2, 1⋅ 4) = max (0 ⋅ 1, 0 ⋅ 1, 0 ⋅ 2, 1⋅ 4 ) = max (0 ⋅ 1, 0 ⋅ 1, 0 ⋅ 2, 1⋅ 4 ) = max (0 ⋅ 1, 0 ⋅ 1, 0 ⋅ 2, 0 ⋅ 4 )
=4 =4 =4 =0
©2001-2002 Juan Antonio de la Puente
Planificación - 62
CPP e ICPP
Los dos protocolos tienen las mismas propiedades,pero – ICPP es más fácil de realizar » no hay que seguir las relaciones de bloqueo transitivas
– ICPP produce menos cambios de contexto » el bloqueo se produce antes de la ejecución
– ICPP produce más cambios de prioridad » se hereda la prioridad techo aunque no haya bloqueo
El protocolo ICPP se conoce también con otros nombres: – – – –
Ceiling Locking (Ada 95) Priority Protect Protocol (POSIX) Priority Ceiling Emulation (RT Java) Highest Locker
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 63
32
Ejemplo 7 τ1
τ2
P1
τ3
τ4
P2
τ5
P3
FPS ICPP Atributos temporales
τ
T
C
D
Acceso a OP P1
P2
P3
τ1
S
120
2
5
1
—
—
τ2
P
50
10
50
—
—
1
τ3
P
30
6
30
—
1
—
τ4
S
300
16
32
—
2
—
τ5
S
120
12
15
2
—
2
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 64
Ejemplo 7 — Prioridades
Las prioridades de las tareas se asignan por DMS (más prioridad a las tareas de menor plazo) El techo de prioridad de cada objeto protegido es la prioridad máxima de las tareas que lo usan Atributos temporales
τ
Acceso a OP
P
T
C
D
P1
P3
P2
1
—
—
τ1
S
5
120
2
5
τ5
S
4
120
12
15
2
2
—
τ3
P
3
30
6
30
—
—
1
τ4
S
2
300
16
32
—
—
2
τ2
P
1
50
10
50
—
1
—
5
4
3
CP
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 65
33
Ejemplo 7 — Bloqueos Bi = max u (k , i ) ⋅ C k K ∈(1..K )
Atributos temporales
τ
P
T
C
B
Acceso a OP D
P1
P3
P2
τ1
S
5
120
2
2
5
1
—
—
τ5
S
4
120
12
1
15
2
2
—
τ3
P
3
30
6
2
30
—
—
1
τ4
S
2
300
16
1
32
—
—
2
τ2
P
1
50
10
0
50
—
1
—
5
4
3
CP
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 66
Ejemplo 7 — Tiempos de respuesta R1 = C1 + B1 = 2 + 2 = 4 R5 ·C1 T1
R5 = C5 + B5 +
R5 ·2 120
= 12 + 1 +
R3 R3 ·C5 ·C1 + T1 T5
= 6+2+
R4 R4 ·C1 + ·C 5 T1 T5
+
R2 R2 ·C1 + ·C5 T1 T5
+
R3 = C3 + B3 +
R 4 = C 4 + B4 + R2 = C2 + B2 +
R3 R3 ·2 + ·12 120 120
R4 ·C 3 T3
= 16 + 1 +
R2 ·C3 T3
+
R4 R R ·2 + 4 ·12 + 4 ·6 120 120 30
R2 ·C 4 T4
R R R R = 10 + 0 + 2 ·2 + 2 ·12 + 2 ·6 + 2 ·16 120 120 30 300
Atributos temporales
τ
Acceso a OP
P
T
C
B
R
D
P1
P3
P2
τ1
S
5
120
2
2
4
5
1
—
—
τ5
S
4
120
12
1
15
15
2
2
—
τ3
P
3
30
6
2
22
30
—
—
1
τ4
S
2
300
16
1
43
32
—
—
2
τ2
P
1
50
10
0
52
50
—
1
—
5
4
3
CP STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 67
34
Modelo de tareas generalizado
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 68
Generalización el modelo de tareas
El modelo de tareas básico que hemos visto incluye – tareas periódicas, esporádicas y aperiódicas – plazos menores o iguales que los períodos – interacción mediante secciones críticas
El análisis del tiempo de respuesta se puede extender con – – – – – –
planificación cooperativa variación (jitter) en el esquema de activación plazos arbitrarios (también mayores que los períodos) tolerancia de fallos desfases (offsets) asignación de prioridades óptima
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 69
35
Planificación cooperativa
En sistemas críticos a veces no es aceptable la planificación con desalojo – el desalojo introduce indeterminismo
La planificación cooperativa es una alternativa – las tareas se segmentan en bloques de duración igual o menor que BMAX (el bloqueo máximo con desalojo) – al final de cada bloque se ofrece un cambio de contexto (si hay alguna tarea más prioritaria) – las secciones críticas se meten dentro de un solo bloque
Ventajas: – se pueden garantizar sistemas que no están garantizados con desalojo » el último bloque no sufre interferencia
– se puede hacer un cálculo de WCET más exacto
Inconveniente – el coste de ofrecer un cambio de contexto puede ser alto (e innecesario)
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 70
Tiempo de respuesta con planificación cooperativa
El último bloque de una tarea no puede sufrir interferencia La ecuación del tiempo de respuesta queda así: w in +1 = BMAX + C i − Fi +
∑
w n i ⋅C j T j∈hp ( i ) j
Ri = w in + Fi , para w in +1 = w in
Fi es el tiempo de cómputo del último bloque
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 71
36
Activación irregular (release jitter)
Es importante en sistemas distribuidos – Por ejemplo, sea una tarea esporádica activada por un suceso producido por una tarea periódica situada en otro procesador » el tiempo de respuesta de la tarea periódica puede variar entre Cp y Rp T
τP CP
RP
T - (RP - CP)
J = Rp-Cp
τS 0
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
34
36
Planificación - 72
Tareas esporádicas con jitter
En el peor caso, la tarea esporádica se activa en 0, T-J,
2T-J, ... La tarea τs interfiere a otra tarea cualquiera τi: – 1 vez si Ri ∈ [0, T-J) – 2 veces si Ri ∈[T-J, 2T-J), – etc.
o Ri + J ∈ [0, T) o Ri + J ∈ [T, 2T)
La ecuación del tiempo de respuesta queda así: w
n+1 i
= Ci + Bi +
∑
j ∈hp(i)
w in + Tj
Jj
⋅ Cj
Ri = w in , para w in + 1 = w in STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 73
37
Tareas periódicas con jitter
Las tareas periódicas no suelen tener jitter Puede haberlo si la planificación se hace con una
granularidad apreciable El tiempo de respuesta se calcula con w
n +1 i
= Ci + Bi +
∑
j ∈hp(i)
w in + Tj
Jj
⋅ Cj
Ri = w in + Ji , para w in + 1 = w in
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 74
Plazos arbitrarios
Si el plazo es mayor que el período, puede haber varias ejecuciones de una tarea pendientes en un ciclo
– suponemos que no se activa una ejecución hasta que termina la anterior
Para analizar esta situación construimos una sucesión de
ventanas wi(q), donde q + 1 es el número de activaciones de τi pendientes Para cada ventana se obtiene un valor de Ri con w in + 1(q) = (q + 1) ⋅ Ci + Bi +
∑
j ∈hp(i)
w n(q) i T j
⋅ Cj
Ri(q) = w in(q) − q ⋅ Ti STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 75
38
Tiempo de respuesta máximo
Se calcula Ri(q) para q = 0, 1, ... , qmax, donde qmax es el menor valor que cumple
Ri(qmax) ≤ Ti En esta situación ya no hay solape con la siguiente activación
El tiempo de respuesta en el peor caso es Ri = max Ri (q ) q = 0,..qmax
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 76
Caso general
Si consideramos plazos arbitrarios y jitter, el tiempo de respuesta se obtiene con
w in + 1(q) = (q + 1) ⋅ Ci + Bi +
∑
i ∈hp(i)
w in(q) + Tj
Jj
⋅ Cj
Ri(q) = w in(q) − q ⋅ Ti + Ji
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 77
39
Tolerancia de fallos
Cuando hay tolerancia de fallos, el tiempo de cómputo en el peor caso es mayor
– por ejemplo, manejadores de excepciones
Los plazos deben estar garantizados incluso son cierto nivel de fallos
– esto se llama modelo de fallos
El tiempo de respuesta se calcula con Ri = Bi + Ci +
∑
R i j∈hp ( i ) T j
Cj
+ max C fj j∈hep ( i )
– hep(i) es el conjunto de tareas con prioridad igual o mayor que Pi – Cjf es el tiempo de cómputo de la parte de recuperación de fallos de τj
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 78
Tolerancia de fallos múltiples
Si se pueden tolerar F fallos del mismo tipo, Ri = Bi + Ci +
∑
R i Cj T j∈hp ( i ) j
+ max FC fj j ∈hep ( i )
Si los fallos ocurren en ráfagas y se puede especificar un tiempo mínimo entre fallos Tf, Ri = Bi + Ci +
STRL -11/11/2003
∑
R i j∈hp ( i ) Tj
Cj
R f i C j j∈hep ( i ) T j
+ max
©2001-2002 Juan Antonio de la Puente
Planificación - 79
40
Fase inicial
Hasta ahora hemos supuesto que la fase inicial (offset) de todas las tareas es nulo
t r (k ) = (k − 1) ⋅ T + O
Si no lo es, se puede mejorar la planificación – en algunos casos no hay instantes críticos – los tiempos de respuesta son más cortos
El análisis es muy complejo (NP-duro) – pero algunos sistemas se pueden analizar de forma eficiente
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 80
Ejemplo 7 Tarea
T
D
C P
a b c
8 20 20
5 10 12
4 4 4
R 4 8 16
3 2 1
¡La tarea c falla !
a b c
0
4
STRL -11/11/2003
8
12
16
20
24
©2001-2002 Juan Antonio de la Puente
28
32
36
Planificación - 81
41
Ejemplo 7: fase > 0
0
Tarea
T
D
C O P
a b c
8 20 20
5 10 12
4 4 4
4
8
12
0 3 0 2 10 1
16
R 4 8 8
20
¡Con O = 10, la tarea c no falla!
24
28
32
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
36
Planificación - 82
Ejemplo 7: análisis
Las tareas b y c equivalen a una tarea ficticia con T = Tb / 2 = Tc / 2 C = max (Cb ,Cc ) D = min(Db , Dc )
P = max (Pb , Pc )
También se pueden analizar otros tipos de sistemas con desfases
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 83
42
Asignación de prioridades
Con el modelo general que hemos, la ordenación de
prioridades monótona en frecuencia (RMS) o en plazos no es óptima Se aplica el siguiente teorema: Si una tarea τ cumple su plazo con la prioridad más baja del sistema, y existe un orden de prioridades admisible para todo el sistema, entonces hay un orden de prioridades que garantiza todas las tareas en el cual τ tiene la prioridad más baja
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 84
Algoritmo procedure Assign_Priority (System: in out Task_Set; N : Natural; OK : out Boolean) is begin for k in 1 .. N loop for next in k ..N loop Swap (System, k, next); Test (System, k, OK); exit when OK; end loop; exit when not OK; -- no hay ninguna tarea garantizada end loop; end Assign_Priority;
System(1) tiene la prioridad mínima y System(N) la máxima Test comprueba el plazo de la tarea System (k)
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 85
43
Planificación dinámica
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 86
Sistemas dinámicos
Hay sistemas de tiempo real en los que no se conocen de antemano los tiempos de cómputo ni los esquemas de activación – las tareas se crean y se destruyen durante la ejecución – hay que hacer el análisis sobre la marcha
El algoritmo EDF es óptimo y se adapta bien a los sistemas dinámicos
– pero funciona mal en caso de sobrecarga
Se complementa con un módulo de control de admisión – cuando llega una tarea nueva se decide si se admite o no – el objetivo es garantizar el buen funcionamiento del método EDF
Criterios de admisión
– evitar sobrecargas – maximizar el valor de las tareas que se ejecutan
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 87
44
Asignación de valor a las tareas
Se puede hacer de varias formas: – asignación estática: cada ejecución de la misma tarea tiene el mismo valor – asignación dinámica: el valor de la ejecución de una tarea se calcula en el momento de su activación – asignación adaptativa: el valor cambia durante la ejecución de la tarea
Hay que encontrar un compromiso entre lo que se gana
con la planificación dinámica y lo que se pierde en términos del tiempo necesario para tomar las decisiones
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 88
Realización de sistemas planificados con prioridades
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 89
45
Planificación de tareas en Ada
En el anexo de tiempo real se define un modelo de
planificación con prioridades y desalojo La prioridad de una tarea es de un subtipo definido en el paquete System subtype Any_Priority is Integer range intervalo; subtype Priority is Any_Priority range Any_Priority’First .. valor; subtype Interrupt_Priority is Any_Priority range Priority’Last + 1 .. Any_Priority’Last;
Los valores mayores denotan prioridades más altas Debe haber al menos 30 valores de Priority y 1 de Interrupt_Priority
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 90
Prioridad básica
La prioridad básica de una tarea o un tipo tarea se especifica con un pragma Priority
task Controller is pragma Priority (10); end Controller; task type Server (Task_Priority : System.Priority) is entry Service_1 (...); ... pragma Priority (Task_Priority); end Server;
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 91
46
Techo de prioridad inmediato
Cada objeto protegido tiene una prioridad techo (ceiling
priority) mayor o igual que la prioridad de las tareas que usan el objeto – por omisíón es System.Priority'Last
Cuando una tarea llama a una operación de un objeto protegido, hereda la prioridad techo del objeto
– si la prioridad de la tarea es mayor que el techo se eleva Program_Error
El protocolo del techo de prioridad inmediato basta para asegurar la exclusión mutua en un monoprocesador
– si una tarea que quiere ejecutar una operación protegida se está ejecutando, el objeto no puede estar ocupado STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 92
Prioridad techo
Para usar el protocolo del techo de prioridad inmediato hay que poner un pragma de configuración pragma Locking_Policy (Ceiling_Locking);
– afecta a todo el programa (con GNAT se pone en gnat.adc)
El techo de prioridad de un objeto o un tipo protegido se especifica mediante un pragma Priority
protected type Resource(Ceiling : System.Priority)is ... pragma Priority (Ceiling); end Resource;
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 93
47
Ejecución de operaciones protegidas
Cuando se usa el protocolo del techo de prioridad
inmediato se pueden implementar las barreras de forma muy eficiente (proxy model): – cuando termina un procedimiento o entrada protegida se ejecutan las entradas que se puedan haber abierto como consecuencia – esto se hace con el mismo flujo de control de la tarea que llama a la primera operación – se reduce el número de cambios de contexto – todo esto es posible porque las operaciones se ejecutan con prioridad elevada
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 94
Ejemplo protected Gate_Control is pragma Priority(28); entry Stop_And_Close; procedure Open; private Gate : Boolean := False; end Gate_Control; protected body Gate_Control is entry Stop_And_Close when Gate is begin Gate := False; end; procedure Open is begin Gate := True; end; end Gate_Control;
STRL -11/11/2003
Supongamos que – una tarea T (prioridad = 20) llama a Stop_and_Close y se suspende – otra tarea S (prioridad =27) llama a Open
La hebra de S ejecuta: – el código de Open – la evaluación de la barrera – el código de Stop_and Close (por cuenta de T) – la evaluación de la barrera otra vez – la vuelta al punto donde S llamó a Open
No hay cambio de contexto
©2001-2002 Juan Antonio de la Puente
Planificación - 95
48
Prioridad activa
La prioridad activa de una tarea es el máximo de su prioridad básica y la prioridad heredada de otras
Una tarea puede heredar prioridad de varias formas : – cuando ejecuta una operación protegida hereda el techo de prioridad del objeto – cuando ejecuta una instrucción accept hereda la prioridad de la tarea que llama al punto de entrada – durante su activación hereda la prioridad de su progenitor
©2001-2002 Juan Antonio de la Puente
STRL -11/11/2003
Planificación - 96
Protocolo de despacho
Se puede especificar un protocolo de despacho mediante un pragma de configuración:
pragma Task_Dispatching_Policy (FIFO_within_Priority);
– Hay una cola conceptual por cada nivel de prioridad – El núcleo de ejecución despacha la primera tarea de la cola de mayor prioridad que no esté vacía – Cuando una tarea se activa se coloca al final de la cola correspondiente a su prioridad activa – Las tareas desalojadas se colocan al principio de su cola
Puede haber otros protocolos de despacho, pero no son obligatorios
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 97
49
Otros mecanismos de planificación
Prioridades dinámicas (que se pueden cambiar por el
programa) Colas ordenadas por prioridades en puntos de entrada pragma Queuing_Policy (Priority_Queuing);
Identificadores y atributos de tareas Control síncrono y asíncrono de tareas Aborto inmediato Restricciones para facilitar el análisis de tiempos Requisitos sobre documentación de tiempos STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 98
Planificación en POSIX
POSIX
define un modelo de planificación con prioridades y desalojo La prioridad básica de una tarea se puede cambiar dinámicamente Se puede especificar el protocolo de despacho FIFO (como en Ada) – otros: Round-Robin, Sporadic Server, ... – debe al menos 32 prioridades distintas
Se puede especificar que todos los threads de un sistema se planifiquen globalmente (system contention)
– la política de planificación se puede ajustar por procesos o por threads
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 99
50
Ámbito de planificación
El ámbito de la planificación se define con #include int pthread_attr_setscope (pthread_attr_t *attr, int contentionscope);
También hay que especificar si los atributos de planificación son específicos de cada thread:
int pthread_attr_setinheritsched ( pthread_attr_t *attr, int inheritsched);
Normalmente se pone – PTHREAD_SCOPE_SYSTEM para contentionscope – PTHREAD_EXPLICIT_SCHED para inheritsched STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 100
Política de planificación
La política de planificación dentro del mismo nivel de prioridad se define con
int pthread_attr_setschedpolicy ( pthread_attr_t *attr, int policy);
El parámetro policy puede ser – SCHED_FIFO (orden de llegada) – SCHED_RR (turno circular con rodajas de tiempo) – SCHED_OTHER (dependiente de la implementación)
En general, hay que poner SCHED_FIFO
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 101
51
Prioridades
La prioridad de un thread es un parámetro de planificación:
#include struct sched_param { int sched_priority; ... }
y se especifica con int pthread_attr_setschedparam ( const pthread_attr_t *attr, const struct sched_param *param);
Los atributos se usan para crear el thread STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 102
Protocolo de acceso a mutex
Se puede especificar un protocolo de acceso con #include int pthread_mutexattr_setprotocol ( pthread_mutex_attr_t *attr, int *protocol);
El protocolo puede ser – PTHREAD_PRIO_INHERIT (herencia de prioridad) – PTHREAD_PRIO_PROTECT (techo de prioridad inmediato) – PTHREAD_PRIO_NONE (no hay herencia de prioridad)
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 103
52
Prioridad techo
Se especifica con int pthread_mutexattr_setprioceiling ( pthread_mutexattr_t *attr, int prioceiling);
Los atributos se usan para iniciar el mutex
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 104
Servidor esporádico
Un servidor esporádico es un thread que tiene una
capacidad limitada para ejecutar tareas esporádicas con prioridad alta – si se agota la capacidad se sigue ejecutando con prioridad baja – parámetros: capacidad, intervalo de relleno, prioridades alta y baja
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 105
53
Planificación en RT Java
Interfaz Schedulable – implementada por RealtimeThread, NoHeapRealtimeThread AsyncEventHandler y otros
Planificación con prioridades y desalojo – al menos 28 valores de prioridad – los threads que no son de tiempo real van pro debajo – los threads desalojados no se ponen al principio de la cola
En general, enfoque más dinámico que en Ada y POSIX
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 106
Interfaz Schedulable public Interface Schedulable extends java.lang.Runnable { public void addToFeasibility(); public void removeFromFeasibility(); public MemoryParameters getMemoryParameters(); public void setMemoryParameters(MemoryParameters memory); public ReleaseParameters getReleaseParameters(); public void setReleaseParameters(ReleaseParameters release); public SchedulingParameters getSchedulingParameters(); public void setSchedulingParameters( SchedulingParameters scheduling); public Scheduler getScheduler(); public void setScheduler(Scheduler scheduler); } STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 107
54
Scheduling Parameters public abstract class SchedulingParameters { public SchedulingParameters(); } public class PriorityParameters extends SchedulingParameters { public PriorityParameters(int priority); public int getPriority(); // at least 28 priority levels public void setPriority(int priority) throws IllegalArgumentException; ... } public class ImportanceParameters extends PriorityParameters { public ImportanceParameters(int priority, int importance); public int getImportance(); public void setImportance(int importance); ... } STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 108
Planificación de alto nivel
La clase Scheduler permite definir un planificador de alto nivel
– decidir se se pueden admitir nuevos objetos planificables (threads) – ajustar las prioridades de los objetos planificables
Todo ello de acuerdo con un algoritmo de aceptación (feasibility algorithm)
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 109
55
Scheduler public abstract class Scheduler { public Scheduler(); protected abstract void addToFeasibility(Schedulable s); protected abstract void removeFromFeasibility(Schedulable s); public abstract boolean isFeasible(); // checks the current set of schedulable objects public boolean changeIfFeasible(Schedulable schedulable, ReleaseParameters release, MemoryParameters memory); public static Scheduler getDefaultScheduler(); public static void setDefaultScheduler(Scheduler scheduler); public abstract java.lang.String getPolicyName(); } STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 110
Priority Scheduler class PriorityScheduler extends Scheduler { public PriorityScheduler() protected void addToFeasibility(Schedulable s); ... public void fireSchedulable(Schedulable schedulable); public int getMaxPriority(); public int getMinPriority(); public int getNormPriority(); public static PriorityScheduler instance(); ... }
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 111
56
Otros mecanismos
Herencia de prioridades y techo de prioridad (priority ceiling emulation)
Threads periódicos y aperiódicos – grupos de threads aperiódicos
Colas ordenadas por prioridades
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 112
Resumen
Un método de planificación tiene dos partes: – un algoritmo de reparto de recursos – un método de análisis del comportamiento temporal
El método tradicional se basa en un ejecutivo cíclico – el análisis es inmediato (por construcción) – es poco flexible y de bajo nivel
Un método mejor se basa en el uso de prioridades fijas – las prioridades se asignan por orden de períodos, plazos o de forma arbitraria – se puede analizar el tiempo de respuesta de las tareas – se pueden analizar tareas con interacción si se usa un protocolo de herencia o techo de prioridad
STRL -11/11/2003
©2001-2002 Juan Antonio de la Puente
Planificación - 113
57
dit UPM
Sistemas distribuidos Alejandro Alonso Juan Antonio de la Puente DIT/UPM
Objetivos
Comprender los problemas que se plantean en la realización de sistemas de tiempo real estricto distribuidos
Conocer los protocolos y métodos de análisis más adecuados para este tipo de sistemas
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
1
Sistemas distribuidos
Un sistema distribuido está formado por un conjunto de computadores autónomos conectados para conseguir un objetivo común Ventajas: – – – –
rendimiento fiabilidad cercanía a los elementos del entorno físico flexibilidad
Los sistemas de tiempo real distribuidos (STRD) tienen requisitos temporales – como siempre, esto añade complejidad
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
2
Arquitectura de STRD
Conjunto de nodos conectados por redes de comunicación – cada nodo puede ser un multiprocesador conectado por buses
Sólo consideraremos sistemas débilmente acoplados – los nodos no tienen memoria común – comunicación por mensajes
Se suelen estructurar jerárquicamente, para reflejar la diversidad en – la escala de tiempos – la información tratada – los requisitos de cada procesador
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
3
Ejemplo: sistemas de fabricación Procesamiento de información
Centro de Proceso de Datos
Control de planta
Control de planta
Control de área
Control de área Control de Celda Robots
Control de celda
Control de Celda
PLCs
PLCs
Control de máquina
Robots
Los requisitos temporales son tanto más estrictos cuanto menor es el grado de abstracción ©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
STRL - 03/12/2003
4
Ejemplo: sistema de aviónica avión
S
S
A
votación
procesador
Nodo 1
S
A
A
votación
procesador
procesador
votación
Nodo 2
bus ARINC
Sistemas con requisitos de seguridad críticos – redundancia activa (sistema modular triple, bus duplicado, etc.) – requisitos de tiempo real estrictos STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
5
Requisitos temporales y planificación
Tiempo global – relojes – requisitos temporales
Asignación de tareas a procesadores
Planificación – requisitos temporales globales – planificación local y global – planificación de los mensajes
Tolerancia de fallos
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
6
Tiempo global
Los componentes de un sistema distribuido deben tener una visión global del tiempo – referencia de tiempo común » se mantienen los requisitos de monotonicidad y variación acotada » tiempo del sistema o TAI » acceso a reloj global (p.e. GPS) o relojes locales sincronizados
– requisitos de tiempo globales (end-to-end) » requisitos temporales asociados a transacciones (conjunto de actividades que constituyen la respuesta a un suceso)
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
7
Sincronización de relojes
Los relojes locales tienen variaciones que obligan a sincronizarlos – movimiento ρ : 1− ρ ≤
τ (t ′) − τ (t ) t′ −t
≤ 1+ ρ
– relojes de cuarzo: ρ ≈ 2·10-6 (1 s en 6 días) » si la granularidad del tiempo es del orden de 1 ms hay que sincronizar los relojes cada 8 min
– sincronización «suave» » para adelantar aumentar la frecuencia incremento acotado del valor del reloj » para retrasar disminuir la frecuencia mantener el valor durante un tiempo acotado
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
8
Algoritmos de sincronización de relojes
Sincronización centralizada – un computador actúa como servidor de hora – el servidor radia periódicamente la hora a los demás – problema: si falla el servidor se pierde la sincronización
Sincronización distribuida – buscar un consenso distribuido sobre el valor del tiempo » hay varios algoritmos para esto
– requisitos » diferencia entre dos relojes cualesquiera acotada » diferencia con el tiempo real acotada
Granularidad del algoritmo de sincronización – ∆ : máxima diferencia entre dos relojes cualesquiera
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
9
Requisitos de tiempo globales
Los plazos de respuesta se asocian a las transacciones – actividades que constituyen la respuesta a un suceso Ejemplo: procesador A
DSP
SAD
procesador B
red local
entorno
» La respuesta comienza con la lectura de un dato (en SAD) » Termina cuando se actúa sobre el sistema físico (en el procesador 2) » El tiempo de respuesta dura desde la lectura hasta el final STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
10
Distribución de la carga
Asignación de tareas a procesadores – estática: al diseñar el sistema – dinámica: durante la ejecución Consideraremos, en general que la asignación es estática
Criterios de asignación: – recursos disponibles y requisitos de utilización – distribución geográfica – replicación de tareas
Problema muy complejo (NP-duro) – más fácil con asignación estática » DMS, EDF son óptimos en cada nodo » hay que tener en cuenta el tiempo de transmisión de los mensajes
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
11
Planificación y análisis temporal
Para poder analizar el tiempo de respuesta global de una transacción hay que conocer – los tiempos de cómputo máximos de cada tarea que interviene en la transacción – los tiempos de transmisión máximos de los mensajes
Hace falta que el tiempo de transmisión esté acotado – protocolos de comunicación deterministas – los mensajes tienen atributos temporales (período, plazo) » la planificación de los mensajes es importante
– se considera el tiempo de transmisión completo » desde que una tarea envía el mensaje hasta que otra tarea lo recibe » se incluyen los tiempos de espera en colas, tampones, etc.
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
12
Protocolos de acceso deterministas
CSMA/CD no es adecuado para sistemas de tiempo real – En general no se puede acotar el tiempo de trasmisión de los mensajes – Pero se puede superponer un protocolo de acceso determinista (por ejemplo TDMA) sobre una red IEEE 802.3.
Es mejor usar un protocolo de comunicación determinista Ejemplos: – TDMA (time-division multiple access) – Paso de testigo temporizado – Protocolos de acceso con prioridades
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
13
TDMA
Equivalente del ejecutivo cíclico para sistemas distribuidos – todos los procesadores tienen relojes sincronizados entre sí – el acceso al medio se divide en rodajas de tiempo – cada procesador tiene asignadas rodajas específicas durante las cuales puede enviar mensajes
La planificación del medio es estática – no puede haber colisiones – el tiempo máximo de transmisión está acotado
Este protocolo es predecible y determinista – sin embargo, es poco flexible y difícil de mantener – se puede desaprovechar la red
Se usa en TTA (Time-Triggered Architecture) – para sistemas de alta integridad con planificación cíclica – tolerancia de fallos por redundancia activa
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
14
Paso de testigo temporizado
Se usa con redes rápidas, como FDDI El ancho de banda se asigna cíclicamente Cada nodo dispone de un tiempo para enviar mensajes cuando tiene el testigo – el tiempo de envío debe ser suficiente para enviar los mensajes en su plazo – no puede haber colisiones
El tiempo de rotación del testigo está acotado
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
15
Acceso al medio con prioridad
Los mensajes tienen asociada un prioridad
Cuando varios procesadores intentan transmitir, hay un mecanismo que resuelve la contienda a favor del mensaje de mayor prioridad
Hace falta un intervalo de prioridades sufciente
Ejemplo: CAN (controlled area network)
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
16
CAN (ISO 11898)
Bus para conectar dispositivos inteligentes – – – –
originalmente para automóviles medio físico: par retorcido, longitud máxima 40 m velocidad 1 Mbit/s longitud máxima de los mensajes: 64 bits (8 octetos útiles)
El control de acceso al medio se basa en prioridades – cada mensaje tiene un identificador que indica la prioridad del mensaje » » » »
11 bits, 2047 valores de prioridad si dos nodos intentan transmitir a la vez se produce una colisión las colisiones se resuelven dinámicamente por hardware gana el mensaje con prioridad más alta (valor más bajo)
Todos los nodos reciben todos los mensajes – cada uno selecciona los que le interesan
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
17
Estructura de mensajes comienzo
arbitraje longitud
datos
CRC
ACK fin
1
STRL - 03/12/2003
12
6
max 64
16
2
7
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
18
Protocolo de acceso al medio
Se usa el campo de arbitraje del mensaje – identificador + bit de petición remota
Cada vez que se transmite un bit – si trasmite un 0, continúa con el siguiente bit – si transmite un 1 y recibe un 1, continúa con el siguiente bit – si transmite un 1 y recibe un 0, se detiene y no vuelve a empezar hasta que el bus está libre
El bit 0 es dominante y el bit 1 es recesivo – es como un AND
Cada mensaje tiene un identificador único No hay dos nodos transmitiendo con el mismo identificador
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
19
Ejemplo
Nodo 1
0101101001
0
1
0
0 1
0
Colisión
Nodo 2
0101111010 Bus libre
STRL - 03/12/2003
1 1
0
1
0
1 1
1
0
1
0
1 1
0 1
0
Bus
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
20
Análisis del tiempo de envío Se puede aplicar el análisis de tiempo de respuesta para planificación con prioridades fijas – se planifica el tiempo de uso del bus, no del procesador – pero la planificación se hace sin desalojo » se modela como un bloqueo de duración igual al tiempo de transmisión del mensaje más largo BBUS = 0,13 ms
– se supone que el controlador transmite siempre que hay mensajes pendientes – se supone que no hay errores de transmisión
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
21
Cálculo del tiempo de envío Para mensajes generados por tareas periódicas – – – –
T: C: BBUS: R:
Período Tiempo de transmisión Bloqueo por exclusión mutua Tiempo de envío en el peor caso
R i = Ci + BBUS +
STRL - 03/12/2003
Ri ⋅C j j
∑( ) T
j ∈hp i
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
22
Planificación holística
Se trata de integrar el análisis de tiempo de respuesta de los procesadores y de la red de comunicaciones – las tareas se planifican con prioridades fijas en cada procesador – la red se planifica con prioridades (CAN) o con otro método determinista (TDMA, paso de testigo) – las relaciones de precedencia se modelan con jitter
Consideramos un modelo lineal suceso-respuesta – un suceso da lugar a una respuesta formada por una secuencia de sucesos internos y acciones (tareas o mensajes) – el conjunto constituye una transacción
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
23
Modelo lineal P1 e1
a1
red e12
P2 e23
a2
a3
d12 D12 ED13
Sucesos
– externos(ej. e1) – internos (ej. e12)
Plazos – locales (ej. d12) – globales (ej. D13) – de principio a fin (ej. ED13)
Sucesos periódicos – todos con el mismo período, T1
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
STRL - 03/12/2003
24
Ejemplo e1
R13
a1 J12
e12
a2 J13
e23
r13
a3
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
25
Tiempo de respuesta
El tiempo de respuesta global es Rij =
∑r
k ∈Aij
ik
donde rik es el tiempo de respuesta local de ak relativo a su activación para ei Aij es el conjunto de acciones de la respuesta a ei previas a aj
Los tiempos de respuesta locales se calculan de forma independiente – en general el análisis es pesimista » el peor caso no se da a la vez en todas las acciones
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
STRL - 03/12/2003
26
Tiempos de respuesta locales
Aplicamos la ecuación generalizada: w ijn (q ) + J ik w (q ) = (q + 1) ⋅ C j + B j + ∑ ⋅ Ck Tk k ∈hp ( i ) Se termina cuando w ij (q ) ≤ (q + 1)T j n +1 ij
(
rij = max w in (q ) − q ⋅ T j q = 0,1,2,K
)
Para el jitter de activación se toma: J ik ≈ Rik −1
(para la primera acción J es nulo)
– en general dependen unos de otros – inicialmente todos los Jik valen 0 – se va iterando hasta converger STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
27
Ejemplo P1 e1 (T=30)
red e12
a1
a2
e56
a6
a5
P2 e23
a3
e45
a4
e4 (T=40)
Acción
T
C
P
D
a1
30
5
H
30
a2
30
2
L
—
a3
30
20
L
60
a4
40
5
H
—
a5
40
10
H
—
a6
40
10
L
70
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
STRL - 03/12/2003
28
Tiempos de respuesta
STRL - 03/12/2003
Acción
T
C
P
R
D
a1
30
5
H
5
30
a2
30
2
L
17
—
a3
30
20
L
42
60
a4
40
5
H
5
—
a5
40
10
H
15
—
a6
40
10
L
30
70
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
29
Técnicas avanzadas
Asignación de prioridades – recocido simulado
Análisis de tiempo de respuesta – fases dinámicas
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
30
Referencias
Ken Tindell y John Clark “Holistic Schedulability Analysis for Distributed Real-Time Systems” Microprocessing and Microprogramming, 50, 2-3,April 1994
Javier Gutiérrez, Carlos Palencia y Michael González Harbour “Schedulability Analysis of Distributed Hard Real-Time Systems with Multiple-Event Synchronization” Proc. ECRTS’2000
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
31
dit UPM
Sistemas distribuidos Alejandro Alonso Juan Antonio de la Puente DIT/UPM
Objetivos
Comprender los problemas que se plantean en la realización de sistemas de tiempo real estricto distribuidos
Conocer los protocolos y métodos de análisis más adecuados para este tipo de sistemas
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
1
Sistemas distribuidos
Un sistema distribuido está formado por un conjunto de computadores autónomos conectados para conseguir un objetivo común Ventajas: – – – –
rendimiento fiabilidad cercanía a los elementos del entorno físico flexibilidad
Los sistemas de tiempo real distribuidos (STRD) tienen requisitos temporales – como siempre, esto añade complejidad
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
2
Arquitectura de STRD
Conjunto de nodos conectados por redes de comunicación – cada nodo puede ser un multiprocesador conectado por buses
Sólo consideraremos sistemas débilmente acoplados – los nodos no tienen memoria común – comunicación por mensajes
Se suelen estructurar jerárquicamente, para reflejar la diversidad en – la escala de tiempos – la información tratada – los requisitos de cada procesador
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
3
Ejemplo: sistemas de fabricación Procesamiento de información
Centro de Proceso de Datos
Control de planta
Control de planta
Control de área
Control de área Control de Celda Robots
Control de celda
Control de Celda
PLCs
PLCs
Control de máquina
Robots
Los requisitos temporales son tanto más estrictos cuanto menor es el grado de abstracción ©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
STRL - 03/12/2003
4
Ejemplo: sistema de aviónica avión
S
S
A
votación
procesador
Nodo 1
S
A
A
votación
procesador
procesador
votación
Nodo 2
bus ARINC
Sistemas con requisitos de seguridad críticos – redundancia activa (sistema modular triple, bus duplicado, etc.) – requisitos de tiempo real estrictos STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
5
Requisitos temporales y planificación
Tiempo global – relojes – requisitos temporales
Asignación de tareas a procesadores
Planificación – requisitos temporales globales – planificación local y global – planificación de los mensajes
Tolerancia de fallos
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
6
Tiempo global
Los componentes de un sistema distribuido deben tener una visión global del tiempo – referencia de tiempo común » se mantienen los requisitos de monotonicidad y variación acotada » tiempo del sistema o TAI » acceso a reloj global (p.e. GPS) o relojes locales sincronizados
– requisitos de tiempo globales (end-to-end) » requisitos temporales asociados a transacciones (conjunto de actividades que constituyen la respuesta a un suceso)
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
7
Sincronización de relojes
Los relojes locales tienen variaciones que obligan a sincronizarlos – movimiento ρ : 1− ρ ≤
τ (t ′) − τ (t ) t′ −t
≤ 1+ ρ
– relojes de cuarzo: ρ ≈ 2·10-6 (1 s en 6 días) » si la granularidad del tiempo es del orden de 1 ms hay que sincronizar los relojes cada 8 min
– sincronización «suave» » para adelantar aumentar la frecuencia incremento acotado del valor del reloj » para retrasar disminuir la frecuencia mantener el valor durante un tiempo acotado
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
8
Algoritmos de sincronización de relojes
Sincronización centralizada – un computador actúa como servidor de hora – el servidor radia periódicamente la hora a los demás – problema: si falla el servidor se pierde la sincronización
Sincronización distribuida – buscar un consenso distribuido sobre el valor del tiempo » hay varios algoritmos para esto
– requisitos » diferencia entre dos relojes cualesquiera acotada » diferencia con el tiempo real acotada
Granularidad del algoritmo de sincronización – ∆ : máxima diferencia entre dos relojes cualesquiera
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
9
Requisitos de tiempo globales
Los plazos de respuesta se asocian a las transacciones – actividades que constituyen la respuesta a un suceso Ejemplo: procesador A
DSP
SAD
procesador B
red local
entorno
» La respuesta comienza con la lectura de un dato (en SAD) » Termina cuando se actúa sobre el sistema físico (en el procesador 2) » El tiempo de respuesta dura desde la lectura hasta el final STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
10
Distribución de la carga
Asignación de tareas a procesadores – estática: al diseñar el sistema – dinámica: durante la ejecución Consideraremos, en general que la asignación es estática
Criterios de asignación: – recursos disponibles y requisitos de utilización – distribución geográfica – replicación de tareas
Problema muy complejo (NP-duro) – más fácil con asignación estática » DMS, EDF son óptimos en cada nodo » hay que tener en cuenta el tiempo de transmisión de los mensajes
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
11
Planificación y análisis temporal
Para poder analizar el tiempo de respuesta global de una transacción hay que conocer – los tiempos de cómputo máximos de cada tarea que interviene en la transacción – los tiempos de transmisión máximos de los mensajes
Hace falta que el tiempo de transmisión esté acotado – protocolos de comunicación deterministas – los mensajes tienen atributos temporales (período, plazo) » la planificación de los mensajes es importante
– se considera el tiempo de transmisión completo » desde que una tarea envía el mensaje hasta que otra tarea lo recibe » se incluyen los tiempos de espera en colas, tampones, etc.
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
12
Protocolos de acceso deterministas
CSMA/CD no es adecuado para sistemas de tiempo real – En general no se puede acotar el tiempo de trasmisión de los mensajes – Pero se puede superponer un protocolo de acceso determinista (por ejemplo TDMA) sobre una red IEEE 802.3.
Es mejor usar un protocolo de comunicación determinista Ejemplos: – TDMA (time-division multiple access) – Paso de testigo temporizado – Protocolos de acceso con prioridades
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
13
TDMA
Equivalente del ejecutivo cíclico para sistemas distribuidos – todos los procesadores tienen relojes sincronizados entre sí – el acceso al medio se divide en rodajas de tiempo – cada procesador tiene asignadas rodajas específicas durante las cuales puede enviar mensajes
La planificación del medio es estática – no puede haber colisiones – el tiempo máximo de transmisión está acotado
Este protocolo es predecible y determinista – sin embargo, es poco flexible y difícil de mantener – se puede desaprovechar la red
Se usa en TTA (Time-Triggered Architecture) – para sistemas de alta integridad con planificación cíclica – tolerancia de fallos por redundancia activa
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
14
Paso de testigo temporizado
Se usa con redes rápidas, como FDDI El ancho de banda se asigna cíclicamente Cada nodo dispone de un tiempo para enviar mensajes cuando tiene el testigo – el tiempo de envío debe ser suficiente para enviar los mensajes en su plazo – no puede haber colisiones
El tiempo de rotación del testigo está acotado
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
15
Acceso al medio con prioridad
Los mensajes tienen asociada un prioridad
Cuando varios procesadores intentan transmitir, hay un mecanismo que resuelve la contienda a favor del mensaje de mayor prioridad
Hace falta un intervalo de prioridades sufciente
Ejemplo: CAN (controlled area network)
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
16
CAN (ISO 11898)
Bus para conectar dispositivos inteligentes – – – –
originalmente para automóviles medio físico: par retorcido, longitud máxima 40 m velocidad 1 Mbit/s longitud máxima de los mensajes: 64 bits (8 octetos útiles)
El control de acceso al medio se basa en prioridades – cada mensaje tiene un identificador que indica la prioridad del mensaje » » » »
11 bits, 2047 valores de prioridad si dos nodos intentan transmitir a la vez se produce una colisión las colisiones se resuelven dinámicamente por hardware gana el mensaje con prioridad más alta (valor más bajo)
Todos los nodos reciben todos los mensajes – cada uno selecciona los que le interesan
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
17
Estructura de mensajes comienzo
arbitraje longitud
datos
CRC
ACK fin
1
STRL - 03/12/2003
12
6
max 64
16
2
7
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
18
Protocolo de acceso al medio
Se usa el campo de arbitraje del mensaje – identificador + bit de petición remota
Cada vez que se transmite un bit – si trasmite un 0, continúa con el siguiente bit – si transmite un 1 y recibe un 1, continúa con el siguiente bit – si transmite un 1 y recibe un 0, se detiene y no vuelve a empezar hasta que el bus está libre
El bit 0 es dominante y el bit 1 es recesivo – es como un AND
Cada mensaje tiene un identificador único No hay dos nodos transmitiendo con el mismo identificador
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
19
Ejemplo
Nodo 1
0101101001
0
1
0
0 1
0
Colisión
Nodo 2
0101111010 Bus libre
STRL - 03/12/2003
1 1
0
1
0
1 1
1
0
1
0
1 1
0 1
0
Bus
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
20
Análisis del tiempo de envío Se puede aplicar el análisis de tiempo de respuesta para planificación con prioridades fijas – se planifica el tiempo de uso del bus, no del procesador – pero la planificación se hace sin desalojo » se modela como un bloqueo de duración igual al tiempo de transmisión del mensaje más largo BBUS = 0,13 ms
– se supone que el controlador transmite siempre que hay mensajes pendientes – se supone que no hay errores de transmisión
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
21
Cálculo del tiempo de envío Para mensajes generados por tareas periódicas – – – –
T: C: BBUS: R:
Período Tiempo de transmisión Bloqueo por exclusión mutua Tiempo de envío en el peor caso
R i = Ci + BBUS +
STRL - 03/12/2003
Ri ⋅C j j
∑( ) T
j ∈hp i
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
22
Planificación holística
Se trata de integrar el análisis de tiempo de respuesta de los procesadores y de la red de comunicaciones – las tareas se planifican con prioridades fijas en cada procesador – la red se planifica con prioridades (CAN) o con otro método determinista (TDMA, paso de testigo) – las relaciones de precedencia se modelan con jitter
Consideramos un modelo lineal suceso-respuesta – un suceso da lugar a una respuesta formada por una secuencia de sucesos internos y acciones (tareas o mensajes) – el conjunto constituye una transacción
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
23
Modelo lineal P1 e1
a1
red e12
P2 e23
a2
a3
d12 D12 ED13
Sucesos
– externos(ej. e1) – internos (ej. e12)
Plazos – locales (ej. d12) – globales (ej. D13) – de principio a fin (ej. ED13)
Sucesos periódicos – todos con el mismo período, T1
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
STRL - 03/12/2003
24
Ejemplo e1
R13
a1 J12
e12
a2 J13
e23
r13
a3
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
25
Tiempo de respuesta
El tiempo de respuesta global es Rij =
∑r
k ∈Aij
ik
donde rik es el tiempo de respuesta local de ak relativo a su activación para ei Aij es el conjunto de acciones de la respuesta a ei previas a aj
Los tiempos de respuesta locales se calculan de forma independiente – en general el análisis es pesimista » el peor caso no se da a la vez en todas las acciones
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
STRL - 03/12/2003
26
Tiempos de respuesta locales
Aplicamos la ecuación generalizada: w ijn (q ) + J ik w (q ) = (q + 1) ⋅ C j + B j + ∑ ⋅ Ck Tk k ∈hp ( i ) Se termina cuando w ij (q ) ≤ (q + 1)T j n +1 ij
(
rij = max w in (q ) − q ⋅ T j q = 0,1,2,K
)
Para el jitter de activación se toma: J ik ≈ Rik −1
(para la primera acción J es nulo)
– en general dependen unos de otros – inicialmente todos los Jik valen 0 – se va iterando hasta converger STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
27
Ejemplo P1 e1 (T=30)
red e12
a1
a2
e56
a6
a5
P2 e23
a3
e45
a4
e4 (T=40)
Acción
T
C
P
D
a1
30
5
H
30
a2
30
2
L
—
a3
30
20
L
60
a4
40
5
H
—
a5
40
10
H
—
a6
40
10
L
70
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
STRL - 03/12/2003
28
Tiempos de respuesta
STRL - 03/12/2003
Acción
T
C
P
R
D
a1
30
5
H
5
30
a2
30
2
L
17
—
a3
30
20
L
42
60
a4
40
5
H
5
—
a5
40
10
H
15
—
a6
40
10
L
30
70
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
29
Técnicas avanzadas
Asignación de prioridades – recocido simulado
Análisis de tiempo de respuesta – fases dinámicas
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
30
Referencias
Ken Tindell y John Clark “Holistic Schedulability Analysis for Distributed Real-Time Systems” Microprocessing and Microprogramming, 50, 2-3,April 1994
Javier Gutiérrez, Carlos Palencia y Michael González Harbour “Schedulability Analysis of Distributed Hard Real-Time Systems with Multiple-Event Synchronization” Proc. ECRTS’2000
STRL - 03/12/2003
©1998-2003 Alejandro Alonso y Juan Antonio de la Puente
31
dit UPM
Programación de bajo nivel Juan Antonio de la Puente DIT/UPM
Transparencias basadas en el capítulo 15 del libro de A. Burns y A. Wellings Real-Time Systems and Programming Languages, 3ª edición (2001)
Objetivos
Los sistemas de tiempo real suelen tener dispositivos de entrada y salida especiales Los manejadores de dispositivos forman parte del software de aplicación Veremos cómo controlar los dispositivos de hardware en un lenguaje de alto nivel Veremos también cómo incluir los manejadores de dispositivos en el modelo de tareas de tempo real
STRL - 20/11/2002
©2001-2002 Juan Antonio de la Puente
1
Índice
Mecanismos de hardware para entrada y salida y manejadores de dispositivos Mecanismos de bajo nivel en Ada – – – –
cláusulas de representación manejo de interrupciones ejemplo código de máquina
Programación de dispositivos en C Planificación con manejadores de dispositivos
©2001-2002 Juan Antonio de la Puente
STRL - 20/11/2002
2
Arquitecturas de entrada-salida
datos memoria
datos CPU
dispositivo
direcciones
dispositivo
Bus de E/S separado del de memoria
direcciones datos CPU
memoria
dispositivo
direcciones
STRL - 20/11/2002
dispositivo
Bus único para E/S y memoria (memory mapped)
©2001-2002 Juan Antonio de la Puente
3
Interfaz con los dispositivos de entrada y salida
Los dispositivos de entrada-salida se conectan a los otros elementos del computador mediante controladores que presentan una interfaz homogénea El procesador intercambia datos e información de control y estado con los controladores mediante registros de hardware La forma concreta de hacerlo depende de la arquitectura de entrada y salida
STRL - 20/11/2002
©2001-2002 Juan Antonio de la Puente
4
Entrada y salida en lenguaje de máquina Bus de E/S separado Registros en espacio de direcciones de E/S (direcciones de puerto) Se leen y escriben mediante instrucciones de E/S específicas
Bus de memoria Registros en el espacio de direcciones de memoria
in r, port out r, port
mov r, address mov address, r
Ejemplo: Intel 486 & Pentium
STRL - 20/11/2002
Se leen y escriben mediante instrucciones de transferencia de datos
Ejemplo: M 68000, PowerPC
©2001-2002 Juan Antonio de la Puente
5
Sincronización Por consulta (status driven) El procesador interroga al controlador para comprobar el estado del dispositivo. Operaciones – test – control – E/S
Complicado e ineficiente A veces es la única opción (en sistemas muy críticos es posible que no se permita usar interrupciones)
Por interrupción (interrupt driven) El controlador presenta una interrupción en determinadas circunstancias Un manejador de interrupción se encarga de tomar la acción adecuada Varios tipos – controlado por programa – acceso directo a memoria – controlado por canal
Puede ser difícil estimar el tiempo de computo – robo de ciclos al procesador
STRL - 20/11/2002
©2001-2002 Juan Antonio de la Puente
6
Mecanismos de interrupción (1)
Cambio de contexto – se guarda el estado del procesador antes de la interrupción – se carga el estado del manejador de interrupción – cuando se completa el manejador, se restaura el estado anterior
Soporte de hardware – básico: sólo se guarda el contador de programa (PC) – parcial: PC y PSW (registro de estado) – completo: todo el contexto – Puede hacer falta hacer una parte en software
STRL - 20/11/2002
©2001-2002 Juan Antonio de la Puente
7
Mecanismos de interrupción (2)
Identificación del dispositivo que interrumpe – por vector de interrupción: array asociado al hardware de interrupción que contiene direcciones de memoria con manejadores de interrupción y otros datos (p.e. palabra de estado) – por estado: cada interrupción tiene una palabra de estado asociada que indica cuál es el origen de la misma – por consulta: un manejador general consulta a los dispositivos para averiguar cuál ha interrumpido
Identificación de la causa de la interrupción – consultando el estado del dispositivo – con diferentes interrupciones para el mismo dispositivo
STRL - 20/11/2002
©2001-2002 Juan Antonio de la Puente
8
Mecanismos de interrupción (3)
Control de interrupciones Las interrupciones de un dispositivo pueden estar permitidas (enabled) o inhibidas (disabled) – mediante indicadores (flags) en registros de estado – mediante una máscara (mask), con un bit por dispositivo – mediante un nivel de prioridad de hardware » cada dispositivo tiene un nivel asociado » si el nivel del procesador es mayor o igual que el de un dispositivo, no se aceptan interrupciones de éste
Control de prioridad – – – –
a veces se asocia una prioridad a cada fuente de interrupciones la prioridad indica la urgencia relativa de la interrupción puede ser estática o dinámica normalmente está relacionada con los niveles de prioridad del procesador
STRL - 20/11/2002
©2001-2002 Juan Antonio de la Puente
9
Ejemplo de sistema de entrada y salida
Suponemos una arquitectura con E/S por bus de memoria, con interrupciones (como la M68000) Cada dispositivo tiene dos tipos de registros – Registros de control y estado (CSR), que contienen información sobre el dispositivo y el control de interrupciones – Registros de datos (DBR), que contienen los datos que se transmiten al dispositivo o desde él
Un mismo dispositivo puede tener varios CSR o DBR Cuando se produce una interrupción, se guarda el estado (PC y PSW) en la pila, y se carga el nuevo estado del vector de interrupción correspondiente – Las interrupciones y el procesador tienen asociada una prioridad – Una interrupción puede desalojar a un manejador con prioridad más baja
©2001-2002 Juan Antonio de la Puente
STRL - 20/11/2002
10
Estructura de los registros
15
CSR
14
13
12
errors B R I E 15
B
9
8
unit
7
6
5
4
R
I
reserved function E
14
13
12
11
10
9
8
7
6
5
3
4
unused 15
STRL - 20/11/2002
10
2
1
0
device busy device ready / done interrupt enable device enable
DBR
PSW
11
14
13
mode
12
11
3
2
1
0
2
1
0
data 10
9
unused
8
7
6
5
priority
4
3
condition codes
©2001-2002 Juan Antonio de la Puente
11
Manejadores de dispositivos Para realizar manejadores de dispositivos hace falta: – Un modelo abstracto de la gestión de dispositivos » procesos sincronizados por interrupciones
– Manipular registros de hardware y direcciones » un registro se puede representar como una variable, un objeto o un canal de comunicación
– Enlazar interrupciones con código. Algunas posibilidades son: » » » » »
llamada a procedimiento activación de proceso esporádico suceso asíncrono sincronización con variable de condición mensaje
Todos estos métodos (excepto la llamada a procedimiento) requieren un cambio de contexto STRL - 20/11/2002
©2001-2002 Juan Antonio de la Puente
12
Manejadores de dispositivos en Ada
Modelo abstracto de dispositivos: tareas en hardware
Las tareas que usan el dispositivo se tienen que comunicar y sincronizar con las tareas de hardware – acceso a registros de hardware – sincronización con interrupciones
Manejador: subsistema que controla el acceso al dispositivo – objeto protegido: abstracción de comunicación y sincronización – registros como variables en memoria – interrupciones asociadas a procedimientos protegidos
STRL - 20/11/2002
©2001-2002 Juan Antonio de la Puente
13
Esquema general software
manejador
hardware
interrupción
tarea cliente
registros
STRL - 20/11/2002
©2001-2002 Juan Antonio de la Puente
14
Mecanismos de bajo nivel en Ada Ada 95 tiene varios mecanismos de bajo nivel que permiten acceder a registros, direcciones e interrupciones – cláusulas de representación » permiten especificar la representación de tipos y objetos en la arquitectura de hardware representación de atributos (tamaño, dirección, alineación) representación de tipos enumerados representación de registros
– manejadores de interrupciones » permiten asociar una interrupción a un procedimiento protegido
– subprogramas en lenguaje de máquina » permiten un control total sobre la arquitectura de hardware
STRL - 20/11/2002
©2001-2002 Juan Antonio de la Puente
15
Cláusulas de representación de atributos
Tamaño type Data_Register is mod 2**8; for Data_Register'Size use 16; -- los objetos de tipo Data_Register ocupan 16 bits
Dirección Data_Buffer : Data_Register; for Data_Buffer'Address use System.Storage_Elements.To_Address(8#177560#); -- Data_Buffer se ubica en la dirección 177560 octal
Alineación for Data_Register'Alignment use 2; -- los objetos de tipo Data_Register se tienen que ubicar -- en direcciones múltiplo de 2
STRL - 20/11/2002
©2001-2002 Juan Antonio de la Puente
16
Otras cláusulas de representación
Codificación interna de los valores de un tipo enumerado type Flag is (On, Off); for Flag use (On => 1, Off => 0); -- representación numérica de los valores del tipo Flag
Orden de bits en los objetos de un tipo de datos type Register is mod 256; for Register'Bit_Order use Low_Order_First; -- el bit 0 es el menos significativo
STRL - 20/11/2002
©2001-2002 Juan Antonio de la Puente
17
Cláusulas de representación de registros
Orden, posición y tamaño de los componentes de un tipo registro type Control_Register is record Enable : Flag; Done : Flag; Busy : Flag; Error : Error_Type; end record; for Control_Register use record Enable at 0 range 0 .. 0; Done at 0 range 7 .. 7; Busy at 0 range 11 .. 11; Error at 0 range 12 .. 15; end record;
STRL - 20/11/2002
©2001-2002 Juan Antonio de la Puente
18
System (1) package System is ... -- storage-related declarations type Address is implementation-defined; Null_Address : constant Address; Storage_Unit : constant := implementation-defined; Word_Size : constant := implementation-defined * Storage_Unit; Memory_Size : constant := implementation-defined; -- address comparison function "