Apuntes SITR

1,356 views

Published on

Este documento presenta todos los apuntes (que confeccioné en su día) de la asignatura Sistemas Informáticos en Tiempo Real de 2º de Ing. industrial de la UMH impartida por Luis Miguel Jiménez y Rafael Puerto.

En esta asignatura aprendí la arquitectura básica de un Sistema Operativo en Tiempo Real, justificando su importancia en las aplicaciones de ingeniería.
En esta asignatura también se describen y analizan los elementos que conforman un sistema distribuido, justificando su importancia en aplicaciones industriales.
Además, se nos enseñó cómo emplear herramientas para el desarrollo aplicaciones de tiempo real (UNIX/POSIX).

En el siguiente enlace podés acceder a los datos del libro de la asignatura:
http://zbiblio.umh.es/uhtbin/cgisirsi/0/UMH/0/5?searchdata1=^C39987

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,356
On SlideShare
0
From Embeds
0
Number of Embeds
437
Actions
Shares
0
Downloads
18
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Apuntes SITR

  1. 1. 1. Sistemas Informáticos de Tiempo Real 1 1.1. Definición 1 1.2. Tiempo Real VS Rapidez 1 1.3. Sistemas Informáticos de Tiempo Real y Sistemas Empotrados 1 1.4. Sistemas Informáticos de Tiempo Real Estrictos y No Estrictos 2 1.5. Tolerancia a Fallos 3 1.6. Sistemas Controlados por Eventos o por Tiempo 42. Ejemplos de Sistemas Informáticos de Tiempo Real 43. Características de los Sistemas Informáticos de Tiempo Real 5 3.1. Grandes y Complejos 5 3.2. Manipulación de Magnitudes Físicas 5 3.3. Extremadamente Fiables y Seguros 5 3.4. Concurrencia 6 3.5. Herramientas de Manejo en Tiempo Real 6 3.6. Implementación Eficiente 7 3.7. Lenguajes de Programación 7
  2. 2. Sistemas Informáticos en Tiempo Real Tema I1. Sistemas Informáticos de Tiempo Real.1.1. Definición. Se trata de aquellos sistemas capaces de captar estímulos generados porel entorno y dar una respuesta a éstos en un periodo de tiempo finitoespecificado. Se puede observar que en la definición se destacan dos aspectos quedefinen y diferencian los Sistemas Informáticos de Tiempo Real de los demás: • Tiempo de respuesta: Es un aspecto clave ya que “no importa que sea capaz de generar la respuesta correcta sino que ésta se produzca en un tiempo determinado”. Por ejemplo, de nada sirve un airbag si éste se pone en funcionamiento después de un choque. • Lógica de respuesta: El sistema debe interactuar con el entorno adquiriendo estímulos y estados de entorno, y generando una acción sobre dicho entorno. Estas dos características provocan que el Sistema Informático de TiempoReal deba tener un comportamiento general a expensas de los eventos queocurran. Esta es la dificultad de los Sistemas Informáticos de Tiempo Realpuesto que para ello debemos hacer que los componentes trabajen juntos antela aparición de eventos no predecibles, fallos...1.2. Tiempo Real VS Rapidez. Generalmente, se confunden los términos de Sistema Informático deTiempo Real y sistema rápido. Todos los programas deben ser losuficientemente rápidos como para cumplir los requisitos de los usuarios, peroel hecho de que un programa sea rápido no significa que sea de tiempo real. Tiempo real significa trabajar con la distribución física de loscomponentes, con el manejo de estímulos impredecibles, con fallos en loscomponentes, con la incertidumbre acerca del entorno y con el rendimiento yrobustez del sistema. Un Sistema Informático de Tiempo Real debe ser losuficientemente rápido, pero es sólo una parte a tener en cuenta.1.3. Sistemas Informáticos de Tiempo Real y Sistemas Empotrados. Para conseguir el propósito para el cual se ha diseñado un SistemaInformático de Tiempo Real, los componentes interactúan entre sí y con elentorno intercambiando información y compartiendo recursos, modificando sucomportamiento. 1Tema I Introducción a los SISTEMAS INFORMÁTICOSDE TIEMPO REAL
  3. 3. Sistemas Informáticos en Tiempo Real Tema I El entorno lo podemos descomponer en dos partes: • El entorno activo es donde se engloban los operadores que intervienen en el comportamiento del sistema modificando el modo de operación. • El entorno pasivo comprende a los usuarios interesados solamente en el servicio proporcionado, y al ambiente exterior que no tiene nada que ver con la existencia del sistema. Los sistemas empotrados son aquellos que no precisan de un entornoactivo. Además, existen otros sistemas considerados sistemas empotrados.Estos son los subsistemas que forman parte de un sistema ya que no es posibleuna intervención directa del operador y la funcionalidad debe ser soportadacompletamente desde su interior.1.4. Sistemas Informáticos de Tiempo Real Estrictos y No Estrictos. En los Sistemas Informáticos de Tiempo Real se requiere tanto que elresultado sea correcto como que se genere en un tiempo determinado. Conrespecto a la corrección lógica podemos decir que suele expresarse en términosde salidas y entradas correctas. En función de la importancia que se le de a la corrección temporal en unSistema Informático de Tiempo Real se puede realizar la siguiente clasificación: • SISTEMAS ESTRICTOS: Son aquellos sistemas en los que el tiempo es tan importante que no puede ser sacrificado por una mejora en otros aspectos. En algunos sistemas, la corrección temporal llega a ser tan crítica, es decir, tan importante, que la corrección lógica puede ser relajada en aras de alcanzar un tiempo de respuesta determinado. Por ejemplo, el chequeo de la altitud de una aeronave automática en tiempos prescritos puede tener consecuencias catastróficas a no ser que la respuesta llegue aunque sea de mala calidad. • SISTEMAS NO ESTRICTOS: En este caso, la corrección temporal ya no es un aspecto crítico. Si se produce un fallo provocando un retardo en la llegada de información, éste no provoca consecuencias serias en el funcionamiento general del sistema. Las tareas catalogadas como no estrictas se ejecutarán lo más rápido que sea posible, pero sin estar forzadas por tiempos límites, pudiendo ser sacrificada la corrección temporal bajo ciertas circunstancias. 2Tema I Introducción a los SISTEMAS INFORMÁTICOSDE TIEMPO REAL
  4. 4. Sistemas Informáticos en Tiempo Real Tema I En general, un sistema puede estar constituido por una combinación detareas de ambos tipos mediante una jerarquía de prioridades y permitiendo larelajación temporal de aquellas tareas que lo permitan. O también puede estarformado por tareas con tiempos estrictos y no estrictos a la vez, es decir, larespuesta a un evento puede tener un tiempo límite no estricto de 50 ms (paraasegurar un funcionamiento óptimo) y uno estricto de 200 ms (para evitarposibles daños a los usuarios o al funcionamiento del sistema). Cada vez quepasa tiempo se produce una pérdida general de la calidad de la información. A sí mismo, se pueden definir dos tipos de relajación temporal: • Si no se cumple el tiempo límite la información pierde completamente su valor. En tareas periódicas puede ser admisible que se pierda la ejecución de alguna de ellas. • Puede ocurrir que el servicio llegue tarde pero éste sea válido para una cierto intervalo de tiempo. ESTRICTO NO ESTRICTO Impone un tiempo de respuesta determinista. Impone un tiempo de respuesta pero no determinista. En caso de sobrecarga no se degrada la respuesta En caso de sobrecarga se degrada la respuesta. Trabaja con volúmenes de datos pequeños Trabaja con volúmenes de datos grandes.1.5. Tolerancia a Fallos. A pesar de que los sistemas están diseñados para que generen unresultado correcto y dentro de un intervalo determinado, éstos pueden fallarexhibiendo así un comportamiento para el cual no fueron diseñados. Ya que losfallos son inevitables, un sistema debe ser robusto frente a ellos, es decir, debepresentar un comportamiento de “tolerancia a fallos”. En función del comportamiento en caso de fallo, los sistemas se puedenclasificar como: • SISTEMAS CON PARADA SEGURA: En caso de fallo se coloca al sistema en un estado seguro de parada. Son aquellos en los cuales un error puede tener consecuencias catastróficas. • SISTEMAS CON DEGRADACIÓN ACEPTABLE: En caso de fallo, presentan un funcionamiento parcial con pérdida de funcionalidad o prestaciones, aunque el sistema puede seguir funcionando a pesar de esa merma. 3Tema I Introducción a los SISTEMAS INFORMÁTICOSDE TIEMPO REAL
  5. 5. Sistemas Informáticos en Tiempo Real Tema I1.6. Sistemas Controlados por Eventos o por Tiempo. Otra clasificación está basada en el uso de eventos o de ciclos de relojcomo controlador de la ejecución de las diversas tareas. Existen dos tipos: • ARQUITECTURA CONTROLADA POR EVENTOS (“event-driven” o “interrupt-driven”): Se establece la ejecución de un componente basándose en la aparición de una interrupción o señal generada por un evento externo. Por ejemplo, un robot móvil que se mueve por el espacio ante la aparición de un obstáculo ejecuta la tarea de evitarlo que hasta entonces estaba dormida. • ARQUITECTURA CONTROLADA POR TIEMPO (“time-driven”): Opera tratando los pulsos regulares del reloj como si fueran señales de interrupción. Cuando el reloj alcanza ciertos valores predefinidos, una acción apropiada es seleccionada para su ejecución. Ambos tipos de arquitectura tienen sus ventajas y sus desventajas. Lossistemas manejados por tiempo son más sencillos y robustos puesto quepermiten interfaces entre subsistemas muy controlados y con unfuncionamiento independiente mientras que los sistemas basados eninterrupciones son sistemas más eficaces para responder a eventos externos noregulares.2. Ejemplos de Sistemas Informáticos de Tiempo Real.Robótica: Los robots son vehículos quese desplazan por un espacio detrabajo y que interactúan con elentorno. El seguimiento detrayectorias, la planificación detrayectorias libres de obstáculos yseguimientos de blancos, son tareasque deben responder ante ciertosestímulos en un periodo de tiempo. Figura 1.1. Aplicaciones de control de robotsAutomoción: La industria del automóvil ha cambiado de tal manera que los sistemasque antes se basaban totalmente en conceptos mecánicos, hoy en día hanpasado a un estado donde los componentes electrónicos juegan un papel muyimportante. Sistemas como el de inyección electrónica, el de control deencendido o el de antibloqueo tienen al computador como un elemento quedebe reaccionar en tiempo real ante eventos generados por el entorno. 4Tema I Introducción a los SISTEMAS INFORMÁTICOSDE TIEMPO REAL
  6. 6. Sistemas Informáticos en Tiempo Real Tema I Por ejemplo, la centralita de inyección debe mostrar variables de velocidad, aceleraciones, revoluciones y temperatura para determinar la inyección de combustible óptima. El sistema antibloqueo de frenos controla la velocidad de cada rueda y las aceleraciones para regular la presión adecuada sobre los discos de Figura 1.2. Sistema de control de encendido de un automóvil freno para evitar el bloqueo y minimizar la distancia de frenado.3. Características de los Sistemas Informáticos de Tiempo Real.3.1. Grandes y Complejos. Escribir pequeños programas no presenta ninguna complejidad pudiendohacerlo una sola persona la mismo tiempo que no es muy complicado que otrapersona sea capaz de comprender su diseño y funcionamiento. Por eso se diceque los pequeños programas se escriben de forma casi artesanal. A pesar deesto, se deben seguir ciertas normas de diseño y codificación: BUEN ESTILO. Para referirnos al término grande, usaremos la palabra variedad, esdecir, si un sistema es grande se dice que tiene mucha variedad. La variedadpuede ser las necesidades y actividades del mundo real que se reflejan en elfuncionamiento del programa. Puesto que la naturaleza está cambiandoconstantemente, los programas que exhiben una gran variedad deben cambiartambién. Puesto que los Sistemas Informáticos de Tiempo Real deben responderante eventos, deben ser grandes y complejos para poder atender cualquier tipode evento.3.2. Manipulación de Magnitudes Físicas. Sabemos que un Sistema Informático de Tiempo Real debe controlaractividades del entorno mediante captura o activación de variables físicas. Las señales físicas suelen ser analógicas por lo que deben serconvertidas a información digital manejable por el computador. Para la capturade señales se requiere un muestreo (adquisición de valores) y unacuantificación (codificación en niveles). El período de muestreo (intervalo detiempo transcurrido entre dos capturas sucesivas) depende del tipo de señal.3.3. Extremadamente Fiable y Seguro. Es necesario tener como directriz para el diseño de SistemasInformáticos de Tiempo Real la FIABILIDAD y la SEGURIDAD, ya que muchoscontrolan funciones vitales. 5Tema I Introducción a los SISTEMAS INFORMÁTICOSDE TIEMPO REAL
  7. 7. Sistemas Informáticos en Tiempo Real Tema I Un fallo en el generador de energía eléctrica que suministra la unidad decuidados intensivos puede ser catastrófico. Un error del controlador de una planta química puede provocar dañosgraves en los equipos o en el medio ambiente. Esto nos dice que tanto el hardware como el software que operan enestos sistemas deben ser extremadamente fiables y seguros. Tienen en cuentahasta el posible error humano.3.4. Concurrencia. Se trata de capacidad de un sistema para mantener varias tareas enestados intermedios de ejecución. Puesto que pueden ocurrir dos o máseventos de forma paralela, nuestro Sistema Informático de Tiempo Real debetener la capacidad de atenderlos de forma paralela. SISTEMAS DE TIEMPO COMPARTIDO: Se trata de aquellos sistemas que,por tener sólo una CPU, no pueden realizar tareas simultáneamente peropueden mantener varias tareas en un punto intermedio de ejecución,ejecutando de forma alternativa. SISTEMAS MULTIPROCESADORES: Permiten la ejecución de tareas deforma simultánea de forma paralela. SISTEMAS DISTRIBUIDOS: Permite el paralelismo y los computadores seencuentran interconectados y geográficamente dispersos. Debido a las dificultades y problemas que entraña permitir a unprogramador que cree programas para sistemas con carácter concurrente se haoptado por emplear otras herramientas de trabajo como las que aportanlenguajes como Occam o ADA95 o por sistemas operativos como UNIX.3.5. Herramientas de Manejo en Tiempo Real. Es muy difícil diseñar sistemas que garanticen una respuesta apropiadaen el tiempo apropiado para toda condición. Por eso, los Sistemas Informáticosde Tiempo Real se construyen con ciertos márgenes sobrantes, de modo queeste no produzca retardos en los períodos críticos ni en el peor de los casos. Es preciso que se disponga de un soporte que permita: - Especificar el tiempo de ejecución de cada tarea. - Especificar el tiempo de finalización de cada tarea. - Responder a situaciones donde no se cumplen los requerimientos temporales. - Responder a situaciones donde los experimentos temporales no varíen. 6Tema I Introducción a los SISTEMAS INFORMÁTICOSDE TIEMPO REAL
  8. 8. Sistemas Informáticos en Tiempo Real Tema I3.6. Implementación Eficiente. La eficiencia debe ser un objetivo en los Sistemas Informáticos deTiempo Real.3.7. Lenguajes de Programación. Lenguaje ensamblador: • Muy Eficiente • Difícil de implementar la concurrencia. Lenguajes secuenciales de alto nivel: • C, C++, Java, Pascal, Fortran, Jovial, Coral, RTL/2. • Portables, y fáciles de programar. • Lo incorporan soporte para la concurrencia (debe ser soportado por el S.O.). Lenguajes concurrentes de alto nivel: • ADA95, Modula-2, PEARL, Mesa, CHILL. • Soprte de la concurrencia y especificaciones temporales en el propio lenguaje. Comportamiento Temporal Modelo del Entorno Descomposición Abstracción Diseño Especificación de General requerimientos Diseño de Detalle Implementación Métodos de Prototipos Formales Implementación Final Verificación Test del Prototipo Figura 1.3. Fases en el diseño de una aplicación 7Tema I Introducción a los SISTEMAS INFORMÁTICOSDE TIEMPO REAL
  9. 9. SITR:Introducción Definición de S. Tiempo Real ü Un Sistema de Tiempo Real se define como: û “Un sistema que debe responder ante estímulos generados por el entorno dentro de un periodo de tiempo finito especificado” ü Aspectos fundamentales: û Son sistemas que interactúan con el entorno (mundo físico), adquiriendo estímulos y estados del entorno y generando una acción sobre dicho entorno. û Son sistemas en los que el tiempo de respuesta es un aspecto crítico. ü Corrección: û Lógica û TemporalSistemas Informáticos de Tiempo Real 1 ISA-UMH © T-98-001V1.0SITR:Introducción Tiempo Real / Rapidez ü Todo sistema de tiempo real debe ser suficientemente rápido para cumplir los requerimientos, pero el que un sistema sea rápido no implica que éste sea de tiempo real ü La rapidez de un sistema de tiempo real está fijada por la naturaleza de los estímulos con los que tiene que tratar, la cual puede variar de unas aplicaciones a otras. ü Tiempo real significa trabajar con aspectos del sistema como distribución física de los componentes, manejo de estímulos impredecibles, fallos en los componentes, incertidumbre acerca del entorno, y el efectos de estos aspectos sobre el rendimiento y robustez del sistema.Sistemas Informáticos de Tiempo Real 2 ISA-UMH © T-98-001V1.0 1
  10. 10. SITR: Sist. Tiempo Real / Sist. EmpotradosIntroducción ü Entorno de un SITR: • entorno activo que comprende los operadores que intervienen en el comportamiento del sistema modificando el modo de operación. • entorno pasivo que comprende a los usuarios que están solamente interesados en el servicio proporcionado y al ambiente exterior que no tiene nada que ver con la existencia del sistema. ü Sistema empotrado (“embedded system”) û Unicamente tiene un entorno pasivo û Es un componente autónomo que forman parte de un sistema mayor û Ejemplos: • Disco duro • Lavadora • Automóvil • Sonda espacial • Equipos médicosSistemas Informáticos de Tiempo Real 3 ISA-UMH © T-98-001V1.0SITR:Introducción STR Estrictos/ No Estrictos ü Corrección: û Lógica û Temporal ü STR estrictos (críticos):la corrección temporal es crítica. û El tiempo de respuesta es muy importante y no puede ser sacrificado por una mejora en otros aspectos. û En ciertos sistemas (p.e. sistemas de seguridad críticos) la corrección temporal es tan importante que el criterio de corrección lógica puede ser relajado en aras de alcanzar un tiempo de respuesta determinado ü STR no estrictos (acríticos):la corrección temporal no es crítica. û Fallos ocasionales en generar un resultado dentro del tiempo fijado no produce consecuencias serias en el funcionamiento general del sistema. û Las tareas de tiempo real no estrictas son ejecutadas tan rápido como es posible, pero no están forzadas por tiempos límite absolutos, pudiendo ser sacrificada la corrección temporal bajo ciertas circunstanciasSistemas Informáticos de Tiempo Real 4 ISA-UMH © T-98-001V1.0 2
  11. 11. SITR:Introducción STR Estrictos/ No Estrictos ü Un STR puede estar formado por tareas críticas y acríticas ü Una misma tarea puede tener tiempos límite estrictos y no estrictos. û La respuesta a un evento de peligro puede tener un tiempo límite no estricto de 50 ms (para una reacción con eficiencia óptima) y un tiempo límite estricto de 200 ms (para garantizar que no se produce un daño en el equipo o en las personas). Entre estos dos límites, el valor o utilidad de la salida decrece según aumenta el tiempo. ü Tipos de relajación en la corrección temporal: • Si no se cumple el tiempo límite el resultado no tiene ningún valor (pérdidas ocasionales de respuestas a eventos) • Que el servicio llegue tarde ocasionalmente pero este sea valido dentro de un cierto intervalo de tiempo.Sistemas Informáticos de Tiempo Real 5 ISA-UMH © T-98-001V1.0SITR:Introducción Tolerancia a Fallos ü Corrección: û Lógica û Temporal ü Los sistemas pueden fallar, es decir exhibir un comportamiento para el cual no fueron diseñados. û Ya que los fallos son inevitables, un sistema de tiempo real debe ser robusto frente a ellos, comportamiento denominado ‘tolerancia a fallos’. ü Tipos de Sistemas: û Sistemas con parada segura (“fail-safe”): en caso de fallo colocan al sistema en un estado seguro (sistemas críticos) û Sistemas con degradación aceptable (“fail-soft”): presentan una pérdida parcial de funcionalidad o prestaciones en caso de fallo, pudiendo seguir funcionando a pesar de dicha merma.Sistemas Informáticos de Tiempo Real 6 ISA-UMH © T-98-001V1.0 3
  12. 12. SITR:Introducción STR Eventos / Tiempo • Arquitectura controlada por eventos o interrupciones (“event-driven” o “interrupt-driven”). û Establece la ejecución de un componente o tarea basándose en la aparición de una interrupción o señal generada por un evento externo û Constituyen un mecanismo mucho más eficaz para responder ante eventos externos no regulares. • Arquitectura controlada por tiempo (“time-driven”). û Opera de acuerdo a los ciclos del reloj o relojes del sistema. û Este tipo de sistemas se utiliza cuando es preciso la ejecución de tareas periódicas o la ejecución de tareas mediante temporizadores. û Son más sencillos y robustos (interfaces entre subsistemas muy controlados y con un funcionamiento independiente basado en relojes locales)Sistemas Informáticos de Tiempo Real 7 ISA-UMH © T-98-001V1.0SITR:Introducción Ejemplos de STR ü Control de Procesos (1) Actuador Válvula D/A Tiempo A/D - Sensor de nivel + Acondicionamiento Regulador de señal Ref. Figura 1.1 Sistema de regulación de nivel de un depósitoSistemas Informáticos de Tiempo Real 8 ISA-UMH © T-98-001V1.0 4
  13. 13. SITR:Introducción Ejemplos de STR ü Control de Procesos (2) Prodcuto final Materiales Agitadores Sensores Temperatura Figura 1.2 Sistema de Control de procesos jerarquizadoSistemas Informáticos de Tiempo Real 9 ISA-UMH © T-98-001V1.0SITR:Introducción Ejemplos de STR ü Fabricación: û Integración del proceso de fabricación (CIM) Prodcuto final Materiales Figura 1.3 Sistema de control de producción.Sistemas Informáticos de Tiempo Real 1 0 ISA-UMH © T-98-001V1.0 5
  14. 14. SITR:Introducción Ejemplos de STR ü Sistemas de Comunicaciones û Redes de Datos • Protocolos (conjunto de reglas que controlan la comunicación entre dos equipos). • Los protocolos son algoritmos que deben interaccionar con el entorno reaccionando ante eventos externos (llegada de mensajes, peticiones, errores, confirmaciones). û Redes Telefónicas ü Sistemas de Control de VueloSistemas Informáticos de Tiempo Real 1 1 ISA-UMH © T-98-001V1.0SITR:Introducción Ejemplos de STR ü Robótica û Control dinámico û Planificación de trayectorias Figura 1.4 Aplicaciones de control de robotsSistemas Informáticos de Tiempo Real 1 2 ISA-UMH © T-98-001V1.0 6
  15. 15. SITR:Introducción Ejemplos de STR ü Automoción: û Control de encendido û Control de inyección û Antibloqueo de frenos ABS û Control de tracción ASR û Airbag û Suspensión activaSistemas Informáticos de Tiempo Real 1 3 ISA-UMH © T-98-001V1.0SITR:Introducción Ejemplos de STR ü Realidad Virtual û Responde ante las acciones del entorno físico (movimientos, voz, mirada,...) generando un conjunto completo de estímulos que es realimentado al propio operador (sonido, movimiento, imagen, tacto,....), todo ello dentro de un tiempo finito Reloj de Sistema de Algoritmos Interfaz Ingeniería Tiempo Real de control ü Otros sistemas empotrados Acceso a los datos Sistema de Supervisión remoto Base de Datos Recuperación Dispositivos de datos Visualizadores Interfaz del operador Consola Sistema Empotrado Figura 1.6 Sistema empotrado típicoSistemas Informáticos de Tiempo Real 1 4 ISA-UMH © T-98-001V1.0 7
  16. 16. SITR:Introducción Características de un STR ü Grandes y complejos. ü Manipulación de magnitudes físicas. ü Estremadamente fiable y seguro. ü Concurrencia. ü Herramienas para el manejo de tiempo real. ü Implementación eficiente.Sistemas Informáticos de Tiempo Real 1 5 ISA-UMH © T-98-001V1.0SITR:Introducción Concurrencia ü La concurrencia se define como la capacidad de un sistema de mantener varias tareas en estados intermedios de su ejecución û Sistemas de tiempo compartido û Sistemas multiprocesadores û Sistemas distribuidos ü Expresión de la concurrencia en un programa: û El programador û El lenguaje de programación (ADA95, Occam, Pearl...) û El sistema operativo (POSIX)Sistemas Informáticos de Tiempo Real 1 6 ISA-UMH © T-98-001V1.0 8
  17. 17. SITR:Introducción Herramientas de Tiempo Real ü Los sistemas se diseñan en con unos márgenes de capacidad sobrantes, de forma que el comportamiento en “el peor caso” no produzca retardos en los periodos críticos de operación del sistema. ü Soporte que permita: • Especificar el tiempo en el cual debe ejecutarse cada tarea • Especificar el tiempo en el cual debe se completada cada tarea • Responder a situaciones en las cuales no se pueden cumplir todos los requerimientos temporales • Responder a situaciones en las cuales los requerimientos temporales puedan variar dinámicamenteSistemas Informáticos de Tiempo Real 1 7 ISA-UMH © T-98-001V1.0SITR:Introducción Diseño de STR ü Metodología “top-down” Comportamiento Temporal Descomposición Modelo del Entorno Abstracción Diseño Especificación de General Requerimientos Notación Diseño de Detalle •Informal Métodos Formales •Estructurada •Formal Implementación de Prototipos Implementación Verificación Final Test del PrototipoSistemas Informáticos de Tiempo Real 1 8 ISA-UMH © T-98-001V1.0 9
  18. 18. SITR:Introducción Lenguajes de programación ü Lenguaje ensamblador: û Muy Eficiente û Difícil de implementar la concurrencia. ü Lenguajes secuenciales de alto nivel û C, C++, Java, Pascal, Fortran, Jovial, Coral, RTL/2 û Portables, y fáciles de programar û No incorporan soporte para la concurrencia (debe ser soportado por el S.O.) ü Lenguajes concurrentes de alto nivel û ADA95, Modula-2, PEARL, Mesa, CHILL û Soprte de la concurrencia y especificaciones temporales en el propio lenguajeSistemas Informáticos de Tiempo Real 1 9 ISA-UMH © T-98-001V1.0 10
  19. 19. 1. Introducción 12. Procesos 1 2.1. Definición y propiedades 1 2.2. Estados de un proceso 2 2.3. Información adicional sobre los procesos 3 2.4. Creación y terminación de procesos 4 i) Creación de Procesos 4 ii) Terminación de Procesos 53. Threads 5 3.1. Ventajas de Trabajar con Threads 7 3.2. Inconvenientes de Trabajar con Threads 7 3.3. Modelos de Control de Threads 7 i) A Nivel de Usuario 7 ii) A Nivel de Núcleo 8 iii) A Nivel Híbrido 9
  20. 20. Sistemas Informáticos en Tiempo Real Tema II1. Introducción. Un sistema operativo potente (todos los Sistemas Operativos de TiempoReal) es aquel capaz de ejercer más de una tarea en el mismo instante detiempo, es decir, debe ser capaz de realizar tareas de forma concurrente. Por ejemplo, un sistema operativo multitarea debe ser capaz de ejecutarun programa del usuario al mismo tiempo que lee del disco o imprime undocumento. Pueden existir varios mecanismos para conseguir que un SistemaOperativo cumpla esta característica. Nosotros explicaremos dos: • PARALELISMO: Se trata de un método para que un Sistema Operativo pueda realizarvarias tareas haciendo uso de varios computadores. Los ordenadores seconectan entre sí de modo que cada uno puede estar realizando una tareatotalmente distinta a las que se ejecutan por los otros ordenadores, es decir,cada computador realiza una tarea. • PSEUDOPARALELISMO: A partir de un único computador o procesador es posible ejecutar tareassimultáneamente. En cada instante de tiempo sólo se realiza una tarea (enperíodos muy pequeños), pero cuando transcurre un cierto tiempo puedehaberse ejecutado parte de diversos programas dando la sensación deparalelismo.2. Procesos.2.1. Definición y Propiedades. Se puede definir como un programa que ha sido almacenado en lamemoria del computador y cuya existencia es conocida por el SistemaOperativo. ¿Cómo se crea un proceso? Cuando el sistema operativo ejecuta unprograma, éste realiza una copia del código ejecutable y la almacena en lamemoria del computador (a partir de ese instante el programa pasa a ser unproceso). Además del código ejecutable, el proceso consta de otra informaciónadicional: - Pila de proceso que contiene datos temporales. - Sección de datos con variables globales. - Datos sobre planificación de los procesos. 1Tema II Procesos y Threads
  21. 21. Sistemas Informáticos en Tiempo Real Tema II Para que un proceso pueda ser gestionado de forma adecuada, éstedebe disponer de la anterior información adicional además del códigoejecutable. Una diferencia entre programa y un proceso es que son una entidadpasiva y una activa, respectivamente. Es decir, mientras que un procesoexperimenta cambios de estado, un programa es una entidad pasiva de cara alsistema operativo.2.2. Estados de un Proceso. En cada instante, un proceso tiene asociado un estado que determinarála actividad de dicho proceso dentro del sistema operativo. Existen tresdistintos: • PREPARADO: El proceso está esperando que se le asigne un procesador para poder ejecutarse. • EN EJECUCIÓN: El proceso es “dueño” de un procesador y sus instrucciones se están ejecutando. • SUSPENDIDO: El proceso está esperando que suceda algún evento como, por ejemplo, una operación de E/S. Admitido ACTIVO TERMINADO Elegido Por el Planificador NUEVO PREPARADO EN EJECUCIÓN expulsión Esperar evento Fin del evento o E/S o de E/S SUSPENDIDO Figura 2.1. Transiciones entre estados de un proceso Con respecto al estado de suspendido podemos decir que, a veces, unproceso debe quedar suspendido para no degradar el rendimiento del sistema,es decir, si el proceso necesita la aparición de un evento para continuarejecutándose, éste pasa a estado suspendido y así permitir que el procesadorquede libre hasta que ocurra dicho evento (entonces, el proceso pasa a estadopreparado). 2Tema II Procesos y Threads
  22. 22. Sistemas Informáticos en Tiempo Real Tema II Veamos un ejemplo de vida de un proceso. Cuando llega un nuevoproceso, éste pasa a estado preparado de forma inmediata. En ese instantepueden suceder dos cosas: a) Si no existe ningún procesador libre, el proceso permanece en estado preparado. b) Si existe un procesador libre, el proceso pasa a ejecución. Una vez el proceso se está ejecutando y es “dueño” del procesador,pueden suceder dos cosas: a) Si no existen procesos en estado preparado, éste permanece en ejecución. b) Si existe otro proceso, el sistema operativo puede decidir conmutar sus estados, es decir, el que está en ejecución deja libre el procesador pasando a estado preparado y el que está en preparado se hace dueño del computador y ejecuta su código. El planificador de procesos es un constituyente del sistema operativoencargado de realizar la planificación (es decir, es el planificador el que decidecual debe ser el estado de un proceso en todo momento). Es una tarea de lasmás críticas puesto que determina el rendimiento, en gran medida, del sistema.2.3. Información Adicional Sobre Procesos. La tabla de procesos es donde se almacena la información adicional decada proceso que va a ser gestionada por el sistema operativo. El registro decada proceso contiene información adicional sobre él mismo como: • Contador de programa: Indicará la dirección de la siguiente instrucción que el proceso ejecutará. • Estado del proceso: preparado, en ejecución o suspendido. • Registros de la CPU: los acumuladores, apuntadores a pila y registros de propósito general. Esta información está junto al C.P. por si se produce un error para permitir que el proceso continúe. • Información de planificación: Aquí se incluye la prioridad del proceso y otros parámetros de planificación. • Información contable: tiempo utilizado, límites de tiempo, número de proceso... • Información de estado de E/S: Almacena las solicitudes, los dispositivos asignados, lista de archivos abiertos... 3Tema II Procesos y Threads
  23. 23. Sistemas Informáticos en Tiempo Real Tema II 0 1 2 n-3 n-2 n-1 PCB PCB PCB ……… PCB PCB PCB PLANIFICADOR Figura 2.2. Representación de una tabla de procesos En resumen, en la tabla de procesos se guardará toda la informaciónnecesaria para poder reanudar la ejecución de un proceso (como si nuncahubiera parado) después de cambiar de estado, conocido, como cambio decontexto. El encargado de acceder a cada uno de estos registros llamadosProcess Control Block (PCB) es el planificador.2.4. Creación y Terminación de Procesos. Puesto que el sistema operativo ha de ser potente hemos de ejecutarprocesos de forma concurrente y por ello necesitamos crear un método decreación y terminación dinámica de procesos. i) Creación de Procesos. Durante la ejecución de un proceso (denominado proceso padre) éstepuede crear varios procesos nuevos (denominados procesos hijo) con unallamada al sistema. Esta llamada al sistema se puede realizar usando funcionesde C para así solicitar la creación de nuevos procesos. Una vez creado un proceso hijo, el padre podrá continuar su ejecuciónde dos formas distintas: • Continuar ejecutándose concurrentemente con sus hijos. • Esperar a que los procesos hijos terminen. Un subproceso puede obtener sus recursos directamente del sistema opuede estar restringido a los recursos del proceso padre, que debe compartiralgunos con sus hijos o dividirlos entre sus hijos. Restringiendo a los hijos, elproceso padre evita la saturación del sistema por la creación de demasiadossubprocesos. En el momento de creación el proceso padre puede transferirdatos iniciales a su hijo.Ejemplo de creación de procesos. En UNIX, un proceso nuevo se crea utilizando la llamada fork()duplicando el proceso padre en memoria. La diferencia entre padre e hijo esque el código de retorno del hijo es cero, mientras que el del padre es elidentificador de proceso del hijo. Posteriormente, mediante una llamada alsistema se pone a ejecutar el proceso hijo. En UNIX, el proceso padre porexcelencia es INIT ya que todos los hijos salen de él. A estos procesos hijos seconocen como SHELL. Esta filosofía de UNIX permite la creación de procesoshijos de forma dinámica. 4Tema II Procesos y Threads
  24. 24. Sistemas Informáticos en Tiempo Real Tema II Supongamos un caso de ejemplo en el cual el proceso padre tiene queatender peticiones de servir una web. Para atenderla el proceso padre crea unnuevo proceso que la atenderá y después se eliminará. INIT SHELL SHELL SHELL SHELL Petición web Petición web Petición web Petición web SHELL Petición web Figura 2.3. Política de creación de procesos en UNIX ii) Terminación de Procesos. La terminación se da cuando concluye la ejecución de su última línea y elpropio proceso solicita eliminarse. No obstante existen otras circunstancias enlas cuales se puede dar la terminación como, por ejemplo, a través de unallamada al sistema (como la llamada Kill()), un proceso puede provocar laterminación del otro. Por lo general, el proceso padre es el único que puedeterminarlos y cuando esto ocurre puede almacenar datos provenientes delproceso hijo que ha terminado.Ejemplo de terminación de procesos. Cuando un padre elimina a su hijo se hace mediante la llamada exit()que devuelve el identificador de proceso del hijo, de forma que el padre puededistinguir cual de sus hijos a terminado.3. Threads. Lo que se va a estudiar ahora es el mecanismo que permite refinarmucho más el concepto de concurrencia y paralelismo. Nosotros podemossubdividir un proceso (que es como una “tarea gorda”) en las tareas que locomponen pudiendo simplificarlo en hilos de ejecución. Los hilos de ejecuciónson las instrucciones que se ejecutan ininterrumpidamente. Los threads sonestas instrucciones que se ejecutan secuencialmente y que componen elproceso. 5Tema II Procesos y Threads
  25. 25. Sistemas Informáticos en Tiempo Real Tema II Desde el punto de vista del programa, la secuencia de instrucciones deun hilo de ejecución es un flujo ininterrumpido. En cambio, desde el punto devista del sistema operativo, los hilos de ejecución no los detecta. Es como sifueran en el “paquete” junto con los procesos y no hubiera que “darlos de alta”.Por lo tanto, el sistema operativo no tiene nada que ver con los threads ni consu planificación. P1 P1 Hilos de ejecución Figura 2.4. Hilos de ejecución en el interior de dos procesos P1 y P2 Digamos que los threads son como una evolución del concepto delproceso puesto que, al no necesitar ningún sistema de comunicación entreellos, el intercambio de información es trivial y rápido. Además, estos no soncontrolados por el sistema operativo dándoles una mayor libertad de ejecución. De esto podemos decir que la utilización de threads proporciona unaestructura fiable de programación, aumenta la productividad y el tiempo derespuesta.Características básicas. - Comparten tanto el código como los datos. - Se evita el cambio de contexto, en gran medida. - El sistema operativo no es consciente de su existencia. Emplear threads tiene mucha importancia puesto que se consigue unamejora del rendimiento del sistema al minimizar el tiempo perdido durante elcambio de contexto: Texto Cuando se conmuta, por ejemplo, entre el estado de preparado y el de T T ejecución hemos de almacenar toda la información relacionada con la ejecución del Hilos proceso en el PCB. Esto provoca que el computador emplee un tiempo que va a ser inútil. Con los threads el tiempo que tarda en realizarse un cambio de contexto es mínimo. Cuanto más grande es el periodo de tiempo Datos de cambio de contexto mayor será la degradación de la efectividad del sistema. Figura 2.5. Ejecución de una tarea 6Tema II Procesos y Threads
  26. 26. Sistemas Informáticos en Tiempo Real Tema II3.1. Ventajas de Trabajar con Threads. Obviando la complejidad de programación de los threads, éstos aportanmuchas más ventajas que los procesos. Estas son las siguientes: • Aumento del rendimiento del paralelismo. Si ejecutamos diferentes threads sobre procesadores diferentesconseguiremos aumentar el rendimiento del sistema, eso si aprovechamos elparalelismo del hardware. • Aumento de productividad. Puesto que utilizando los threads conseguiremos disminuir el tiempoinútil de cambio de contexto, lo que obtenemos es que nuestro sistema seamás efectivo y trabaje más. • Disminución del tiempo de respuesta. Ya que los threads comparten información y datos, el tiempo de cambiode contexto es más pequeño pudiendo así terminar las tareas antes y dar unarespuesta más rápida. • Uso más eficiente de los recursos del sistema. Al utilizar threads en vez de procesos no nos hace falta la estructura dedatos completa que le hace falta al sistema para gestionar los procesos, sinoque con menos información los threads pueden ser gestionados aprovechandomás los recursos del sistema. Es más rentable y rápido de crear.3.2. Inconvenientes de Trabajar con Threads. • Mayor complejidad de programación. • No todos los programas se pueden implementar con threads. • La conversión de antiguos programas a su equivalente con threads no es una tarea fácil.3.3. Modelos de Control de Threads. Existen tres modelos tradicionales de control de threads: i) Threads a Nivel de Usuario. Puesto que el sistema operativo donde se ejecutan no es capaz degestionarlos (es decir, el sistema operativo no tiene ninguna herramienta quelos soporte), los programas que trabajan con éstos, generalmente se enlazancon unas bibliotecas (que traen definidas e implementadas funciones) quecontienen todos los elementos necesarios para dicha gestión. 7Tema II Procesos y Threads
  27. 27. Sistemas Informáticos en Tiempo Real Tema II Este método tiene dos características importantes: • Los threads permanecen invisibles para el núcleo. • Los threads compiten entre sí para adueñarse de los recursos asignados el proceso al cual pertenecen. Aunque este tipo de threads tienen poco gasto, se puede observar quetienen ciertas desventajas: • Si un thread queda en estado suspendido bloqueará el proceso a no ser que exista otro thread especial que encargue de recuperar el control mediante una determinada llamada al sistema. • No se puede aprovechar el paralelismo de un multiprocesador puesto que si un procesador se la asigna a un proceso, los threads que lo componen no pueden ejecutarse en otro procesador. Un programa, Un programa, muchos hilos muchos hilos Soporte en Soporte en ejecución del ejecución del lenguaje lenguaje Núcleo del Sistema Operativo = Espacio de direcciones = Construcción = Proceso lingüística o hilo a nivel de usuario Figura 2.6. Modelo del Thread a Nivel de Usuario ii) Threads a Nivel de Núcleo. En este caso, son totalmente visibles por el núcleo y, además, sonentidades planificadoras, es decir, el sistema operativo proporciona un conjuntode llamadas al sistema para manejarlos. Ahora los denominaremos procesosligeros y éstos pueden competir por los recursos del sistema y para que noquede limitado al aprovechamiento del paralelismo. Como desventaja, elmanejo de estos threads puede ser costoso al igual que el de procesos pesadosaunque en operaciones de cambio de contexto y compartición de datos seandiez veces más rápidos. 8Tema II Procesos y Threads
  28. 28. Sistemas Informáticos en Tiempo Real Tema II Un programa, Un programa, muchos hilos muchos hilos Soporte en Soporte en ejecución del ejecución del lenguaje lenguaje Núcleo del Sistema Operativo = Espacio de direcciones = Construcción = Proceso lingüística o hilo a nivel de usuario Figura 2.7. Modelo de Thread a Nivel de Núcleo iii) Threads a Nivel Híbrido. Este tipo de control ofrece ventajas de los de a nivel de usuario y los dea nivel de núcleo. El usuario escribe el programa en términos de hilos a nivel deusuario y después especifica cuantos threads son visibles para el núcleo ypueden, por tanto competir por los recursos del sistema sin verse limitados porlos recursos del proceso al cual pertenecen. Los threads a nivel de usuario se llaman threads y los threads a nivel denúcleo se llaman procesos ligeros. Este es el sistema óptimo para un SistemaInformático de Tiempo Real ya que presenta los caracteres favorables de cadatipo. Un programa, muchos hilos u1 u2 Soporte en ejecución del lenguaje Núcleo del Sistema Operativo = Espacio de direcciones = Construcción = Proceso lingüística o hilo a nivel de usuario Figura 2.8. Modelo de Thread Híbrido 9Tema II Procesos y Threads
  29. 29. 1. Introducción 1 1.1. ¿Qué es POSIX? 1 1.2. Programación de Sistemas concurrentes 12. Llamadas al Sistema 23. Llamadas al Sistema para Gestión de Procesos 4 3.1. Llamada al Sistema fork() 4 3.2. Llamadas al Sistema getpid() y getpid() 6 3.3. Llamadas al Sistema wait() y waitpid() 7 3.4. Llamadas al Sistema exec() 7 3.5. Llamada al Sistema exit() 8
  30. 30. Resumen del tema III – Funciones POSIX 1 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open (const char path, int oflag,…); Etiqueta Descripción S_IRUSR bit de permiso de lectura para el propietario S_IWUSR bit de permiso de escritura para el propietario Etiqueta Descripción S_IXUSR bit de permiso de ejecución para el propietarioO_RDONLY Abre el fichero en modo sólo escritura S_IRWXU lectura, escritura y ejecución para el propietarioO_WRONLY Abre el fichero en modo sólo escritura S_IRGRP bit de permiso de lectura para el grupoO_RDWR Abre el fichero en modo lectura / escritura S_IWGRP bit de permiso de escritura para el grupo S_IXGRP bit de permiso de ejecución para el grupoO_APPEND Abre el fichero en modo “añadir al final” S_IRWXG lectura, escritura y ejecución para el grupoO_CREAT Crea el fichero si no existe S_IROTH bit de permiso de lectura para otrosO_TTRUNC Abre el fichero existente y lo trunca a 0 S_IWOTH bit de permiso de lectura para otros S_IXOTH bit de permiso de lectura para otros S_IRWXO lectura, escritura y ejecución para otros S_ISUID fija el ID del usuario al momento de la ejecución S_ISGID fija el ID del grupo al momento de la ejecución #include <sys/types.h> #include <unistd.h> ssize_t write (int fildes, const void buf, size_t nbytes); ssize_t read (int fildes, const void buf, size_t nbytes); #include <sys/types.h> #include <unistd.h> pid_t fork (void); #include <sys/types.h> #include <unistd.h> uid_t getpid (void); uid_t getppid (void); #include <sys/types.h> #include <sys/wait.h> pid_t wait (int *stat_loc); pid_t waitpid (pid_t pid, int *stat_loc, int options); #include <unistd.h> int execl (const char *path, const char *arg0, ..., const char *argn, char /*NULL*/); int execle (const char *path, const char *arg0, ..., const char *argn, char /*NULL*/, char *const envp[]); int execlp (const char *file, const char *arg0, ...,const char *argn, char /*NULL*/); #include <uninst.h> int execv (const char *path, char const *argv[]); int execve (const char *path, char const *argv[], char *const envp[]); int execvp (const char *file, char const *argv[]); #include <stdlib.h> void exit (int status); Resumen del tema III – Funciones POSIX 1
  31. 31. Sistemas Informáticos en Tiempo Real Tema III1. Introducción.1.1. ¿Qué es POSIX? En este tema estudiaremos las herramientas necesarias para programarsistemas concurrentes ya que todos los sistemas Informáticos de Tiempo Realcumplen esta propiedad. Debido a la necesidad de estandarizar los distintos sistemas UNIX (ladiferencia de programación y la falta de portabilidad del código provoca estasdiferencias a nivel de sistema entre los distintos sistemas operativos UNIX) laIEEE ha desarrollado un grupo de estándares: POSIX (Potable OperatingSystem Interface). Este especifica la interfaz entre el sistema operativo y elusuario de modo que los usuarios podemos interactuar con el sistemaoperativo. Gracias a esta estandarización se permite que los programas de lasdiversas aplicaciones sean transportables entre distintas plataformas. Estándar Descripción POSIX.1 Interfaz del sistema para programas de aplicación (API) en lenguaje C POSIX.1b Rectificación 1 del API: Extensión de tiempo real en C POSIX.1c Rectificación 2 del API: Extensión de hilos de control POSIX.2 Intérprete de comandos y útiles POSIX.4 Ahora llamado POSIX.1c POSIX.5 POSIX.1 lenguaje ADA POSIX.6 Seguridad POSIX.7 Administración del sistema Tabla 3.1. Algunos estándares POSIX1.2. Programación de Sistemas Concurrentes. Con respecto a la programación concurrente en UNIX podemos decir quese realiza de dos maneras: • Mediante la implementación de programas en un lenguaje diseñado para dar soporte a la concurrencia como Java o Ada. La concurrencia la proporciona el lenguaje. • Mediante la utilización del lenguaje (estándar bajo un sistema UNIX que cumpla el estándar POSIX). La concurrencia, en este caso, la proporciona el sistema operativo. En UNIX, los procesos solicitan servicios al sistema utilizando llamadas al sistema (éstas son puntos de entrada directa al núcleo). El núcleo es una colección de programas muy eficaces que gobiernan el control del sistema operativo. Aparte de las llamadas (que son parte intrínseca del núcleo) estándisponibles muchas funciones de la biblioteca que pueden o no hacer uso dellamadas al sistema. 1Tema III Funciones POSIX 1
  32. 32. Sistemas Informáticos en Tiempo Real Tema III Programas de usuario (procesos)2. Llamadas al Sistema. Son un conjunto de servicios Interfaz de llamadas al sistemabásicos, proporcionados por el sistemaoperativo, que definen una vía de Kernelcomunicación entre un proceso y elsistema operativo. Con interrupciones seconsigue la implementación de las Hardware (Recursos)llamadas al sistema que en UNIX seclasifican en 5 categorías: Figura 3.1. Llamadas al sistema 1. Llamadas al sistema para gestión de procesos. 2. Llamadas al sistema para gestión de señales. 3. Llamadas al sistema para gestión de memoria. 4. Llamadas al sistema para gestión de ficheros y directorios. 5. Llamadas al sistema para gestión de Entrada/Salida. Veamos a continuación un ejemplo sencillo de la creación de un fichero(si este no existe) y en el cual se escribe la cadena “Esto es un ejemplo”: Usando la llamada open() podemos abrir o crear un nuevo fichero. Lasintaxis es: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open (const char path, int oflag,…); donde el primer argumento es el nombre del fichero que se quiere abriry el segundo indica el modo en que se va a abrir el fichero (estos modos serepresentan mediante etiquetas predefinidas en el fichero cabecera fcntl.h).Cabe decir que podemos utilizar el operador lógico OR para obtener un efectocombinado. Etiqueta Descripción En el caso de que se vaya aO_RDONLY Abre el fichero en modo sólo escritura crear un fichero, los puntosO_WRONLY Abre el fichero en modo sólo escrituraO_RDWR Abre el fichero en modo lectura / escritura suspensivos se sustituyen por unO_APPEND Abre el fichero en modo “añadir al final” tercer parámetro de tipo mode_tO_CREAT Crea el fichero si no existe que especifica los permisos delO_TTRUNC Abre el fichero existente y lo trunca a 0 fichero que se va a crear. Tabla 3.2. Modos de apertura de un fichero Usuario Grupo Otros r w x r w x r w x Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Figura 3.2. Patrón de la máscara de permisos 2Tema III Funciones POSIX 1
  33. 33. Sistemas Informáticos en Tiempo Real Tema IIIEtiqueta Descripción Los archivos pueden serS_IRUSR bit de permiso de lectura para el propietarioS_IWUSR bit de permiso de escritura para el propietario empleados por: un usuario, un grupo oS_IXUSRS_IRWXU bit de permiso de ejecución para el propietario lectura, escritura y ejecución para el propietario el resto. Los permisos de cada una deS_IRGRP bit de permiso de lectura para el grupo estas clases son: leer (r), escribir (w) yS_IWGRP bit de permiso de escritura para el grupoS_IXGRP bit de permiso de ejecución para el grupo ejecutar (x). Cada fichero tieneS_IRWXG lectura, escritura y ejecución para el grupo asociados 9 bits donde cada BIT a 0 oS_IROTH bit de permiso de lectura para otrosS_IWOTH bit de permiso de lectura para otros a 1 quita o da el permisoS_IXOTHS_IRWXO bit de permiso de lectura para otros lectura, escritura y ejecución para otros correspondiente.S_ISUID fija el ID del usuario al momento de la ejecuciónS_ISGID fija el ID del grupo al momento de la ejecución Con respecto a dos operacionesTabla 3.3. Etiquetas de permisos de un fichero básicas con ficheros: leer y escribir, podemos decir que se utilizan a travésde las llamadas al sistema read() y write(). La llamada read() y write() tiene lasiguiente definición: #include <sys/types.h> #include <unistd.h> ssize_t write (int fildes, const void buf, size_t nbytes); ssize_t read (int fildes, const void buf, size_t nbytes); Esta llamada intenta escribir (respectivamente leer) nbytes bytestomados del buffer buf en el archivo cuyo descriptor es fildes. Si esta llamadatiene éxito entonces devuelve el número de bytes escritos. El ejemplo sería elsiguiente: #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <fcntl.h> #include <stdio.h> #include <string.h> #define BLKSIZE 100 void main (void) { int fd, bytes_escritos, bytes_leidos; /*descriptor de fichero*/ char buffer[BLKSIZE]; mode_t modo = S_IRWXU; /* modo de r, w y x para el propietario*/ strcpy(buffer, "Esto es un ejemplon"); if ((fd = open ("ejemplo", O_RDWR | O_CREAT, modo))== -1) /*abre el fichero ejemplo en modo lectura/escritura o lo crea si no existe */ perror ("Error al abrir o crear el fichero"); /*muestra un error si no puede abrir/crear el fichero*/ else { bytes_escritos = write(fd, buffer, strlen(buffer)); /* escribe buffer de tamaño sizeof(buffer) en fd */ bytes_leidos = read(fd, buffer, BLKSIZE); buffer[bytes_leidos]=0; printf("%s son %d n", buffer, bytes_leidos); } exit(0); } 3Tema III Funciones POSIX 1
  34. 34. Sistemas Informáticos en Tiempo Real Tema III3. Llamadas al Sistema para Gestión de Procesos.3.1. Llamada al Sistema fork(). La función fork() permite la creación de un nuevo proceso, que es unacopia exacta (un doble con un nuevo identificador pero con el mismo código).Una vez creado el hijo, éste comienza su ejecución en la línea siguiente a laúltima llamada a la función fork(), es decir, a partir de cuando fue creado. Lasintaxis es: #include <sys/types.h> #include <unistd.h> pid_t fork (void); Se puede observar que no tiene ningún parámetro y devuelve un entero.fork() devuelve el identificador de procesos del nuevo proceso creado alproceso padre y devuelve un cero al hijo. Si en un programa escribo la funciónfork(), no tengo que pasarle ningún parámetro, pues se supone que el procesohijo creado es del proceso o programa que estamos escribiendo. El proceso hijose empieza a ejecutar a partir de la línea donde se a realizado la llamada fork(). #include <sys/types.h> #include <unistd.h> #include <stdio.h> void main (void) { int pid; pid = fork(); switch (pid) { case -1: perror ("No se ha podido crear el hijo"); break; case 0: printf("Soy el hijo, mi PID es %d y mi PPID es %dn", getpid(), getppid()); break; default: printf ("Soy el padre, mi PID es %d y el PID de mi hijo es %dn", getpid(), pid); } exit(0); } El ejemplo se puede expresar gráficamente como: PADRE ……………………… ……………………… Comienza su ejecución ……………………… después del fork () fork () ……………………… HIJO ……………………… ……………………… ……………………… Este fragmento de ……………………… ……………………… código no es ejecutado fork () ……………………… ……………………… Este fragmento de ……………………… código si es ejecutado Figura 3.3. Uso de la función fork () 4Tema III Funciones POSIX 1
  35. 35. Sistemas Informáticos en Tiempo Real Tema III El proceso hijo hereda del padre lo siguiente: - Con qué permisos se crean los ficheros. - Variables de entorno y argumentos, es decir, las condiciones en que se va a ejecutar el proceso. - Descriptores de fichero. El proceso hijo difiere del padre en lo siguiente: - El proceso hijo tiene su propio identificador PID. - El hijo tiene el identificador del padre PPID, de forma que sabemos cual es su padre (Parent Process Identificator). - Como los sistemas operativos UNIX tienen un contador que mide cuánto tiempo lleva un proceso ejecutándose, se inicializa la información de contabilidad del proceso hijo. Los errores que pueden darse al ejecutar la llamada fork() son: - Saturación del sistema por sobrepasar el límite de procesos permitidos. - Excedente de procesos máximos para un usuario. - Insuficiencia en la memoria. Si la función fork() devuelve un –1 esto significa que no se ha podidocrear un hijo. Con respecto a la ejecución del fork() en un proceso, es necesariorealizar una aclaración. Al ejecutarla, se crea un hijo cuyo código es igual perocon el contador de programa señalando a la línea siguiente al fork() que lo hacreado. Cuando se ejecuta la línea de código 5 (por ejemplo), donde está elfork(), se crea un hijo del proceso padre. En este momento, tenemos dos hilos de ejecución, es decir, de unprograma ejecutándose, se pasa a leer dos (el mismo que ya estabaejecutándose y un programa hijo, que se ejecuta a partir de la línea que locreó). Por tanto, el proceso P2 comienza a ejecutarse en la línea posterior alfork() que lo ha creado. Ahora tengo dos programas que se están ejecutandoen un determinado orden, que ya veremos (primero P1 y luego P2, a la vez,primero P2 y luego P1,...). Supongamos que van ejecutándose a la vez. 5Tema III Funciones POSIX 1
  36. 36. Sistemas Informáticos en Tiempo Real Tema III P1 #include <stdio.h> Las llaves indican el código ejecutado por int main (void) cada proceso { ………………………………………………… ………………………………………………… SE CREA UN HIJO DE P1 pid1 = fork ( ); P2 pid2 = fork ( ); #include <stdio.h> ………………………………………………… ………………………………………………… SE CREA OTRO int main (void) HIJO DE P1 } { ………………………………………………… ………………………………………………… pid1 = fork ( ); SE CREA UN HIJO DE P2 P3 pid2 = fork ( ); ………………………………………………… #include <stdio.h> ………………………………………………… } int main (void) { ………………………………………………… P4 ………………………………………………… #include <stdio.h> pid1 = fork ( ); int main (void) { pid2 = fork ( ); ………………………………………………… ………………………………………………… ………………………………………………… ………………………………………………… pid1 = fork ( ); } pid2 = fork ( ); ………………………………………………… ………………………………………………… Figura 3.4. Creación de procesos hijo } El proceso P1 tiene en la siguiente línea de código otro fork(), por lo quevuelve a crear otro hijo suyo, que se ejecutará a partir de la línea siguiente. Almismo tiempo, el proceso P2 tiene en la línea que empieza a ejecutar un fork(),por lo que crea un hijo suyo que se empezará a ejecutar a partir de ese fork()que lo ha creado. En total, se han creado 3 hijos, y de 1 programa en ejecución o procesoque teníamos al principio, tenemos ahora 4 procesos ejecutándose en el ordenen que determine el planificador.3.2. Llamadas al Sistema getpid() y getppid(). Ambas se definen de la siguiente forma: #include <sys/types.h> #include <unistd.h> uid_t getpid (void); uid_t getppid (void); Con estas llamadas obtenemos las PID’s del proceso que la invoca y desu proceso padre respectivamente. El tipo uid_t es un entero predefinido en<sys/types.h>. 6Tema III Funciones POSIX 1
  37. 37. Sistemas Informáticos en Tiempo Real Tema III 3.3. Llamada al Sistema wait() y waitpid(). Si un padre desea esperar hasta que el proceso hijo termine de ejecutarse, éste debe realizar la llamada al sistema wait o waitpid que se definen como sigue: #include <sys/types.h> #include <sys/wait.h> pid_t wait (int *stat_loc); pid_t waitpid (pid_t pid, int *stat_loc, int options); La llamada wait() suspende la ejecución del proceso que lo invoca hasta que finaliza alguno de sus hijos. Si el padre ejecuta esta llamada, se le notifica la terminación y el código de terminación del proceso hijo. Si el padre no está ejecutando wait() y termina, entonces no espera a que su proceso hijo termine. Por tanto, la conexión entre el proceso hijo y su padre desaparece y el proceso hijo sigue ejecutándose sin que se entere el padre. 3.4. Llamada al Sistema exec(). La familia de llamadas exec() cambia la imagen de memoria de un proceso por el contenido de un fichero ejecutable. La forma habitual de utilizar la combinación fork/exec es dejar que el hijo ejecute exec() mientras el padre continua la ejecución normal. Existen 6 variaciones de exec() que se distinguen por la forma en que son pasados los argumentos de la línea de comandos y el entorno que utilizan. Las seis variaciones se pueden agrupar en dos grupos: • Llamadas execl: execl(), execlp(), execle(). Las llamadas execl (execl(), execlp(), execle()) pasan los argumentos de la línea de comandos del programa mediante una lista. Son útiles si se conoce el número de argumentos que se van a pasar#include <unistd.h> int execl (const char *path, const char *arg0, ..., const char *argn, char /*NULL*/); int execle (const char *path, const char *arg0, ..., const char *argn, char /*NULL*/, char *const envp[]); int execlp (const char *file, const char *arg0, ...,const char *argn, char /*NULL*/); execle() permite pasar nuevos valores de variables de entorno. execlp() permite tomar el path por defecto del entorno. 7 Tema III Funciones POSIX 1
  38. 38. Sistemas Informáticos en Tiempo Real Tema III • Llamadas execv: execv(), execvp(), execve(). Pasan los argumentos de la linea de comando en un array de argumentos. #include <uninst.h> int execv (const char *path, char const *argv[]); int execve (const char *path, char const *argv[], char *const envp[]); int execvp (const char *file, char const *argv[]); execve() permite pasar nuevos valores de variables de entorno. execvp() permite tomar el path por defecto del entorno.3.5. Llamada al Sistema exit(). Fuerza la terminación de un proceso devolviendo un código de error.Está implícita en la terminación de todos los procesos. Al finalizar un proceso serecuperan todos los recursos asignados al proceso. Si el padre del proceso que termina está ejecutando wait() se le notificala terminación y el código de terminación sólo cuando termine de realizar dichaespera. Si el padre no ejecuta wait() el proceso se transforma en un procesozombie huérfano hasta que es adoptado por INIT. La sintaxis sería la siguiente: #include <stdlib.h> void exit (int status); El campo status se emplea para imprimir un mensaje de error porpantalla si ha ocurrido un error, ya que el valor de status indicará el mensajeque saldrá por pantalla. 8Tema III Funciones POSIX 1
  39. 39. Funciones Funciones POSIX (I): IntroducciónPOSIX (I)? ¿Que es POSIX? ? POSIX: Portable Operating System Interface (IEEE) ? Especifica la interfaz entre el sistema y el usuario. ? Intenta estandarizar los interfaces de los SO para permitir que las aplicaciones funcionen en distintas plataformas. ? POSIX se compone de distintas normas estándares llamadas “miembros” Estándar Descripción POSIX.1 Interfaz del sistema para programas de aplicación (API) en lenguaje C POSIX.1b Rectificación 1 del API: Extensión de tiempo real en C POSIX.1c Rectificación 2 del API: Extensión de hilos de control POSIX.2 Intérprete de comandos y útiles POSIX.4 Ahora llamado POSIX.1c POSIX.5 POSIX.1 Lenguaje ADA POSIX.6 Seguridad POSIX.7 Administración del sistemaSistemas Informáticos de Tiempo Real 1ISA-UMH © T-99-001V1.0Funciones Programación de Sistemas ConcurrentesPOSIX (I)? La programación concurrente se puede realizar de dos formas ? Utilizando un lenguaje diseñado para soportar concurrencia • La concurrencia la proporciona el lenguaje • ADA • JAVA ? Utilizando C estándar bajo un sistema UNIX que cumpla POSIX • La concurrencia la proporciona el SO • Los procesos solicitan servicios al SO (p.e. de E/S) mediante llamadas al sistemaSistemas Informáticos de Tiempo Real 2ISA-UMH © T-99-001V1.0 ?1
  40. 40. Funciones Llamadas al Sistema (I)POSIX (I)? Las llamadas al sistema son un conjunto de servicios básicos del SO? Definen la interfaz entre un proceso y el SO? Son una parte intrínseca del núcleo del SO (Kernel)? Kernel: colección de módulos software que se ejecutan de forma privilegiada (se tiene acceso a todos los recursos de la máquina) Programas de usuario (procesos) Interfaz de llamadas al sistema Kernel Hardware (Recursos)Sistemas Informáticos de Tiempo Real 3ISA-UMH © T-99-001V1.0Funciones Llamadas al Sistema (II)POSIX (I)? La implementación de las llamadas al sistema se realiza mediante interrupciones software o traps? Normalmente se proporciona al usuario una interfaz (funciones de biblioteca) que ocultan al usuario el mecanismo interno de las llamadas? Tipos de llamadas en UNIX ? Llamadas al sistema para gestión de procesos ? Llamadas al sistema para gestión de señales ? Llamadas al sistema para gestión de memoria ? Llamadas al sistema para gestión de ficheros y directorios ? Llamadas al sistema para gestión de E/SSistemas Informáticos de Tiempo Real 4ISA-UMH © T-99-001V1.0 ?2
  41. 41. Funciones Llamadas al sistema: Ejemplo (I)POSIX (I)? Ejemplo de utilización de llamadas al sistema: Crear un fichero “ejemplo” (si no existe) y escribir la cadena “Esto es un ejemplo” en él? Llamadas involucradas: open, write? open: asocia un descriptor de fichero con un fichero o dispositivo lógico. #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open (const char *path,int oflag, ...); Etiqueta Descripción O_RDONLY Abre el fichero en modo sólo lectura O_WRONLY Abre el fichero en modo sólo escritura O_RDWR Abre el fichero en modo lectura / escritura O_APPEND Abre el fichero en modo “añadir al final” O_CREAT Crea el fichero si no existe O_TRUNC Abre el fichero existente y lo trunca a 0 Modos de apertura de ficherosSistemas Informáticos de Tiempo Real 5ISA-UMH © T-99-001V1.0Funciones Llamadas al sistema: Ejemplo (II)POSIX (I)? En caso de crear el fichero es necesario especificar el modo de apertura (permisos)? Permisos en UNIX ? Cada fichero en UNIX tiene permisos para el propietario del mismo, para el grupo de usuarios del propietario y para el resto ? Los permisos para cada una de las clases anteriores son: leer (R), escribir (w) y ejecutar (X). ? Cada fichero tiene asociados 9 bits donde cada bit a 1 o a 0 da o quita el permiso correspondiente según el patrón que se muestra a continuación Usuario Grupo Otros r w x r w x r w x Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Patrón de la máscara de permisosSistemas Informáticos de Tiempo Real 6ISA-UMH © T-99-001V1.0 ?3
  42. 42. Funciones Llamadas al sistema: Ejemplo (III)POSIX (I)? En vez de utilizar el valor numérico obtenido mediante la combinación de bits se pueden utilizar las siguientes etiquetas: Etiqueta Descripción S_IRUSR bit de permiso de lectura para el propietario S_IWUSR bit de permiso de escritura para el propietario S_IXUSR bit de permiso de ejecución para el propietario S_IRWXU lectura, escritura y ejecución para el propietario S_IRGRP bit de permiso de lectura para el grupo S_IWGRP bit de permiso de escritura para el grupo S_IXGRP bit de permiso de ejecución para el grupo S_IRWXG lectura, escritura y ejecución para el grupo S_IROTH bit de permiso de lectura para otros S_IWOTH bit de permiso de lectura para otros S_IXOTH bit de permiso de lectura para otros S_IRWXO lectura, escritura y ejecución para otros S_ISUID fija el ID del usuario al momento de la ejecución S_ISGID fija el ID del grupo al momento de la ejecución Etiquetas de permisos de un ficheroSistemas Informáticos de Tiempo Real 7ISA-UMH © T-99-001V1.0Funciones Llamadas al sistema: Ejemplo (IV)POSIX (I)? Las etiquetas de permisos se pueden combinar mediante el operador “||” (“o” lógico) fd = open (“ejemplo”, O_CREAT, S_IRWXU || S_IXGRP);? Llamada write: intenta escribir nbytes tomados del buffer buf en el archivo con descriptor fildes #include <unistd.h> ssize_t write(int fildes, const void *buf, size_t nbytes); ? Devuelve el número de bytes leídosSistemas Informáticos de Tiempo Real 8ISA-UMH © T-99-001V1.0 ?4

×