Está en la página 1de 8

Tema-3-Sincronizacion-con-Semafo...

xkuwen_

Programación Concurrente y Tiempo Real

2º Grado en Ingeniería Informática

Escuela Superior de Ingeniería Informática


Universidad de Castilla-La Mancha

Reservados todos los derechos.


No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Semáforos

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.

Reservados todos los derechos.


wait(s);
Si el valor del semáforo es mayor que 0 (s>0), se decrementa
una unidad y el proceso continúa su ejecución Operaciones en distintos
s := s – 1 lenguajes de programación
Si el valor del semáforo es cero (s=0) el proceso suspende su wait signal PascalFC
ejecución, pasa al estado de bloqueado y se añade al conjunto acquire release Java
de procesos bloqueados en el semáforo.
Un proceso puede bloquearse a si mismo. Un proceso no puede bloquear a otro proceso. Las
modificaciones realizadas por un proceso en variables compartidas podrían cumplir la condición
para que otro proceso se bloquee, pero será él quien ejecute la instrucción para bloquearse.

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.

Para proteger la Sección Critica se emplean protocolos de protección. El


preprotocolo y postprotocolo son instrucciones que deben ejecutar los
procesos, para garantizar que el acceso a las secciones críticas se
realiza cumpliendo los requisitos que se le exigen a la solución. Se asume
que los procesos finalizan su ejecución fuera de la sección crítica.

Se emplea un semáforo binario inicializado a 1


Si el valor del semáforo es 1, la sección crítica está libre.

Reservados todos los derechos.


Si el valor del semáforo es 0, la sección crítica está
ocupada por otro proceso.

Antes de entrar en la sección crítica, el proceso cambia el


valor del semáforo a 0 para que otro proceso no pueda
entrar mientras esté dentro.
Una vez sale de la sección crítica, el proceso cambia el
valor del semáforo a 1 para que otro proceso que lo desee
entre a la sección crítica.

Se tiene cuando el número de procesos que pueden


ejecutar la sección crítica a la vez es mayor que 1.
Se implementa con semáforos generales asignando
inicialmente un valor N al semáforo que indicará el
número de huecos libres que quedan en la sección crítica

Tu crush de apuntes tiene mejores apuntes que este


a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4928373
Sincronización Condicional
Cita Simple
Se produce cuando un proceso debe esperar a que se cumpla
una condición para seguir su ejecución, la cual solo puede ser
activada por otro proceso.

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

Reservados todos los derechos.


Sincronización condicional en la que los procesos tienen que esperar a que el resto de procesos
lleguen al mismo punto para poder continuar su ejecución.
Programa con N procesos en donde cada uno escribe ‘A’ y luego ‘B’. Los procesos tienen
que esperar a que todos hayan escrito ‘A’ para empezar a escribir ‘B’.

1ª Solución
En la rama del if el proceso deja
el semáforo preparado para cuando
ejecute un wait

Tu crush de apuntes tiene mejores apuntes que este


a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4928373
2ª Solución. Torno
El torno consiste en un wait y un
signal sucesivos ocurre. Permite

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

Reservados todos los derechos.


Con tornos
Inicialmente el primer torno está bloqueado y
el segundo abierto. Cuando todos llegan al
primer torno se cierra el segundo y se abre el
primero.

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

Reservados todos los derechos.


proceso encargado de usarla.

Problema de los Productores-Consumidores


• Los Productores son procesos que generan datos y los Consumidores son procesos
que consumen los datos en el orden en que se generan.
• Cada productor genera un único dato cada vez y un dato solo puede ser consumido
una vez. Todos los productos se consumen.
• Un Productor se bloqueará antes de insertar un dato si el buffer está lleno. Un
Consumidor se bloqueará antes de leer un dato si el buffer está vacío.
o Las variables de control del buffer deben estar bajo exclusión mutua.
• Se utiliza un buffer para almacenar los datos producidos antes de ser consumidos.

Tu crush de apuntes tiene mejores apuntes que este


a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4928373
Buffer Circular

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.

Tu crush de apuntes tiene mejores apuntes que este


a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4928373

También podría gustarte