Documentos de Académico
Documentos de Profesional
Documentos de Cultura
xkuwen_
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Los semáforos son herramientas de bajo nivel que permiten la sincronización condicional entre
procesos y la exclusión mutua en el acceso a las secciones críticas.
Se tratan de una Clase (Programación Orientada a Objetos) o un Tipo Abstracto de Datos
(Programación estructurada) que tiene:
• un contador de permisos y un conjunto de procesos bloqueados.
• métodos para bloquear y desbloquear procesos dependiendo del contador
de permisos del semáforo.
Las sentencias wait(s) y signal(s) garantizan la exclusión mutua por tratarse de instrucciones
atómicas ya que su ejecución se realizará siempre en exclusión mutua.
signal(s);
Si no existen procesos bloqueados en el semáforo, incrementa este y continúa su ejecución
s := s + 1
Si existen procesos bloqueados en el semáforo, desbloquea algún proceso y continúa su ejecución.
Un proceso no puede desbloquearse a si mismo, solo se desbloqueará por la acción de otro proceso.
•
o Semáforos binarios (0 y 1)
o Semáforos Generales o No negativos
•
o Los procesos se desbloquean en orden de llegada
o Los procesos se desbloquean aleatoriamente
o Con prioridades.
Pascal-FC permite el semáforo general (no negativo). Solo se pueden definir en el programa
principal, deben inicializarse en la parte no concurrente del programa (fuera del cobegin
coend) y se pueden pasar como parámetros (necesitan ser parámetros por referencia, var)
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4928373
var s : semaphore;
wait(s); signal (s); Procedimientos que ejecutan los procesos (instrucciones atómicas)
initial(s,valorInicial); Asigna un valor inicial (no negativo) al semáforo.
Exclusión Mutua
• : Secuencia de instrucciones que debe ejecutar cada proceso sin que haya
interferencia con la ejecución de instrucciones de las secciones críticas de otros procesos.
• : Sentencias que pueden ser ejecutadas concurrentemente por todos los
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
procesos.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Cita Doble (rendezvous)
El Proceso A debe esperar al Proceso B y viceversa
1ª Solución
En la rama del if el proceso deja
el semáforo preparado para cuando
ejecute un wait
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
el paso de solo un proceso y
permite ser bloqueado para
parar todos los procesos.
Si inicialmente vale 0 está
bloqueado.
Para los procesos que cooperan y realizan una serie de pasos en un bucle y se sincronizan en
una barrera cada vuelta se necesita una barrera reutilizable para la entrada y la salida.
Algoritmo breve
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4928373
Metodología de desarrollo para un programa concurrente
1. Definir la arquitectura de los procesos
• Número de Procesos
• Tipo de Procesos
2. Implementar lo que tiene que hacer cada proceso de forma secuencial
3. Determinar los puntos de sincronización en el código
• ¿Sincronización Condicional o Exclusión Mutua?
• Número de Semáforos Necesarios
▪ ¿Se pueden bloquear todos los procesos juntos?
▪ ¿Se puede desbloquear cualquiera de ellos?
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
4. Programación de wait y signal definiendo las variables necesarias para controlar la
sincronización
5. Gestión de variables
• Inicialización de booleanas a true/false, contadores a 0
• Bajo Exclusión Mutua si son compartidas.
Es habitual que los procesos se comuniquen con un buffer con varias posiciones para almacenar
temporalmente información. El buffer permite insertar información, aunque no esté preparado el
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Reservados todos los derechos.
Conclusiones
Ventajas
• Permiten resolver de forma sencilla y eficiente la sincronización de procesos concurrentes
• Se pueden usar para implementar el problema de la Exclusión Mutua.
Desventajas
• No estructurados, bajo nivel de abstracción.
• Facilidad de uso erróneo (interbloqueos)
• Uso depende del programador
• No están relacionados directamente con el recurso que protegen
• Dificultad para descubrir el objetivo del semáforo por la ausencia de significado semántico.
• No estructuran el código del programa (libertad total para acceder a las variables
compartidas), lo que hace que los códigos sean difíciles de mantener y de rastrear errores.