PROBLEMA DE LOS LECTORES-ESCRITORES.

 

 

DESCRIPCION DEL PROBLEMA:

 

El problema en cuestión es el siguiente:

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).

 

 

DOCUMENTACION DEL PROGRAMA.

 

Se considera a cada usuario(lector y escritor) como dos procesos y al fichero en cuestión como un recurso. De modo que, para que un proceso acceda al recurso que necesita, tenemos que considerar a cada usuario (lector y escritor) como dos semáforos. Estos semáforos son binarios y valen 0 si el recurso (fichero) está siendo utilizado por otro proceso y 1 si dicho recurso está disponible.

La solución de este problema se basa en implementar un algoritmo eficiente (véase algoritmo) en el manejo de semáforos y memoria compartida que seguidamente describimos. A lo largo del programa se utilizan funciones necesarias para el manejo de memoria compartida (véase "rshmem.h Y "rshmem.c") manejo de semáforos (véase "semaph.c" .)

 

Para que el problema esté bien resuelto se tiene que cumplir:

 

- No se puede hacer esperar a ningún proceso lector si ningún proceso escritor accede al recurso.

- Cuando un escritor debe realizar su tarea, debe ocurrir cuanto antes, sin que deban interferir los procesos lectores.(Para ello se establecen prioridades)

 

Para saber en que algoritmo nos hemos basado ver "LECTORES ESCRITORES"

 

Ver programa "LECTORES.C"

 

FUNCION MAIN:

 Creación de un proceso padre y de su proceso hijo (lectores, escritores).

  

DESCRIPCION

escribir( ); Esta función implementa el acceso a un recurso compartido, que será la variable que contabiliza el total de veces que el usuario escribe. En esta función se han incluido varias llamadas al macro TP. Este macro implementa un retardo aleatorio con el fin de dar cierto tiempo a que ocurran interrupciones que puedan detener la ejecución del proceso en su "cuanto" de tiempo asignado por el S.O.. En nuestro caso, es necesario realizar unas cuantas llamadas para dar tiempo a que todos los usuarios tengan oportunidad de escribir.

 

lectura( ); Permite que el lector pueda acceder al recurso. Una vez que acaba de leer se encarga de dejar el recurso para que sean de nuevo utilizado (por él o por otros). Para ello se basa en funciones de manejo de semáforos y memoria compartida.

 

Utiliza las siguientes funciones:

 

Manejo de semaforos:

•semWait ( )

•semSignal ( )

•semOpen ( )

•semClose ( )

 

Manejo de memoria compartida:

 

Cada vez que escribe un usuario lo refleja en el incremento de la variable de memoria compartida.

 

Cuando los lectores y escritores han realizado la tarea que desean(leer y escribir) un número M de veces prefijado (3) se lo comunican al padre, no sin antes haber cerrado adecuadamente todos los semáforos utilizados en esta función.

 

NOTAS IMPORTANTES:

 

DEPENDENCIAS:

 

ficheros:

 

EJEMPLO:

La salida se encuentra en el fichero fich.txt

 

AUTORAS:

SALGADO PANIAGUA, INMACULADA.

VAQUERO GRANDAS, LAURA.

 

FECHA: 15-JUNIO-1998