Plataformas de Tiempo Real

Documentos relacionados
Instrumentación de Tiempo Real

Programación Concurrente

Plataformas de Tiempo Real

Programación Concurrente

Sincronización de Threads

Programación Concurrente

Programación Concurrente

Eventos e interrupciones

Biblioteca de sistema

Bloque I: Principios de sistemas operativos

Sistemas Operativos Tema 2: Estructura del computador José Miguel Santos Alexis Quesada Francisco Santana

Sistemas operativos: una visión aplicada. Capítulo 5 Comunicación y sincronización de procesos

Velocidades Típicas de transferencia en Dispositivos I/O

Guía rápida para gestionar el puerto paralelo del PC

Funciones POSIX III Funciones POSIX III. No Nombrados Nombrados. sem_open sem_open. sem_close sem_close. sem_unlink sem_unlink

Microprocesadores, Tema 4:

Cap.2. Kernel Sistemas Operativos - Viña del Mar.

Arquitectura de Computadoras 2011

Sistemas operativos. Hasta ahora hemos visto. Relación programa-sistema operativo Gestión de memoria

(5) Unidad 5. Entrada / Salida SISTEMAS BASADOS EN MICROPROCESADORES. Grado en Ingeniería Informática EPS - UAM

Estructura de los sistemas de cómputo

MC Hilda Castillo Zacatelco PROCESOS

SISTEMAS OPERATIVOS: COMUNICACIÓN Y SINCRONIZACIÓN ENTRE PROCESOS. Procesos concurrentes y problemas en la comunicación y la sincronización

Test SITR Temas: Planificación, Sincronización, Comunicación entre Procesos, Relojes, Señales, Temporizadores (TestSITR_T4 T9)

Interrupciones y entrada/salida

Sincronización de procesos

Concurrencia, exclusión mutua y sincronización. Capítulo 5 HungriaBerbesi

5 Gestión de E/S. Servicios de E/S que suministra el SO Hardware de Entradas/salidas Implementación de los servicios Mejora del redimiento de E/S SOI

1. Para qué sirve un Descriptor de Dispositivo? Qué funciones del sistema operativo acceden a ellos y para qué?

Plataformas de Tiempo Real

Taller de Sistemas Operativos. Procesos 2012

Sistemas Operativos. Procesos

Sucesos asíncronos. dit. dit. Juan Antonio de la Puente DIT/UPM UPM UPM

Sist s em e a m s s O per e ativos o. s Unidad V Entrada Sali l d i a.

Aviso 2: Escriba con buena letra y evite los tachones. Aviso 3: Solución del examen y fecha de revisión en

Entrada y Salida! EC-2721 Arquitectura del Computador I! Entradas/Salidas: Problemas. Entradas salidas: Criterios. Amplia variedad de periféricos!

SUBSISTEMA DE ENTRADA-SALIDA. Arquitectura de Computadores I 4º tema

Arquitectura de Computadores

Informática Electrónica Manejadores de Dispositivos (Device Drivers)

Manejadores de buses serie en MaRTE OS

Programación de Multitareas utilizando Hilos

Introducción a las Computadoras. Capítulo 3 Buses del Sistema

Entrada/Salida. Alexis Tcach. Sistemas Operativos, 1c DC - FCEyN - UBA

Procesos y Threads Procesos y Threads. Concurrencia Concurrencia Ventajas Ventajas. Rendimiento Rendimiento (paralelismo) (paralelismo)

Fundamentos de los Sistemas Operativos. Tema 1. Conceptos generales Estructura del computador y el SO

ENTRADA/SALIDA. Universidad San Pablo-CEU Escuela Politécnica Superior Rodrigo García Carmona

Sistema Operativo. Repaso de Estructura de Computadores. Componentes Hardware. Elementos Básicos

Acceso coordinado a recursos compartidos

Arquitectura de Computadores, SO

Analista Universitario en Sistemas. Sistemas Operativos. Instituto Politécnico Superior THREADS

Capítulo 7 Entrada/salida

SISTEMAS OPERATIVOS:

Tema 4: Gestión de Procesos

1 Primitivas básicas de OpenMP

Plataformas de Tiempo Real

Tema 7. Entrada / Salida

Gestión de Entrada-salida

SISTEMAS OPERATIVOS Arquitectura de computadores

Adaptación de la arquitectura linux lib de MaRTE OS a multiprocesadores

ENTRADA/SALIDA. Relación Programa - Sistema Operativo - Hardware

Relojes de Tiempo Real Relojes de Tiempo Real. Métricas Métricas. de Tiempo de Tiempo. Sistemas Sistemas de Relojes de Relojes

Necesidad de Protección

Introducción a la Computación. Capítulo 7 Entrada/Salida

INTERRUPCIONES CONCEPTO DE INTERRUPCIONES

Informática. Informática = Hardware + Software. Hardware + Software. Hardware = Parte física. Software = Parte lógica

Periféricos Interfaces y Buses

Informática Electrónica Concurrencia

Tareas Periódicas en POSIX

Contenido 1. INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS PROCESOS Prólogo...

Introducción a Sistemas Operativos: Concurrencia

Tema 6. El sistema de entrada-salida

Lenguaje Ensamblador. Equipo 3. Alberto Abraham Gomez Cruz Edgar

Fundamentos de los Sistemas Operativos. Tema 2. Procesos José Miguel Santos Alexis Quesada Francisco Santana

Arquitectura de Computadores

Bloque I: Principios de sistemas operativos

CUESTIONARIO. Instituto Tecnológico de Iztapalapa Ingeniería en Sistemas computacionales. LENGUAJE ENSAMBLADOR Temas: 1.3 y 1.4

Capítulo 2 Introducción a los sistemas operativos

TEMA III. Unidad de entrada salida

FUNDAMENTOS BÁSICOS DE LOS SISTEMAS OPERATIVOS Fe de Erratas Actualizada a 12 de septiembre de 2018

ARQUITECTURA DE LOS SISTEMAS BASADOS EN MICROPROCESADOR

Procesos Definición y Estados

Introducción a los Sistemas Operativos

SISTEMAS OPERATIVOS: COMUNICACIÓN Y SINCRONIZACIÓN ENTRE PROCESOS. Desarrollo de servidores concurrentes

T E M A 7. Interrupciones

Controlador Programable de Interrupciones i8259

Interfaces de Entrada / Salida

Sistemas Operativos. Curso Página Web: Asignaturas de programación en el plan de estudios

Taller de Sistemas Operativos. Interrupciones y Excepciones

S. empotrados y ubicuos

Facultad de Informática Universidad Euskal Herriko del País Vasco Unibertsitatea Arquitectura de Computadores I Guión de los laboratorios de E/S 1

Arquitectura de Computadoras 2011

Tema 7: Sistemas de Entrada/Salida

Arquitectura de computadores I

UPM Concurrencia en Java

Datos compartidos: alternativas a deshabilitar interrupciones. Sistemas embebidos para tiempo real

Sistemas Operativos Primer Parcial Tema2

*** SOLUCIONES *** SISTEMAS OPERATIVOS Examen Parcial 24 de Abril de 2010

Entrada y Salida de Archivos

Velocidades Típicas de transferencia en Dispositivos I/O

Transcripción:

Master en Computación Plataformas de Tiempo Real POSIX Avanzado y Extensiones Tema 1. Ficheros y entrada/salida Tema 3. Monitorización y control del tiempo de ejecución Tema 4. Planificación EDF Tema 5. Planificación a Nivel de Aplicación Plataformas de Tiempo Real Mayo-2014 1 Tema 2. Gestión de Interrupciones en MaRTE OS 2.1. Interrupciones 2.2. Modelos de gestión de interrupciones en MaRTE OS 2.3. Interfaz para la gestión de interrupciones 2.4. Ejemplo: Espera de interrupción 2.5. Ejemplo: Sincronización con semáforos Plataformas de Tiempo Real Mayo-2014 2 Interrupción: mecanismo mediante el cual es posible interrumpir la ejecución del programa ejecutado por la CPU La mayoría de los dispositivos utilizan interrupciones para notificar a la CPU que se ha producido un evento: nuevo dato disponible posibilidad de enviar nuevo dato cambio en una línea de estado error etc. Plataformas de Tiempo Real Mayo-2014 3

Conceptos fundamentales Tras la interrupción el programa permanece suspendido mientras se ejecuta la rutina de servicio de interrupción (ISR) (también denominada manejador de la interrupción) Ejecución secuencial del programa Interrupción Continua la ejecución secuencial del programa a = b + 4; c := 2 * PI * r; if (a > 0) a = 0; else b = b + 1; manejador() { código del manejador; Plataformas de Tiempo Real Mayo-2014 4 Conceptos fundamentales (cont.) Las distintas interrupciones que se pueden producir en un computador se identifican mediante un número (tipo de la interrupción) La tabla de vectores de interrupción establece el enlace entre cada tipo de interrupción y su ISR asociada 0 1 tipo de 2 interrupción 3 4 5 Tabla de vectores de interrupción Manejador2 begin ; end Manejador2; Manejador1 begin ; end Manejador1; 1 Plataformas de Tiempo Real Mayo-2014 5 Ciclo de atención a interrupción 1. Se genera una interrupción, el procesador termina la instrucción ensamblador que estaba ejecutando Interrupción l sub 0x80616d3,%eax $0xf,0x4(%esp) %eax,(%esp) $0x4,%esp 0x4(%ebp),%edx 2. Se salva en el stack el estado del procesador (contador de programa y registro de estado) XX XX stack Plataformas de Tiempo Real Mayo-2014 6

Ciclo de atención a interrupción (cont.) 3. La CPU lee el tipo de interrupción y obtiene la dirección de su ISR utilizando la tabla de vectores de interrupción Tipo de interrupción 5 Bus de datos Tabla de vectores de interrupción 4 5 6 Manejador5 begin ; end Manejador5; 4. Se carga la dirección de comienzo de la ISR en el y se deshabilitan nuevas interrupciones Deshabilita interrupciones Manejador5 begin ; end Manejador5; Plataformas de Tiempo Real Mayo-2014 7 Ciclo de atención a interrupción (cont.) 5. Se ejecuta la ISR hasta llegar a la instrucción de retorno de interrupción (RTI) Manejador5 begin ; RTI; end Manejador5; 6. La instrucción RTI recupera del stack el estado original de la CPU, con lo que el procesador continua la ejecución del programa interrumpido stack XX XX l sub 0x80616d3,%eax $0xf,0x4(%esp) %eax,(%esp) $0x4,%esp 0x4(%ebp),%edx Plataformas de Tiempo Real Mayo-2014 8 Controlador de interrupciones Controlador de interrupciones Las líneas de requerimiento de interrupción de cada dispositivo no se conectan directamente al procesador, si no que lo hacen a través del Circuito Controlador de Interrupciones Líneas de requerimiento de interrupción Temporizador Plataformas de Tiempo Real Mayo-2014 9

Tabla de vectores de interrupción de un Tipo de interrupción 0 Temporizador 1 Teclado 2 PIC esclavo 3 COM2 4 COM1 5 Paral. 2/tarj. sonido 6 Disquete 7 Paralelo 1 8 RTC 9 Reservada 10 Reservada 11 Reservada 12 Ratón PS/2 13 Coprocesador 14 Disco Duro 15 Reservada Plataformas de Tiempo Real Mayo-2014 10 Configuración de las interrupciones hardware en un estándar Temporizador Reloj IRQ0 IRQ1 IRQ8 IRQ9 Reservada PIC (Master) IRQ2 IRQ3 IRQ4 IRQ5 PIC (Slave) IRQ10 IRQ11 IRQ12 IRQ13 Reservada Reservada IRQ6 IRQ14 IRQ7 Serie 2 IRQ15 Ratón PS/2 Serie 1 Paralelo 2 Coprocesador Paralelo 1 Reservada Plataformas de Tiempo Real Mayo-2014 11 2.2 Modelos de gestión de interrupciones en MaRTE OS 2.2 Modelos de gestión de interrupciones en MaRTE OS MaRTE OS permite dos modelos de gestión de interrupciones: asociada con ISR - utilizado cuando el driver tiene un thread dedicado (es el único thread que accede directamente al dispositivo) más sencillo y eficiente sólo puede haber un thread asociado con cada interrupción Sincronización por semáforos - utilizado cuando varios threads de usuario acceden directamente al dispositivo un thread puede esperar a la vez a varias interrupciones varios threads pueden esperar a la misma interrupción - los threads se encolan en el semáforo y son atendidos por prioridad Plataformas de Tiempo Real Mayo-2014 12

asociada con ISR Aplicación 2.2 Modelos de gestión de interrupciones en MaRTE OS Driver posix_intr_timedwait Procesa dato Interrupción Mutex y CV dedicado Lee dato del dispositivo Manejador Buffer Buffer Plataformas de Tiempo Real Mayo-2014 13 Sincronización por semáforo 2.2 Modelos de gestión de interrupciones en MaRTE OS Aplicación Driver Interrupción wait Semáforo post Lee dato del dispositivo Manejador Buffer Plataformas de Tiempo Real Mayo-2014 14 La gestión de interrupciones no está estandarizada en POSIX MaRTE OS proporciona una interfaz no estándar (en <intr.h>) que permite: instalar y desinstalar manejadores de interrupción - posix_intr_associate() y posix_intr_disassociate() bloquear y desbloquear interrupciones - posix_intr_lock() y posix_intr_unlock() esperar interrupciones ( asociada con ISR) - posix_intr_timedwait() (los nombres comienzan por "posix_" porque la interfaz fue propuesta para una futura ampliación del estándar POSIX) Plataformas de Tiempo Real Mayo-2014 15

Fuentes de interrupción En <intr.h> se define el tipo intr_t para identificar las fuentes de interrupciones existentes en el sistema Además se proporcionan valores constantes de este tipo para las distintas fuentes. Por ejemplo, en un : TIMER_HWINTERRUPT KEYBOARD_HWINTERRUPT temporizador teclado SERIAL1_HWINTERRUPT Puerto serie 1 PARALLEL1_HWINTERRUPT Puerto paralelo 1 DISKETTE_HWINTERRUPT COPROCESSOR_HWINTERRUPT Disquete Coprocesador matemático Resto de interrupciones Plataformas de Tiempo Real Mayo-2014 16 Manejadores de interrupción Los manejadores de interrupción son funciones con el siguiente prototipo int intr_handler (void * area, intr_t intr) area permite identificar una región de memoria mediante la cual el manejador y la aplicación pueden compartir datos intr identifica la fuente de interrupción que ha provocado la invocación del manejador (útil cuando se utiliza el mismo manejador para varias interrupciones) Un manejador puede sincronizarse con los threads de la aplicación utilizando semáforos definidos en area el manejador podrá invocar sem_post() sobre esos semáforos Plataformas de Tiempo Real Mayo-2014 17 Manejadores de interrupción (cont.) Un manejador debe retornar uno de los valores siguientes: POSIX_INTR_HANDLED_NOTIFY: el manejador ha atendido la interrupción y, si hay algún thread esperando, deberá ser activado por el sistema operativo POSIX_INTR_HANDLED_DO_NOT_NOTIFY: el manejador ha atendido la interrupción pero el thread NO debe activarse POSIX_INTR_NOT_HANDLED: el manejador NO ha atendido la interrupción; si hay otros manejadores asociados el sistema operativo deberá invocar al siguiente ISR1 ISR2 ISR3 ISR4 POSIX_INTR_HANDLED_NOTIFY o POSIX_INTR_NOT_HANDLED POSIX_INTR_HANDLED_DO_NOT_NOTIFY POSIX_INTR_NOT_HANDLED No es invocado Plataformas de Tiempo Real Mayo-2014 18

Asociación de Manejadores Asociar un manejador con una fuente de interrupción y un thread: int posix_intr_associate (intr_t intr, int (*intr_handler)(void * area, intr_t intr), void * area, size_t areasize); - intr: fuente de interrupciones - intr_handler: manejador - area: región de memoria de areasize bytes para compartir datos entre el manejador y la aplicación El manejador se asocia con el thread que invoca esta función Plataformas de Tiempo Real Mayo-2014 19 Asociación de Manejadores (cont.) Romper una asociación: int posix_intr_disassociate (intr_t intr, int (*intr_handler)(void *area, intr_t intr)); Plataformas de Tiempo Real Mayo-2014 20 Bloqueo y desbloqueo de interrupciones Bloqueo y desbloqueo de interrupciones: int posix_intr_lock (intr_t intr); int posix_intr_unlock (intr_t intr); La llamada a posix_intr_lock() permite bloquear la interrupción identificada por intr los manejadores asociados no se ejecutan mientras la interrupción esté bloqueada Su ejecución permanece pendiente hasta que se invoca posix_intr_unlock() No se especifica si sucesivas interrupciones producidas con la interrupción bloqueada se encolan o se pierden Plataformas de Tiempo Real Mayo-2014 21

Espera de interrupciones Un thread asociado con una o varias interrupciones (utilizando posix_intr_associate()) puede esperar la ejecución de cualquiera de sus manejadores mediante la función: int posix_intr_timedwait (int flags, const struct timespec *abs_timeout, intr_t *intr, int (**intr_handler) (void *area, intr_t intr)) flags: opciones dependientes de la implementación abs_timeout: tiempo límite absoluto (basado en CLOCK_REALTIME), si es NULL espera para siempre intr: fuente de interrupción que ha causado la activación intr_handler: manejador que ha causado la activación Plataformas de Tiempo Real Mayo-2014 22 Uso habitual en drivers: asociada con ISR open (o create) Crea el thread dedicado, el cual: - Asocia el manejador (posix_intr_associate) - Espera la ejecución del manejador(posix_intr_timedwait) - Bloquea y desbloquea interrupciones para sincronizarse con el manejador (posix_intr_lock, posix_intr_unlock) read/write No gestionan las interrupciones close Bloqueo final de la interrupción (posix_intr_lock) Finaliza el thread dedicado Plataformas de Tiempo Real Mayo-2014 23 Uso habitual en drivers: Sincronización por semáforo open (o create) Asocia el manejador (posix_intr_timedwait) Desbloqueo inicial de la interrupción (posix_intr_unlock) read/write Espera en el semáforo (que es señalizado por el manejador) Bloquea y desbloquea interrupciones para acceder a los datos compartidos con el manejador (posix_intr_lock, posix_intr_unlock) close Bloqueo final de la interrupción (posix_intr_lock) Plataformas de Tiempo Real Mayo-2014 24

2.4 Ejemplo: Espera de interrupción #include <stdio.h> #include <string.h> #include <stdlib.h> #include <misc/error_checks.h> #include <misc/timespec_operations.h> 2.4 Ejemplo: Espera de interrupción // Interrupt handler int interrupt_handler(void * area, intr_t intr) { printc("in interrupt handler\n"); return POSIX_INTR_HANDLED_NOTIFY; Plataformas de Tiempo Real Mayo-2014 25 2.4 Ejemplo: Espera de interrupción Ejemplo: Espera de interrupción (cont.) int main() { const struct timespec rel_timeout = {5, 0; struct timespec timeout; intr_t intr; int (*handler)(void * area, intr_t intr); // Install interrupt handler CHK( posix_intr_associate(fuente_interruion, interrupt_handler, NULL, 0) ); // Enable the interrupt in the computer CHK( posix_intr_unlock (FUENTE_INTERRUION) ); // Read inital time an wait interrupts in a loop CHKE( clock_gettime(clock_realtime, &timeout) ); while(1) { // timeout calculation add_timespec(&timeout, &timeout, &rel_timeout); // Wait for interrupt CHK( posix_intr_timedwait(0, &timeout, &intr, &handler) ); printf("after interrupt\n"); return 0; Plataformas de Tiempo Real Mayo-2014 26 2.5 Ejemplo: Sincronización con semáforos 2.5 Ejemplo: Sincronización con semáforos #include <stdio.h> #include <semaphore.h> #include <string.h> #include <stdlib.h> #include <misc/error_checks.h> #include <sys/pio.h> // datos compartidos entre el manejador y el thread typedef struct { sem_t sem; unsigned char dato; area_manejador_t; area_manejador_t area_manejador; Plataformas de Tiempo Real Mayo-2014 27

// manejador de interrupción int manejador_intr (void * area, intr_t intr) { printc("en el manejador\n"); // lee dato del dispositivo ((area_manejador_t *)area)->dato = inb(0x378); // Señaliza el semáforo CHKE( sem_post(&((area_manejador_t *)area)->sem) ); return POSIX_INTR_HANDLED_DO_NOT_NOTIFY; 2.5 Ejemplo: Sincronización con semáforos Ejemplo: Sincronización con semáforos (cont.) // lee dato (función llamada por los threads) // (la operación read de un driver se comportaría de forma similar) unsigned char lee_dato() { // Si no hay datos, los threads se encolan en el semáforo CHKE( sem_wait(&area_manejador.sem) ); // lee el dato // cuando el dato a leer no es atómico es necesario mantener la interrupción // deshabilitada (no en este caso, aún así se hace para que sirva de ejemplo) CHKE( posix_intr_lock(fuente_interruion) ); unsigned char d = area_manejador.dato; CHKE( posix_intr_unlock(fuente_interruion) ); return d; Plataformas de Tiempo Real Mayo-2014 28 2.5 Ejemplo: Sincronización con semáforos Ejemplo: Sincronización con semáforos (cont.) int main () { unsigned char dato; // inicializa el semáforo CHKE( sem_init(&area_manejador.sem, 0, 0) ); // instala el manejador de interrupción CHKE( posix_intr_associate(fuente_interruion, manejador_intr, &area_manejador, sizeof(area_manejador_t)) ); // habilita la interrupción CHKE( posix_intr_unlock(fuente_interruion) ); // lee datos del dispositivo while(1) { // espera un nuevo dato dato = lee_dato(); printf("leído %c\n", dato); return 0; Plataformas de Tiempo Real Mayo-2014 29