Programación concurrente y computación intensiva
48 Questions
1 Views

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

¿Cuál de las siguientes opciones describe mejor la ventaja de modelar una gasolinera con programación concurrente?

  • Permite una simulación más intuitiva al tratar cada componente (surtidores, clientes, etc.) como procesos independientes que interactúan. (correct)
  • Optimiza el uso de memoria al consolidar los datos de todos los componentes en una estructura unificada.
  • Reduce la complejidad del código al centralizar todas las operaciones en un solo proceso.
  • Asegura que las operaciones se ejecuten en un orden predecible, facilitando la depuración.

¿Qué implicación tiene el uso de múltiples CPUs en ordenadores modernos para la programación?

  • Los programas secuenciales pueden aprovechar automáticamente todas las CPUs disponibles sin necesidad de modificaciones.
  • La programación concurrente permite que un programa utilice múltiples CPUs simultáneamente, mejorando el rendimiento. (correct)
  • Es necesario desactivar algunas CPUs para garantizar la estabilidad de los programas secuenciales.
  • La programación distribuida es la única forma de aprovechar completamente el poder de cómputo de múltiples CPUs.

¿Cuál es la principal ventaja de utilizar GPUs para cálculo intensivo en comparación con CPUs?

  • Las GPUs son más fáciles de programar que las CPUs en entornos concurrentes.
  • Las GPUs tienen una arquitectura optimizada con miles de unidades de cálculo flotante, ideal para tareas paralelas. (correct)
  • Las GPUs son más eficientes energéticamente en tareas de propósito general.
  • Las GPUs pueden ejecutar programas secuenciales más rápidamente que las CPUs.

¿Cómo contribuyen los sistemas distribuidos de cálculo a la resolución de problemas complejos?

<p>Permiten dividir un problema en partes más pequeñas y distribuirlas entre múltiples ordenadores conectados en red. (B)</p> Signup and view all the answers

En el contexto de videojuegos, ¿cuál de las siguientes NO es una aplicación típica de la programación concurrente y el cálculo intensivo?

<p>Gestión centralizada de la interfaz de usuario, asegurando una respuesta rápida a las acciones del jugador. (B)</p> Signup and view all the answers

¿Qué rol juega la programación concurrente en el entrenamiento de redes neuronales?

<p>Facilita la distribución del proceso de entrenamiento en múltiples procesadores o máquinas, acelerando el aprendizaje. (D)</p> Signup and view all the answers

En el ámbito de la simulación de sistemas físicos, ¿qué ventaja ofrece la programación concurrente en comparación con la programación secuencial?

<p>Reduce el tiempo de cálculo al permitir la ejecución simultánea de diferentes partes de la simulación. (C)</p> Signup and view all the answers

¿Cuál es la relación entre la programación distribuida y las aplicaciones Web?

<p>Las aplicaciones Web se basan en la programación distribuida, donde diferentes procesos se comunican mediante paso de mensajes. (C)</p> Signup and view all the answers

¿Cuál de las siguientes afirmaciones describe con mayor precisión la función de los registros (r0, r1) en la traza detallada de ejecución?

<p>Servir como almacenamiento temporal para realizar cálculos intermedios sin modificar directamente las variables <code>x</code> e <code>y</code>. (A)</p> Signup and view all the answers

Considerando una traza de ejecución detallada, ¿qué implicación tiene el orden específico de las operaciones r0 := x e y := 2*r0 + r1 + 1 en el resultado final de la variable y?

<p>Invertir el orden alteraría el valor utilizado de <code>x</code> en el cálculo, modificando el resultado final de <code>y</code>. (A)</p> Signup and view all the answers

En el modelo de ejecución secuencial presentado, ¿cuál es la importancia de que los accesos a las variables sean 'finitos y ordenados'?

<p>Permite predecir y verificar el comportamiento del programa, facilitando la depuración y el análisis de rendimiento. (C)</p> Signup and view all the answers

¿Cómo se ve afectado el resultado final del programa si una de las sentencias en la traza detallada se omite accidentalmente?

<p>El resultado podría ser incorrecto, ya que se alteraría la secuencia de operaciones y los valores de las variables. (C)</p> Signup and view all the answers

Si en la traza detallada se introduce un error que provoca que el valor de r1 sea incorrecto en el cálculo de y, ¿cuál sería la consecuencia más probable?

<p>El error se propagará a futuras iteraciones, afectando potencialmente a otras variables y al resultado final. (C)</p> Signup and view all the answers

Considerando el modelo de proceso secuencial como una secuencia de accesos, ¿qué ventaja principal ofrece este modelo para el análisis de sistemas concurrentes?

<p>Facilita la identificación de posibles condiciones de carrera y conflictos de acceso a las variables compartidas. (C)</p> Signup and view all the answers

¿Cómo podría un compilador optimizar una secuencia de accesos a variables en un proceso secuencial, sin alterar el resultado final del programa?

<p>Reutilizando valores previamente cargados en registros para evitar accesos redundantes a la memoria. (B)</p> Signup and view all the answers

¿Cuál es la principal limitación de utilizar pruebas simples para la verificación de programas concurrentes?

<p>Las pruebas simples pueden pasar por alto casos indeseables debido a que solo consideran un número limitado de historias de ejecución. (C)</p> Signup and view all the answers

En el contexto de sistemas concurrentes, ¿cuál es el riesgo principal de no modelar adecuadamente los accesos a variables compartidas como secuencias finitas y ordenadas?

<p>Se incrementa la probabilidad de que ocurran comportamientos no deterministas y difíciles de depurar, como condiciones de carrera. (B)</p> Signup and view all the answers

¿Por qué el enfoque operacional (análisis exhaustivo) tiene una utilidad limitada en programas concurrentes complejos?

<p>Porque el número de interfoliaciones crece exponencialmente con el número de instrucciones de los procesos, haciendo el análisis inviable. (C)</p> Signup and view all the answers

¿Qué rol cumplen las sentencias atómicas en el enfoque axiomático para la verificación de programas?

<p>Actúan como transformadores de predicados (asertos), modificando el conjunto de estados que cumplen una determinada propiedad. (D)</p> Signup and view all the answers

En el contexto de la verificación de programas concurrentes, ¿cuál de las siguientes afirmaciones describe mejor el propósito de los 'asertos' en el enfoque axiomático?

<p>Son fórmulas lógicas utilizadas para caracterizar un conjunto de estados del programa en un momento dado. (C)</p> Signup and view all the answers

Considerando el problema de la verificación de programas concurrentes, ¿cuál es la principal desventaja de depender exclusivamente de la ejecución y comprobación empírica ('pruebas simples') para asegurar la corrección?

<p>Este método puede pasar por alto errores críticos que solo se manifiestan en interacciones concurrentes específicas y poco frecuentes. (B)</p> Signup and view all the answers

¿Cuál de las siguientes describe una limitación clave del enfoque operacional (análisis exhaustivo) al verificar programas concurrentes?

<p>La explosión combinatoria del número de posibles estados y transiciones, que impide su aplicación a sistemas complejos. (B)</p> Signup and view all the answers

En la verificación axiomática de programas concurrentes, ¿qué papel juegan los axiomas y las reglas de inferencia?

<p>Permiten derivar propiedades de los programas a partir de las características de sus sentencias atómicas y las relaciones entre ellas. (D)</p> Signup and view all the answers

En el contexto de sistemas concurrentes, considera el siguiente fragmento de pseudocódigo:

x := 0;
cobegin
 proceso A: x := x + 1;
 proceso B: x := x + 2;
coend

¿Cuál es el conjunto de posibles valores finales de x después de la ejecución concurrente de los procesos A y B?

<p>{1, 2, 3} (A)</p> Signup and view all the answers

¿Cuál de las siguientes secuencias de operaciones entre el productor (E - escritura) y el consumidor (L - lectura) garantiza que cada valor producido sea leído exactamente una vez, sin lecturas de valores indeterminados?

<p>E, L, E, L, E, L,... (B)</p> Signup and view all the answers

En el problema del productor-consumidor, ¿qué riesgo principal se presenta si el proceso consumidor intenta leer la variable compartida x antes de que el proceso productor haya escrito un valor inicial en ella?

<p>Se lee un valor indeterminado, llevando a un comportamiento impredecible del programa. (D)</p> Signup and view all the answers

Considerando que x es la variable compartida entre un proceso productor y un proceso consumidor, ¿qué implicación tiene la secuencia E, L, L, E, L,... en la funcionalidad del sistema?

<p>Provoca que un mismo valor sea leído y utilizado múltiples veces por el consumidor. (B)</p> Signup and view all the answers

Si la secuencia de operaciones en un sistema productor-consumidor fuera E, L, E, E, L,..., donde E representa la escritura del productor y L la lectura del consumidor, ¿cuál sería la consecuencia directa en términos de los datos producidos?

<p>Uno de los valores producidos no es leído por el consumidor. (C)</p> Signup and view all the answers

En un escenario de productor-consumidor con una variable compartida x, ¿qué problema fundamental de concurrencia podría surgir si no se implementan mecanismos de sincronización adecuados?

<p>Condiciones de carrera que llevan a inconsistencia en los datos compartidos. (D)</p> Signup and view all the answers

¿Qué tipo de problema de concurrencia se manifiesta cuando un proceso consumidor intenta leer datos de una variable compartida antes de que el proceso productor haya terminado de escribir en ella?

<p>Condición de carrera. (B)</p> Signup and view all the answers

En el contexto del problema productor-consumidor, ¿cuál es el principal desafío al implementar la comunicación a través de una variable compartida como x?

<p>Evitar la contención en el acceso a la variable para asegurar la integridad de los datos. (D)</p> Signup and view all the answers

En un sistema productor-consumidor, si no se implementa la sincronización adecuada, ¿qué escenario podría llevar a que el consumidor procese datos incorrectos o inconsistentes?

<p>El consumidor lee un valor intermedio mientras el productor está actualizando la variable compartida. (B)</p> Signup and view all the answers

Considerando la traza de asignaciones con dos registros, ¿cuál de las siguientes afirmaciones describe mejor el propósito de utilizar registros (r0, r1, etc.) en este contexto?

<p>Los registros actúan como intermediarios para leer y escribir valores de las variables, permitiendo evaluar expresiones complejas sin modificar directamente el estado de las variables hasta el final de la operación. (D)</p> Signup and view all the answers

En el ejemplo de la traza para la asignación y := 2*y + x + 1, ¿cuál es la razón principal para la necesidad de dos registros (r0 y r1)?

<p>Se necesitan dos registros porque la expresión a la derecha del operador de asignación (:=) contiene dos referencias a variables (y y x), requiriendo almacenar temporalmente sus valores. (B)</p> Signup and view all the answers

Analizando la traza de asignación y := 2*y + x + 1 partiendo del estado inicial (x ≡ 1, y ≡ 2), ¿qué representa el valor de r0 inmediatamente después de la ejecución de la instrucción r0 := y?

<p>El valor inicial de <code>y</code> antes de cualquier modificación, es decir, 2. (C)</p> Signup and view all the answers

Considerando la traza presentada, ¿cuál es la principal ventaja de representar la ejecución de asignaciones en forma de tabla?

<p>Ofrece una visión clara y secuencial de la evolución del estado del programa a medida que se ejecutan las instrucciones, facilitando la depuración y el análisis. (D)</p> Signup and view all the answers

Si en la traza de asignaciones se utilizara un único registro, ¿cuál sería el principal inconveniente al evaluar expresiones complejas como y := 2*y + x + 1?

<p>Se imposibilitaría la ejecución de la expresión, ya que el registro único no podría almacenar temporalmente los valores de todas las variables involucradas simultáneamente. (C)</p> Signup and view all the answers

En el contexto de sistemas concurrentes, ¿qué problema podría surgir si no se utilizara una traza de asignaciones con registros al modificar variables compartidas?

<p>Se podrían generar condiciones de carrera (<em>race conditions</em>) si múltiples hilos de ejecución acceden y modifican las variables compartidas simultáneamente sin una sincronización adecuada. (D)</p> Signup and view all the answers

Supongamos que se tiene la asignación z := x + y * x, y el estado inicial es x = 2, y = 3. ¿Qué secuencia de instrucciones y registros se necesitaría para trazar esta asignación?

<p><code>r0 := x; r1 := y; z := r0 + r1 * r0;</code> (C)</p> Signup and view all the answers

¿Cuál de las siguientes afirmaciones describe mejor cómo la traza de asignaciones ayuda a entender el comportamiento de un programa en sistemas concurrentes?

<p>Ofrece una vista secuencial del estado del programa, lo cual es útil para depurar y analizar el flujo de ejecución en presencia de múltiples hilos. (C)</p> Signup and view all the answers

¿Cuál de las siguientes afirmaciones describe mejor el concepto de indeterminación en la ejecución concurrente, como se ilustra en el ejemplo donde dos procesos incrementan una variable compartida x?

<p>La indeterminación surge porque el valor final de <code>x</code> depende del orden específico en que cada proceso ejecuta sus operaciones de lectura y escritura, resultando en múltiples posibles estados finales. (A)</p> Signup and view all the answers

En el contexto de sentencias atómicas, ¿cuál de las siguientes condiciones no es necesaria para que una sentencia S en un proceso concurrente se considere atómica?

<p>La ejecución de <code>S</code> debe garantizar que ningún otro proceso pueda leer el estado inicial de las variables involucradas hasta que <code>S</code> haya finalizado completamente. (A)</p> Signup and view all the answers

Considerando la definición de atomicidad, ¿cuál de las siguientes operaciones podría ser inherentemente no atómica en un sistema concurrente, asumiendo que x e y son variables compartidas?

<p>Un intercambio simultáneo de valores entre dos variables compartidas, como <code>x := y, y := x</code>. (A)</p> Signup and view all the answers

¿Cuál de las siguientes situaciones ejemplifica un escenario donde la atomicidad de una operación es crucial para mantener la integridad de los datos en un sistema concurrente?

<p>Dos procesos intentan incrementar el mismo contador compartido; la atomicidad del incremento asegura que el contador se actualice correctamente sin perder incrementos. (C)</p> Signup and view all the answers

Suponga que tiene una función transferir(int cuentaOrigen, int cuentaDestino, int cantidad) que transfiere una cantidad de dinero de una cuenta a otra. En un sistema concurrente, ¿qué podría suceder si la operación de transferencia no es atómica?

<p>Podría ocurrir que el dinero se retire de la cuenta origen pero no se acredite en la cuenta destino, o viceversa, resultando en una inconsistencia en el sistema. (C)</p> Signup and view all the answers

En el contexto de sistemas concurrentes, ¿cómo podría el uso de sentencias atómicas simplificar el diseño y análisis de programas?

<p>Al eliminar la necesidad de considerar posibles estados intermedios, se reduce la complejidad del razonamiento sobre el comportamiento del programa y se facilitan las pruebas. (D)</p> Signup and view all the answers

¿Cuál de las siguientes estrategias no mitigaría los problemas derivados de la falta de atomicidad en operaciones concurrentes sobre variables compartidas?

<p>Dividir la operación en múltiples pasos más pequeños para reducir la duración del acceso exclusivo a la variable compartida. (A)</p> Signup and view all the answers

Considere dos procesos, P1 y P2, que comparten una variable contador inicializada en 0. P1 ejecuta contador := contador + 2 y P2 ejecuta contador := contador * 3. Si estas operaciones no son atómicas, ¿cuál de los siguientes valores no podría ser el valor final de contador después de la ejecución concurrente de ambos procesos?

<p>8 (B)</p> Signup and view all the answers

Flashcards

¿Qué es 'r0' o 'r1'?

Registro temporal usado en cálculos.

¿Qué es el 'estado' en una traza?

Valor de una variable en un punto específico de la ejecución.

¿Qué es una 'traza detallada'?

Representación paso a paso de la ejecución de un programa.

¿Qué modela la ejecución de un proceso secuencial?

El proceso secuencial modelado como serie de accesos a variables.

Signup and view all the flashcards

¿Qué es una 'sentencia de asignación'?

Una instrucción que modifica el valor de una variable.

Signup and view all the flashcards

¿Qué representa la columna 'Sentencia ejecutada'?

Orden en que las sentencias son ejecutadas.

Signup and view all the flashcards

¿Qué es la 'secuencia de accesos'?

Serie finita y ordenada de accesos a variables durante la ejecución de un programa.

Signup and view all the flashcards

¿Qué significa que las variables son declaradas 'explícitamente'?

El programa conoce directamente las variables que usa.

Signup and view all the flashcards

Productor

Un proceso que genera una secuencia de datos (p. ej., enteros).

Signup and view all the flashcards

Consumidor

Un proceso que utiliza los datos generados por el productor.

Signup and view all the flashcards

Variable Compartida (x)

Variable compartida entre el productor y el consumidor para la comunicación de datos.

Signup and view all the flashcards

Sentencia E (Escritura)

Escribe un valor producido en la variable compartida.

Signup and view all the flashcards

Sentencia L (Lectura)

Lee un valor de la variable compartida para usarlo.

Signup and view all the flashcards

Orden de Sincronización Correcto

Secuencia correcta de operaciones donde la escritura precede a la lectura. E, L, E, L...

Signup and view all the flashcards

Error: Lectura Previa a Escritura

Lectura de un valor indeterminado antes de que el productor escriba.

Signup and view all the flashcards

Error: Escrituras Sin Lectura

Escrituras consecutivas sin lectura intermedia, llevando a la pérdida de datos.

Signup and view all the flashcards

Simulación de gasolinera

Modelo donde surtidores, clientes y empleados son procesos que cambian de estado.

Signup and view all the flashcards

Cálculo intensivo en CPUs

Aprovechar múltiples CPUs simultáneamente para acelerar la ejecución.

Signup and view all the flashcards

Cálculo intensivo en GPUs

Usar la capacidad de procesamiento paralelo de las GPUs para cálculos complejos.

Signup and view all the flashcards

Sistemas distribuidos de cálculo

Distribuir el cálculo entre varios ordenadores conectados en red.

Signup and view all the flashcards

Videojuegos y RV/RA

Usada para visualización, simulación e IA de personajes.

Signup and view all the flashcards

Inteligencia Artificial

Entrenamiento y uso de redes neuronales y otros sistemas de IA.

Signup and view all the flashcards

Animación y rendering

Generación de animaciones y efectos visuales para películas.

Signup and view all the flashcards

Simulación de sistemas físicos

Predicción meteorológica o simulación de estructuras y fluidos.

Signup and view all the flashcards

Pruebas Simples

Probar un programa ejecutándolo varias veces para verificar una propiedad.

Signup and view all the flashcards

Limitaciones de Pruebas Simples

Las pruebas simples no demuestran la ausencia de casos indeseables debido a un número limitado de ejecuciones.

Signup and view all the flashcards

Enfoque Operacional (Análisis Exhaustivo)

Analizar todas las posibles historias (interfoliaciones) de ejecución de un programa.

Signup and view all the flashcards

Problema del Análisis Exhaustivo

El análisis exhaustivo se vuelve inviable en programas concurrentes complejos debido al crecimiento exponencial de interfoliaciones.

Signup and view all the flashcards

Enfoque Axiomático

Sistema lógico formal con axiomas y reglas para establecer propiedades de programas.

Signup and view all the flashcards

Asertos

Fórmulas lógicas que describen un conjunto de estados del programa.

Signup and view all the flashcards

Sentencias Atómicas como Transformadores de Predicados

Las sentencias atómicas transforman los asertos, modelando cómo cambian las propiedades del programa.

Signup and view all the flashcards

Verificación de Programas

Demostrar que un programa satisface una propiedad deseada.

Signup and view all the flashcards

¿Qué es una traza?

Representación del estado de las variables y registros a medida que se ejecutan las instrucciones.

Signup and view all the flashcards

¿Qué son los registros?

Se utilizan para guardar temporalmente los valores de las variables durante la evaluación de expresiones.

Signup and view all the flashcards

Asignación con registro (ejemplo)

r0 := x; //Lee el valor de x y lo guarda en r0.

Signup and view all the flashcards

Expresiones complejas y registros

Evaluar expresiones complejas (Ej: y:=2*y+x+1) requiere múltiples registros para guardar valores intermedios.

Signup and view all the flashcards

Pasos para y := 2*y + x + 1

  1. r0 := y 2. r1 := x 3. y := 2*r0 + r1 + 1
Signup and view all the flashcards

Formato de tabla de traza

Muestra el estado inicial, luego cada fila muestra una sentencia y el estado resultante después de ejecutarla.

Signup and view all the flashcards

Ejemplo de traza de asignación

x ≡ 0 y ≡ 2 -> r0 := x -> r0 ≡ 0

Signup and view all the flashcards

¿Qué muestra una traza en forma de tabla?

Una tabla muestra el estado de las variables y registros antes y después de cada instrucción.

Signup and view all the flashcards

Ejecución concurrente

Dos procesos comparten una variable y ambos ejecutan x:=x+1. El valor final de x depende del orden de los accesos.

Signup and view all the flashcards

Sentencia atómica

Una sentencia donde su ejecución no genera estados intermedios visibles para otros procesos.

Signup and view all the flashcards

V(S) en sentencias atómicas

Conjunto de variables que una sentencia atómica utiliza.

Signup and view all the flashcards

Estado intermedio

Un estado entre el inicio y el fin de la ejecución de una sentencia, con accesos a variables compartidas.

Signup and view all the flashcards

Estado accesible

Un estado donde otros procesos pueden leer o escribir valores de variables compartidas.

Signup and view all the flashcards

Acceso a variables en sentencias atómicas

Durante la ejecución atómica, otros procesos no pueden ver ni cambiar los valores intermedios.

Signup and view all the flashcards

Atomicidad y acceso único

Una sentencia que solo accede una vez a una variable compartida se considera atómica.

Signup and view all the flashcards

Indeterminación

Si un programa arroja diferentes resultados cada vez que se ejecuta con las misma entrada.

Signup and view all the flashcards

Study Notes

Sección 1: Introducción a la concurrencia

  • Un programa secuencial es un conjunto de declaraciones de datos e instrucciones que se ejecutan en secuencia.
  • Un programa concurrente es un conjunto de programas secuenciales que pueden ejecutarse lógicamente en paralelo.
  • Proceso se refiere a la ejecución de un programa secuencial.
  • Concurrencia describe el potencial de ejecución paralela permitiendo el traslape real o virtual de actividades en el tiempo.
  • Programación concurrente (PC) abarca las notaciones y técnicas usadas para expresar el paralelismo y resolver la sincronización y comunicación.
  • PC es una abstracción independiente de la implementación del paralelismo.

Programación paralela, distribuida y de tiempo real

  • La programación paralela busca acelerar la resolución de problemas mediante el uso de la capacidad de procesamiento en paralelo del hardware actual.
  • La programación distribuida tiene como objetivo que varios componentes de software en diferentes ordenadores trabajen juntos.
  • La programación de tiempo real se enfoca en sistemas que operan continuamente, con estrictas restricciones temporales en la respuesta.

Motivación de la programación concurrente

  • La programación concurrente es más compleja que la secuencial, ofreciéndo mejoras en eficiencia y calidad.
  • Permite aprovechar mejor los recursos hardware existentes.
  • En sistemas monoprocesador, evita la espera ociosa del procesador al permitir que otra tarea tome el control cuando la tarea actual necesita realizar una operación de E/S.
  • Facilita el uso interactivo del sistema por varios usuarios gracias a los sistemas operativos multiusuario.
  • En sistemas multiprocesador, permite repartir tareas entre procesadores, reduciendo el tiempo de ejecución y acelerando cálculos numéricos complejos.

Mejora de la calidad

  • Permite entender y modelar programas en términos de procesos secuenciales que se ejecutan concurrentemente.
  • Por ejemplo, un servidor web para reserva de vuelos puede tratar cada petición de usuario como un proceso aparte facilitando la implementación de políticas para evitar conflictos
  • Un simulador del comportamiento de una gasolinera puede considerar los surtidores, clientes y empleados como partes separadas

Programas de cálculo intensivo

  • Actualmente existen múltiples aplicaciones de cálculo intensivo que se benefician de la programación concurrente y distribuida.
  • En el cálculo intensivo en CPUs múltiples, un programa concurrente usa varias CPUs de forma coordinada, a diferencia de un programa secuencial.
  • El cálculo intensivo en GPUs, el uso de la programación concurrente permite aprovechar el hardware con unidades de cálculo flotante.
  • Sistemas distribuidos de cálculo permite cálculos intensivos en varios ordenadores conectados a una red.

Aplicaciones del cálculo intensivo

  • La programación concurrente es una herramienta esencial en áreas que requieren cálculo intensivo.
  • Se usa en videojuegos, realidad virtual y aumentada para visualización, simulación física e I.A. de personajes.
  • Se usa en la inteligencia artificial para el entrenamiento de redes neuronales y sistemas de IA.
  • Se usa en animación y rendering para la creación de efectos especiales en películas.
  • Se usa en simulación de sistemas físicos como predicción meteorológica o simulación de estructuras.
  • También se usa en el cálculo de estructura moleculares

Programación Web o en Internet

  • La programación distribuida es fundamental para las aplicaciones web, donde los procesos se comunican mediante el paso de mensajes.
  • La comunicación distribuida sigue el modelo cliente-servidor, donde las modalidades de envío de mensajes varia.
  • La programación asíncrona en clientes web permite simultanear el procesamiento, las transferencias de datos y la interacción con el usuario.
  • Usa concurrentemente varias CPUs en un cliente Web coordinando la comunicación mediante el paso de mensajes.

Sección 2: Modelo abstracto y consideraciones sobre el hardware para programación concurrente

  • Los mecanismos de implementación de la Concurrencia dependen fuertemente de la arquitectura.
  • Se considera una máquina virtual con una base homogénea para la ejecución de procesos concurrentes en un sistema (multiprocesador o distribuido).
  • El tipo de paralelismo afecta la eficiencia sin afectar la corrección.

Concurrencia en sistemas monoprocesador

  • La multiprogramación permite que el sistema operativo reparta los ciclos de la CPU entre los procesos.
  • Se logra un mejor aprovechamiento de la CPU, un servicio interactivo a varios usuarios y la utilización de soluciones de diseño concurrentes.
  • La sincronización y comunicación se realizan mediante variables compartidas en la memoria.

Concurrencia en multiprocesadores de memoria compartida

  • Los procesadores pueden compartir físicamente la memoria o un espacio de direcciones compartido.
  • En estos espacios se usan variables compartidas para la comunicación entre varios procesos.
  • Un ejemplo son las PCs con procesadores multicore.

Concurrencia en sistemas distribuidos

  • En sistemas distribuidos cada procesador tiene un espacio de direcciones privado, sin embargo, la comunicación se hace a través de la red por el paso de mensajes
  • La programación distribuida además de tratar la concurrencia debe tomar en cuenta los fallos, la transparencia y la heterogeneidad entre otros aspectos.
  • Los Clusters de ordenadores, el internet y la intranet son ejemplos comunes

Modelo abstracto de un programa secuencial

  • Un programa secuencial incluye declaraciones de variables y sentencias que deben ejecutarse en secuencia.
  • "Secuencial" significa ordenada en el tiempo: hasta que no acaba la ejecución de una sentencia, no comienza la siguiente.

Sentencias, estados y procesos sencuenciales.

  • Una sentencia modifica el valor de una o varias variable del programa, al ejecutarse.
  • Un estado es el conjunto de valores de las variables del programa, en un instante determinado
  • Un proceso secuencial es la ejecución de un programa secuencial en un tiempo definido.
  • En programa cambia las variables desde un estado inicial hasta un estado final.

Accesos a variables en una sentencia

  • Un acceso a una variable es una operación realizada por el procesador que lee o escribe una variable durante la ejecución de un programa.
  • Se consideran accesos a variables de tipos primitivos como lógicos, enteros, carácter o flotantes.
  • Cuando se ejecuta una sentencia, se producen uno o varios accesos de forma secuencial.
  • Las sentencias más simples producen un único acceso de escritura, como x:=34
  • Las asignaciones más complejas suelen tener más de un acceso.

Variables accedidas por una sentencia

  • V(S) es el conjunto de variables que se leen o escriben al ejecutar una sentencia S.
  • La sentencia x:=x+1 accede a la variable x (lee y escribe).
  • La sentencia y:=2*y+x+1 accede a las variables x e y (lee ambas y escribe y).
  • La sentencia print(x,y) accede a las variables x e y (las lee).

Traza y ejemplo

  • La historia o traza de una ejecución de un proceso secuencial es la secuencia de sus estados.
  • Para evaluar el comportamiento, se utiliza un pseudo-código donde se distinguen las sentencias, que tienen fondo gris, y los estados, con fondo rojo.

Tradución de expresiones aritméticas. Registros.

  • En el pseudo-código se usan expresiones aritméticas enteras, flotantes o lógicas.
  • Para poder evaluarlas, una CPU necesita operandos aritmético-lógicos (+,-,*, and, or, etc.) guardados en los registros del procesador.
  • Cada proceso secuencial cuenta con variables implícitas llamadas registros y se usan evaluar expresiones r0, r1, r2, etc.
  • Por cada referencia a una variable en una expresión, se debe leer y escribir en un registro.
  • Los valores de los registros forman parte del estado del proceso secuencial.

Traducción de expresiones aritméticas. Registros.

  • La instrucción x:=x+1 se descompone en r0 := x (lectura de x y escritura en r0) y x := r0+1 (lectura de r0, cálculo y escritura en x).
  • En expresiones complejas se necesitan más registros
  • En la declaración y:=2*y+x+1 hace falta usar 2 registros

Sentencias compuestas y traza

  • La traza puede escribirse en forma de tabla donde se muestra el estado inicial, la sentencia y el estado después de ejecutarse.

El proceso secuencial como una secuencia de acceso

  • La ejecución de un proceso secuencial se puede modelar como una secuencia finita y ordenada de accesos a las variables iniciada en el estado inicial.
  • Se asume que esta secuencia es finita porque cada proceso solo tiene un estado final, no entra en un bucle infinito.
  • Este modelo sirve para analizar el comportamiento de programas concurrentes con memoria compartida

Modelo abstracto de ejecución concurrente

  • Un programa concurrente incluye declaraciones de variables (compartidas) y sentencias que determinan cómo dos o más procesos secuenciales se pueden ejecutar concurrentemente.
  • "Concurrentemente" quiere decir que la ejecución de las sentencias puede solaparse en el tiempo.
  • Los procesos acceden (leen o escriben) las variables compartidas.
  • Cada proceso secuencial puede tener sus propias variables locales y sus propios registros (no accesibles por otros procesos).
  • Existen dos procesos secuenciales: NomUno y NomDos, y ambos acceden a las variables compartidas x e y.
  • Antes de empezar a ejecutar los porcesos NomUno y NomDos, hay que inicializar las variables compartidas

Variables locales y registros

  • Cada proceso secuencial puede declarar variables locales, accesibles sólo dentro del proceso.
  • Dos variables locales de dos procesos secuenciales distintos podrían tener el mismo nombre.
  • Cada proceso secuencial usa sus propios registros.

Notación abreviada para ejecución secuencial o concurrente.

  • SA; SB denota la sentencia que primero ejecuta SA completa y luego SB completa (secuencialmente).
  • SA||SB denota la sentencia que ejecuta SA y SB de forma simultánea (concurrentemente) y termina cuando ambas terminam
  • La sentencia SA||SB es equivalente a SB||SA, pero SA; SB no es igual a SB; SA.

Accesos a variables compartidas: consistencia secuencial

  • Es necesario que la propiedad de la consistencia secuencial estricta se cumpla simpre
    • Todos los accesos a variables se realizan en un orden determinado, sin solapamientose
    • Se dice entonces que la totalidad de los accesos realizados desde el inico hasta el final ocurre en un orden determinado
    • Los accesos se pueden mezclar, sin que se empiecen los accesos hasta que no hayan acabado otros
    • El orden determinado puede cambia en cada ejecución.
    • los accesos realizados siempre debe ejecutarse en el orden que tienen en el programa sin importar la interfoliación

Estados de un programa concurrente

  • Un estado de un programa concurrente es el conjunto de valores de las variables (compartidas
  • Se puede hablar de las trazas de un código concurrente, donde se pueden consultar los accesos de las variables compartidas

Ejecución de sentencias de forma concurrente

  • La ejecución de una sentencia S₁, puede interactuar con otra sentencia S₂ que acceda a las mismas variables compartidas
  • Si ocurre el resultado final depende de los datos, el orden en que las sentencias están interfolliadas y también los datos de entrada
  • Es esencial tener esto en cuenta para le diseño de programas.

Ejemplo de ejecución concurrente de sentencias

  • Dos procesos secuenciales comparten x, si tienen el mismo registros y e ejecutan a la vez la sentencia X := X + 1 con X = 1, los procesos pueden acceder al mismo tiempo a los registreos por lo que puede acabar siendo diferente a la salida correcta.

Sentencias atómicas y no atómicas (1/2)

  • Para facilitar el análisis y diseño de programas concurrentes, definimos los estados atómicos
  • Una sentencia S se considera atómica si no produce estados intermedios en las variables
  • Hay un estado intermedio si no es ni el inicial ni el final en los accesos
  • Un estado es accesible si contiene valores que se pueden Leer o Escribir por otros procesos distinto P.

Sentencias atómicas y no atómicas (2/2)

  • Si tenemos P donde la ejecución atómica de S, otros procesoso no pueden leer o modificar, ni leer las variables durante la ejecución. solo los cambios de valores de las variables.
  • Las declaraciones se ejecutan para la variable atómica solo una unica vez para el resto de procesos

Ejemplos de sentencias atómicas

  • Sentencias que no producen estados intermedios y que hacen un único acceso a una Variable Compartida.
  • Lectrura y escritura de forma exclusiva en un variable local
  • Esto se traduce en código fuente a una única intrucción, nos es irrelevante si el la concurrencia es atómica, abstraemos los detalles para poder usar las intrucciones de máquina
  • Otra variables atómicas, son las Variables con mucho accesos, pero solo si se usas en una sola variable compartida.
  • Tambien opearaciones compuestas y o bloques con mucha operaicón pueden ser atomicas si cambian los datos de entrada y salida.

Ejemplos de sentencias no atómicas

  • Cuando existen estados intermedios

Ejemplo de solapamiento en estructuras atómicas.(1/2)

  • Para asegurar el comportamiento del programa a traves de secuencias se usan variable Locales que en conjunto valan cero.

Ejemplo de solapamiento de instrucciones atómicas (2/2)

  • Si en la siguiente diapositiva vemos dos trazas que dan lugar a los dos valores de b posibles. Escribe, el resto de trazas y verifica que el valor final solo depende del orden de los accesos a x

Solapamiento de sentencias atómicas

Puesto que S0 y S1 son atómicas, la ejecución concurrente de ambas es equivalente a la secuencial, es decir el estado posterior siempre será uno cualquiera de estos dos: Estado resultado de ejecutar S0 completa, seguida de S1. Estado resultado de ejecutar S1 completa, seguida de S0. Es decir: si S0 y S1 son ambas atómicas, entonces cada vez que se ejecuta la sentencia S0||S1 el resultado será equivalente a ejecu- tar S0; S1 o bien a ejecutar S1; S0. Por tanto, en general, podemos analizar el comportamiento de un programa concurrente suponiendo que las instrucciones atómicas no se solapan (aunque realmente sí lo hagan).

Interfoliación de sentencias atómicas

uno ejecuta la secuencia de instr. atómicas A1 A2 A3 A4 A5, y otro ejecuta la secuencia de instr. atómicas B1 B2 B3 B4 B5. Entonces, al ejecutar el programa concurrente C, puede ocurrir cualquier interfoliación de sentencias atómicas que respete el orden dentro de cada proceso secuencial.

El número de posibles interfoliaciones

El proceso P₁ ejecuta n₁ instr. atómicas, y el proc. P₂ ejecuta n2: Hay tantas posibles interfoliaciones de P₁ y P₂ como posibles subconjuntos (de n₁ elementos) del conjunto {1,2,..., n₁ + n2} (es igual si consideramos subconjuntos de n₂ elementos). Luego el núm. de interfoliaciones es este coeficiente binomial: n1 + n2 (n1) = (n1+n2)! /n1!.n2! Si tenemos k procesos se usa el coeficiente multinomial: (n₁+n₂+...+nk / n₁, n₂,..., nk) = (n+n: +...+ nk)! / n! n₂!... nu! Por ejemplo, para n₁ = 10 y n₂ = 15 hay 3.286.760 interf. Conclusión: el número de posibles interfoliaciones es muy ele- vado incluso para programas cortos

Abstracción

Se consideran exclusivamente las características relevantes que determinan el resultado del cálculo Esto permite simplificar el análisis y diseño de los programas concurrentes. Se ignoran los detalles no relevantes para el resultado, por ejemplo: Las áreas de memoria asignadas a los procesos. Los registros particulares que están usando. El costo de los cambios de contexto entre procesos. La política del S.O. relativa a asignación de CPU. Las diferencias entre entornos multiprocesador o monoprocesador.

Velocidad de ejecución. Hipótesis del progreso finito.

No se puede hacer ninguna suposición acerca de las velocidades absolutas/relativas de ejecución de los procesos, salvo que es mayor que cero. Un programa concurrente se entiende en base a sus componentes (procesos) y sus interacciones, sin tener en cuenta el entorno de ejecución. Ejemplo: Un disco es normalmente más lento que una CPU, pero no podemos suponer que siempre es así para diseñar un programa. Si se hicieran suposiciones temporales: Sería difícil detectar y corregir fallos La corrección dependería de la configuración de ejecución, que puede cambiar

Hipótesis del progreso finito

Si se cumple la hipótesis, la velocidad de ejecución de cada proceso será no nula, lo cual tiene estas dos consecuencias:

  • Punto de vista global Durante la ejecución de un programa concurrente, en cualquier momento existirá al menos 1 proceso preparado, es decir, eventualmente se permitirá la ejecución de algún proceso.
  • Punto de vista local Cuando un proceso concreto de un programa concurrente co-mienza la ejecución de una sentencia, completará la ejecución de la sentencia en un intervalo de tiempo finito.
  • Sistemas Concurrentes y Distribuidos- Curso 2024-25

Notación para expresar ejecución concurrente. Tipos.

  • Usaremos una notación (la llamamos pseudo-código) para expresar el código y la sincronización de los distintos procesos secuenciales
  • Distinguimos dos tipos de sistemas concurrentes en función de las posibilidades para especificar cuáles son sus procesos:
  • Sistemas Estáticos
    • Número de procesos fijado en el fuente del programa.
    • Los procesos se activan al lanzar el programa.
    • Ejemplo: Message Passing Interface (MPI-1).
  • Sistemas Dinámicos
    • Número variable de procesos/hebras que se pueden activar en cualquier momento de la ejecución.
    • Ejemplos: OpenMP, PThreads, Java Threads, MPI-2.

Grafo de Sincronización

  • Un Grafo de Sincronización es un Grafo Dirigido Acíclico (DAG) donde cada nodo representa una secuencia de sentencias del programa

Definición estática de procesos

  • El número de procesos (arbitrario) y el código que ejecutan no cambian entre ejecuciones.
  • Cada proceso se asocia con su identificador y su código mediante la palabra clave process.

Definición estática de vectores de procesos

  • Se pueden usar definiciones estáticas de grupos de procesos similares que sólo se diferencian en el valor de una constante
  • la estructura de los vectores de procesos hace uso del nombre de los procesos que hay en la ejecución.
  • Cobegin - Coend: Es una herramienta para la creación de procesos que hace uso de un principio-fin para procesos

Notación para atómicidad

Sea una variable , entonces <s> es otra notación para la misma variable que sea atómica para su definición

  • Hace que en la memoria se reserven las sentencias para una operación atómica

Sección 3: Exclusión mutua y sincronización

  • Al ser operaciones atómicas se permite coordinaciones.

Condición de sincronización. Exclusión Mutua

  • Condición de Sincronización Imponer una restrictiva o condición sobre el orden de interlevar las instrucciones atómicas de distintos procesos.
  • la exclusión mutua son condiciones/instrucciones que deben ejecutarse en función a como fue programada - la coordinación se debe realizar si se desea que la condición se realice de la manera en la que fue programad

Exclusión Mútual y Sincronización

  • En principio es impredecible la interfolliasión y el tiempo en las secuencias
  • Sinc embargo los procesos secuenciales no son completamente independientes, debiendo llevar cierta coordinación sino se necesitará la secuencialidad.

Exclusión Mutua

  • Una restricción sobre la operaciones consecutivas en el texto de 1 o varios procesos
  • Se crea una Sección Crítica(SC) y sobre esta sección se realiza exclusión mutua.

Ejemplos de exclusión multiple

  • Actualizaciones de datos en meoria compartida para evitar problemas de concurrencia

Un ejemplo sencillo de exclusión mutua

  • Con la exclusión mutua se permite crear operaciones aritmeticas elementales sin generar redundanci

Tradicción y ejecución de asingaciones

  • se declaran las variables/registros de dos procesos/variables para que no se sobreescriban al mismo tiempo

Posibles Secuencias de Instrucciones

  • Existen diversas trazan pero la función valida debe asegurar la condicion sincronizada

Para garantizar atomicidad

La sentencia ` es de nuevo de un tipo nuevo de sentencia atómica, ya que puede hacer más de un acceso al mismo tiempo

Ejemplo de sentencia atómica<

  • A traves de una secuencia de instrucciones con atómicidad se evitan interfoliaciones y se declaran sentencias atómicas válidas
Actividad en clase
  • Para verificar la suma de ambas variables(x = 0, Y = 0) siempre es 10,escrbimos un codigo que reescriba dicha suma asegurando que de 10

Condición de Sincronización

  • La idea es poder escribir o acceder información a la vez para mejorar y sincronizar.
  • De todos los procedimientos uno 1 o varios procesos debes esperar a que un condición global ocurra
  • La ideas es ordenar los accesos

Ejemplo de sincronización producor-comsumidor

  • Variables (Integer)

procesos

Ejemplo procesos productor (calcula valores producidos)

  • Se calcular un valor del producido
  • se escribe en la parte mom. compartida - sentencia E.

Proceso

El comsumido lee el texto con una sentencia L que consume la memoria compartida y realiza un valor con la varible y termina a la variables consumidad a traves de una lectura de un valor

  • Se valida la condición de sincronización a traves de un Productor con su sentencia E con su Comsidor y se crea una secuencia de sincronización
  • Consumidor no lee hasta que productora escriba la variable X
  • P no escribe un nuevo valor consumidas

Sección 4: Propiedades de los sistemas concurrentes

Las instrucciones actuan como un solo proceso para que los demás procesos entienda que solo habra una única forma

Hay 2 tipos de propiedades

Propiedad de la seguridad (safety). Propiedad de vivacidad (liveness).

safety

Las condiciones se cumpliran de forma estatica.

  • Exclusión mutua: 2 procesos no entrelazan ciertas subse-ecuencias de instrucciones. -Ausencia Interbloqueo (Deadlockfreedom): Una vez que los 2 procesos terminen las instrucciones no esperarán mas a ninguno de ellos. -Propiedad de seguridad en el ProductorConsumidor: El consumidor debe consumir todos los datos producidos por el productor en el orden en que se van produciendo.
Liveness
  • se cumpliran las condiciones de la tarea
  • serán dificiles de saber. Ejemplo: se evitan los procesos no pueden ser indefinidamente pospuestos. EN algun momento avanzaran
equidad

se intenta ayudar a los demás procesos a través de la propia ejecución

Sección 5: Verificación de los procesos

Son correctas todas las posibles interfoliaciones de las secuencias atómicas de los procesos

Introducción

Comprobar el procesos

  • Problema:* Comprobar se ejecutan la propiedades
solución

Realizar los cambios

Enfoque Operacional (Analisis Extensivo)

. Si solo hacemos un análisis por separado, este no será el correcto porque se necesitan análisis más en detalle.

Enfoque Axiomático

El trabajo que conlleva la prueba de corrección es proporcional al número de sentencias atómicas en el programa.

Invariante global

Predicado que referencia variables globales siendo cierto en el estado inicial de cada proceso y manteniéndose cierto ante cualquier asignación dentro de los procesos.

Studying That Suits You

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

Quiz Team

Related Documents

scd-t1-intro.pdf

Description

Este cuestionario explora los beneficios de la programación concurrente y la computación intensiva en diversos campos como gasolineras, videojuegos y sistemas distribuidos. También examina el papel de las CPU y GPU.

More Like This

Parallel Programming in Python
5 questions

Parallel Programming in Python

RomanticAntigorite8292 avatar
RomanticAntigorite8292
Java Concurrency: Part 2
19 questions
Use Quizgecko on...
Browser
Browser