PRÁCTICA DE SISTEMAS OPERATIVOS
PROBLEMA
El siguiente programa consta de tres procesos.
Podemos considerarlo como una cadena de montaje de coches.
La fáfrica tiene tres sectores:
- El primero se ocupa de la fabricación
de las ruedas.
- El segundo monta un chasis con las ruedas que
le proporciona el primero
- El tercero se encarga del control de la calidad
de los chasis. En caso de que el chasis no sea considerado válido
se vaciará el almacén de las ruedas y comenzará de
nuevo la producción.
COMPILACIÓN
- Para compilar esta programa: cc -Aa -o fabrica
fabrica.c rshmem.o semaph.o
- Para ejecutar este programa : fabrica
INDICE
DOCUMENTACION
EXTERNA
NOMBRE: void main( )
SINOPSIS:
- #include <stdlib.h>
- #include "rshmem.h"
- #include <sys/sem.h>
- #include "funci.c"
DESCRIPCIÓN:
- El programa fábrica, simula la producción de una fábrica
de coches, donde se lleva un estudio exhaustivo de las ruedas
- El programa consta de un proceso padre, que comparte memoria con el
proceso hijo, que a su vez comparte memoria con el proceso nieto. Por lo
tanto tenemos tres procesos concurrentes. El manejo de memoria compartida
se implementa en rshmem.h
y rshmem.c.
- Para un manejo adecuado de estos procesos utilizamos semáforos,
implementados en el fichero
semaph.c.
- El proceso padre fabrica ruedas y las mete en
un almacén, de donde las recoge el proceso hijo, zona de memoria
compartida. El proceso hijo monta un chasis, con cuatro ruedas, y las mete
en un segundo almacén de donde los recoge el proceso nieto para
evaluarlos, segunda memoria compartida. Si el proceso nieto no le considera
válido, se vacía el primer almacén, y continua el
proceso.
- Los semáforos controlan la entrada y salida
de los elementos a los almacenes.
- En un fichero de salida se comprueba que el número
de chasis válidos coincide con el especificado en el programa.
ERRORES:
- En el caso de no poder crear las claves de los
semáforos, crearlos, abrirlos, cerrarlos, crear memoria compartida
ó abrir el fichero de salida, se devolverá un mensage de
error relacionado con la causa.
PRECAUCIONES:
- A pesar de que las rutinas están pensadas
para que no haya problemas de semaforos colgados en el sistema, siempre
es posible que esto ocurra. Para resolver el problema se debe eliminar
los ipcs no deseados.Utilizando "ipcrm" solucionamos el problema.
DEPENDENCIAS:
- En el programa principal hacemos uso, para implementar
las funciones necesarias, de una serie de ficheros:
- -rshmem.c
- -rshmem.h
- -semaph.c
- -funci.c
AUTORES:
- Fátima Tabera Pérez
- Noemi Hernando Pérez
volver al índice
DOCUMENTACION INTERNA
NOMBRE
void main ( )
SALIDA
- En un fichero de salida se recoge el número de chasis considerados
como válidos por la sección de control del programa, en la
variable 'nprod'.
FUNCIONAMIENTO
- El programa fábrica, simula la producción de una fábrica
de coches, donde se lleva un estudio exhaustivo de las ruedas
- El programa consta de un proceso padre, que comparte memoria con el
proceso hijo, que a su vez comparte memoria con el proceso nieto. Por lo
tanto tenemos tres procesos concurrentes. El manejo de memoria compartida
se implementa en rshmem.h
y rshmem.c
- Para un manejo adecuado de estos procesos utilizamos semáforos,
implementados en el fichero
semaph.h.
- El proceso padre fabrica ruedas y las mete en
un almacén, de donde las recoge el proceso hijo, zona de memoria
compartida. El proceso hijo monta un chasis, con cuatro ruedas, y las mete
en un segundo almacén de donde los recoge el proceso nieto para
evaluarlos, segunda memoria compartida. Si el proceso nieto no le considera
válido, se vacía el primer almacén, y continua el
proceso.
- Los semáforos controlan la entrada y salida
de los elementos a los almacenes.
- En un fichero de salida se comprueba que el número
de chasis válidos coincide con el especificado en el programa.
ERRORES
- En el caso de no poder crear las claves de los
semáforos, crearlos, abrirlos, cerrarlos, crear memoria compartida
ó abrir el fichero de salida, se devolverá un mensage de
error relacionado con la causa.
AUTORES
Fátima Tabera Pérez
Noemi Hernando Pérez
volver al índice
programa principal
DOCUMENTACION DE FUNCIONES
NOMBRE: producir ( )
FUNCIONAMIENTO:
- Genera un número aleatorio simulando la producción de
ruedas.
NOMBRE: meter (int *contador, int Mutex, int Lleno, int
Vacio)
ENTRADA:
- *contador: Puntero a una variable que cuenta el número
de elementos que hay en el almacén.
- Mutex, Lleno y Vacio: Semáforos.
SALIDA: Modifica contador añadiendo una unidad.
FUNCIONAMIENTO:
- Esta función simula la introdución de un elemento en
un almacén. Los semáforos conceden los permisos para utilizar
el almacén.
NOMBRE: sacar (int c, int *contador, int Mutex, int Lleno,
int Vacio)
ENTRADA:
- c: variable que indica el número de unidades a sacar.
- *contador: Puntero a una variable que cuenta el número
de elementos que hay en el almacén.
- Mutex, Lleno y Vacio: Semáforos.
SALIDA:
- Modifica contador restando tantas unidades como indica la variable
c.
FUNCIONAMIENTO:
- Simula la extracción de c elementos de un almacén. Los
semáforos controlan el manejo de los almacenes.
NOMBRE: vaciar (int *SI, int *contador, int Mutex, int
Lleno, int Vacio)
ENTRADA:
- SI: variable indicador que indica la validez del chasis (1 si
es válido y 0 en caso contrario).
- *contador: Puntero a una variable que cuenta el número
de elementos que hay en el almacén.
- Mutex, Lleno y Vacio: Semáforos.
SALIDA:
FUNCIONAMIENTO:
- Simula el vaciado del almacén si el valor de la variable SI
es 0, es decir si el chasis es no válido.
- Los semáforos controlan el manejo de los almacenes.
NOMBRE: control (int *SI, int nprod)
ENTRADA:
- SI: variable indicador que indica la validez del chasis (1 si
es válido y 0 en caso contrario).
- nprod: variable que contabiliza el número de chasis válido,
es el valor que se vuelca en el fichero de salida, "sal".
SALIDA:
- La función devuelve el valor de nprod en el fichero "sal".
FUNCIONAMIENTO:
- Esta función evalua el chasis, dependiendo del valor de SI,
si lo considera válido incrementa el valor de nprod.
volver al índice
fichero "pp.c"