Semaforos

Páginas: 7 (1721 palabras) Publicado: 16 de enero de 2013
Semáforos
Semáforos
Un semáforo es un número entero que el kernel mantiene, cuyo valor se
limita a ser mayor que o igual a 0.

• Se utilizan cuando dos o más procesos o hilos quieren acceder a una
misma zona de memoria.
• Es una forma de sincronización para acceder a memoria compartida.
• Un semáforo da acceso al recurso compartido a un solo proceso o hilo
por vez.
• Se pueden utilizarjunto con cola de mensajes y memoria compartida.

1

Semáforos
Semáforos
Operaciones:





Fijar el semáforo en un valor absoluto
Sumar uno al valor actual del semáforo
Restar uno al valor actual del semáforo
Esperar que el valor del semáforo sea igual a 0.

Las operaciones restar y esperar pueden hacer que el proceso que las
llama se bloquee.
Al restar el valor delsemáforo, el kernel bloquea cualquier intento de
disminuir el valor por debajo de 0.
La espera de un semáforo para igualar 0 bloquea el proceso que llama si el
valor del semáforo no está en 0.
En ambos casos, el proceso que llama queda bloqueado hasta que algún
otro proceso altere el valor del semáforo a un valor que permita seguir el
funcionamiento, en cuyo punto el kernel despierta el procesobloqueado.
2

Semáforos
Ejemplo de semáforo
Se crea un semáforo y
se inicializa en 0.
Cuando se intenta restar
1 al valor es proceso se
bloquea, hasta que otro
proceso le sume uno y
se pueda realizar la
resta

3

Semáforos

Semáforos
Un semáforo POSIX es un número entero cuyo valor no puede ser menor que 0.
Clasificación:
Semáforos con nombre: Este tipo de semáforos tiene unnombre. Al llamar a
sem_open() con el mismo nombre, los procesos no relacionados puede
acceder al mismo semáforo.
Semáforos sin nombre: Este tipo de semáforo no tiene un nombre, sino que
reside en un lugar acordado en la memoria. Semáforos sin nombre se puede
compartir entre procesos o entre un grupo de hilos. Cuando se comparten entre
los procesos, el semáforo debe residir en una región de lamemoria compartida.
Cuando se comparten entre los hilos, el semáforo puede residir en un área de
memoria compartida por los hilos.

4

Semáforos con nombre

Semáforos con nombre

5

Semáforos con nombre

Semáforos con nombre.
Para trabajar con un semáforo con nombre, contamos con las siguientes
funciones:
sem_open(): abre o crea un semáforo, inicializa el semáforo si fue creado,y
devuelve un identificador para su uso en llamadas posteriores.
sem_post(sem): incrementa el valor de un semáforo.
sem_wait(sem): decrementa el valor de un semáforo.
sem_getvalue(): recupera el valor actual de un semáforo.
sem_close():elimina la asociación de una llamada de un proceso con un
semáforo que abrió previamente.
sem_unlink(): elimina un nombre de semáforo y de marca el semáforopara su eliminación cuando todos los procesos lo han cerrado.

6

Semáforos con nombre

Apertura de un semáforo con nombre
El sem_open() crea y abre un semáforo nuevo con nombre o abre un semáforo
existente.
#include
//biblioteca a utilizar
sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int
value );
sem_t *sem_open(const char *name, int oflag);
Devuelve elpuntero al semáforo si tuvo éxito o SEM_FAILED en caso de error
El argumento name: identifica el semáforo.
El argumento oflag es una máscara de bits que determina si estamos abriendo
un semáforo existente o la creando y la abriendo un semáforo nuevo.
El argumento mode especifica los permisos con los que se crea el semáforo El
argumento value es un entero sin signo que especifica el valor inicialpara ser
asignado a al nuevo semáforo.
7

Semáforos con nombre

Oflag:
* O_CREAT: sem_open crea un semáforo si no existe. Si existe, accede
al semáforo e ignora los parámetros restantes
* O_CREAT | O_EXECL: sem_open crea un semáforo si no existe. Si
existe se devuelve -1
* Si oflag es 0 se indica que se quiere acceder a un semáforo creado (si
no existe, sem_open devuelve -1)
•Si...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Los Semaforos
  • semaforo
  • Semaforo
  • semaforo
  • SEMAFORO
  • Semáforo
  • Semaforo
  • Semaforo

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS