Concurrencia en linux
ECP 1 de 7
I.
TEMA: CONCURRENCIA UTIIZANDO SEMAFOROS POSIX
II.
OBJETIVO DE LA PRACTICA
Al finalizar la presente práctica, el estudiante: 1. Conoce la semántica de los semáforos en Linux 2. Desarrolla aplicaciones concurrentes utilizando semáforos.
III.
TRABAJO PREPARATORIO. Para un trabajo con mejoresresultados, es imprescindible que el estudiante: 1. Tenga conocimientos de programación en C en el sistema operativo Linux 2. Conozca la teoría de gestión de procesos en los sistemas operativos. 3. Conozca el marco teórico de funcionamiento de los semáforos.
IV.
MATERIALES. Para el desarrollo de la presente práctica es necesario contar con: 1. Computador con arquitectura x86. 2. Sistemaoperativo Linux instalado en el computador o en su defecto un liveCD o liveUSB que incluya el compilador GCC y un editor de texto pre instalado.
V.
MARCO TEORICO
SEMAFOROS POSIX PARA EL CONTROL DE CONCURRENCIA
CREACIÓN DE SEMÁFOROS Un semáforo se crea con la función sem_init, que se declara de la siguiente manera:
#include int sem_init ( sem_t *sem, int pshared, unsigned int value );UNIVERSIDAD ANDINA DEL CUSCO SISTEMAS OPERATIVOS GUIA DE LABORATORIO
ECP 2 de 7
Esta función inicializa un objeto semáforo al cual se apunta mediante sem, establece sus opciones de compartir, y le da a este un valor inicial entero. El parámetro pshared controla el tipo de semáforo. Si el valor de pshared es 0, entonces el semáforo es local al proceso actual. De otro modo, el semáforo puede sercompartido entre procesos. En nuestro caso, estamos interesados solo en los semáforos que no son compartidos entre procesos. Pasar un valor diferente de cero para pshared hará que la llamada falle. La variable value almacena el valor del semáforo.
MANEJO DE SEMÁFOROS El siguiente par de funciones controla el valor del semáforo y se declaran de la siguiente manera
#include int sem_wait (sem_t * sem );
int sem_post ( sem_t * sem );
Ambos toman un puntero al objeto semáforo inicializado por una llamada a sem_init. La función sem_post incrementa atómicamente el valor del semáforo en 1. “Atómicamente” significa que, si dos hilos tratan simultáneamente de incrementar el valor del semáforo en 1, estos no interfieren, como ocurriría si dos programas leen, incrementan y escriben unvalor a un archivo al mismo tiempo. El semáforo será siempre correctamente incrementado en valor a 2, puesto que dos hilos intentaron cambiarlo. La función sem_wait decrementa atómicamente el valor del semáforo en 1, pero siempre espera hasta que el semáforo tenga un valor diferente de 0 primero. Así, si se llama sem_wait sobre un semáforo con un valor de 2, el hilo continuará ejecutándose peroel semáforo se decrementará en 1. Si sem_wait se invoca sobre un semáforo con un valor 0, entonces la función esperará hasta que algún otro hilo incremente el valor de modo que este no sea más 0. Si dos hilos están esperando en sem_wait porque el mismo semáforo tome un valor diferente de 0 y este es incrementado una vez por un tercer proceso, entonces solo uno de los dos procesos en espera podráconseguir decrementar el semáforo y continuar; el otro continuará esperando. La habilidad de realizar un ‘test and set’ atómico en una sola función es lo que hace de los semáforos tan valiosos.
UNIVERSIDAD ANDINA DEL CUSCO SISTEMAS OPERATIVOS GUIA DE LABORATORIO
ECP 3 de 7
DESTRUIR SEMÁFOROS La última función sobre semáforos es sem_destroy. Esta función recoge el semáforo cuando no esrequerido más. Esta función se declara de la siguiente manera:
#include int sem_destroy ( sem_t * sem );
Esta función toma un puntero a un objeto semáforo y recoge cualquier recurso que este pueda tener. Si se intenta destruir un semáforo por el cual está esperando un hilo, se retornará un error. Como muchas funciones de Linux, estas funciones retornan 0 si tienen éxito.
VI.
TRABAJO DE...
Regístrate para leer el documento completo.