Sistemas Operativos Tema 6 Concurrencia de Procesos 1































- Slides: 31
Sistemas Operativos Tema 6: Concurrencia de Procesos 1
Tema 6: Concurrencia de Procesos Índice: 1. Cooperación 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
Tema 6: Concurrencia de Procesos Índice: 1. Cooperación 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
Tema 6: Concurrencia de Procesos 1. Cooperación de Procesos v Relación entre los procesos en un sistema multiprogramado: Ø Competencia (procesos independientes) Ø Cooperación v Procesos que cooperan: Ø Colaboran en la consecución de algún fin Ø Comparten recursos v Tipos de recursos: Ø Consumibles (un solo uso) Ø Reutilizables en serie 4
1. Cooperación de Procesos Tema 6: Concurrencia de Procesos v Formas de acceso a los recursos compartidos: Ø 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) v La modificación concurrente del estado de un recurso puede dar lugar a condiciones de carrera! 5
Tema 6: Concurrencia de Procesos Índice: 1. Cooperación 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 Tema 6: Concurrencia de Procesos P 1 P 2 … tabla[i]= e 1; i= i+1; . . . tabla e 2 e 1 i=0 i=1 i=2 0 1 2 … tabla[i]= e 2; i= i+1; . . . 3 v 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
Tema 6: Concurrencia de Procesos 1. Concurrencia y Sección Crítica v Sección crítica: porción de código en la que se accede a un recurso compartido. v Exclusión mutua: garantizar que en cada momento se pueda estar ejecutando como máximo una sección crítica asociada a un recurso. P 1 … <protocolo de entrada> tabla[i]= e 1; i= i+1; <protocolo de salida>. . . P 2 tabla 0 i=0 1 2 … <protocolo de entrada> tabla[i]= e 2; i= i+1; <protocolo de salida>. . . 3 8
Tema 6: Concurrencia de Procesos 1. Concurrencia y Sección Crítica v Requisitos de la exclusión mutua: 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
Tema 6: Concurrencia de Procesos Índice: 1. Cooperación 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
Tema 6: Concurrencia de Procesos 3. Control Pesimista y Optimista de la Conc. v Control Pesimista: Ø Consiste en garantizar la exclusión mutua en el acceso a los recursos. v 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
Tema 6: Concurrencia de Procesos 3. Control Pesimista y Optimista de la Conc. v Control Pesimista: Ø Ventajas: • Siempre es viable Ø Inconvenientes: • Fuerza esperas (posiblemente innecesarias) • Algunos métodos pueden ser muy drásticos v 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
Tema 6: Concurrencia de Procesos 3. Control Pesimista y Optimista de la Conc. v ¿Control Pesimista u Optimista? Depende de… Ø Frecuencia y variabilidad de la probabilidad de condiciones de carrera Ø Coste de la repetición del cálculo v Optimista: idóneo si… Ø Coste de repetición del cálculo es pequeño, y Ø Previsible que hayan pocas condiciones de carrera v 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
Tema 6: Concurrencia de Procesos Índice: 1. Cooperación 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
Tema 6: Concurrencia de Procesos 4. Métodos basados en impedir la conmut. v Pesimismo extremo: impide apropiación en sección crítica v Mecanismos NO disponibles para procesos de usuario v Posibilidades: Ø Desactivar interrupciones Ø Uso exclusivo del procesador 15
Tema 6: Concurrencia de Procesos 4. Métodos basados en impedir la conmut. Desactivar Interrupciones v Si no hay interrupciones→no hay apropiación v Inconvenientes: deshabilitar_interrupciones(); <protocolo de entrada> … [ sección crítica ] … <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
Tema 6: Concurrencia de Procesos 4. Métodos basados en impedir la conmut. Suspender la conmutación v Pedir a planificador que suspenda conmutación hasta nueva orden suspender_conmutacion(); <protocolo de entrada> … v ¡Ya no hay problemas con… [ sección crítica ] Ø Dispositivos Ø Refresco de memoria … <protocolo de salida> reanudar_conmutacion(); v 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
Tema 6: Concurrencia de Procesos Índice: 1. Cooperación 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
Tema 6: Concurrencia de Procesos 5. Métodos de espera ocupada v Espera ocupada (o espera activa) Ø esperar a que comprobaciones: algo ocurra realizando continuas … variable= 0; while(variable==0); … v Métodos de espera ocupada: Ø Cerrojos Ø Alternancia estricta Ø Algoritmo de Dekker Ø Algoritmo de Peterson Ø Algoritmo de Lamport Ø Instrucciones especiales 19
Tema 6: Concurrencia de Procesos 5. Métodos de espera ocupada Cerrojos v Variable compartida que indica si recurso está libre u ocupado: Vars. compartidas: int cerrojo=0; while(cerrojo); <protocolo cerrojo= 1; de entrada> … [ sección crítica ] … <protocolo cerrojo= 0; de salida> v ¡Fallo! Ø No hay atomicidad entre comprobación y cierre 20
Tema 6: Concurrencia de Procesos 5. Métodos de espera ocupada Alternancia Estricta v Caso de que dos procesos usen recurso por turnos v Variable compartida que indica a qué proceso le toca: Vars. compartidas: int turno=P 1; P 1 P 2 while(turno <protocolo de!=P 1); entrada> … [ sección crítica ] … <protocolo turno= P 2; de salida> while(turno <protocolo de!=P 2); entrada> … [ sección crítica ] … <protocolo turno= P 1; de salida> v ¡Funciona! Ø Más restrictivo que cerrojos: un proceso nunca se da paso a sí mismo. 21
Tema 6: Concurrencia de Procesos 5. Métodos de espera ocupada Alternancia Estricta v Ventajas: Ø Sencillez Ø Aplicable en muchos contextos v 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
Tema 6: Concurrencia de Procesos 5. Métodos de espera ocupada Algoritmo de Dekker v Si los dos procesos interesados→ se alternan v Si uno no está interesado→ el otro puede usar recursos tantas veces como quiera v Comprobación a dos niveles: Vars. compartidas: interesado 1=0; interesado 2=0; int preferente= P 1; P 1 P 2 interesado 1=1; while (interesado 2) { if (preferente==P 2) { interesado 1= 0; while (preferente==P 2); interesado 1=1; } } [ sección crítica ] preferente=P 2; interesado 1=0; interesado 2=1; while (interesado 1) { if (preferente==P 1) { interesado 2= 0; while (preferente==P 1); interesado 2=1; } } [ sección crítica ] preferente=P 1; 23 interesado 2=0;
Tema 6: Concurrencia de Procesos 5. Métodos de espera ocupada Algoritmo de Peterson v Equivalente a algoritmo de Dekker v Reescrito de forma más clara, una rutina para protocolo de entrada y otra para protocolo de salida: Vars. compartidas: interesado[2]={0, 0} int ultimo=0; void protocolo_entrada(int proc) { int otro= 1 -proc; interesado[proc]= 1; ultimo= proc; while {(interesado[otro] == 1) && (ultimo==proc)); } void protocolo_salida(int proc) { interesado[proc]= 0; } 24
Tema 6: Concurrencia de Procesos 5. Métodos de espera ocupada Algoritmo de Lamport (o de la panadería) v Coordina a N procesos v Cuando más de un proceso interesado en recurso: Ø Ordena el acceso por turnos Ø Una etapa de espera por cada proceso interesado Vars. compartidas: int eligiendo[N]= {0, 0, …, 0} int turno[N]= {0, 0, …, 0}; Idea de funcionamiento: Ø Eligiendo[i] != 0 ↔ proceso i está 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á interesado y su turno es turno[i] 25
Tema 6: Concurrencia de Procesos 5. Métodos de espera ocupada Algoritmo de Lamport (o de la panadería) 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
Tema 6: Concurrencia de Procesos 5. Métodos de espera ocupada Instrucciones especiales: Test and Set (TS, TAS…) v Soluciona el problema de atomicidad de los cerrojos v Formato: TS operando (IBM 360) Ø Z ← operando == 0 Ø operando ← 1 prot_entrada: TS cerrojo BNF prot_entrada RETN v Único problema: otro master en el bus v Solución: variantes que bloquean el bus 27
Tema 6: Concurrencia de Procesos 5. Métodos de espera ocupada Instrucciones especiales: Intercambiar (XCHG) v Puede funcionar de forma equivalente a TS v Formato: XCHG registro, direccion (80 x 86) Ø 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
Tema 6: Concurrencia de Procesos 5. Métodos de espera ocupada Instrucciones especiales: Comparar e Intercambiar (CS) v Soporte para estrategias optimistas v 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í ¿previo=global? actualizar ccr global←nuevo No actualizar ccr previo←global MOVE previo, global calculo: …. …. CS previo, nuevo, global BNEQ calculo 29
Tema 6: Concurrencia de Procesos Índice: 1. Cooperación 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 Tema 6: Concurrencia de Procesos v Desperdicio de tiempo de CPU. Sólo admisible en: Ø 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 v Si se coordinan procesos con diferentes prioridades: Prioridad(P 2) > Prioridad(P 1) P 1 : while(cerrojo); cerrojo=1; : : : cerrojo=0; : P 2 cerrojo=1 cerrojo=0 : while(cerrojo); cerrojo=1; : : : cerrojo=0; : 31































