Esta es la pagina personal de los alumnos:
Noelia González Rodríguez
Francisco Javier García Isla
¿Qué es lo que quieres hacer ?
Nombre: cerveza
Aplicación
del algoritmo del " Bebedor de cerveza holandesa "
Sinopsis:
#include
"rshmem.h"
Descripción:
Concurrencia.
Dos procesos con condición de carrera.
Para
realizar esta práctica se utiliza memoria compartida.
Comandos:
Ejecutamos
el programa para un número de iteraciones dadas.
Ficheros:
prog
Archivo ejecutable.
cerveza.c
Archivo de texto que contiene
la implementacion en c del programa .
rshmem.c
Archivo con la implementacion
en c del programa.
rshmem.h
Fichero de cabecera con definiciones
y declaraciones para usar memoria compartida.
doc.txt
Documentación del programa en un editor.
Aviso:
.
-> Si introducimos un número de iteraciones mayor o igual de
10000 tardará en ejecutarse más de 10 min.
Autores:
González
Rodríguez ,Noelia.
García
Isla ,Francisco Javier.
Sistemas
Operativos. 3° de Estadística.
Universidad
de Valladolid.
VOLVER (menú sobre la práctica)
/* Dos procesos con condición de carrera */
/* Algoritmo del Bebedor de Cerveza Holandesa */
#include "rshmem.h" /* Libreria donde se encuentra las funciones de memoria compartida */
/* Función para incrementar y decrementar una variable */
void incrementa(int *mem, int k) {
int i;
i=*mem; TP
i=i+k; TP
*mem=i;
}
/* Función principal */
int main( ) {
int *recurso;
/* Variable a incrementar y decrementar */
int *n1, *n2;
/* Variables de acceso a la seccion critica*/
/* crear zona de memoria compartida */
if (!crearMemoria( ))
fprintf(stderr,
"error de crearMemoria\n");
recurso = (int
*) memoria ; /* Memoria
necesaria */
n1=recurso+sizeof(int);
n2=n1+sizeof(int);
*recurso =
0 ;
*n1=0;
*n2=0;
if (0!=fork( ))
{ /* proceso padre */
int
i;
for
(i=0; i<1000; i++){
*n1=1;
*n1=*n2+1;
while(*n2
!=0 && *n2 < *n1); /*
Entra en la secccion critica */
incrementa(recurso,
-5);
*n1=0;
}
printf("El
recurso valia 0 y ahora vale %d\n", *recurso);
if
(!eliminarMemoria( ))
fprintf(stderr,
"error de eliminarMemoria\n");
exit(0);
}
else
{
/* proceso hijo */
int
i;
for
(i=0; i<1000; i++){
*n2=1;
*n2=*n1+1;
while(*n1
!=0 && *n1 < *n2); /* Entra
en la secccion critica */
incrementa(recurso,
5);
*n2=0;
}
exit(0);
}
}
VOLVER (menú práctica)
En el estudio de los tiempos vemos que el tiempo utilizado por el sistema es casi nulo ,para cualquier número de iteraciones. El tiempo real empleado aumenta de forma muy rapida a medida que aumenta el número de iteraciones, mientras que el tiempo usado aumenta , pero de forma más lenta.
Las estadisticas obtenidas de una muestra de tiempos son:
TREAL
TUSER
TSYS
Media 55.8500
16.8929 0.0314
Moda
0.04000 0.01000
0.0200
El valor mas frecuente para los diferentes tiempos los vemos en la moda.
VOLVER (menú práctica)