Seminario de Programación en Ada



Documentos relacionados
Gestión del tiempo en Ada

Planificación de tareas en Ada

Parte I: Programación en Ada

dit Control de drenaje de una mina Índice Juan Antonio de la Puente DIT/UPM Introducción Arquitectura lógica Arquitectura física Realización en Ada

Sistemas de Tiempo Real Planificación de Sistemas de Tiempo Real

Tema 2: Implementación del núcleo de un Sistema Operativo

Concurrencia. Primitivas IPC con bloqueo

dit Entorno de ejecución Juan Antonio de la Puente DIT/UPM UPM

Gestión de procesos DEFINICIONES DE PROCESOS

PLANIFICACIÓN DE PROCESOS

Benemérita Universidad Autónoma del Estado de Puebla

Sistemas Distribuidos de Tiempo Real

SOLUCION EXAMEN junio 2006

Señal de petición de Interrupción

SIMM: TEORÍA DE LOS S.O. I.E.S. JUAN DE LA CIERVA CURSO 2007/2008

2 Sea una unidad de disco duro de brazo móvil con las siguientes características:

Tema 4.- Pilas y Colas

El soporte del sistema operativo. Hace que un computador sea más fácil de usar. Permite que los recursos del computador se aprovechen mejor.

Temporizadores y contadores en tiempo real: El módulo Timer0 y el prescaler del PIC

DESCRIPCION DE PLC UP32 17/07/11 MAN-PLC-UP32-01A

Sistemas Operativos Tema 6. Planificación de procesos José Miguel Santos Alexis Quesada Francisco Santana

Sistemas operativos avanzados. 1.3 Algoritmos de planificación del procesador

Programación Concurrente

Procesos. Planificación del Procesador.

1 HILOS (THREADS) EN JAVA

Estructuras de Sistemas Operativos

Trey-SAT Pag. 1. Manual de usuario

PROGRAMACION CONCURRENTE

Procesadores de lenguaje Tema 5 Comprobación de tipos

PROGRAMACION CONCURRENTE. I.2 Recursos para la concurrencia.

VHDL. Carlos Andrés Luna Vázquez. Lección 5. Sentencias concurrentes


Sistemas Operativos. Curso 2014 Planificación

Unidad 1: Conceptos generales de Sistemas Operativos.

Sistemas Operativos. Curso 2015 Planificación

Benemérita Universidad Autónoma del Estado de Puebla

Tarea 4.2 Memoria Virtual

Tema 4. Gestión de entrada/salida

Planificación de Procesos. Módulo 5. Departamento de Informática Facultad de Ingeniería Universidad Nacional de la Patagonia San Juan Bosco

PROGRAMACIÓN CONCURRENTE. Tema 5 Monitores

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario

CDI Exclusión mutua a nivel alto. conceptos

Tema 1 Introducción. Arquitectura básica y Sistemas Operativos. Fundamentos de Informática

Introducción a los Sistemas Operativos

1 (2 5 puntos) Responda con brevedad y precisión a las siguientes preguntas:

ESCUELA NORMAL PROFESOR CARLOS A. CARRILLO

Familia de Windows Server 2003

REDISTRIBUCION DE TAREAS POR SOBREASIGNACION DE RECURSOS 1

Estructura y Tecnología de Computadores (ITIG) Luis Rincón Córcoles Ángel Serrano Sánchez de León

TEMA 1: VISIÓN GENERAL DE LOS SISTEMAS OPERATIVOS

4. Programación Paralela

Unidad II: Administración de Procesos y del procesador

TEMA 3: EL NÚCLEO DE UN SISTEMA OPERATIVO

Patrones de diseño para aplicaciones de tiempo real

Las empresas dependen de las redes para funcionar correctamente todos los días.

Fundamentos de los Sistemas Operativos (GII) Examen Final 15 de Junio de SEGUNDA PARTE - SOLUCIONES

Procesos. Procesos. Concurrencia de procesos. Qué es un proceso? Estados de un proceso. Modelo de 2 estados. (C) 2008 Mario Medina 1

Java y JVM: programación concurrente

Implementación de monitores POSIX

TEMA 5. PROGRAMACIÓN CONCURRENTE.

Concurrencia: deberes. Concurrencia: Exclusión Mutua y Sincronización. Concurrencia. Dificultades con la Concurrencia

Procesos. Bibliografía. Threads y procesos. Definiciones

Módulos: Módulo 1. Hardware & Arquitectura de sistemas - 20 Horas

Hilos, comunicación y competencia entre procesos. Dr. Alonso Ramírez Manzanares 2-Sep-2010

Capítulo 1 Introducción a la Computación

Unidad 1: Conceptos generales de Sistemas Operativos.

Conceptos Básicos de Software. Clase III

Utilización del sistema operativo GNU/ Linux en las netbooks

Programación distribuida con ADA95 bajo GNU/Linux (I)

Introducción a la Computación

SEGURIDAD Y PROTECCION DE FICHEROS

INFORMÁTICA BÁSICA 1ª PARTE (DURACIÓN TOTAL DEL EXAMEN: 2 HORAS Y 15 MINUTOS)

PROGRAMACIÓN ORIENTADA A OBJETOS Master de Computación. II MODELOS y HERRAMIENTAS UML. II.2 UML: Modelado de casos de uso

Mensajes. Interbloqueo

Unidad III. Software para la administración de proyectos.

Taller de sistemas operativos PLANIFICADOR

Hardware Se refiere a todas las partes tangibles de un sistema informático; sus componentes son: eléctricos, electrónicos, electromecánicos

Tema 3. Monitores Programación Concurrente

Sistema de proceso por lotes: esquema operativo

Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente.

COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX

Firewall Firestarter. Establece perímetros confiables.

INTERRUPCIONES. La comunicación asíncrona de los sistemas periféricos con la CPU, en ambos sentidos, se puede establecer de dos maneras fundamentales:

1.1.- Objetivos de los sistemas de bases de datos Administración de los datos y administración de bases de datos Niveles de Arquitectura

Tema 6: Periféricos y entrada-salida

Manejo de Excepciones

Programación del Timer1 para la captura de flancos

Tema 11. Soporte del Sistema Operativo REQUERIMIENTOS DE LOS SISTEMAS OPERATIVOS MULTIPROGRAMACIÓN.

CAPITULO V. Cuando hablamos de los lenguajes de programación nos referimos a diferentes formas en las que se puede escribir el programa del usuario.

Transcripción:

Seminario de Programación en Ada Bloque II Programación de tiempo real GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 19

Programación de Tiempo Real El Ada soporta la programación de sistemas empotrados y de sistemas de tiempo real, mediante los siguientes mecanismos: Representación del hardware Interrupciones Gestión del tiempo Prioridades Sincronización libre de inversión de prioridad Estos mecanismos están descritos en anexos opcionales: Anexo de programación de sistemas Anexo de sistemas de tiempo real GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 20

Representación del Hardware En muchos sistemas los programas deben interaccionar directamente con el hardware Muchas veces se utiliza para ello lenguaje ensamblador El Ada proporciona mecanismos para establecer la correspondencia entre estructuras lógicas y representaciones físicas del hardware. Por ejemplo: asociación entre campos de registros y posiciones de bits posicionamiento de datos en direcciones de memoria concretas control de optimización GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 21

Interrupciones En los sistemas empotrados es preciso atender a las interrupciones provocadas por el hardware externo. En Ada 05 se permite especificar un procedimiento protegido como elemento de manejo de interrupciones. en este modelo, el hardware invoca directamente la ejecución del procedimiento protegido sólo funciona si el sistema operativo lo permite GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 22

Ejemplo: Tarea que espera a una interrupción Interrupción hardware Objeto protegido Tarea de usuario rutina servicio interrupción entry Espera when barrera is... barrera : boolean; otros datos compartidos GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 23

Gestión del Tiempo El Ada permite diversas formas de manejo del tiempo integradas en el lenguaje: Relojes - Package Ada.Calendar - Package Ada.Real_Time Relojes de ejecución Retardos - Instrucciones delay until y delay El tipo predefinido Duration representa intervalos de tiempo en segundos GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 24

Relojes En Ada hay dos paquetes predefinidos que proporcionan funciones de reloj: Ada.Calendar - Define un tipo Time que representa la fecha y la hora - El reloj se supone sincronizado mediante una referencia externa - Los intervalos de tiempo se representan con el tipo predefinido Duration Ada.Real_Time - Define un tipo Time que representa valores de tiempo absolutos mediante el acceso a un reloj monótono no decreciente - Los intervalos de tiempo se representan con el tipo abstracto Time_Span - Existen funciones para convertir Time_Span a Duration GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 25

Paquete Ada.Calendar package Ada.Calendar is type Time is private; subtype Year_Number is Integer range 1901.. 2099; subtype Month_Number is Integer range 1.. 12; subtype Day_Number is Integer range 1.. 31; subtype Day_Duration is Duration range 0.0.. 86_400.0; function Clock return Time; function Year (Date : Time) return Year_Number; function Month (Date : Time) return Month_Number; function Day (Date : Time) return Day_Number; function Seconds (Date : Time) return Day_Duration; function Time_Of (Year : Year_Number; Month : Month_Number; Day : Day_Number; Seconds : Day_Duration := 0.0) return Time; GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 26

Paquete Ada.Calendar function "+" (Left : Time; Right : Duration) return Time; function "+" (Left : Duration; Right : Time) return Time; function "-" (Left : Time; Right : Duration) return Time; function "-" (Left : Time; Right : Time) return Duration;... end Ada.Calendar; GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 27

Paquete Ada.Real_Time package Ada.Real_Time is type Time is private; Time_First : constant Time; Time_Last : constant Time; Time_Unit : constant := -- real number; type Time_Span is private; Time_Span_First : constant Time_Span; Time_Span_Last : constant Time_Span;... function Clock return Time; function "+" (Left : Time; Right : Time_Span) return Time; function "+" (Left : Time_Span; Right : Time) return Time; function "-" (Left : Time; Right : Time_Span) return Time; function "-" (Left : Time; Right : Time) return Time_Span;... function To_Duration (TS : Time_Span) return Duration; function To_Time_Span (D : Duration) return Time_Span; function Nanoseconds (NS : integer) return Time_Span; function Microseconds (US : integer) return Time_Span; function Milliseconds (MS : integer) return Time_Span; end Ada.Real_Time; GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 28

Ejemplo -- Imprimir en pantalla el día, mes y año actuales, -- y luego las horas y minutos with Ada.Calendar, Ada.Text_Io; use Ada.Calendar; use Ada.Text_Io; procedure Muestra_Dia_Y_Hora is Instante : Time := Clock; Hora : Integer := Integer(Seconds(Instante))/3600; Minuto : Integer := (Integer(Seconds(Instante))-Hora*3600)/60; begin Put_Line("Hoy es "&Integer'Image(Day(Instante))&" del "& Integer'Image(Month(Instante))&" de "& Integer'Image(Year(Instante))); Put_Line("La hora es : "&Integer'Image(Hora)& ":"&Integer'Image(Minuto)); end Muestra_Dia_Y_Hora; GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 29

Relojes de tiempo de ejecución Son relojes que miden el tiempo de CPU utilizado por una tarea No incluyen esperas, bloqueos, etc. Define funciones similares al paquete Ada.Real_Time function Clock (T : Task_Id := Current_Task) return CPU_Time; También existen temporizadores de tiempo de ejecución que pueden ser asociados a una tarea Al expirar el tiempo, se realizan acciones determinadas GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 30

Retrasos Instrucciones que permiten suspender una tarea hasta que transcurra el instante o intervalo indicado - mientras una tarea está dormida, otras pueden ejecutar delay Tipo_Duration; delay until Tipo_Time; Ejemplo: Invocar procedimiento periódicamente Ambas son correctas? Intervalo : Duration := 5*Minutos; loop delay Intervalo; Proceso_A_Ejecutar; end loop; Intervalo : Duration := 5*Minutos; Next_Time : Time := Tiempo_Inicial; begin loop delay until Next_Time; Proceso_A_Ejecutar; Next_Time := Next_Time + Intervalo; end loop; GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 31

Tareas periódicas Con la instrucción delay until es posible hacer tareas periódicas: task body Periodica is Periodo : constant Duration := 0.050; -- en segundos Proximo_Periodo : Time := Clock; begin loop delay until Proximo_Periodo; -- acción periódica Proximo_Periodo := Proximo_Periodo + Periodo; end loop; end Periodica; GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 32

Tareas periódicas (cont d) También se puede hacer lo mismo (pero mal) con la orden delay: task body Periodica is Periodo : constant Duration:=0.050; -- en segundos Proximo_Periodo : Time := Clock; begin loop -- realiza operaciones Proximo_Periodo := Proximo_Periodo+Periodo; delay Proximo_Periodo-Clock; end loop; end Periodica; En este caso la tarea puede ser interrumpida por otra entre la lectura del reloj (con Clock) y la ejecución del delay. Esto provocaría un retraso mayor que el deseado GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 33

Prioridades Fijas Ada puede configurar el entorno para utilizar el sistema de tareas expulsoras (o desalojantes) por prioridad fija: - cuando una tarea de alta prioridad se activa, desaloja a otra tarea de menor prioridad que se esté ejecutando A cada tarea se le asigna una prioridad: pragma Priority(13); Esta prioridad se puede modificar, usando las operaciones del paquete Ada.Dynamic_Priorities - La prioridad es un subtipo definido en el paquete System Mediante la planificación de tareas por prioridades fijas, es posible garantizar la respuesta en tiempo real de las tareas. La teoría RMA permite realizar el análisis del sistema GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 34

Ada.Dynamic_Priorities with System; with Ada.Task_Identification; package Ada.Dynamic_Priorities is procedure Set_Priority (Priority : in System.Any_Priority; T : in Ada.Task_Identification.Task_Id := Ada.Task_Identification.Current_Task); function Get_Priority (T : Ada.Task_Identification.Task_Id := Ada.Task_Identification.Current_Task) return System.Any_Priority; end Ada.Dynamic_Priorities; GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 35

Tareas periódicas (modelo) Parámetros discretos o tipos acceso task type Periodica (Prioridad Periodo pragma Priority (Prioridad); end Periodica; : System.Priority; : access Duration) is task body Periodica is Proximo_Periodo : Time := Clock; begin loopdelay until Proximo_Periodo; Ada.Real_Time o Ada.Calendar -- acción periódica Proximo_Periodo := Proximo_Periodo + Periodo; end loop; GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 36

Políticas de planificación Políticas definidas en Ada 2005 FIFO_Within_Priorities - Prioridades fijas expulsora y orden FIFO para el mismo nivel de priorifad Non_Preemptive_FIFO_Within_Priorities - Prioridades fijas no expulsora y orden FIFO para el mismo nivel de priorifad Round_Robin_Within_Priorities - Prioridades fijas expulsora y se realizan turnos circulares para el mismo nivel de priorifad EDF_Across_Priorities: - Basada en plazos temporales GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 37

Políticas de planificación (cont d) Se define la política de planificación para todo el sistema mediante: pragma Task_Dispatching_Policy (Policy); Se pueden mezclar distintas políticas de planificación (planificación jerárquica) según intervalos de prioridad pragma Priority_Specific_Dispatching (Policy, Low_Priority, High_Priority); Estos pragmas son directivas de compilador y nos permiten configurar explícitamente nuestra aplicación GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 38

Inversión de prioridad En la sincronización de datos puede aparecer la inversión de prioridad: una tarea de alta prioridad puede verse forzada a esperar a que una de menor prioridad termine esto provoca retrasos enormes, inaceptables en sistemas de tiempo real Para evitarla existe el protocolo de techo de prioridad, asociado a los objetos protegidos: a cada objeto protegido se le asigna un techo de prioridad debe ser igual o superior a las prioridades de las tareas que usan ese objeto protegido GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 39

Techos de prioridad y gestión de colas Se define el uso del protocolo de techo de prioridad en un objeto protegido mediante: pragma Locking_Policy (Ceiling_Locking); El techo de prioridad de un objeto o un tipo protegido se especifica mediante un pragma Priority protected type OP (Techo : System.Priority) is pragma Priority (Techo);... end OP; El orden de entrada a los entries se controla con el pragma Queuing_Policy pragma Queuing_Policy (Priority_Queuing); pragma Queuing_Policy (FIFO_Queuing); GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 40

Ejemplo de tareas concurrentes con planificación por prioridades fijas -- Fichero gnat.adc pragma Locking_Policy (Ceiling_Locking); -- Politica de sincronizacion pragma Queuing_Policy (Priority_Queuing); -- Politica de encolado pragma Task_Dispatching_Policy (FIFO_Within_Priorities); -- Politica de planif. -- Fichero test_rt_app.adb with System; procedure Test_RT_App is task type Worker (The_Priority : System.Priority) is pragma Priority (The_Priority); -- Prioridad de la tarea end Worker; task body Worker is begin... end Worker; Tarea_1 : Worker (The_Priority => 10); Tarea_2 : Worker (The_Priority => 15); begin... end Test_RT_App; GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 41

Bibliografía [1] J. BARNES. "Programming in Ada 2005", first edition. Addison-Wesley, 2006. [2] J. BARNES. "Programming In Ada 95", first edition. Addison-Wesley, 1995. [3] S. Tucker Taft, Robert A. Duff, Randall L. Brukardt, Erhard Ploedereder, and Pascal Leroy (Eds.). Ada 2005 Reference Manual. Language and Standard Libraries. International Standard ISO/IEC 8652:1995(E) with Technical Corrigendum 1 and Amendment 1. LNCS 4348, Springer, 2006. Productos libres de AdaCore: https://libre.adacore.com/ GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 42