PRACTICA DE RENDEZ-VOUS.

SISTEMAS OPERATIVOS

AUTORAS: - Maria Remedios Carreño García.

INTRODUCCION AL MECANISMO DE COMUNICACION ENTRE PROCESOS: RENDEZ-VOUS.

Es el principal mecanismo que se utiliza para el paso de mensajes entre procesos en ADA, cuyas características son:

Los procesos que deseen realizar un encuentro deben de estar activos. El encuentro solo permite una transacción y solo se realiza si tanto el proceso que espera como el que llega "están deacuerdo", es decir, los dos están preparados para la sincronización. Ya que el primer proceso que llega debe esperar a que llegue el segundo que es el momento en el que se produce la sincronización y el intercambio de datos. Después del encuentro cada proceso va a seguir realizando sus tareas independientemente.

En ADA existen varias sentencias para conseguir el encuentro, pero el que hemos implementado en C es el mecanismo de entrada-aceptación ("entry-accept"). La sintaxis y semántica es similar a una llamada a una función. Hay que tener en cuenta que los procesos involucrados poseen una secuencia de sentencias para ser ejecutadas durante el encuentro. Tales sentencias se encuentran en una construcción, Aceptación que puede no ejecutar sentencias si solo se requiere la sincronización. Para que los procesos se reúnan con el poseedor de la sentencia Accept, le dá un nombre único que se hace publico poniendo una sentencia Entry correspondiente en la parte pública de la declaración de ese proceso.

Características del mecanismo de Rendez-Vous:

En la implementación de la sentencia Accept de ADA, se puede optar por utilizar:

para resolver el problema que surge a la hora de sincronizar nuestros procesos.

A continuación vamos a detallar un ejemplo para un mejor entendimiento de todo lo explicado anteriormente.

Sea un almacén que abastece unos determinados artículos a un tienda asociada a él. Hay que tener en cuenta que el padre del dueño de la tienda es primo hermano del dueño del almacén por lo que esta tienda tiene más prioridad y en el mismo momento que la tienda tiene escasez de unidades el almacén se las manda inmediatamente hasta que el almacén se queda sin existencias.

Para resolver este ejemplo en donde, obviamente, para poder realizar el intercambio de artículos se necesita de un encuentro entre la tienda y el almacén, es decir, se necesitan sincronizar, ya que el almacén tiene que estar dispuesto en cualquier momento para mandar las unidades necesarias que lo hará en el instante en el que la tienda se las pida.

La resolución de este problema va a ser implementada en C. A continuación detallamos la documentación del programa seguido del programa y del correspondiente fichero de salida.

DOCUMENTACION DEL PROGRAMA.


/***********************************************************************************

Programa que simula la sentencia Accept de ADA. Para compilar:

ejecuta1 es el ejecutable del programa, para ejecutarle:

Ver argumentos de la función principal.

**********************************************************************************/

/*********************************************************************************

NOMBRE: Almacen.

SINOPSIS: void Almacen (int *IoAlm, int SemP, int SemH, int IoT)

ARGUMENTOS:

DESCRIPCIÓN: Proceso padre

Para la sincronización, utilizamos dos semáforos, que este proceso debe abrir y cerrar:

1. Cierra su propio semáforo (se "duerme" hasta que llegue el proceso hijo).

2. Abre el semáforo del hijo ( le despierta para avisarle de que ya accedió a memoria), para que éste pueda seguir su camino. Esta función se ejecutará hasta que el Inventario del Almacén sea nulo.

**********************************************************************************/

/**********************************************************************************

NOMBRE: Tienda.

SINOPSIS: void Tienda (int *IoAlm, int SemP, int SemH, int IoT)

ARGUMENTOS:

DESCRIPCION: Proceso hijo. Para conseguir que todo funcione bien este proceso manipula los semáforos de la siguiente manera:

1. Abre el semáforo del proceso Almacen (le "despierta" para avisarle que él ha llegado al "encuentro".

2. Cierra su propio semáforo, esperando a que, en la siguiente iteración el proceso padre le "despierte".

Esta función se ejecutará hasta que Inventario inicial del Almacén sea nulo.

************************************************************************************/

/***********************************************************************************

NOMBRE: main.

SIPNOSIS: void main (int argn, char *argv[])

ARGUMENTOS:

DESCRIPCION: función principal Se encarga de :

NOTA: Utilizamos como librerías las funciones "rshmem.h" y <sys/sem.h>.

*********************************************************************/

#include "rshmem.h"

#include <sys/sem.h>

#define MIN 3

void Almacen(int *IoAlm,int SemP, int SemH, int Iot)

void Tienda(int *IoAlm, int SemP, int SemH, int IoT)

void main(int argn, char *argv[])

SALIDA DEL PROGRAMA

$ ejecuta1 9 15

La tienda tiene escasez de unidades

------ semSignal(1097) -------

------ semWait(1098) -------

------ semWait(1097) -------

El almacen envía 6 unidades a la tienda

------ semSignal(1098) -------

La tienda tiene escasez de unidades

------ semSignal(1097) -------

------ semWait(1098) -------

------ semWait(1097) -------

El almacen envía 6 unidades a la tienda

------ semSignal(1098) -------

La tienda tiene escasez de unidades

------ semSignal(1097) -------

------ semWait(1098) -------

------ semWait(1097) -------

El almacen sólo puede enviar 3 unidades

------ semSignal(1098) -------

El almacén se ha quedado sin existencias

$