COOPERACIÓN ENTRE PROCESOS
ü
Definición
ü
Problema de los Lectores – Escritores
ü
Problema Productor - Consumidor
•En la mayoría de las ocasiones los procesos son entidades
totalmente aisladas: llevan a cabo su trabajo sin tener que comunicarse con
otros procesos o programas. Sin embargo las cosas en realidad no son tan sencillas.
En muchas ocasiones, los programas o procesos necesitan intercambiar
información entre sí.
•Ejemplos:
•En una plataforma Windows, el intercambio de información a
través del portapapeles.
•Chatear a través de la red. Hay dos procesos (dos
navegadores) que intercambian información.
PROBLEMA DE LOS LECTORES-ESCRITORES
•Hay un objeto de datos (fichero de texto) que es utilizado
por varios procesos, unos leen y otro que escribe.
•Solo puede utilizar el recurso un proceso y solo uno, es
decir, o bien un proceso estará escribiendo o bien leyendo, pero nunca ocurrirá
simultáneamente (teniendo en cuenta que si no lo esta utilizando nadie, tendrá
preferencia el escritor ante el lector)
RESTRICCIONES:
•Solamente puede haber un escritor al mismo tiempo, si un
escritor o un lector quiere utilizar la base de datos y hay un escritor
utilizándola, entonces debe esperar.
•Pueden haber varios lectores utilizando la base de
datos al mismo tiempo, pero si un escritor quiere usar la base de datos
mientras los lectores la usan, deberá esperar.
•El último lector en usar la base de datos debe habilitarla
para que pueda ingresar el siguiente escritor que estaba esperando la base de
datos o en todo caso al siguiente proceso que requiera usarla.
VÍDEO LECTORES-ESCRITORES
•https://www.youtube.com/watch?v=4MKiDA3I8f8
PROBLEMA PRODUCTOR-CONSUMIDOR
•Es un ejemplo clásico de problema de sincronización de multi-procesos.
El programa describe dos procesos, productor y consumidor,
ambos comparten un buffer de
tamaño finito. La tarea del productor es generar un producto, almacenarlo y
comenzar nuevamente; mientras que el consumidor toma (simultáneamente)
productos uno a uno. El problema consiste en que el productor no añada más
productos que la capacidad del buffer y que el consumidor no intente tomar un
producto si el buffer está vacío.
Un ejemplo de un problema de concurrencia sería el
siguiente: Dados dos procesos A (productor) y B (consumidor), suponiendo que
ambos se ejecutan indefinidamente en el tiempo, el proceso A debe recibir
tiempo de ejecución antes que B, tras esto, el proceso B debe recibir su
oportunidad de ejecución, dando paso de nuevo al proceso A y así sucesivamente,
siguiendo un esquema de alternancia estricta.