Concurrencia y Sincronización en SO
Concurrencia y Sincronización en SO
Concurrencia CONCURRENCIA
Exclusión mutua y sincronización
Concurrencia Concurrencia
• La concurrencia es la simultaneidad de hechos. • Un programa concurrente está formado por una colección
• Un programa concurrente es aquel en el que ciertas de procesos secuenciales autónomos que se ejecutan
unidades de ejecución internamente secuenciales (aparentemente) en paralelo.
(procesos o threads), se ejecutan paralela o • Tres formas de ejecutar procesos concurrentes:
simultáneamente.
1. Los procesos multiplexan sus ejecuciones sobre un
único procesador (multiprogramación).
• Incluye los siguientes aspectos:
– comunicación entre procesos. 2. Los procesos multiplexan sus ejecuciones sobre un
– compartición y competencia por los recursos. sistema multiprocesador de memoria compartida
– sincronización de la ejecución de varios procesos. (multiproceso).
– asignación del tiempo de procesador a los procesos. 3. Los procesos multiplexan sus ejecuciones en varios
procesadores que no comparten memoria
• Surgen en entornos con un solo procesador, con (procesamiento distribuido).
multiprocesadores y proceso distribuido. • El término concurrencia indica paralelismo potencial.
3 4
Concurrencia Concurrencia
• En un sistema multiprogramado (1 µP), los procesos se
intercalan, para dar la apariencia de simultaneidad.
P1
P2
P3
P3
5 6
• Dificultades:
– Compartir recursos globales (variable global)
P1 P2
– Manejar la asignación de recursos
– Detectar un error es difícil, dado que es difícil
reproducir la situación..
7 8
Conclusiones:
Se asume que esta función es usada por muchos procesos en el SO y Proteger las variables compartidas.
dado que existe una sola pantalla y un solo teclado, todos los programas ¿cómo?
interactúan con este programa. Por lo que lo que es recomendable Evitando que otro proceso ejecute a echo hasta que el proceso actual termine.
tenerlo siempre en memoria Evitando que el proceso actual sea interrumpido hasta que termine
9 10
Tipos de proceso
11 12
– el uso de las estructuras de datos del SO. 2 cooperación por compartición •Interbloqueo
– Los procesos conocen •Inanición
– el computador se dispone de varios procesadores. indirectamente a los demás •Exclusión mutua
•Coherencia de datos
13 14
• Problemas.
– Interbloqueo (estancamiento) P1 P2 P3 P1 P2 P3 P1 P2 P3 P1 P2 P3 P1 P2 P3
– Inanición Estado Estado Estado Estado Estado
– Exclusión mutua inicial seguro seguro inseguro inseguro
15 16
17 18
3
La cooperación para la comunicación
• Los procesos se conocen explícitamente.
19 20
1 0 0
P1 P2 P1 P2 P1 P2
1 1 0
R2 R2 R2
21 22
3. Inanición
• Los procesos siempre están bloqueados y nunca acceden
a los recursos que necesitan
23 24
25 26
Intento inicial
PROCESO_UNO PROCESO_DOS PROCESO_PRINCIPAL
procedure proceso_uno procedure proceso_dos begin
begin begin count = 0;
while TRUE do while TRUE do parbegin
begin begin proceso_uno;
obtener_entrada obtener_entrada proceso_dos;
procesar_entrada procesar_entrada
end end
end; end;
27 28
29 30
31 32
• Pero se puede dar el aplazamiento indefinido, dado que no se puede hacer ningún procedure proceso_uno procedure proceso_uno begin
begin begin p1deseaentrar = FALSE;
supuesto respecto a la velocidad de los procesos. while TRUE do while TRUE do p2deseaentrar = FALSE;
• Así, si los procesos se ejecutan en tándem (alternativamente), begin begin proceso_activo = UNO;
p1deseaentrar = TRUE; p2deseaentrar = TRUE; parbegin
• se puede dar la siguiente secuencia de instrucciones, en la cual ninguno de los procesos while p2deseaentrar do while p1deseaentrar do
proceso_uno;
begin begin
entra a su sección critica: if proceso_activo = DOS then if proceso_activo = UNO then
proceso_dos;
begin begin parend;
p1deseaentrar = FALSE; p2deseaentrar = FALSE; end.
Ciclo PROCESO_UNO PROCESO_DOS
reloj while proceso_activo=DOS do; while proceso_activo=UNO do;
p1deseaentrar = TRUE; p2deseaentrar = TRUE;
1 p1deseaentrar = TRUE end end
2 p2deseaentrar = TRUE end; end;
3 while p2deseaentrar do seccion_critica_uno; seccion_critica_dos;
4 p1deseaentrar = FALSE proceso_activo = DOS proceso_activo = UNO
5 : p1deseaentrar = FALSE p2deseaentrar = FALSE
6 p1deseaentrar = TRUE otras_tareas_uno; otras_tareas_dos;
end end
7 while p1deseaentrar do
end; end;
8 p2deseaentrar = FALSE
9 :
10 p2deseaentrar = TRUE • Cada proceso consigue una vuelta a la sección crítica
11 while p2deseaentrar do
12 p1deseaentrar = FALSE • Si un proceso quiere la sección crítica, pone su bandera y puede tener que
12 : esperar a su vuelta. No hay aplazamiento indefinido.
14 p1deseaentrar = TRUE
• Pero se puede presentar la posibilidad de que uno de los procesos sea
interrumpido luego de salir de su sección critica.
33 34
Algoritmo de Peterson
PROCESO_UNO PROCESO_DOS PROCESO_PRINCIPAL
procedure proceso_uno procedure proceso_dos begin
begin begin p1deseaentrar = FALSE;
while TRUE do while TRUE do p2deseaentrar = FALSE;
begin begin proceso_activo = UNO;
p1deseaentrar = TRUE;
proceso_activo = DOS
while p2deseaentrar and
p2deseaentrar = TRUE;
proceso_activo = UNO
while p2deseaentrar and
parbegin
proceso_uno;
proceso_dos;
SOLUCIONES DE HARDWARE
proceso_activo = DOS proceso_activo = UNO parend;
do espera; do espera; end.
seccion_critica_uno; seccion_critica_uno;
p1deseaentrar = FALSE p2deseaentrar = FALSE
otras_tareas_uno; otras_tareas_dos;
end end
end; end;
35 36
• Multiproceso
– inhabilitar interrupciones puede no garantizar la
exclusión mutua • Instrucción comparar y fijar (test y set)
• Instrucción intercambiar
37 38
39 40
41 42
Semáforos
• La variable especial llamado un semáforo es usado para
comunicar
• Si un proceso está esperando para una señal, es
SEMAFOROS suspendido hasta esa señal se envía
• Espera y operaciones de señales no pueden ser
interrumpidas
• Forme fila están acostumbrado a tener los procesos
esperando en el semáforo
43 44
45 46
Productor Consumidor
producer: consumer:
while (true) { while (true) {
/* produce item v */ while (in <= out)
b[in] = v; /*do nothing */;
w = b[out];
in++;
out++;
}
/* consume item w */
}
47 48
49 50
51 52
Problema de barbería
MONITORES
53 54
Estructura de
Monitores
un monitor
• El monitor es un módulo de software
• Características principales
– Las variables de datos locales son accesibles sólo por el monitor
– Procese entre monitor invocando unos de sus procedimientos
– Sólo un procese pueda estar ejecutando en el monitor a la vez
55
Paso de mensajes
• Imponga exclusión mutua
• Información de cambio
57 58
Sincronización Sincronización
• Remitente y receptor no pueden o no pueden estar • El Nonblocking envia, bloqueando reciba
bloqueando ( esperando para mensaje) – El remitente continúa el proceso tales como mensajes de
• El entramado envia, bloqueando reciba transmisión tan pronto como sea posible
– El receptor es bloqueado hasta el mensaje pedido llegue
– Ambos remitente y receptor es bloqueado hasta el mensaje se
da • El Nonblocking envia, nonblocking reciba
– Llame una cita – Ni la fiesta se requiere para esperar
59 60
Direccionamiento Direccionamiento
• Direccionamiento directo • Direccionamiento indirecto
– envie primitivo incluya un identificador específico del proceso de – los mensajes son enviados a una estructura de datos dividida
destino consistiendo de las colas
– reciba el primitivo pudo saber adelantado que procese un – las colas son llamados los buzones
mensaje es esperado – un proceso envia a un mensaje para el buzón y el otro proceso
– reciba el primitivo pudo usar parámetro de fuente para retornar romper y remover el mensaje del buzón
un valor cuando la operación de receive ha sido ejecutado
61 62
64
65