SISTEMAS OPERATIVOS I
Segundo curso Ingeniería Informática. Curso 2003-2004
Práctica 2: Sincronización de procesos concurrentes. Algoritmo de Lamport
Sincronizar el acceso de varios procesos concurrentes a su sección crítica utilizando el algortimo de Lamport. Para ello realizaremos
en C 2 programas
- Programa p2a.c. Es el programa que se encarga de crear e inicializar la memoria compartida. Su pseudocódigo, excluyendo el
control de errores, puede verse a continuación:
Crear memoria compartida;
Inicializar memoria compartida;
Esperar a que terminen los procesos concurrentes;
Eliminar memoria compartida;
Recibe como argumento el número de procesos que se van a sincronizar (que como mucho serán 50), necesario para inicializar las variables.
- Programa p2b.c. Es el programa del que ejecutaremos varias instancias en distintas terminales, y que se pretende sincronizar. Recibe
como argumentos el número total de procesos (como en el caso anterior) y de qué proceso se trata (i para
). Su
pseudocódigo es:
Obtener memoria compartida;
loop
seccion de entrada;
seccion critica;
seccion de salida;
seccion restante;
end loop;
Comentarios
- Memoria compartida Para usar la memoria compartida en UNIX pueden usarse las funciones que a tal efecto se
incluyen en el fichero sharedmem.h. Para lo cual es necesario
- Obtener el fichero sharedmem.h de la siguiente url:
http://www.dc.fi.udc.es/os/~afyanez/Practicas/sources/sharedmem.h
- Colocar el fichero sharedmem.h en el directorio donde residen los programas p2a.c y p2b.c
- Incluir en dichos ficheros la sentencia
#include "sharedmem.h"
- Usar las funciones CrearMemoriaCompartida, UsarMemoriaCompartida y EliminarMemoriaCompartida, incluidas en dicho fichero
fuente
- CrearMemoriaCompartida
- Recibe como argumento el tamaño de la zona de memoria compartida a crear. Devuelve un puntero a la zona
creada o NULL en caso de error. La variable error_memoria contiene una descripción del error.
- UsarMemoriaCompartida
- Recibe como argumento el tamaño de la zona de memoria compartida que se quiere usar (se supone que esta ya
creada con CrearMemoriaCompartida . Devuelve un puntero a la zona o NULL en caso de error. La variable error_memoria contiene una
descripción del error.
- EliminarMemoriaCompartida
- Recibe como argumento el puntero a la zona de memoria compartida que se quiere eliminar. En caso de
error devuelve -1 y la variable error_memoria contiene una descripción del error.
- Secciones crítica y restante de los procesos. Dado que se trata de una simulación, las secciones crítica y restante
de los procesos se limitarán a imprimir en pantalla (mediante la llamada al sistema write) la hora de comienzo de la sección crítica
o restante del proceso, esperar un tiempo aleatorio e imprimir (de nuevo mediante la llamada al sistema write) el instante de finalizacion
de dicha sección crítica o restante.
Ejemplo:
Proceso 3, pid 34721. Comienzo seccion critica: Mon Dec 1 15:12:13 2003
....
Proceso 3, pid 34721. Finalizacion seccion critica: Mon Dec 1 15:12:17 2003
Debe comprobarse el funcionamiento de la práctica
- Usando el algoritmo de Lamport
- Sin usar el algoritmo de Lamport
- Omitiendo la variable eligiendo en el algoritmo de Lamport. para comprobar que en este caso falla, tal vez sea necesarion
introducir un retardo en el cálculo del máximo
PISTAS: hacer man de sleep, rand y srand, sprintf, time y ctime, getpid.
FORMA DE ENTREGA
Va a ser utilizado el servicio de recogida de prácticas suministrado por el Centro de Cálculo de esta Facultad y parte del proceso de corrección
de las prácticas va a ser automático (compilación, listado de prácticas entregadas etc) por lo cual deben entregarse exactamente como se indica a continuación:
- Se colocará el código fuente de la práctica en el directorio asignado para ello antes de la fecha tope de entrega de la
práctica.
- El nombre de los ficheros fuente de esta práctica será p2a.c y p2b.c (en minúsculas).
- Los grupos de prácticas son de 2 (DOS) alumnos. La práctica DEBE SER ENTREGADA POR LOS DOS MIEMBROS DEL
GRUPO
- en el código fuente de la práctica debe figurar como comentario el nombre de los autores tal como se indicó en la práctica
anterior.
FECHA DE ENTREGA VIERNES 12 DICIEMBRE 2003