Podcast
Questions and Answers
¿Cuál de las siguientes opciones describe mejor la ventaja de modelar una gasolinera con programación concurrente?
¿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?
¿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?
¿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?
¿Cómo contribuyen los sistemas distribuidos de cálculo a la resolución de problemas complejos?
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?
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?
¿Qué rol juega la programación concurrente en el entrenamiento de redes neuronales?
¿Qué rol juega la programación concurrente en el entrenamiento de redes neuronales?
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?
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?
¿Cuál es la relación entre la programación distribuida y las aplicaciones Web?
¿Cuál es la relación entre la programación distribuida y las aplicaciones Web?
¿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?
¿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?
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
?
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
?
En el modelo de ejecución secuencial presentado, ¿cuál es la importancia de que los accesos a las variables sean 'finitos y ordenados'?
En el modelo de ejecución secuencial presentado, ¿cuál es la importancia de que los accesos a las variables sean 'finitos y ordenados'?
¿Cómo se ve afectado el resultado final del programa si una de las sentencias en la traza detallada se omite accidentalmente?
¿Cómo se ve afectado el resultado final del programa si una de las sentencias en la traza detallada se omite accidentalmente?
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?
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?
Considerando el modelo de proceso secuencial como una secuencia de accesos, ¿qué ventaja principal ofrece este modelo para el análisis de sistemas concurrentes?
Considerando el modelo de proceso secuencial como una secuencia de accesos, ¿qué ventaja principal ofrece este modelo para el análisis de sistemas concurrentes?
¿Cómo podría un compilador optimizar una secuencia de accesos a variables en un proceso secuencial, sin alterar el resultado final del programa?
¿Cómo podría un compilador optimizar una secuencia de accesos a variables en un proceso secuencial, sin alterar el resultado final del programa?
¿Cuál es la principal limitación de utilizar pruebas simples para la verificación de programas concurrentes?
¿Cuál es la principal limitación de utilizar pruebas simples para la verificación de programas concurrentes?
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?
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?
¿Por qué el enfoque operacional (análisis exhaustivo) tiene una utilidad limitada en programas concurrentes complejos?
¿Por qué el enfoque operacional (análisis exhaustivo) tiene una utilidad limitada en programas concurrentes complejos?
¿Qué rol cumplen las sentencias atómicas en el enfoque axiomático para la verificación de programas?
¿Qué rol cumplen las sentencias atómicas en el enfoque axiomático para la verificación de programas?
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?
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?
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?
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?
¿Cuál de las siguientes describe una limitación clave del enfoque operacional (análisis exhaustivo) al verificar programas concurrentes?
¿Cuál de las siguientes describe una limitación clave del enfoque operacional (análisis exhaustivo) al verificar programas concurrentes?
En la verificación axiomática de programas concurrentes, ¿qué papel juegan los axiomas y las reglas de inferencia?
En la verificación axiomática de programas concurrentes, ¿qué papel juegan los axiomas y las reglas de inferencia?
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?
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?
¿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?
¿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?
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?
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?
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?
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?
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?
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?
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?
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?
¿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?
¿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?
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
?
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
?
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?
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?
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?
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?
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)?
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)?
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
?
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
?
Considerando la traza presentada, ¿cuál es la principal ventaja de representar la ejecución de asignaciones en forma de tabla?
Considerando la traza presentada, ¿cuál es la principal ventaja de representar la ejecución de asignaciones en forma de tabla?
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
?
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
?
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?
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?
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?
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?
¿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?
¿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?
¿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
?
¿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
?
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?
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?
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?
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?
¿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?
¿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?
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?
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?
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?
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?
¿Cuál de las siguientes estrategias no mitigaría los problemas derivados de la falta de atomicidad en operaciones concurrentes sobre variables compartidas?
¿Cuál de las siguientes estrategias no mitigaría los problemas derivados de la falta de atomicidad en operaciones concurrentes sobre variables compartidas?
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?
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?
Flashcards
¿Qué es 'r0' o 'r1'?
¿Qué es 'r0' o 'r1'?
Registro temporal usado en cálculos.
¿Qué es el 'estado' en una traza?
¿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'?
¿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?
¿Qué modela la ejecución de un proceso secuencial?
Signup and view all the flashcards
¿Qué es una 'sentencia de asignación'?
¿Qué es una 'sentencia de asignación'?
Signup and view all the flashcards
¿Qué representa la columna 'Sentencia ejecutada'?
¿Qué representa la columna 'Sentencia ejecutada'?
Signup and view all the flashcards
¿Qué es la 'secuencia de accesos'?
¿Qué es la 'secuencia de accesos'?
Signup and view all the flashcards
¿Qué significa que las variables son declaradas 'explícitamente'?
¿Qué significa que las variables son declaradas 'explícitamente'?
Signup and view all the flashcards
Productor
Productor
Signup and view all the flashcards
Consumidor
Consumidor
Signup and view all the flashcards
Variable Compartida (x)
Variable Compartida (x)
Signup and view all the flashcards
Sentencia E (Escritura)
Sentencia E (Escritura)
Signup and view all the flashcards
Sentencia L (Lectura)
Sentencia L (Lectura)
Signup and view all the flashcards
Orden de Sincronización Correcto
Orden de Sincronización Correcto
Signup and view all the flashcards
Error: Lectura Previa a Escritura
Error: Lectura Previa a Escritura
Signup and view all the flashcards
Error: Escrituras Sin Lectura
Error: Escrituras Sin Lectura
Signup and view all the flashcards
Simulación de gasolinera
Simulación de gasolinera
Signup and view all the flashcards
Cálculo intensivo en CPUs
Cálculo intensivo en CPUs
Signup and view all the flashcards
Cálculo intensivo en GPUs
Cálculo intensivo en GPUs
Signup and view all the flashcards
Sistemas distribuidos de cálculo
Sistemas distribuidos de cálculo
Signup and view all the flashcards
Videojuegos y RV/RA
Videojuegos y RV/RA
Signup and view all the flashcards
Inteligencia Artificial
Inteligencia Artificial
Signup and view all the flashcards
Animación y rendering
Animación y rendering
Signup and view all the flashcards
Simulación de sistemas físicos
Simulación de sistemas físicos
Signup and view all the flashcards
Pruebas Simples
Pruebas Simples
Signup and view all the flashcards
Limitaciones de Pruebas Simples
Limitaciones de Pruebas Simples
Signup and view all the flashcards
Enfoque Operacional (Análisis Exhaustivo)
Enfoque Operacional (Análisis Exhaustivo)
Signup and view all the flashcards
Problema del Análisis Exhaustivo
Problema del Análisis Exhaustivo
Signup and view all the flashcards
Enfoque Axiomático
Enfoque Axiomático
Signup and view all the flashcards
Asertos
Asertos
Signup and view all the flashcards
Sentencias Atómicas como Transformadores de Predicados
Sentencias Atómicas como Transformadores de Predicados
Signup and view all the flashcards
Verificación de Programas
Verificación de Programas
Signup and view all the flashcards
¿Qué es una traza?
¿Qué es una traza?
Signup and view all the flashcards
¿Qué son los registros?
¿Qué son los registros?
Signup and view all the flashcards
Asignación con registro (ejemplo)
Asignación con registro (ejemplo)
Signup and view all the flashcards
Expresiones complejas y registros
Expresiones complejas y registros
Signup and view all the flashcards
Pasos para y := 2*y + x + 1
Pasos para y := 2*y + x + 1
Signup and view all the flashcards
Formato de tabla de traza
Formato de tabla de traza
Signup and view all the flashcards
Ejemplo de traza de asignación
Ejemplo de traza de asignación
Signup and view all the flashcards
¿Qué muestra una traza en forma de tabla?
¿Qué muestra una traza en forma de tabla?
Signup and view all the flashcards
Ejecución concurrente
Ejecución concurrente
Signup and view all the flashcards
Sentencia atómica
Sentencia atómica
Signup and view all the flashcards
V(S) en sentencias atómicas
V(S) en sentencias atómicas
Signup and view all the flashcards
Estado intermedio
Estado intermedio
Signup and view all the flashcards
Estado accesible
Estado accesible
Signup and view all the flashcards
Acceso a variables en sentencias atómicas
Acceso a variables en sentencias atómicas
Signup and view all the flashcards
Atomicidad y acceso único
Atomicidad y acceso único
Signup and view all the flashcards
Indeterminación
Indeterminación
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 variablex
(lee y escribe). - La sentencia
y:=2*y+x+1
accede a las variablesx
ey
(lee ambas y escribey
). - La sentencia
print(x,y)
accede a las variablesx
ey
(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 enr0 := x
(lectura dex
y escritura enr0
) yx := r0+1
(lectura der0
, cálculo y escritura enx
). - 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 ejecutaSA
completa y luegoSB
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 aSB||SA
, peroSA; SB
no es igual aSB; 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.
Related Documents
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.