Semáforos
Giovanny Leal Amaya
Eduar Melo Roa
¿Qué es?
Un semáforo es una variable especial que
constituye una serie de opciones elementales para
poder restringir o garantizar el acceso a los
recursos en un sistema operativo con un entorno
de multiprocesamiento (en el que se ejecutarán
varios procesos concurrentemente). Fueron
inventados por Edsger Dijkstra en 1965 y se
usaron por primera vez en el sistema
operativo THEOS.
• 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.
Tipo de semáforos
 Semáforo Contador:
Nos permiten llevar la cuenta del número de
unidades de recurso compartido disponible en
memoria, que va desde 0 hasta N.
• Semáforo de Espera:
Se emplea para forzar que un proceso pase a
estado bloqueado hasta que se cumpla la
condición que le permite ejecutarse. Por lo
general, el contador vale 0 inicialmente, no
obstante, podría tener un valor distinto de cero.
• Semáforo de exclusión mutua:
Inicialmente su contador vale 1 y permite que
haya un único proceso simultáneamente dentro de
la sección crítica.
Ventajas del uso de semáforos
La principal ventaja de los semáforos frente a los
cerrojos es que permiten sincronizar dos o más
procesos de manera que no se desperdician
recursos de CPU realizando comprobaciones
continuadas de la condición que permite
progresar al proceso.
• Desventajas del uso de semáforos
Mal uso por parte de los programadores.
No hay nada que obligue a los programadores a
usarlos.
Los compiladores no ofrecen ningún mecanismo
de comprobación sobre el correcto uso de los
semáforos.
 Son independientes del recurso compartido al
que se asocian.
• El por qué no se pueden usar directamente otras estructuras mas
clásicas, como por ejemplo usar una variable común para decidir si
se
puede o no acceder a un recurso, se debe a que estamos en un
sistema
multitarea: hacer esto implicaría realizar una espera activa
(un bucle, comprobando constantemente si la variable está o no a 0,
y así saber si podemos seguir ejecutando o no). Por otro lado, puede
ocurrir algo mucho peor: supongamos que un proceso comprueba la
variable, y ve que el recurso está libre, por lo que procedería a
cambiar dicha variable de valor y seguir. Pues bien, si justo después
de la comprobacion pero antes de que cambie el valor se conmuta de
tarea (puede pasar, pues el sistema operativo puede hacerlo en
cualquier momento), y el nuevo proceso comprueba la variable,
como
todavía no se ha actualizado, creerá que el recurso está libre,
e intentará tomarlo, haciendo que ambos programas fallen. Lo peor
del caso es que se tratará de un error aleatorio: unas veces fallará
(cuando se produzca cambio de tarea en ese punto) y otras no.
Ejemplo
• Para evitarlo, se idearon los semáforos. 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.

Exposicion semaforos

  • 1.
  • 2.
    ¿Qué es? Un semáforoes una variable especial que constituye una serie de opciones elementales para poder restringir o garantizar el acceso a los recursos en un sistema operativo con un entorno de multiprocesamiento (en el que se ejecutarán varios procesos concurrentemente). Fueron inventados por Edsger Dijkstra en 1965 y se usaron por primera vez en el sistema operativo THEOS.
  • 3.
    • Un semáforoes 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.
  • 4.
    Tipo de semáforos Semáforo Contador: Nos permiten llevar la cuenta del número de unidades de recurso compartido disponible en memoria, que va desde 0 hasta N. • Semáforo de Espera: Se emplea para forzar que un proceso pase a estado bloqueado hasta que se cumpla la condición que le permite ejecutarse. Por lo general, el contador vale 0 inicialmente, no obstante, podría tener un valor distinto de cero.
  • 5.
    • Semáforo deexclusión mutua: Inicialmente su contador vale 1 y permite que haya un único proceso simultáneamente dentro de la sección crítica. Ventajas del uso de semáforos La principal ventaja de los semáforos frente a los cerrojos es que permiten sincronizar dos o más procesos de manera que no se desperdician recursos de CPU realizando comprobaciones continuadas de la condición que permite progresar al proceso.
  • 6.
    • Desventajas deluso de semáforos Mal uso por parte de los programadores. No hay nada que obligue a los programadores a usarlos. Los compiladores no ofrecen ningún mecanismo de comprobación sobre el correcto uso de los semáforos.  Son independientes del recurso compartido al que se asocian.
  • 7.
    • El porqué no se pueden usar directamente otras estructuras mas clásicas, como por ejemplo usar una variable común para decidir si se puede o no acceder a un recurso, se debe a que estamos en un sistema multitarea: hacer esto implicaría realizar una espera activa (un bucle, comprobando constantemente si la variable está o no a 0, y así saber si podemos seguir ejecutando o no). Por otro lado, puede ocurrir algo mucho peor: supongamos que un proceso comprueba la variable, y ve que el recurso está libre, por lo que procedería a cambiar dicha variable de valor y seguir. Pues bien, si justo después de la comprobacion pero antes de que cambie el valor se conmuta de tarea (puede pasar, pues el sistema operativo puede hacerlo en cualquier momento), y el nuevo proceso comprueba la variable, como todavía no se ha actualizado, creerá que el recurso está libre, e intentará tomarlo, haciendo que ambos programas fallen. Lo peor del caso es que se tratará de un error aleatorio: unas veces fallará (cuando se produzca cambio de tarea en ese punto) y otras no. Ejemplo
  • 8.
    • Para evitarlo,se idearon los semáforos. 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.