Está en la página 1de 31

Sistemas Operativos

Tema 6: Concurrencia de
Procesos

1
Índice:
1. Cooperación de procesos
Tema 6: Concurrencia de Procesos

2. Concurrencia y Sección Crítica


3. Control Pesimista y Optimista de
la Concurrencia
4. Métodos basados en Impedir la
Conmutación
5. Métodos de Espera Ocupada
6. Problemas de la Espera Ocupada
2
Índice:
1. Cooperación de procesos
Tema 6: Concurrencia de Procesos

2. Concurrencia y Sección Crítica


3. Control Pesimista y Optimista de
la Concurrencia
4. Métodos basados en Impedir la
Conmutación
5. Métodos de Espera Ocupada
6. Problemas de la Espera Ocupada
3
1. Cooperación de Procesos
 Relación entre los procesos en un sistema
Tema 6: Concurrencia de Procesos

multiprogramado:
Competencia (procesos independientes)
Cooperación
 Procesos que cooperan:
Colaboran en la consecución de algún fin
Comparten recursos
 Tipos de recursos:
Consumibles (un solo uso)
Reutilizables en serie

4
1. Cooperación de Procesos
 Formas de acceso a los recursos compartidos:
Tema 6: Concurrencia de Procesos

Concurrencia
• Acceso simultáneo directo al recurso
Sincronización
• Uso de mecanismos de coordinación para ordenar acceso
Comunicación
• Sólo un proceso accede directamente a recurso
• Demás procesos le envían peticiones (cliente/servidor)

 La modificación concurrente del estado de un


recurso puede dar lugar a condiciones de carrera!

5
Índice:
1. Cooperación de procesos
Tema 6: Concurrencia de Procesos

2. Concurrencia y Sección Crítica


3. Control Pesimista y Optimista de
la Concurrencia
4. Métodos basados en Impedir la
Conmutación
5. Métodos de Espera Ocupada
6. Problemas de la Espera Ocupada
6
1. Concurrencia y Sección Crítica
P1 P2
Tema 6: Concurrencia de Procesos

… …
tabla
tabla[i]= e1; tabla[i]= e2;
e2
e1 0
i= i+1; i= i+1;
1
i=0
i=1
i=2 ...
...
2
3

 Condición de carrera: corrupción del estado de un


recurso causada por su actualización concurrente
por parte de varios procesos (o hilos).

7
1. Concurrencia y Sección Crítica

 Sección crítica: porción de código en la que se


Tema 6: Concurrencia de Procesos

accede a un recurso compartido.


 Exclusión mutua: garantizar que en cada momento
se pueda estar ejecutando como máximo una
sección crítica asociada a un recurso.

P1 P2
…<protocolo de entrada> …<protocolo de entrada>
tabla
tabla[i]= e1; tabla[i]= e2;
0
i= i+1; i= i+1;
<protocolo de salida>
... 1
i=0 <protocolo de salida>
...
2
3

8
1. Concurrencia y Sección Crítica
 Requisitos de la exclusión mutua:
Tema 6: Concurrencia de Procesos

1.Nunca debe haber más de un proceso ejecutando su


sección crítica asociada a un mismo recurso.
2.Todo proceso permanece tiempo finito en sección crítica.
3.Ningún proceso suspendido, detenido o abortado fuera de
sección crítica debe impedir la entrada a otro proceso.
4.Ningún proceso esperará eternamente a entrar en sección
crítica
5.Si ningún proceso está ejecutando su sección crítica,
cualquier proceso podrá hacerlo inmediatamente.
6.Si hay procesos esperando para entrar en sección crítica y el
proceso que la estaba ejecutando sale, uno de los que esperan
entrará inmediatamente.
No se pueden hacer suposiciones respecto a las velocidades
relativas de ejecución de los procesos. 9
Índice:
1. Cooperación de procesos
Tema 6: Concurrencia de Procesos

2. Concurrencia y Sección Crítica


3. Control Pesimista y Optimista de
la Concurrencia
4. Métodos basados en Impedir la
Conmutación
5. Métodos de Espera Ocupada
6. Problemas de la Espera Ocupada
10
3. Control Pesimista y Optimista de la Conc.
 Control Pesimista:
Tema 6: Concurrencia de Procesos

Consiste en garantizar la exclusión mutua en el acceso a


los recursos.

 Control Optimista:
No se fuerza exclusión mutua → pueden darse
condiciones de carrera!!
Si se dan las condiciones de carrera, se detecta y se
solucionan.
Protocolo de entrada típico: salvar estado
Protocolo de salida típico:
• Comprobar de ha habido condición de carrera
• En caso afirmativo, restaurar estado y repetir

11
3. Control Pesimista y Optimista de la Conc.
 Control Pesimista:
Tema 6: Concurrencia de Procesos

Ventajas:
• Siempre es viable
Inconvenientes:
• Fuerza esperas (posiblemente innecesarias)
• Algunos métodos pueden ser muy drásticos

 Control Optimista:
Ventajas:
• Mayor grado de paralelismo
Inconvenientes:
• Será posible o no en función de la naturaleza del recurso
• Si hay muchos procesos concurrentes, el nº de conflictos
puede aumentar y por tanto el nº de repeticiones
12
3. Control Pesimista y Optimista de la Conc.
 ¿Control Pesimista u Optimista? Depende de…
Tema 6: Concurrencia de Procesos

Frecuencia y variabilidad de la probabilidad de


condiciones de carrera
Coste de la repetición del cálculo

 Optimista: idóneo si…


Coste de repetición del cálculo es pequeño, y
Previsible que hayan pocas condiciones de carrera

 Pesimista: idóneo si…


Coste de repetición del cálculo es grande, y
Previsible que hayan muchas condiciones de carrera, o
se espera variabilidad en su frecuencia

13
Índice:
1. Cooperación de procesos
Tema 6: Concurrencia de Procesos

2. Concurrencia y Sección Crítica


3. Control Pesimista y Optimista de
la Concurrencia
4. Métodos basados en Impedir la
Conmutación
5. Métodos de Espera Ocupada
6. Problemas de la Espera Ocupada
14
4. Métodos basados en impedir la conmut.

 Pesimismo extremo: impide apropiación en sección


Tema 6: Concurrencia de Procesos

crítica

 Mecanismos NO disponibles para procesos de


usuario

 Posibilidades:
Desactivar interrupciones
Uso exclusivo del procesador

15
4. Métodos basados en impedir la conmut.
Desactivar Interrupciones
Tema 6: Concurrencia de Procesos

 Si no hay interrupciones→no hay apropiación


deshabilitar_interrupciones();
<protocolo de entrada>

[ sección crítica ]

 Inconvenientes: <protocolo de salida>
habilitar_interrupciones();

Mientras interrupciones deshabilitadas,


• Control absoluto de la máquina
• No se atienden dispositivos
• Puede que no se refresque la memoria
• Sistema en peligro!
¿Y la NMI?
¿Y si hay otros procesadores?
16
4. Métodos basados en impedir la conmut.
Suspender la conmutación
Tema 6: Concurrencia de Procesos

 Pedir a planificador que suspenda conmutación


hasta nueva orden suspender_conmutacion();
<protocolo de entrada>

 ¡Ya no hay problemas con… [ sección crítica ]
Dispositivos …
<protocolo de salida>
reanudar_conmutacion();
Refresco de memoria

 Inconvenientes:
Posibilidad condición de carrera con rutinas de
interrupción
Tampoco es adecuado para multiprocesadores
¡Cuidado en sistemas con organización micronúcleo!

17
Índice:
1. Cooperación de procesos
Tema 6: Concurrencia de Procesos

2. Concurrencia y Sección Crítica


3. Control Pesimista y Optimista de
la Concurrencia
4. Métodos basados en Impedir la
Conmutación
5. Métodos de Espera Ocupada
6. Problemas de la Espera Ocupada
18
5. Métodos de espera ocupada
 Espera ocupada (o espera activa)
Tema 6: Concurrencia de Procesos

esperar a que algo ocurra realizando continuas


comprobaciones:

variable= 0;
while(variable==0);

 Métodos de espera ocupada:


Cerrojos
Alternancia estricta
Algoritmo de Dekker
Algoritmo de Peterson
Algoritmo de Lamport
Instrucciones especiales 19
5. Métodos de espera ocupada
Cerrojos
Tema 6: Concurrencia de Procesos

 Variable compartida que indica si recurso está libre


u ocupado:
Vars. compartidas: while(cerrojo);
<protocolo
cerrojo= 1;de entrada>
int cerrojo=0; …
[ sección crítica ]

<protocolo
cerrojo= 0;de salida>

 ¡Fallo!
No hay atomicidad entre comprobación y cierre

20
5. Métodos de espera ocupada
Alternancia Estricta
Tema 6: Concurrencia de Procesos

 Caso de que dos procesos usen recurso por turnos


 Variable compartida que indica a qué proceso le
toca:
P1 P2

Vars. compartidas: while(turno


<protocolo de!=P1);
entrada> while(turno
<protocolo de!=P2);
entrada>
int turno=P1; … …
[ sección crítica ] [ sección crítica ]
… …
<protocolo
turno= P2;de salida> <protocolo
turno= P1;de salida>

 ¡Funciona!
Más restrictivo que cerrojos: un proceso nunca se da
paso a sí mismo.
21
5. Métodos de espera ocupada
Alternancia Estricta
Tema 6: Concurrencia de Procesos

 Ventajas:
Sencillez
Aplicable en muchos contextos

 Inconvenientes:
¡Obliga a que alternancia sea estricta!
Esto atenta contra requisito 3 exclusión mutua:

“Ningún proceso suspendido, detenido o abortado fuera de


sección crítica debe impedir la entrada a otro proceso”

22
5. Métodos de espera ocupada
Algoritmo de Dekker
Tema 6: Concurrencia de Procesos

 Si los dos procesos interesados→ se alternan


 Si uno no está interesado→ el otro puede usar
recursos tantas veces como quiera
 Comprobación a dos niveles:
P1 P2
Vars. compartidas: interesado1=1; interesado2=1;
int interesado1=0; while (interesado2) while (interesado1)
int interesado2=0; { if (preferente==P2) { if (preferente==P1)
int preferente= P1; { interesado1= 0; { interesado2= 0;
while (preferente==P2); while (preferente==P1);
interesado1=1; } interesado2=1; }
} }
[ sección crítica ] [ sección crítica ]
preferente=P2; preferente=P1;
23
interesado1=0; interesado2=0;
5. Métodos de espera ocupada
Algoritmo de Peterson
Tema 6: Concurrencia de Procesos

 Equivalente a algoritmo de Dekker


 Reescrito de forma más clara, una rutina para
protocolo de entrada y otra para protocolo de salida:
Vars. compartidas: void protocolo_entrada(int proc)
{
int
int otro= 1-proc;
interesado[2]={0,0}
interesado[proc]= 1;
int ultimo=0;
ultimo= proc;
while {(interesado[otro] == 1) && (ultimo==proc));
}

void protocolo_salida(int proc)


{
interesado[proc]= 0;
} 24
5. Métodos de espera ocupada
Algoritmo de Lamport (o de la panadería)
Tema 6: Concurrencia de Procesos

 Coordina a N procesos
 Cuando más de un proceso interesado en recurso:
Ordena el acceso por turnos
Una etapa de espera por cada proceso interesado

Vars. compartidas: Idea de funcionamiento:


int eligiendo[N]= {0,0,…,0}
Eligiendo[i] != 0 ↔ proceso i está
int turno[N]= {0,0, …,0}; elgiendo turno (turno[i] no es válido
todavía)
Si turno[i] = 0 → proceso i no
está interesado en entrar en sección
crítica
Si turno [i] > 0 → proceso i está
25
interesado y su turno es turno[i]
5. Métodos de espera ocupada
Algoritmo de Lamport (o de la panadería)
Tema 6: Concurrencia de Procesos

void protocolo_entrada(int proc)


{
/* Elegir turno */
eligiendo[proc]= 1;
turno[proc]= 1 + mayor(turno);
eligiendo[proc]= 0;

/* Esperar a los que vayan por delante */


for (j=0; j< N; j++)
if (j != proc)
{
/* Si está eligiendo, esperar a ver qué turno saca */
while (eligiendo[j] !=0);
void protocolo_salida(int proc)
/* Si tiene turno y es anterior a nosotros, esperar */
{
while ((turno[j] != 0) && anterior (turno[j], j, turno[proc], proc));
/* Nos deshacemos del turno */
}
turno[proc]= 0;
}
} 26
5. Métodos de espera ocupada
Instrucciones especiales: Test and Set (TS, TAS…)
Tema 6: Concurrencia de Procesos

 Soluciona el problema de atomicidad de los cerrojos


 Formato: TS operando (IBM 360)
Z ← operando == 0
operando ← 1

prot_entrada: TS cerrojo
BNF prot_entrada
RETN

 Único problema: otro master en el bus


 Solución: variantes que bloquean el bus
27
5. Métodos de espera ocupada
Instrucciones especiales: Intercambiar (XCHG)
Tema 6: Concurrencia de Procesos

 Puede funcionar de forma equivalente a TS


 Formato: XCHG registro, direccion (80x86)
registro ↔ dirección
Se puede reforzar con prefijo lock

prot_entrada: MOV AL,1


lock XCHG AL,
cerrojo CMP AL, 0
JNE prot_entrada
RET

28
5. Métodos de espera ocupada
Instrucciones especiales: Comparar e Intercambiar (CS)
Tema 6: Concurrencia de Procesos

 Soporte para estrategias optimistas


 Formato: CS previo, nuevo, global (IBM 370)
global: variable compartida que se actualiza
previo: valor que tenía global antes de actualización
nuevo: nuevo valor tentativo calculado para actualizar global

Sí No
¿previo=global? MOVE previo,global
calculo: ….
….
CS previo, nuevo, global
actualizar ccr actualizar ccr
BNEQ calculo
global←nuevo previo←global

29
Índice:
1. Cooperación de procesos
Tema 6: Concurrencia de Procesos

2. Concurrencia y Sección Crítica


3. Control Pesimista y Optimista de
la Concurrencia
4. Métodos basados en Impedir la
Conmutación
5. Métodos de Espera Ocupada
6. Problemas de la Espera Ocupada
30
6. Problemas de la espera ocupada
 Desperdicio de tiempo de CPU. Sólo admisible en:
Tema 6: Concurrencia de Procesos

Procesadores dedicados
Sistemas monoprogramados
En el núcleo del SO, si se puede garantizar que tiempo
de espera es suficientemente inferior a tiempo de
conmutación
 Si se coordinan procesos
Prioridad(P2) con diferentes prioridades:
> Prioridad(P1)
P1 P2
: :
cerrojo=1
cerrojo=0
while(cerrojo); while(cerrojo);
cerrojo=1; cerrojo=1;
: :
: :
: :
cerrojo=0; cerrojo=0;
: :
31

También podría gustarte