AGENDA 1. Concurrencia y Cooperación 2. Comunicación entre Procesos (IPC) 3. Condiciones de Carrera 4. Región Crítica 5. Exclusión Mutua con Espera Ocupada Deshabilitando interrupciones Variables candado - Alternancia estricta Solución de Peterson TSL - XCHG Concurrencia y Cooperación ✓ Procesos-Hilos Concurrentes ➔ Sistemas multiprogramados ➔ Los procesos o Hilos se entrelazan en el tiempo para ofrecer la apariencia de ejecución simultánea
✓ Procesos-Hilos Cooperantes ➔ Necesitan
comunicarse información y compartir recursos ➔ Deben comunicarse y sincronizar sus actividades ➔ para que no interfieran entre ellos o corrompan recursos compartidos (Ej. estructuras de datos, archivos) Concurrencia y Cooperación Los asuntos que surgen y las técnicas usadas para la comunicación y sincronización de los Procesos e Hilos ➔ Comunicación entre Procesos (IPC ➔ InterProcess Communication) Comunicación entre Procesos • Los procesos cooperantes necesitan comunicarse y sincronizarse entre ellos ➔ en un entorno concurrente • Responder 3 preguntas importantes: 1.Cómo un proceso puede pasar información a otro ➔ Comunicación 2.Qué hacer para que dos o más procesos no se interpongan entre sí ➔ Sincronización 3.Cómo obtener la secuencia apropiada cuando hay dependencias presentes (Ej. proceso A produce datos y el proceso B los imprime) ➔ Sincronización Comunicación entre Hilos • El paso de información (Comunicación) ➔ es fácil para los hilos, ya que comparten un espacio de direcciones común • Hilos en diferentes espacios de direcciones que necesitan comunicarse ➔ entran en la categoría de los procesos en comunicación • La Sincronización (evitar que un hilo entre en conflicto con los demás y obtener la secuencia apropiada) ➔ se aplica de igual forma que a los Procesos • Veremos IPC el contexto de los Procesos ➔ teniendo en cuenta que se aplican los mismos problemas y soluciones a los Hilos Condiciones de Carrera (Race Conditions) • Procesos ➔ comparten cierto espacio de almacenamiento ➔ pueden leer y escribir datos • Espacio compartido ➔ en la memoria principal o un archivo ➔ esto no cambia la naturaleza de la comunicación o los problemas que surgen • Dos o más procesos están leyendo o escribiendo datos en espacio compartido y el resultado final depende del orden de ejecución ➔ el que modifica de último determina el valor final de la variable ➔ se conoce como condición de carrera Condiciones de Carrera (Race Conditions) Ej. ➔ Un spooler (cola) de impresión • Si un proceso desea imprimir un archivo ➔ introduce su nombre en el directorio del spooler • Otro proceso (demonio de impresión) comprueba periodicamente si hay archivos para imprimirse. Si los hay, lo imprime y lo elimina del directorio • in: variable local que apunta a la siguiente ranura libre en el directorio • out: apunta al siguiente archivo a imprimir • Los procesos A y B deciden que desean poner en cola un archivo para imprimirlo ➔ Dos procesos desean acceder a la memoria compartida al mismo tiempo Cómo evitar condiciones de Carrera • Prohibir que más de un proceso lea y escriba los datos compartidos al mismo tiempo • Exclusión Mutua ➔ solo un proceso al mismo tiempo puede usar una variable o archivo compartido • En otras palabras ➔ asegurar que si un proceso está utilizando una variable o archivo compartido, los demás procesos se excluirán de hacer lo mismo Como evitar condiciones de Carrera • Del ej. anterior ➔ El problema ocurrió debido a que el proceso B empezó a utilizar una de las variables compartidas (in) antes de que el proceso A terminara con ella • Lograr la exclusión mutua es una cuestión de diseño importante en cualquier SO • Evitar las condiciones de carrera también se puede formular de una manera abstracta: ✓ Parte de un proceso ➔ está ocupado realizando cálculos internos y otras cosas que NO producen condiciones de carrera ✓ La otra parte de un proceso ➔ tiene que acceder a la memoria compartida o a archivos compartidos, que puede producir condiciones de carrera Cómo evitar condiciones de Carrera • Esa parte del programa en la que se accede a la memoria compartida ➔ región crítica o sección crítica • Si se pueden ordenar las cosas de manera que dos procesos nunca estuvieran en sus regiones críticas al mismo tiempo ➔ se podría evitar las condiciones de carrera ➔ Exclusión Mutua • Aunque este requerimiento evita las condiciones de carrera ➔ No es suficiente para que los procesos cooperen de la manera correcta y eficiente al utilizar datos compartidos ➔ Se deben cumplir otras condiciones para tener una buena solución Cómo evitar condiciones de Carrera 1. Exclusión mutua ➔ No puede haber dos procesos de manera simultánea dentro de sus regiones críticas 2. Ningún proceso que se ejecute fuera de su región crítica puede bloquear otros procesos 3. Ningún proceso tiene que esperar para siempre para entrar a su región crítica ➔ No debe presentarse Starvation (inanición) 4. Un proceso permanece dentro de su sección crítica sólo por un tiempo finito Cómo evitar condiciones de Carrera
El comportamiento que deseamos se muestra en la figura
Exclusión Mutua Mientras un proceso esté actualizando la memoria compartida en su RC ➔ ningún otro proceso puede entrar a su RC y ocasionar problemas 1. Deshabilitando Interrupciones 2. Variables Candado (Lock variables) 3. Alternancia Estricta 4. Solución de Peterson 5. La instrucción TSL (Test and Set Lock) Deshabilitando las Interrupciones • Proceso Deshabilita Interrupciones ➔ Entra a Región Crítica (RC) ➔ Sale de RC ➔ Habilita Interrupciones • Problemas: • Sin interrupciones de reloj ➔ CPU no se conmutará a otro proceso • Proceso puede nunca habilitar nuevamente las interrupciones ➔ el sistema se bloquea • En chips multi-core deshabilitar interrupciones solo afecta a un CPU Conclusión ➔ técnica puede ser útil dentro del SO ➔ pero no es apropiada como mecanismo de exclusión mutua para los procesos del usuario Variables Candado (Lock Variables) • Solución de software ➔ todos comparten una variable candado • Cuando es 0 ➔ el proceso la toma ➔ lo coloca igual a 1 ➔ entra a su RC • Cuando sale de su RC ➔ la coloca en 0
• Problema ➔ ambos procesos pueden tomar el
candado al mismo tiempo ➔ entran a sus RC ➔ No se asegura Exclusión Mutua ➔ No se elimina Condición de Carrera Alternancia Estricta
Primero yo, luego tú …
Problemas con Alternancia Estricta 1.Desperdicia tiempo de CPU ➔ espera ocupada ➔ sólo se utilizaría con una expectativa razonable de espera corta 2.Si un proceso esta fuera de su RC y le toca su turno ➔ entonces otro proceso tiene que esperar que termine tanto su trabajo fuera como dentro de su RC ➔ viola una de las reglas ➔ aunque evita la condición de carrera Solución de Peterson Solución de Peterson • Antes de entrar a su RC cada proceso llama a entrar_region ➔ espera hasta que sea seguro entrar • Terminado con las variables compartidas ➔ salir_region ➔ permite que el otro proceso entre • Caso ➔ Procesos 0 y 1 tratando de entrar simultaneamente: o El último setea el turno, por ejemplo el Proceso 1 o Proceso 0 entra a RC ➔ (turno (1) = = proceso (0) ➔ Falso)
• Peterson ➔ asegura Exclusión Mutua
TSL (Test and Set Lock) • Requiere un poco de ayuda del hardware ➔ Algunas computadoras, en especial las diseñadas con varios procesadores, tienen una instrucción tal como TSL RX, CANDADO • Lee el contenido de CANDADO y lo guarda en el registro RX ➔ después almacena un valor distinto de cero en la dirección de memoria CANDADO
• Esta instrucción es atómica ➔ se logra bloqueando el bus de memoria
(bus disable != interrupts disable) ➔ Bueno para multiprocesadores
• Operación atómica ➔ función implementada como una secuencia de
una o mas instrucciones que es indivisible ➔ ningún otro proceso puede ver un estado intermedio o interrumpirla ➔ La secuencia se ejecuta como un grupo o no se ejecuta del todo ➔ Atomicidad garantiza aislamiento de procesos concurrentes Usando TSL Instrucción XCHG XCHG a,b ➔ intercambia a & b Instrucción alternativa para TSL, que intercambia el contenido de dos ubicaciones en forma atómica ➔ ej. un registro y una palabra de memoria ➔ Todas las CPUs Intel x86 utilizan la instrucción XCHG para la sincronización de bajo nivel