Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
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
# 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.
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:
Desventajas
1. Es altamente ineficiente
2. Programar a este bajo nivel es altamente propenso a errores.
Semáforos
V(s): s:=s+1
Anotaciones:
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
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
Monitores y Productor-Consumidor
Paso de mensajes
1. Declaración de canal
2. Envio <canal><mensje>
3. recibir <canal><variable>
No posee estructuras que presenten interferencia o compartimiento de variables y el problema de la sección critica.
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)
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 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.
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.
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.
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.
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.