SISTEMAS OPERATIVOS I

Segundo curso Ingeniería Informática. Curso 2005-2006

Práctica 2: Sincronización. Implementar semáforos generales a partir de semáforos binarios según la implementación de Hemmendinger y utilizarlos para solucionar el problema de los filósofos comensales. Comprobar el funcionamiento ejecutando varios filósofos desde distintas ventanas.

Comentarios:

Hay que hacer DOS programas

Cada filósofo, en lugar de un bucle infinito, se ejecuta n veces (n predeterminado a 50). Es decir, sería algo así:

filosofo (int i)
{
 int veces=N;
 while (--veces){
   toma_cubiertos (i);
   come(i);
   deja_cubiertos(i);
   piensa(i);
 }
}

Dado que no se ha visto la compartición de memoria, las variables compartidas por los procesos se simularán en fichero utilizando para ello las llamadas al sistema open, read, write, lseek y close según sea necesario.

Las funciones piensa() y come() dejan al filósofo en espera un tiempo aleatorio e imprimen la hora a la que empieza y termina de comer o pensar el filósofo en cuestión. LA UNICA salida que realiza por pantalla cada filósofo es la de las funciones piensa y comE, y además, dicha salida la hará con la llamada al sistema write, como en el código que se muestra a continuación:

void piensa(int i)
{
 char mensaje [MAXCADENA];
 time_t t;
 pid_t p;
 
 p=getpid();
 t=time(NULL);
 sprintf (mensaje,"filosofo %d (%u): Comienzo a pensar a las %s",i,p,ctime(&t));
 write (STDOUT_FILENO,mensaje,strlen(mensaje));
 /*esperar tiempo aleatorio entre 0 y 5 segundos*/
 sprintf (mensaje,"filosofo %d (%u): termino de pensar a las %s",i,p,ctime(&t));
 write (STDOUT_FILENO,mensaje,strlen(mensaje));
}

Deben implementarse semáforos generales a partir de semáforos binarios según la implementacion de Hemmendinger. Los semáforos binarios se implementarán haciendo uso de que en UNIX la llamada open cuando intenta crear un fichero en modo exclusivo lo hace de manera atómica. Así, las operaciones binarias Pb y Vb quedarían:

Pb (char * s)
{
 int df 
  while ((df=open(s,O_CREAT | O_EXCL))==-1);
  close (df);
}

Vb(char * s)
{
 unlink (s);
}

La implementación de los semáforos generales debe incluir:

IMPORTANTE

Debe además tenerse en cuenta que:

FORMA DE ENTREGA Como en la práctica anterior.

FECHA DE ENTREGA: SEMANA 19 AL 23 DICIEMBRE 2005