SlideShare una empresa de Scribd logo
1 de 11
MECANISMOS DE SEMAFORO
DEFINICION DE SEMAFORO Un semáforo es una estructura diseñada para sincronizar dos o más threads o procesos, de modo que su ejecución se realice de forma ordenada y sin conflictos entre ellos. Un semáforo básico es una estructura formada por una posición de memoria y dos instrucciones, una para reservarlo y otra para liberarlo. A esto se le puede añadir una cola de threads para recordar el orden en que se hicieron las peticiones
Se empieza por inicializar la posición de memoria a 1 (o al valor correspondiente si ese recurso concreto admite más de un acceso simultáneo). Esto se hace en el inicio del programa principal.
A continuación, cada vez que un thread o un proceso quiera acceder a dicho recurso (por ejemplo, un fichero), hará primero una petición con la primera de las llamadas disponibles. Cuando el S.O. ejecuta esa llamada, comprueba el valor que hay en la posición de memoria del semáforo, y si es distinta de cero, se limita a restarle 1 y devolver el control al programa; sin embargo, si ya es cero, duerme al proceso que hizo la petición y lo mete en la cola de procesos, en espera de que el semáforo se ponga a un valor distinto de cero.
Por último, cuando el proceso ha terminado el acceso al recurso, usa la segunda llamada para liberar el semáforo. Cuando el S.O. la ejecuta, comprueba si la cola del semáforo está vacia, en cuyo caso se limita a incrementar el valor del semáforo, mientras que si tiene algún proceso, lo despierta, de modo que vuelve a recibir ciclos de CPU y sigue su ejecución. Si había varios procesos en espera, se irán poniendo en marcha uno tras otro a medida que el anterior va liberando el semáforo.
Cuando termina el último, el semáforo se vuelve a poner a 1. Se trata, por tanto, del mismo proceso que seguiríamos con la variable, pero con la ventaja de que es un mecanismo estandar para todos los procesos, y como es una operacionatómica (esto es, que durante su ejecución no se admiten cambios de tarea), no surje el problema de que una conmutación pueda producir errores aleatorios.
Vemos que la primera vez que un proceso usa el semáforo, este tiene valor 1, por lo que pasa a cero y el proceso puede acceder al recurso. Si durante ese tiempo otro proceso quiere acceder también, al usar el semáforo, este tiene valor cero, por lo que el S.O. deja de darle ciclos de CPU. Cuando el primer proceso ha terminado, libera el recurso, con lo que el S.O. puede comprobar que el segundo proceso está esperando, por lo que le vuelve a dar ciclos. En este punto, el proceso sigue como si nunca hubiese sido detenido. Este tipo de semáforos son los de Exclusión mútua, o Mutex.
Otra utilización de los semáforos es cuando uno o más procesos tienen que esperar a que otro halla terminado una tarea. Para ello, el primer proceso borra el semáforo y con una primitiva adecuada se pone a esperar a que el semáforo se active (posted). Mientras, el segundo proceso va trabajando, y cuando termina lo que tiene que hacer, activa el semáforo, con lo que el primer proceso vuelve a ponerse en marcha, sin haber desperdiciado ciclos de CPU. Son semáforos evento. Vemos que puede haber varios procesos esperando por el mismo semáforo, y el thread que lo activa no tiene por qué saber cuantos son. Cobran su importáncia cuando el evento no es producido por otro thread, sino por otras funciones del S.O
Mecanismos de semaforo
Mecanismos de semaforo
Mecanismos de semaforo

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Sincronización entre procesos
Sincronización entre procesosSincronización entre procesos
Sincronización entre procesos
 
PROGRAMACION CONCURRENTE
PROGRAMACION CONCURRENTEPROGRAMACION CONCURRENTE
PROGRAMACION CONCURRENTE
 
10.el diseño en el nivel de componentes
10.el diseño en el nivel de componentes10.el diseño en el nivel de componentes
10.el diseño en el nivel de componentes
 
Conceptos de software
Conceptos de softwareConceptos de software
Conceptos de software
 
Gestion de procesos Android
Gestion de procesos AndroidGestion de procesos Android
Gestion de procesos Android
 
PROGRAMACION CONCURRENTE
PROGRAMACION CONCURRENTEPROGRAMACION CONCURRENTE
PROGRAMACION CONCURRENTE
 
Modelo de 5 estados para sistemas operativos
Modelo de 5 estados para sistemas operativosModelo de 5 estados para sistemas operativos
Modelo de 5 estados para sistemas operativos
 
SERVICIOS DEL SISTEMA OPERATIVO
SERVICIOS DEL SISTEMA OPERATIVOSERVICIOS DEL SISTEMA OPERATIVO
SERVICIOS DEL SISTEMA OPERATIVO
 
Programación concurrente
Programación concurrenteProgramación concurrente
Programación concurrente
 
Comunicación y Sincronizacion de Procesos
Comunicación y Sincronizacion de ProcesosComunicación y Sincronizacion de Procesos
Comunicación y Sincronizacion de Procesos
 
SICRONIZACION DE PROCESOS
SICRONIZACION DE PROCESOSSICRONIZACION DE PROCESOS
SICRONIZACION DE PROCESOS
 
Gestion de memoria
Gestion de memoriaGestion de memoria
Gestion de memoria
 
Sistemas operativos procesos
Sistemas operativos procesosSistemas operativos procesos
Sistemas operativos procesos
 
Ciclo de instrucción
Ciclo de instrucciónCiclo de instrucción
Ciclo de instrucción
 
Procedimientos almacenados
Procedimientos almacenadosProcedimientos almacenados
Procedimientos almacenados
 
Estándares para el diseño de interfaz
Estándares para el diseño de interfazEstándares para el diseño de interfaz
Estándares para el diseño de interfaz
 
herramientas case
herramientas caseherramientas case
herramientas case
 
Transacciones
TransaccionesTransacciones
Transacciones
 
Diagramas De Estado
Diagramas De EstadoDiagramas De Estado
Diagramas De Estado
 
Multiprogramacion
MultiprogramacionMultiprogramacion
Multiprogramacion
 

Similar a Mecanismos de semaforo

Similar a Mecanismos de semaforo (20)

Presentación1
Presentación1Presentación1
Presentación1
 
Mecanismo de-semáforos
Mecanismo de-semáforosMecanismo de-semáforos
Mecanismo de-semáforos
 
Colaborativo_Nelis Rivero
Colaborativo_Nelis RiveroColaborativo_Nelis Rivero
Colaborativo_Nelis Rivero
 
Programación multihebra en java
Programación multihebra en javaProgramación multihebra en java
Programación multihebra en java
 
Taller Interbloqueo
Taller InterbloqueoTaller Interbloqueo
Taller Interbloqueo
 
Sistemas operativos unidad 2
Sistemas operativos unidad 2Sistemas operativos unidad 2
Sistemas operativos unidad 2
 
Thread 01
Thread 01Thread 01
Thread 01
 
Unidad 2 sist. oper. 1
Unidad 2 sist. oper. 1Unidad 2 sist. oper. 1
Unidad 2 sist. oper. 1
 
Programacion concurrente
Programacion concurrenteProgramacion concurrente
Programacion concurrente
 
Concepto de proceso
Concepto de procesoConcepto de proceso
Concepto de proceso
 
Examen 2 s,o,
Examen 2 s,o,Examen 2 s,o,
Examen 2 s,o,
 
Chap 15apin
Chap 15apinChap 15apin
Chap 15apin
 
Lab5 guia
Lab5 guiaLab5 guia
Lab5 guia
 
GESTION DE PROCESO
GESTION DE PROCESOGESTION DE PROCESO
GESTION DE PROCESO
 
GESTION DE PROCESO
GESTION DE PROCESOGESTION DE PROCESO
GESTION DE PROCESO
 
GESTION DE PROCESOS EN SISTEMAS OPERATIVOS
GESTION DE PROCESOS EN SISTEMAS OPERATIVOSGESTION DE PROCESOS EN SISTEMAS OPERATIVOS
GESTION DE PROCESOS EN SISTEMAS OPERATIVOS
 
GESTION DE PROCESO
GESTION DE PROCESOGESTION DE PROCESO
GESTION DE PROCESO
 
SISTEMAS OPERATIVOS
SISTEMAS OPERATIVOSSISTEMAS OPERATIVOS
SISTEMAS OPERATIVOS
 
GESTION DE PROCESO
GESTION DE PROCESOGESTION DE PROCESO
GESTION DE PROCESO
 
Hilos En Java
Hilos En JavaHilos En Java
Hilos En Java
 

Mecanismos de semaforo

  • 2. DEFINICION DE SEMAFORO Un semáforo es una estructura diseñada para sincronizar dos o más threads o procesos, de modo que su ejecución se realice de forma ordenada y sin conflictos entre ellos. Un semáforo básico es una estructura formada por una posición de memoria y dos instrucciones, una para reservarlo y otra para liberarlo. A esto se le puede añadir una cola de threads para recordar el orden en que se hicieron las peticiones
  • 3. Se empieza por inicializar la posición de memoria a 1 (o al valor correspondiente si ese recurso concreto admite más de un acceso simultáneo). Esto se hace en el inicio del programa principal.
  • 4. A continuación, cada vez que un thread o un proceso quiera acceder a dicho recurso (por ejemplo, un fichero), hará primero una petición con la primera de las llamadas disponibles. Cuando el S.O. ejecuta esa llamada, comprueba el valor que hay en la posición de memoria del semáforo, y si es distinta de cero, se limita a restarle 1 y devolver el control al programa; sin embargo, si ya es cero, duerme al proceso que hizo la petición y lo mete en la cola de procesos, en espera de que el semáforo se ponga a un valor distinto de cero.
  • 5. Por último, cuando el proceso ha terminado el acceso al recurso, usa la segunda llamada para liberar el semáforo. Cuando el S.O. la ejecuta, comprueba si la cola del semáforo está vacia, en cuyo caso se limita a incrementar el valor del semáforo, mientras que si tiene algún proceso, lo despierta, de modo que vuelve a recibir ciclos de CPU y sigue su ejecución. Si había varios procesos en espera, se irán poniendo en marcha uno tras otro a medida que el anterior va liberando el semáforo.
  • 6. Cuando termina el último, el semáforo se vuelve a poner a 1. Se trata, por tanto, del mismo proceso que seguiríamos con la variable, pero con la ventaja de que es un mecanismo estandar para todos los procesos, y como es una operacionatómica (esto es, que durante su ejecución no se admiten cambios de tarea), no surje el problema de que una conmutación pueda producir errores aleatorios.
  • 7. Vemos que la primera vez que un proceso usa el semáforo, este tiene valor 1, por lo que pasa a cero y el proceso puede acceder al recurso. Si durante ese tiempo otro proceso quiere acceder también, al usar el semáforo, este tiene valor cero, por lo que el S.O. deja de darle ciclos de CPU. Cuando el primer proceso ha terminado, libera el recurso, con lo que el S.O. puede comprobar que el segundo proceso está esperando, por lo que le vuelve a dar ciclos. En este punto, el proceso sigue como si nunca hubiese sido detenido. Este tipo de semáforos son los de Exclusión mútua, o Mutex.
  • 8. Otra utilización de los semáforos es cuando uno o más procesos tienen que esperar a que otro halla terminado una tarea. Para ello, el primer proceso borra el semáforo y con una primitiva adecuada se pone a esperar a que el semáforo se active (posted). Mientras, el segundo proceso va trabajando, y cuando termina lo que tiene que hacer, activa el semáforo, con lo que el primer proceso vuelve a ponerse en marcha, sin haber desperdiciado ciclos de CPU. Son semáforos evento. Vemos que puede haber varios procesos esperando por el mismo semáforo, y el thread que lo activa no tiene por qué saber cuantos son. Cobran su importáncia cuando el evento no es producido por otro thread, sino por otras funciones del S.O