Anda di halaman 1dari 4

Sistemas Operativos y Administracin

LABORATORIO 07
Linux: Programacin de Procesos con Semforos
Objetivos:
-

Conocer y aplicar semforos.

A. SEMAFOROS
Para utilizar semforos en un programa se debe seguir los siguientes
pasos:
Obtener clave de semforo, esta clave se trata de una clave para un
recurso compartido. Utilizado tambin para compartir memoria y colas
de mensaje.
key_t ftok(char *, int)
Donde el primer argumento es el nombre y la ruta de un archivo
cualquiera. Y el segundo parmetro es un nmero cualquiera. Todos los
procesos que quieran compartir el semforo deben suministrar el mismo
archivo y el mismo nmero.
Obtener un arreglo de semforo, se realiza con la funcin:
int semget(key_t, int, int)
Donde el primer parmetro es la clave obtenida en el paso anterior, el
segundo parmetro es el nmero de semforos que contendr el arreglo
y el tercer parmetro son algunos flags que permiten poner permisos de
acceso al semforo (como en los ficheros) de lectura, escritura para el
usuario, grupo y otros. As mismo lleva unos modificadores para la
obtencin del semforo.
Por ejemplo, se pondr 0600 |IPC_CREAT que indica permiso de lectura
y escritura para el propietario y que los semforos se crearn sino
existen al momento de invocar a segment(). Es importante colocar el 0
delante del 600 para que el compilador del C interprete el nmero en un
formato octal.
La funcin segment() devuelve un identificador al arreglo de semforos.
Inicializacin del semforo. Uno de los procesos que comparten el
semforo debe inicializarlo. Para esto utiliza la funcin:
int semctl(int, int, int, int)
Donde el primer parmetro es el identificador del arreglo de semforos
del paso anterior, el segundo es el ndice del semforo en el arreglo el
cual queremos inicializar (si slo se ha solicitado un semforo, este
parmetro es 0). El tercer parmetro indica lo que se desea hacer con el
semforo. Por ejemplo, si se pone SETVAL significa que queremos
inicializarlo. El cuarto parmetro podra ser un entero, pero en realidad
Ing. Mayenka Fernndez Chambi

Ingeniera de Sistema UNA Puno

Sistemas Operativos y Administracin


es un tipo de unin. Entonces, si este parmetro es 1 el semforo estar
en verde y si se pone 0 es que se desea un semforo rojo.
Si se va trabajar con unin de semforos, se debe definir de forma
explcita en los programas que se vaya a realizar.
Utilizar el semforo. El proceso que quiera acceder al recurso comn
(seccin crtica) primero debe decrementar el semforo, use la funcin:
int semop(int, struct sembuf *, size_t)
Donde el primer parmetro es el identificador del arreglo de semforos,
el segundo indica las operaciones que se realizaran en el semforo. El
tercer parmetro es el nmero de elementos del arreglo.
La estructura del segundo parmetro struct sembuf contiene los
siguientes campos:
short sem_num que es el ndice del arreglo de semforos
sobre el cual se quiere hacer algo. Si es un solo semforo este
valor ser 0.
short sem_op es el valor en el que se quiere decrementar el
semforo (-1).
short sem_flg son los flags que afectan a la operacin.
Si al realizar esta operacin el semforo se vuelve negativo, el proceso se
quedar bloqueado hasta que algn otro proceso lo incremente y lo ponga
como mnimo en 0.
Cuando el proceso termine de utilizar el recurso compartido, este debe de
incrementar el valor del semforo. La funcin que se utiliza para esta accin
es la misma semop(), con la diferencia que se pondr 1 en el campo
sem_op de la estructura vista anteriormente.
Para trabajar con semforos es necesario incluir las libreras: sys/ipc.h y
sys/sem.h
B. DESARROLLO DE LA PRCTICA
1. Copie el siguiente programa y complelo como semaforo1.exe:

Ing. Mayenka Fernndez Chambi

Ingeniera de Sistema UNA Puno

Sistemas Operativos y Administracin

2. Copie el siguiente programa y complelo como semaforo2.exe:

Ing. Mayenka Fernndez Chambi

Ingeniera de Sistema UNA Puno

Sistemas Operativos y Administracin

3. En dos terminales diferentes ejecute semaforo1.exe y semaforo2.exe,


observe que ambos procesos se sincronizan:

4. Explique el funcionamiento de este ejercicio con semforos.


Referencias.
[1] Guevara Puente de la Vega K. y Rosas Paredes K., Laboratorio de Sistemas
Operativos, Sesin de Programacin de Semforos en C en Linux, UCSM, 2012.

Ing. Mayenka Fernndez Chambi

Ingeniera de Sistema UNA Puno

Anda mungkin juga menyukai