Untitled

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson

Questions and Answers

¿Por qué la eficiencia y la proximidad al sistema operativo han hecho popular al lenguaje C en sistemas de tiempo real, a pesar de carecer de características deseables como concurrencia y un modelo de objetos?

A pesar de sus limitaciones, C permite un control de bajo nivel y una optimización que son cruciales para cumplir con las restricciones de tiempo y recursos en estos sistemas.

Describe cómo la evolución de Ada (desde Ada 83 hasta Ada 2022) ha impactado su idoneidad para el desarrollo de aplicaciones de tiempo real.

Cada nueva versión ha introducido mejoras y abstracciones diseñadas específicamente para facilitar el desarrollo, la verificación y el mantenimiento de aplicaciones de tiempo real, abordando necesidades emergentes y corrigiendo deficiencias previas.

¿Cuál es la principal limitación de los lenguajes secuenciales en el contexto de los sistemas de tiempo real y cómo impacta esta limitación en la capacidad de modelar el entorno?

Su incapacidad para modelar el paralelismo inherente al entorno de tiempo real, ya que solo pueden ejecutar un único flujo de control a la vez, lo que dificulta la gestión de eventos concurrentes y la respuesta en tiempo oportuno a múltiples estímulos.

Explica la relación entre el modelado del paralelismo del entorno y la necesidad de concurrencia en los lenguajes de programación para sistemas de tiempo real.

<p>La necesidad de concurrencia surge directamente de la necesidad de modelar el paralelismo del entorno. Un lenguaje concurrente permite representar y gestionar múltiples tareas que se ejecutan simultáneamente, reflejando la naturaleza paralela de los eventos en el mundo real que el sistema debe controlar.</p> Signup and view all the answers

Considerando las características deseables en lenguajes para sistemas de tiempo real, ¿cómo contribuye la gestión y el control del tiempo a la robustez y fiabilidad del sistema?

<p>Una gestión adecuada del tiempo permite la monitorización y el control de los tiempos de ejecución y actividad, lo que facilita la detección y el manejo de errores o excepciones relacionadas con el cumplimiento de los plazos, contribuyendo así a la robustez y la fiabilidad del sistema.</p> Signup and view all the answers

¿Cuáles son las dos categorías principales de lenguajes de programación relevantes para los sistemas de tiempo real?

<p>Lenguajes secuenciales y lenguajes concurrentes.</p> Signup and view all the answers

En el contexto de los sistemas de tiempo real (STR), ¿qué implica la 'programación concurrente'?

<p>Implica la capacidad de ejecutar múltiples tareas simultáneamente o en paralelo.</p> Signup and view all the answers

¿Por qué es importante considerar los requisitos al elegir un lenguaje de programación para un sistema de tiempo real?

<p>Porque los requisitos determinan las funcionalidades y restricciones que el lenguaje debe soportar para garantizar el correcto funcionamiento del STR.</p> Signup and view all the answers

Describe brevemente qué son los 'objetos protegidos' en el contexto de la programación concurrente en Ada y por qué son importantes.

<p>Son mecanismos de sincronización que garantizan el acceso seguro a recursos compartidos por múltiples tareas, evitando condiciones de carrera y garantizando la integridad de los datos.</p> Signup and view all the answers

¿Qué diferencia fundamental existe en la gestión de tareas entre un sistema de tiempo real que utiliza 'tareas periódicas' y uno que utiliza 'tareas aperiódicas'?

<p>Las tareas periódicas se ejecutan a intervalos regulares y predecibles, mientras que las tareas aperiódicas se activan por eventos externos y su ocurrencia es impredecible.</p> Signup and view all the answers

Explica brevemente en qué consiste el problema de la 'inversión de prioridades' en sistemas de tiempo real y por qué es crítico evitarlo.

<p>Ocurre cuando una tarea de alta prioridad es bloqueada por una tarea de baja prioridad, comprometiendo la capacidad de respuesta del sistema.</p> Signup and view all the answers

¿Qué papel juegan los 'pragmas de programación' en el desarrollo de sistemas de tiempo real con Ada?

<p>Proporcionan directivas al compilador para optimizar el código y controlar aspectos específicos del comportamiento del sistema, como la asignación de memoria o la gestión de interrupciones.</p> Signup and view all the answers

¿Cuál es la importancia del 'análisis de planificación' en el contexto de los Sistemas de Tiempo Real (STR)?

<p>Permite verificar si todas las tareas del sistema cumplirán con sus plazos de ejecución, garantizando que el STR pueda operar correctamente bajo las restricciones temporales impuestas.</p> Signup and view all the answers

¿Cuáles son dos ventajas principales de utilizar lenguajes secuenciales en la programación?

<p>Estructura clara y facilidad de análisis y depuración.</p> Signup and view all the answers

En el ejemplo de código C proporcionado, ¿cuál es la postcondición esperada para la variable 'contador' después de la ejecución del bucle for?

<p>La postcondición esperada es que <code>contador = 100000</code>.</p> Signup and view all the answers

En el ejemplo de código Ada, ¿qué salida se mostrará si el valor de 'contador' es diferente de 100000 después de la ejecución del bucle?

<p>Se mostrará <code>Resultado incorrecto</code>.</p> Signup and view all the answers

¿Qué característica principal distingue a los lenguajes concurrentes de los lenguajes secuenciales?

<p>La capacidad de definir múltiples flujos de control (threads o tareas) que se ejecutan de forma concurrente.</p> Signup and view all the answers

Menciona dos requerimientos adicionales que necesitan los lenguajes concurrentes, comparados con los secuenciales.

<p>Planificación de tareas y mecanismos de comunicación y sincronización.</p> Signup and view all the answers

¿Cuál es una de las principales dificultades asociadas con la validación y depuración de programas escritos en lenguajes concurrentes?

<p>Problemas para la validación y depuración debido a la complejidad inherente a la concurrencia.</p> Signup and view all the answers

¿Qué es el 'Runtime Support (RTS)' y por qué es necesario en los lenguajes concurrentes?

<p>Es un soporte de ejecución necesario para gestionar y coordinar la ejecución de múltiples hilos o tareas concurrentes.</p> Signup and view all the answers

En el contexto de los sistemas de tiempo real, ¿de qué depende un lenguaje secuencial?

<p>Depende del Sistema Operativo (S.O.).</p> Signup and view all the answers

Explica brevemente por qué la planificación (scheduling) es esencial en sistemas que utilizan lenguajes concurrentes.

<p>La planificación es esencial para asignar recursos y tiempo de CPU a las diferentes tareas concurrentes, asegurando que se cumplan los requisitos de tiempo real y se eviten conflictos.</p> Signup and view all the answers

Describe un problema común que puede surgir al utilizar variables compartidas entre múltiples hilos en un lenguaje concurrente y cómo se puede mitigar.

<p>Un problema común es la condición de carrera, donde múltiples hilos acceden y modifican la variable simultáneamente, resultando en datos inconsistentes. Se puede mitigar utilizando mecanismos de sincronización como mutexes o semáforos para proteger el acceso a la variable.</p> Signup and view all the answers

¿Cómo la tipificación nominal en Ada ayuda a la detección temprana de errores en comparación con la tipificación estructural?

<p>La tipificación nominal requiere una declaración explícita de tipos, permitiendo al compilador verificar la compatibilidad de tipos basándose en los nombres declarados y no solo en la estructura, lo que facilita la detección de errores de tipo en tiempo de compilación.</p> Signup and view all the answers

Describe dos abstracciones comunes proporcionadas por las APIs en sistemas operativos y explica cómo simplifican el desarrollo de software.

<p>Las APIs proporcionan abstracciones para procesos y ficheros. Estas simplifican el desarrollo al ofrecer interfaces de alto nivel que ocultan los detalles de implementación del sistema operativo, permitiendo a los desarrolladores interactuar con estos recursos de manera más sencilla y portable.</p> Signup and view all the answers

¿Cuál es la importancia de que el lenguaje Ada tenga 'nula ambigüedad' y 'ningún comportamiento indefinido' según la norma ISO?

<p>Esto asegura que el comportamiento del programa sea predecible y consistente en todas las implementaciones, lo cual es crucial en sistemas críticos donde la fiabilidad es esencial. Facilita la certificación y verificación del código, reduciendo el riesgo de errores inesperados.</p> Signup and view all the answers

En el contexto de sistemas de tiempo real, ¿qué implicaciones tiene el uso de un lenguaje secuencial como C comparado con un lenguaje diseñado específicamente para concurrencia?

<p>En C, la concurrencia debe ser gestionada explícitamente mediante <em>threads</em> y mecanismos de sincronización, lo cual puede ser propenso a errores si no se implementa correctamente. Un lenguaje concurrente ofrece soporte nativo para facilitar la gestión de tareas concurrentes, reduciendo la complejidad y el riesgo de errores.</p> Signup and view all the answers

Explica cómo los 'Anexos' en la norma ISO de Ada (Sist. TR, Sist. Distribuidos, Programación de sistemas) extienden la funcionalidad del núcleo del lenguaje y por qué esto es beneficioso.

<p>Los 'Anexos' proveen funcionalidades especializadas para dominios específicos, permitiendo a los desarrolladores utilizar herramientas y bibliotecas estandarizadas que se integran bien con el núcleo del <em>lenguaje</em>. Esto fomenta la reutilización de código y la portabilidad entre diferentes implementaciones de Ada para esos dominios.</p> Signup and view all the answers

¿Por qué es importante que los nombres de variables y programas sean indicativos de lo que denotan?

<p>Facilita la comprensión del código, tanto para el autor como para otros programadores, reduciendo errores y facilitando el mantenimiento.</p> Signup and view all the answers

Explica qué implicaciones tiene el hecho de que un compilador no distinga entre mayúsculas y minúsculas en los nombres de las variables.

<p>Aunque el compilador trate <code>temp_inside</code> y <code>Temp_inside</code> como el mismo nombre, mantener una convención de estilo consistente mejora la legibilidad y previene confusiones.</p> Signup and view all the answers

¿Qué son las palabras reservadas y por qué no pueden ser usadas como identificadores?

<p>Son palabras con un significado predefinido en el lenguaje. No pueden usarse como identificadores porque el compilador las interpreta como instrucciones del lenguaje.</p> Signup and view all the answers

Describe dos objetivos principales del perfil Ravenscar en el contexto de sistemas de tiempo real.

<ol> <li>Conseguir un modelo de ejecución concurrente determinista. 2. Permitir una implementación pequeña y eficiente, sin sobrecarga para tareas que deben responder a plazos muy cortos.</li> </ol> Signup and view all the answers

¿Cómo ayuda el perfil de Ravenscar a realizar análisis temporales en sistemas de tiempo real?

<p>Al imponer restricciones a la parte concurrente del lenguaje, el perfil facilita la creación de un modelo de ejecución determinista, permitiendo predecir con exactitud los tiempos de respuesta de las tareas.</p> Signup and view all the answers

¿En el contexto de la creación de tareas en C usando pthreads, qué significa pthread_create( &Tarea1, NULL, (void*)& control1, &args) y cuáles son los roles de Tarea1, control1 y args?

<p><code>pthread_create</code> crea un nuevo hilo de ejecución. <code>Tarea1</code> es el identificador del hilo, <code>control1</code> es la función que ejecutará el hilo, y <code>args</code> son los argumentos pasados a la función <code>control1</code>.</p> Signup and view all the answers

En C/ARINC653, ¿cuáles son los parámetros clave que se configuran al crear un proceso mediante PROCESS_ATTRIBUTE_TYPE y qué representan BASE_PRIORITY y TIME_CAPACITY?

<p>Parámetros clave incluyen <code>ENTRY_POINT</code>, <code>BASE_PRIORITY</code>, <code>STACK_SIZE</code>, <code>PERIOD</code> y <code>TIME_CAPACITY</code>. <code>BASE_PRIORITY</code> define la prioridad del proceso, y <code>TIME_CAPACITY</code> especifica la cantidad de tiempo de CPU asignado al proceso.</p> Signup and view all the answers

Compara la creación de tareas en C usando pthreads y en C/ARINC653. ¿Cuál es una diferencia principal en la forma en que se definen y gestionan las prioridades de las tareas?

<p>En pthreads, las prioridades se gestionan a través de políticas de planificación del sistema operativo, mientras que en C/ARINC653, la prioridad se define explícitamente como un atributo del proceso (<code>BASE_PRIORITY</code>) dentro de un sistema de particionado de tiempo.</p> Signup and view all the answers

En el contexto de sistemas de tiempo real, ¿por qué es importante definir PERIOD y TIME_CAPACITY al crear un proceso en C/ARINC653?

<p><code>PERIOD</code> define la frecuencia con la que se debe ejecutar el proceso, y <code>TIME_CAPACITY</code> limita el tiempo máximo de ejecución de cada instancia. Esto asegura que los procesos se ejecuten de manera predecible y no monopolicen los recursos del sistema, manteniendo la integridad del sistema de tiempo real.</p> Signup and view all the answers

Considerando el fragmento de código en C y su equivalente en Ada, ¿qué diferencias sintácticas y conceptuales clave existen al declarar variables integer y float en ambos lenguajes?

<p>En C, se usan <code>int</code> e <code>float</code> para declarar las variables, mientras que en Ada se usa <code>i : integer;</code> y <code>f : float;</code>, notando que Ada requiere especificar el tipo después del nombre de la variable y usa el operador <code>:</code>.</p> Signup and view all the answers

En la conversión de código C a Ada, ¿qué cambios son necesarios para realizar una operación de escritura en la consola (equivalente a printf en C) y qué paquete se utiliza en Ada para lograrlo?

<p>En Ada, se utiliza el paquete <code>Gnat.IO</code> y el procedimiento <code>Put_Line</code> para escribir en la consola, lo que requiere incluir <code>with Gnat.IO; use Gnat.IO;</code> al inicio del programa.</p> Signup and view all the answers

¿Cuál es el propósito de la línea SET_PARTITION_MODE(NORMAL, &ret); en C/ARINC653 y qué implicaciones tiene para la ejecución de las tareas dentro de la partición?

<p>Establece el modo de la partición a <code>NORMAL</code>, permitiendo que las tareas dentro de esa partición se ejecuten según su planificación. Esto es crucial para el funcionamiento regular del sistema de tiempo real, donde cada partición debe operar de manera independiente y segura.</p> Signup and view all the answers

Explica cómo la directiva #include en C se relaciona con with y use en Ada. ¿Qué similitudes y diferencias existen en su funcionalidad y propósito?

<p><code>#include</code> en C incluye el contenido de un archivo de encabezado, mientras que <code>with</code> en Ada hace que un paquete esté visible y <code>use</code> permite el acceso directo a los elementos del paquete sin necesidad de cualificación. Ambos mecanismos facilitan la reutilización de código, pero Ada ofrece un control más preciso sobre la visibilidad de los componentes.</p> Signup and view all the answers

Flashcards

¿Qué son los Lenguajes de Tiempo Real?

Lenguajes diseñados para controlar y gestionar el tiempo de manera precisa y confiable en entornos donde las respuestas tardías pueden tener consecuencias graves.

¿Requisitos de lenguajes de Tiempo Real?

Modelar el paralelismo del entorno, gestionar el tiempo (relojes, temporizadores), acceso a bajo nivel (manejo de interrupciones), robustez (manejo de errores), modelo de objetos y compilación eficiente.

¿Lenguajes más usados en sistemas de tiempo real?

C (eficiencia y proximidad al SO), C++ (modelo de objetos y concurrencia), Ada (características deseadas para tiempo real).

¿Por qué se usa C en tiempo real?

No ofrece muchas características deseables (concurrencia, modelo de objetos, robustez), pero su eficiencia y proximidad al SO lo han hecho popular.

Signup and view all the flashcards

¿Qué son los lenguajes secuenciales?

Un único flujo de control (thread o tarea).

Signup and view all the flashcards

¿Qué es programación secuencial?

Programación donde las acciones se ejecutan una tras otra.

Signup and view all the flashcards

¿Qué es programación concurrente?

Programación donde múltiples tareas se ejecutan aparentemente al mismo tiempo.

Signup and view all the flashcards

¿Qué es programación de tiempo real?

Programación que debe cumplir plazos de tiempo estrictos.

Signup and view all the flashcards

¿Qué son los paquetes en Ada?

Unidad de código autocontenida en Ada.

Signup and view all the flashcards

¿Qué son las tareas en Ada?

Unidad de ejecución concurrente en Ada.

Signup and view all the flashcards

¿Qué son los objetos protegidos?

Mecanismo para proteger el acceso a datos compartidos en Ada.

Signup and view all the flashcards

¿Qué es la cita en Ada?

Mecanismo de comunicación síncrona entre tareas en Ada.

Signup and view all the flashcards

¿Qué es la inversión de prioridades?

Situación donde una tarea de baja prioridad bloquea a una de alta prioridad.

Signup and view all the flashcards

API (Interfaz de Programación)

Interfaz que ofrece abstracciones para procesos, threads, comunicación, sincronización, ficheros y excepciones.

Signup and view all the flashcards

Lenguaje Secuencial

Lenguaje que utiliza la lógica secuencial para la ejecución de tareas.

Signup and view all the flashcards

Tipificación Nominal vs. Estructural

La tipificación nominal compara los nombres de los tipos; la estructural compara su estructura.

Signup and view all the flashcards

Información Precisa al Compilador

Los programas deben proporcionar información precisa al compilador para la detección temprana de errores.

Signup and view all the flashcards

Lenguaje Ada

Lenguaje diseñado para sistemas grandes, empotrados y de tiempo real, con un núcleo estandarizado y anexos para funcionalidades específicas.

Signup and view all the flashcards

Nombres significativos

Indican lo que denotan, como la función de un programa o lo que representa una variable.

Signup and view all the flashcards

Mayúsculas y minúsculas

El compilador los interpreta como el mismo identificador. No distingue entre ellas.

Signup and view all the flashcards

Palabras reservadas

Palabras con un significado predefinido en el lenguaje de programación que no pueden ser usadas como identificadores.

Signup and view all the flashcards

Perfil de Ravenscar

Un subconjunto del lenguaje Ada diseñado para sistemas de tiempo real con restricciones en la parte concurrente.

Signup and view all the flashcards

Sistemas de tiempo real estrictos

Modelos de ejecución predecibles y eficientes, cruciales para sistemas donde las tareas deben completarse dentro de plazos estrictos.

Signup and view all the flashcards

Ventaja de lenguajes secuenciales

Estructuras claras y predecibles, facilitando el testeo.

Signup and view all the flashcards

Ejemplo de lenguaje secuencial

C es un ejemplo común de lenguaje secuencial.

Signup and view all the flashcards

Otro lenguaje secuencial

Ada es un ejemplo de lenguaje secuencial.

Signup and view all the flashcards

¿Qué son lenguajes concurrentes?

Permite múltiples flujos de control (tareas) ejecutándose al mismo tiempo.

Signup and view all the flashcards

Unidad de ejecución concurrente

Cada flujo de control en un lenguaje concurrente.

Signup and view all the flashcards

¿Qué hace la planificación en sistemas concurrentes?

Distribuye la ejecución de las tareas concurrentes.

Signup and view all the flashcards

¿Qué se requiere para la sincronización en sistemas concurrentes?

Mecanismos para que las tareas concurrentes se comuniquen y coordinen.

Signup and view all the flashcards

Problemas de lenguajes concurrentes

Validar y depurar son más difíciles debido a la imprevisibilidad.

Signup and view all the flashcards

¿Qué es un 'Runtime Support (RTS)'?

Un soporte de ejecución que ayuda a gestionar la concurrencia.

Signup and view all the flashcards

Dependencia de lenguajes secuenciales

La ejecución depende del sistema operativo subyacente.

Signup and view all the flashcards

pthread_create

Crea un nuevo hilo de ejecución.

Signup and view all the flashcards

pthread_t Tarea1[Max]

Un arreglo de hilos, útil para ejecutar múltiples tareas similares simultáneamente.

Signup and view all the flashcards

CREATE_PROCESS (ARINC653)

Crea una tarea en un sistema de tiempo real (ARINC653).

Signup and view all the flashcards

START (ARINC653)

Inicia la ejecución de una tarea previamente creada (ARINC653).

Signup and view all the flashcards

SET_PARTITION_MODE (ARINC653)

Establece el modo de operación de una partición (ARINC653). NORMAL indica operación normal.

Signup and view all the flashcards

with Gnat.IO; use Gnat.IO (Ada)

Equivalente a '#include' en C, permite usar bibliotecas.

Signup and view all the flashcards

i : integer; (Ada)

Declara una variable entera 'i' en Ada.

Signup and view all the flashcards

f : float; (Ada)

Declara una variable de punto flotante 'f' en Ada.

Signup and view all the flashcards

Study Notes

Sistemas de Tiempo Real y Lenguajes de Programación

  • El tema central son los sistemas de tiempo real y los lenguajes de programación utilizados en ellos.

Contextualización de los Lenguajes de Programación

  • Los lenguajes de programación en sistemas de tiempo real se analizan a partir de una introducción a la programación secuencial y concurrente.
  • Se estudia Ada en detalle, incluyendo sus tipos, estructuras de control y paquetes.
  • Se incluyen el estudio de tareas, objetos protegidos y comunicación.
  • Se incluyen tareas periódicas y a periódicas, inversión prioridades, pragmas de programación y manejadores de dispositivos.

Índice de Contenidos

  • Se consideran los requisitos para lenguajes de programación en sistemas de tiempo real.
  • Los lenguajes secuenciales y concurrentes son importantes.
  • Se compara C vs. Ada.
  • El soporte de ejecución es un aspecto clave.

Elección del Lenguaje de Programación

  • Una pregunta central es qué lenguaje de programación es el más adecuado para implementar un Sistema de Tiempo Real (STR).
  • Se destacan los lenguajes ensambladores, secuenciales y concurrentes.
  • En la evolución de lenguajes de programación se citan ALGOL, FORTRAN, COBOL y LISP.
  • En los 1970's, Pascal y C.
  • En los 1980's Modula-2 y ADA83.
  • En los 1990's: Objective C, ADA95, Java y C++.

Requisitos en Sistemas de Tiempo Real

  • Es necesario modelar el paralelismo del entorno mediante concurrencia.
  • Se requiere gestionar y controlar el tiempo de forma adecuada.
  • Se incluyen relojes y temporizadores.
  • Los manejadores de errores (excepciones) son importantes para la robustez.
  • Se requieren manejadores de interrupciones y definición de tipos con registros de dispositivos.
  • Se utilizan modelos de objetos y tipos de datos orientados a objetos.
  • Importante la compilación separada, transportable y eficiente.

Lenguajes para Sistemas Críticos y de Tiempo Real

  • Los lenguajes más utilizados son C, C++ y Ada.
  • C es popular por su eficiencia y proximidad al sistema operativo, aunque no ofrece muchas características deseables como concurrencia.
  • C++ añade un modelo de objetos y concurrencia a C, pero carece de abstracciones propias de tiempo real.
  • Ada está diseñado para sistemas empotrados de tiempo real y proporciona las características deseables.
  • Method-Based Design permite la generación de código a partir de herramientas de modelado (Matlab Simulink).

Lenguajes Secuenciales

  • Tienen un único flujo de control (thread o tarea).
  • Poseen una estructura clara y son fáciles de analizar y depurar.
  • En C el código realiza un incremento de una cantidad determinada de una variable global, mostrando pre y post condiciones.
  • En ADA el código realiza un incremento de una cantidad determinada de una variable global, mostrando pre y post condiciones.

Lenguajes Concurrentes

  • Permiten definir varios flujos de control que se ejecutan de forma concurrente.
  • Se requiere planificación y mecanismos de comunicación/sincronización.
  • Presentan problemas para la validación y depuración.
  • Necesitan un soporte de ejecución (Runtime Support RTS).

Lenguaje Secuencial y su Dependencia del S.O. (API)

  • Dependencia del Sistema Operativo a través de su API (Interfaz de Programación de Aplicaciones).
  • Se utilizan abstracciones como procesos y threads.
  • Se hace uso de la comunicación y sincronización que proporciona el API.
  • El uso de ficheros y el manejo de excepciones también son aspectos importantes.

Tareas en C

  • El ejemplo muestra cómo se crean tareas en C utilizando pthreads.
  • Se define el número de tareas (NumeroTareas = 5).
  • Se crea una función Sumador que incrementa un contador.
  • Las tareas se crean y se espera a que terminen mediante pthread_join.
  • Se verifica el resultado final.

Lenguaje Concurrente y su Dependencia del S.O. (API)

  • Al igual que con los lenguajes secuenciales, existe una dependencia del Sistema Operativo a través de su API.
  • El lenguaje concurrente necesita un soporte de ejecución.
  • Igual que el secuencial, se utilizan abstracciones como procesos y threads.
  • Igual que el secuencial, la comunicación y sincronización que proporciona el API son importantes.
  • Igual que el secuencial, el uso de ficheros y el manejo de excepciones también son aspectos importantes.

Tareas en ADA

  • Se muestra cómo se crean tareas en Ada utilizando la palabra clave task.
  • Se define el número de tareas (NumeroTareas = 2).
  • Se crea un tipo de tarea sumador que incrementa un contador.
  • Las tareas se lanzan automáticamente al inicio del programa.
  • Se espera a que terminen usando un bucle y un retardo.
  • Se verifica el resultado final.

Programación Concurrente

  • Las "razas" de código son endémicas en proyectos grandes debido a la inadecuación de las primitivas de sincronización tradicionales.
  • La dificultad de manejar el acceso concurrente a datos lleva a ingenieros experimentados a evitarlo.
  • La popularidad de Node.js y la programación reactiva/async (ej. Python Starlette) son alternativas para evitar problemas de concurrencia.

Lenguaje C

  • Es uno de los lenguajes de programación más populares.
  • Es un lenguaje sencillo y poco estructurado.
  • Permite definir tipos de datos por el usuario, no exige una definición estricta de datos y es de nivel relativamente bajo.
  • Permite la compilación separada además de ser barato y eficiente.

Versiones del Lenguaje C

  • C común: Apareció en 1978, ligado al sistema operativo UNIX.
  • C ANSI o C ISO: Estandarización en 1988 y luego en 1995 y 1999. Versión no ambigua y portable con asignación de estructuras, tipos enumerados, prototipos de funciones y librerías estándar.

Lenguaje C++

  • Es un lenguaje derivado del C, pero más complejo.
  • Incluye definición de módulos (clases), programación orientada a objetos, tipificación más estricta, tratamiento de excepciones y plantillas.
  • C++ fue estandarizado en 1998.

Lenguaje Ada

  • Ada es un lenguaje específicamente desarrollado para sistemas de tiempo real y sistemas empotrados.
  • Fue promovido por el Departamento de Defensa de EE.UU.
  • Se redactó un documento de requisitos en 1975.
  • En 1979 se eligió el desarrollo de CII Honeywell Bull como vencedor y se nombró Ada en honor a Augusta Ada Byron.

Lenguaje Ada Características

  • Fuertemente tipado (estricto) y muy estructurado.
  • Modelo de objetos, tareas y mecanismos de comunicación y sincronización.
  • Modelo de manejo de excepciones y gestión del tiempo.
  • Modular (packages) con separación entre la especificación y la implementación.

Filosofía de ADA

  • La legibilidad del código es más importante que la concisión.
  • El código se debe leer muchas más veces de las que se escribe.
  • Tipificación estricta para prevenir errores, El compilador no infiere nada sobre tipos (no interpreta las intenciones del programador).
  • Detección de errores en tiempo de compilación.

Lenguaje Ada Características

  • Diseñado para sistemas grandes y empotrados.
  • Tiene distintas versiones: Ada83, Ada95, Ada2005, Ada 2012, Ada 2022.
  • La norma ISO define un núcleo común y no permite la ambigüedad.
  • Incluye anexos para sistemas de tiempo real (TR), sistemas distribuidos, programación de sistemas, sistemas de información y cálculo numérico.

Programa Ejemplo en ADA

  • Los programas ADA incluyen: Cláusulas de Contexto, especificación del programa y comentarios.
  • Se incluyen zonas declarativas el inicio de la secuencia y el fin del programa.

Aspectos Sintácticos en ADA Nombres

  • Los nombres se conforman de una secuencia de letras y dígitos, empezando por una letra.
  • Se usa "_" para separar partes del nombre.
  • Los nombres deberían ser indicativos de lo que denotan deben representar.
  • No se distinguen mayúsculas de minúsculas.
  • Las palabras reservadas quedan excluidas.

Ada Ravenscar

  • Es un subconjunto del lenguaje Ada pensado para sistemas de tiempo real.
  • Impone restricciones a la parte concurrente del lenguaje para permitir análisis temporales.
  • Permite un modelo de ejecución concurrente determinista y una implementación eficiente del núcleo de ejecución.
  • Permite una implementación de "implementación pequeña y eficiente" y el código permite que las tareas puedan responder a plazos muy cortos.

Lenguaje Cy ADA Comparación

  • Notación segura: asignación
  • ADA: el código tiene la siguiente estructura
if (theSignal = Clear) then
 OpenGates(....);
 StartTrain(...);
end if;

Lenguaje Cy ADA Comparación

  • Arrays
  • En el caso de ADA la sintaxis segura debe incluir el índice dentro del rango, si no CONSTRAINT_ERROR.

ADA Concurrencia

  • ADA incluye: Tareas, comunicación/sincronización, objetos protegidos y manejo de excepciones.
  • Los programas incluyen:
task Periodic_Task is
pragma Priority(10);
end Periodic_Task;

task body Periodic_Task is
 Periodo : Time_Span; Siguiente: Time;
begin
 Siguiente := Clock;
 loop
 -- Acciones
 Siguiente := Siguiente + Periodo;
 delay until Siguiente;
 end loop;
end Periodic_Task;

Lenguaje Cy ADA Comparación Concurrencia

-C no tiene modelo de concurrencia, se debe usar él ofrecido por el S.O. para generar tareas internas.

  • El compilador de Cno tiene la semántica de las llamadas.

Programas C y ADA

  • Se muestra un pseudocódigo de código ADA
  • Se muestra un código de programa C que hace tareas cada periodo con una espera "delay" antes de volver a lanzarse.

Cy ADA Creación de Tareas

  • Código C P/OSIX usando pthread
  • Para varias tarea se puede usar un bucle para lanzar una tarea en cada ciclo.

C/ARINC65

  • Se puede usar el código para tareas en lenguaje C
  • Para varias tarea se puede usar un bucle para lanzar una tarea en cada ciclo.

De C a ADA

  • Se presenta un diagrama de flujo del código, para su implementación en C y ADA
  • Con sus respectivas sintaxis en ambos lenguajes.

Studying That Suits You

Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

Quiz Team

More Like This

Untitled
110 questions

Untitled

ComfortingAquamarine avatar
ComfortingAquamarine
Untitled Quiz
6 questions

Untitled Quiz

AdoredHealing avatar
AdoredHealing
Untitled
44 questions

Untitled

ExaltingAndradite avatar
ExaltingAndradite
Untitled
6 questions

Untitled

StrikingParadise avatar
StrikingParadise
Use Quizgecko on...
Browser
Browser