2.2.3. Consideraciones sobre la implementación de los semáforos
Material de estudio basado en la edición de 2014. Borrador pendiente de revisión editorial independiente.
Consideraciones sobre la Implementación de los Semáforos
Resumen
Espera activa vs. bloqueo
La operación sem_wait debe esperar hasta que el contador alcance un valor determinado. Dos implementaciones posibles:
| Método | Ventaja | Desventaja |
|---|---|---|
| Espera activa (busy waiting) | Sencilla de implementar | Desperdicia ciclos de procesador |
| Bloqueo | Better utilización del procesador | Mayor complejidad en el SO |
En general, se prefiere el bloqueo: los procesos en espera pasan al estado blocked y dejan de competir por el procesador hasta que el SO detecta un sem_signal y los pasa a ready.
Selección del proceso en espera
Cuando varios procesos ejecutan sem_wait sobre el mismo semáforo y se produce un sem_signal, la implementación debe elegir uno. Criterios posibles:
- Aleatorio: simple pero puede causar inanición.
- FIFO (first-in, first-out): garantiza que nadie espere indefinidamente; es el criterio habitual en implementaciones basadas en bloqueos.
- Prioridades: según la importancia del proceso.
El criterio debe evitar la inanición (starvation), es decir, que un proceso espere indefinidamente mientras otros completan su sem_wait.
Implementación como llamada al sistema
Algunos SO ofrecen semáforos dentro de su repertorio de llamadas al sistema. Estas implementaciones suelen estar basadas en bloqueos, gestionados internamente por el SO.
Soporte de hardware
Para implementar semáforos es necesario asegurar la indivisibilidad de las operaciones sem_wait y sem_signal. El hardware proporciona mecanismos para esto (descritos en el anexo del módulo).
Ideas clave
- La espera activa es sencilla pero ineficiente; el bloqueo es preferible.
- FIFO evita la inanición en la selección de procesos en espera.
- Los semáforos como llamada al sistema se implementan con bloqueo gestionado por el SO.
- La indivisibilidad de las operaciones requiere soporte de hardware.