Está en la página 1de 41

PROGRAMACIÓN

CONCURRENTE Y
PARALELA
BENEMÉRITA UNIVERSIDAD AUTÓNOMA DE PUEBLA
FACULTAD DE CIENCIAS DE LA COMPUTACIÓN
Luz A. Sánchez Gálvez
lgalvez@cs.buap.mx
luzsg@hotmail.com
Programación Concurrente y
Paralela
 La programación concurrente desempeña un
papel vital en los sistemas donde muchos
sucesos ocurren simultáneamente.
Introducción

 Concurrencia se refiere a un conjunto de sucesos


que ocurren de manera simultánea

 Cada uno de esos sucesos se suele llamar proceso

 En Computación, concurrencia significa la existencia


simultánea de varios procesos en ejecución
Introducción

 Proceso:
 Instancia ejecutada de un programa.
 “es una actividad asíncrona susceptible de ser
asignada a un procesador”
Introducción

 Dos procesos serán concurrentes cuando la


primera instrucción de uno de ellos se ejecute
después de la primera instrucción del otro y antes
de la última.
Comportamiento de un proceso

 Procesos independientes
 Sin interacción
 Relativamente poco frecuente.
 Colaborando
 Los procesos se combinan para resolver una tarea común.
 Son necesarias reglas o protocolos.
 Mediante Sincronización y Comunicación
 Compitiendo
 Típico en un SO y Redes, debido a los recursos
compartidos.
 Son necesarias reglas o protocolos.
 Mediante Sincronización
Comportamiento de un proceso

 El diseño de sistemas concurrentes tiene que ver


con la sincronización y comunicación entre los
procesos
 Los procesos independientes
 Sin interacción
 Relativamente poco frecuente
Comportamiento de un proceso

 Colaborando
 Los procesos se combinan para resolver una tarea
común
 Son necesarias reglas o protocolos.
 Mediante Sincronización y Comunicación
Comportamiento de un proceso

 Compitiendo
 Típico en SO y redes, debido a los recursos
compartidos
 Son necesarias reglas o protocolos.
 Mediante Sincronización
Comportamiento de un proceso

 Compitiendo
 Típico en SO y redes, debido a los recursos
compartidos
 Son necesarias reglas o protocolos.
 Mediante Sincronización

Interbloqueo
Comportamiento de un proceso

 Compitiendo
 Típico en SO y redes, debido a los recursos
compartidos
 Son necesarias reglas o protocolos.
 Mediante Sincronización

Inanición
Requisitos de la programación
concurrente

 Sincronización
 Capacidad de informar de la situación de un
proceso a otro.

 Objetivo: Establecer la secuencia correcta del


programa.
 Exclusión Mutua. Asegurar que un sólo proceso
tenga acceso a un recurso compartido único.
 Por condición. Asegurar que un proceso no avance
hasta que se cumpla una determinada condición.

Requisitos de la programación
concurrente

 Comunicación
 Capacidad de transmitir información desde
un proceso a otro.
 Objetivo: Intercambio de información entre
procesos.
 Prioridad
 Capacidad de establecer un orden de
importancia en los procesos.
 Objetivo: Permitir la ejecución de procesos más
importantes (prioritarios) antes que otros.
Características de los programas
concurrentes

 Orden: Orden en que se ejecutan las


instrucciones.
 Parcial: No se conoce exactamente la secuencia
en la que serán ejecutadas las instrucciones.
 Total: Se conoce exactamente el orden en el que
se deben ejecutar todas las instrucciones.

 Indeterminismo
Orden de ejecución de las
instrucciones

 Programación secuencial: Las acciones se


ejecutan una detrás de otra, es decir una acción
posterior no se inicia hasta que se haya
completado la anterior.

 La programación secuencial define un orden


total de las instrucciones
Orden de ejecución de las
instrucciones

 Ante un conjunto de datos de entrada el flujo de


ejecución es siempre el mismo
Orden de ejecución de las
instrucciones

 Un programa concurrente define un orden


parcial de ejecución
 Ante un conjunto de datos de entrada no se puede
saber cual va a ser el flujo de ejecución
Indeterminismo

 El orden parcial implica el no determinismo de


los programas concurrentes
 Puede producir diferentes resultados cuando se
ejecuta repetidamente sobre el mismo conjunto de
datos de entrada
Indeterminismo

 ¿Qué valor tendrá la x al terminar el programa?

 El valor seria 10. Sin embargo el valor de x puede ser


2,3,4,5,6,7,8,9,10
Un problema y la solución
concurrente

 Sumar dos matrices de 3 x 3.


 Se utilizan 3 procesos para sumar cada fila, un
proceso que lea las matrices y un último proceso que
genere la matriz resultado.
Sum filas 0

Formar
Leer Dividir en
Sum filas 1 matriz
matrices filas
resultado

Sum filas 2

Secuencial for (i=0; i<3; i++)


filares0[i]=filam1[i]+filam2[i]
return(filares0)
Zona concurrente
Programación Concurrente

 Disciplina que se encarga del estudio de las


notaciones que permiten especificar la ejecución
concurrente de las acciones de un programa, así
como las técnicas para resolver los problemas
inherentes a la ejecución concurrente
(comunicación y sincronización).
 La existencia simultánea no implica ejecución
simultánea
Programas concurrentes

 Son programas que tienen múltiples líneas de flujo


de control.
 Las sentencias de un programa concurrente se
ejecutan de acuerdo con un orden no estricto.
 La secuencia de un programa concurrente es entre
puntos de sincronización.
 Un programa concurrente se suele concebir como
un conjunto de procesos que colaboran y compiten
entre sí.
Problemas de la programación
concurrente

 Interbloqueos: Espera de un proceso por un


evento que nunca va a suceder.

 Violación de la exclusión mutua: Acceso


simultáneo a un recurso por 2 o más procesos,
cuando tal recurso sólo puede ser accedido por
un único proceso cada vez.

 Postergación indefinida o inanición: Uno o


más procesos nunca son seleccionados para
ejecutarse en el CPU.
Propiedades de los programas
concurrentes
 Seguridad (safety): Asegurar que algo no permitido
ocurrirá durante la ejecución.
 El programa no llegará a un estado inconsistente,
debido a posibles problemas por un mal uso de los
recursos compartidos.
 Ejemplo: Asegurar la exclusión mutua.
 Viveza (liveness): Asegurar que lo deseado ocurrirá
finalmente en la ejecución del programa.
 El programa no se bloqueará o provocará que un
proceso no se pueda ejecutar.
 Ejemplo: No permitir la postergación indefinida.
Validación de un programa
concurrente

 Para validar un programa concurrente:


 Las operaciones se pueden validar
individualmente si las variables no son
actualizadas concurrentemente.
 El resultado debe ser independiente de los
tiempos de ejecución de las sentencias.
 El resultado debe ser independiente de la
plataforma en que se ejecuta.
Ventajas de la programación
concurrente

 No depende de la arquitectura o número de


elementos de proceso.
 En sistemas monoprocesador permite optimizar el
uso de los recursos.
 Permite reducir los tiempos de ejecución sobre
plataformas multiprocesador.
 Hace posible compartir recursos y subsistemas
complejos.
 Menos necesidad de resoluciones de errores
 Menos necesidad de compartir el trabajo.
Ventajas de la programación
concurrente
 Permite resolver problemas que no serían posible
con un procesamiento secuencial
 Facilita el diseño orientado a objeto de las
aplicaciones, ya que los objetos reales son
concurrentes.
 Proporciona el modelo más simple y natural de
concebir muchas aplicaciones.
Ventajas de la programación
concurrente

 Facilita la programación de tiempo real, ya que se


pueden concebir como procesos cuya ejecución se
planifican de acuerdo con la urgencia.
 Facilita la realización de programas fiables por
despliegue dinámico de los procesos en los
procesadores.
Aplicaciones de los programas
concurrentes

 Aplicaciones clásicas:
 Sistemas operativos.
 Programación de sistemas multicomputadoras.
 Control y monitorización de sistemas físicos reales.
Aplicaciones de los programas
concurrentes

 Aplicaciones actuales:
 Servicios Web
 Sistemas multimedia
 Cálculo numérico
 Procesamientos entrada/salida
 Simulación de sistemas dinámicos
 Interacción Humano/Computadora
 Tecnologías de componentes
 Dispositivos móviles
 Sistemas embebidos
Arquitecturas que soportan la
programación concurrente

 Arquitecturas:
 Sistemas monoprocesador
 Sistemas multiprocesador
Sistemas monoprocesador

 Todos los procesos comparten la misma memoria


 Los procesos se sincronizan y comunican
mediante variables compartidas
Sistemas monoprocesador

 Los procesos se reparten el procesador:


entrelazado (interleaving)
Sistemas multiprocesador

 Más de un procesador permite que exista un


paralelismo real entre los procesos

 Clasificación de sistemas multiprocesador


 Fuertemente acoplados (multiprocesadores)
 Débilmente acoplados (sistemas distribuidos)
Sistemas fuertemente
acoplados
 Normalmente llamados multiprocesadores
 Los procesadores comparten memoria y reloj
 Puede ser más o menos difícil acceder a la memoria
de otro procesador
 Ventaja:
 aumento de velocidad de procesamiento con bajo
coste
 Desventaja:
 Escalable sólo hasta decenas o centenares de
procesadores
Sistemas fuertemente
acoplados

 La sincronización y comunicación entre


procesos se suele hacer mediante variables
compartidas
Sistemas débilmente acoplados o
sistemas distribuidos

 Múltiples procesadores conectados mediante


una red.
 Los procesadores no comparten memoria ni
reloj.
 Los sistemas conectados pueden ser de
cualquier tipo.
 Escalable hasta millones de procesadores (ej.
Internet).
Sistemas distribuidos

 La forma natural de comunicar y sincronizar


procesos es mediante el uso de paso de
mensajes
Sistemas distribuidos

 Ventajas
 Compartición de recursos dispersos
 Ayuda al trabajo cooperativo de equipos
humanos
 Aumento de velocidad de ejecución
 Escalabilidad ilimitada
 Aumento de fiabilidad:
 tolerancia a fallos (fault tolerance)
 alta disponibilidad (availability)
Programación Paralela

 El paralelismo es un caso particular de la


concurrencia
 Existe paralelismo cuando ocurre la ejecución
simultánea de instrucciones:
 arquitecturas paralelas
 procesamiento paralelo
 algoritmos paralelos
 programación paralela
Programación Paralela

 Programación paralela: Las acciones se ejecutan de


forma independiente, obviamente por diferentes
elementos de procesos, y al final los resultados parciales
se unen formando la solución global.
 Ventajas:
 Reducción del tiempo para completar el trabajo.
 Reducción del esfuerzo individual.
 Desventajas:
 Necesidad de compartir el trabajo.
 Necesidad de compartir los recursos.
 Necesidad de esperas en puntos clave.
 Necesidad de comunicación.
 Necesidad de resolución de posibles errores.

También podría gustarte