Vous êtes sur la page 1sur 23

Sistemas de Operación

Comunicación entre Procesos (IPC)

Prof. Homer Garcia


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

Vous aimerez peut-être aussi