2.2.3. Consideraciones sobre la implementación de los semáforos
Texto íntegro de la conversión. Las figuras y la disposición de las notas se pueden consultar en el PDF.
2.2.3. Consideraciones sobre la implementación de los semáforos
Como observación, presentamos algunas consideraciones sobre la implementación de los semáforos:
- La operación sem_wait debe realizar una espera hasta que el contador asociado al semáforo alcance un determinado valor. Esta espera se puede implementar básicamente de dos maneras: espera activa y bloqueo. La espera activa es la opción más sencilla pero provoca un cierto desperdicio del procesador. En función de la cantidad de procesos en ejecución, este desperdicio puede ser inaceptable.
Página 22
-
Cuando varios procesos están esperando haciendo un sem_wait sobre un mismo semáforo y algún proceso invoca sem_signal, la implementación de semáforos debe elegir uno de los procesos en espera. Se pueden considerar varios criterios como el aleatorio, FIFO (first-in, first-out), prioridades, etc. La implementación debería elegir un criterio que no provoque inanición (starvation, como en la figura 16), es decir, evitar que un proceso espere indefinidamente mientras otros procesos completan el sem_wait sobre el mismo semáforo. El criterio FIFO evita la inanición y es el que suelen utilizar las soluciones basadas en bloqueos.
-
Algunos sistemas operativos ofrecen los semáforos dentro de su repertorio de llamadas al sistema. Estas implementaciones suelen estar basadas en bloqueos. Los procesos en espera pasan al estado blocked y dejan de competir por consumir tiempo de procesador hasta que el sistema operativo detecta que se ha hecho un sem_signal sobre el semáforo y los pasa al estado ready.
-
En el apartado 1 del anexo describimos el soporte que debe ofrecer el hardware para poder implementar la exclusión mutua.
Ver fragmento extraído sin normalizar
2.2.3. Consideraciones sobre la implementación de los semáforos
Como observación, presentamos algunas consideraciones sobre la implemen-
tación de los semáforos:
• La operación sem_wait debe realizar una espera hasta que el contador
asociado al semáforo alcance un determinado valor. Esta espera se puede
implementar básicamente de dos maneras: espera activa y bloqueo. La es-
pera activa es la opción más sencilla pero provoca un cierto desperdicio
del procesador. En función de la cantidad de procesos en ejecución, este
desperdicio puede ser inaceptable.
## Página 22
<!-- source-page: 22 -->
GNUFDL • PID_00214803 22 Comunicación y sincronización
• Cuando varios procesos están esperando haciendo un sem_wait sobre un
mismo semáforo y algún proceso invoca sem_signal, la implementación
de semáforos debe elegir uno de los procesos en espera. Se pueden con-
siderar varios criterios como el aleatorio, FIFO (first-in, first-out), priorida-
des, etc. La implementación debería elegir un criterio que no provoque
inanición (starvation, como en la figura 16), es decir, evitar que un proceso
espere indefinidamente mientras otros procesos completan el sem_wait
sobre el mismo semáforo. El criterio FIFO evita la inanición y es el que
suelen utilizar las soluciones basadas en bloqueos.
• Algunos sistemas operativos ofrecen los semáforos dentro de su repertorio
de llamadas al sistema. Estas implementaciones suelen estar basadas en
bloqueos. Los procesos en espera pasan al estado blocked y dejan de com-
petir por consumir tiempo de procesador hasta que el sistema operativo
detecta que se ha hecho un sem_signal sobre el semáforo y los pasa al
estado ready.
• En el apartado 1 del anexo describimos el soporte que debe ofrecer el hard-
ware para poder implementar la exclusión mutua.