Está en la página 1de 5

Computación concurrente:

Es el uso de múltiples procesos de ejecución o tareas de manera simultánea a computar para responder o resolver un problema. Su
principal motivación, compartir tiempo entre múltiples usuarios o trabajos en una sola computadora. Otra ventaja es por tanto el uso
de varias computadoras para resolver un problema, pues esto puede proveer tolerancia a errores, que invertir mucho dinero en una
supercomputadora.

La cooperación para estos procesos concurrentes requiere de:

1. Compartir información y recursos


2. No interferir mientras se accede o comparte la información o recursos.

Pero hay ocasiones donde no puede existir ejecución concurrente, dado a la exclusión mutua que tiene cada ejecución sobre otra u
otras. Para esto es necesario calificar un aislamiento que está dado por un protocolo de entrada que pone un proceso en sección o
región critica luego un protocolo de salida para anunciar que la sección critica se encuentra disponible.

# entry protocol

# critical región code

# exit protocol

Pero también hay otro enfoque que es el de no compartir variables entre las ejecuciones concurrentes. El enfoque de monitor por otro
lado da espacio a las variables compartidas y a recursos específicos a solo un proceso a la vez.

Soluciones para el desarrollo concurrente:

1. Especificar que partes de los procesos pueden correr en concurrencia.


2. Especificar la información y los recursos compartidos.
3. Prevenir interferencia entre procesos concurrentes para asegurar la exclusión mutua
4. Sincronizar procesos concurrentes en puntos apropiados.

Propiedades de las soluciones:

1. Seguridad:
a. No-interferencia
b. No punto muerto
c. Exactitud parcial
2. Vivacidad
a. El programa termina
b. Sin carrera (comportamiento no determinista causado por la ejecución simultánea de procesos)
c. Justicia: cada proceso tiene una oportunidad de ser ejecutado.

Arquitecturas Hardware:

Para el desarrollo efectivo de la programación concurrente se ve necesario el uso de varios computadores que compartan las variables
y se comuniquen por medio de mensajes, a esto se le puede llamar arquitectura de clúster de computadoras o un multiprocesamiento
o multiprogramación.

Arquitectura de software:

Se requiere especificar sintaxis y semánticas para:

1. Especificar que partes de los procesos pueden correr en concurrencia.


2. Especificar la información y los recursos compartidos.
3. Prevenir interferencia entre procesos concurrentes para asegurar la exclusión mutua
4. Sincronizar procesos concurrentes en puntos apropiados.

Mecanismos de software que soportan estas características:


1. Espera activa / Espera ocupada
2. Semáforos
3. Monitores
4. Paso de mensajes

Espera activa: concurrencia sin abstracciones

Resuelve la exclusión mutua:

1. Provee una introducción a probemas inherentes a soluciones concurrentes


2. Es ejecutable en maquina virtual de cada máquina y no requiere de un software de soporte adicional
3. Las variantes son frecuentemente usadas en implemetaciones hardware.

Desventajas

1. Es altamente ineficiente
2. Programar a este bajo nivel es altamente propenso a errores.

Semáforos

P(s): espera hasta s>0, entonces s := s-1

V(s): s:=s+1

Resuelve interferencia y sincronización

Anotaciones:

1. Sólo hay dos operaciones de syncronización definidas, el valor de s es no determinable.


2. Las operaciones deben ser implementadas en el hardware o en el kernel.
3. El retardo de P(s) permite no gastar ciclos de maquina en un chequeo repetitivo.
4. Alemán P:passeren, V: vrygeven
5. Las operaciones proceden automáticamente.

Semáforos y Productores/Consumidores

Cuando un proceso está creando valores usados por otro proceso. Puede verse cómo un proceso de multiples
buffers o encapsuladores, pero refina en múltiples productores y consumidores.

Semáforos y Lectores/Escritores

 Sin exclusión entre lectores


 Exclusión entre lectores y escritores
 Exclusión entre escritores
Garantizando la actualización única temporal y que no se pueda leer mientras se actualiza.

Dificultades en diseño de software

Tienen complejidades de diseño a gran escala y no está totalmente definido todo el diseño que debe existir tras el
enfoque de semáforo por lo que recae la responsabilidad en una considerable disciplina del programador.

Monitores

Un monitor para monitorizar el estado de los recursos. Operaciones(cv- condition variables):

1. Esperar(cv): causa el proceso ejecutado a retrasar y a colocar al final de la cola cv.


2. Señal(cv): Causa el proceso a la cabeza de la cola cv.

Monitores y Productor-Consumidor

Al programarse en un nivel mas abstracto permite al software ser mayor confianza.

Paso de mensajes

1. Declaración de canal
2. Envio <canal><mensje>
3. recibir <canal><variable>

Si se envia y recibe al tiempo se tiene comunicación síncrona, si no la comunicación será asíncrona.

No posee estructuras que presenten interferencia o compartimiento de variables y el problema de la sección critica.

Paso de mensajes y Productor-Consumidor


Paso de mensajes y Lectores/Escritores

Paso de mensajes y simulación semáforo

El procedimiento remoto de llamada y abstracciones rendezvous

Sistemas distribuidos

Para un proceso distribuido el saber que una ejecución ha sido terminada se califica con la cola de listos y adicional que ningún proceso
esté en la cola de suspendidos de algún ordenador pues un proceso excluyente a este pudo haber terminado y dar paso a este proceso
suspendido, para esto se propone cómo solución un método de estado global que determine sí todo el sistema distribuido ha
terminado con un proceso o tarea. Un ejemplo Ben-Ari [1990].

Acercamientos formales

Para determinar si un sistema concurrente termina y su solución es factible se necesita de 2 acercamientos para verificar la
programación concurrente:

1. Axiomático o asertivo (pre y post condiciones, con la postcondición dada por la cantidad de posibles estados en ejecución)
2. Proceso algebraico (Construir un modelo matemático a fin de representar las interacciones de un sistema y su entorno con
las leyes algebraicas)

Lenguajes existentes con características concurrentes

Una gran variedad de lenguajes han sido desarrollados para usar el paradigma concurrente.

Si el sistema operativo provee el soporte de requisitos, los semáforos pueden ser implementados en cualquier lenguaje por llamadas
del sistema. Para las estructuras de control de concurrencia de alto nivel se necesita la modificación del lenguaje secuencial subyacente
[Concurrent Pascal (Brinch Hansen, 1975) usa monitore] mientras Concurrent C [Gehani y Rome, 1986] es basado en rendezvous por
otro lado The Ada(concurrencia basada sobre redezvous) y SR(que incluye estructuras para todos los acercamientos discutidos en el
libro) [Andrews y Olsson, 1993] son ejemplos de lenguajes secuenciales que incluyen estructuras concurrentes inluidas en fases iniciales
de desarrollo.

Ocurre similar con los lenguajes orientados a objetos. Ejemplo de esto SmallTalk[Goldberg y Robson 1989] que utiliza el enfoque de
semáforo.

Lenguajes basados en modelo inherentemente concurrente: Linda(filosofía independiente del lenguaje)[Ahuja, 1986] y occam (paso de
mensaje sincronizado)[Jones y Goldsmith, 1988].

Otro enfoque para hacerlo independiente del lenguaje es implementar una interfaz o API estandarizada para ejecutar de forma
concurrente cualquier lenguaje de programación. Para programas de paso de mensajes MPI (Message Passing Interface).

El MPI es un modelo MPMD (multiple program multiple data).

El API OpenMP se está convirtiendo en un estándar que soporta programación paralela en C/C++ y Fortran en todas las arquitecturas
con memoria compartida multiplataforma.

Problemas de investigación

1. Avances teóricos para el desarrollo de técnicas que escalen a aplicaciones del mundo real.
2. Diseñar herramientas que provean soporte para soluciones concurrentes.
3. Lenguajes con estructuras poderosas que soporten la aplicación correcta de la concurrencia.

Resumen

Paso de mensaje asíncrono: el proceso de enviado de mensajes permite a los mensajes ser encapsulados y el enviado de procesos
puede continuar luego que el envío es iniciado. Los procesos de recibido son bloqueados si la cola de mensajes está vacía.

Canal: Estructura sobre donde los procesos envían mensajes.

Cliente/Servidor: arquitectura donde los clientes son capaces de requerir servicios de ejecución e procesos en maquinas remotas.

Variables de condición: Una variable usada sin un monitor que retrasa un proceso de ejecución.

Regiones criticas: Una sección de código que debe ser ejecutado indivisiblemente.

Punto muerto: Estado en el que un proceso espera de eventos que nunca ocurrirán.

Monitor: Encapsulación de un recurso y las operaciones de este que sirve para garantizar la exclusión mutua.

Multiprocesamiento: El uso de múltiples procesadores.

Multiprogramación: Simulación de concurrencia por entrelazado de instrucción de ejecuciones por múltiples programas; tiempo
compartido o división del tiempo.

Exclusión mutua: la propiedad que una región critica es ejecutada indivisiblemente por un proceso o hilo en un tiempo.

Carrera: Comportamiento no determinista causa de procesos concurrentes incorrectamente sincronizados.

Llamada a procedimiento remoto: arquitectura de paso de mensaje en el que procesa la solicitud de servicios de procesos ejecutando
procedimientos en máquinas remotas.

Rendezvous: El constructo de paso de mensaje en el lenguaje Ada

Semáforo: Una variable no negativa valuada cómo un entero sobre el que están definidas dos operaciones: P y V para señalar intento
de entrada y salida, respectivamente, en región critica.

Paso de mensaje síncrono: El proceso de enviar mensaje requiere el recibidor y el remitente para sincronizar en el momento de
transmitir un mensaje.

También podría gustarte