Concurrencia: Exclusión Mutua y Sincronización Concurrencia

Anuncio
Concurrencia: deberes
Concurrencia: Exclusión Mutua y
Sincronización
•
•
•
•
Comunicación entre procesos
Compartir recursos
Sincronización de múltiples procesos
Asignación del tiempo de procesador
Capítulo 5
Concurrencia
• Aplicación Múltiple
– Multiprogramación
• Aplicación Estructurada
– La aplicación puede ser un conjunto de
procesos concurrentes
• Estructura del Sistema Operativo
– Al sistema operativo es un conjunto de
procesos o threads (microkernel)
Dificultades con la Concurrencia
• Compartir recursos globales
• Gestión de asignación de recursos
• Errores de programación difíciles de localizar
Un Ejemplo Simple
void echo()
{
chin = getchar();
chout = chin;
putchar(chout);
}
Ocupaciones del Sistema Operativo
• Seguir la pista a los procesos activos
• Asignar y liberar recursos
–
–
–
–
Tiempo del procesador
Memoria
Ficheros
Dispositivos de E/S
• Proteger datos y recursos
• El resultado de un proceso debe ser
independiente de la velocidad de ejecución de
cualquier otro proceso concurrente
Un Ejemplo Simple
Proceso P1
Proceso P2
.
.
chin = getchar(); .
.
chin = getchar();
chout = chin;
chout = chin;
putchar(chout);
.
.
putchar(chout);
.
.
Interacción entre Procesos
• Los procesos se ignoran unos a otros
• Los procesos se dan cuenta indirectamente
de los otros
• Los procesos son conscientes de los otros
directamente
Competencia entre Procesos
por los Recursos
• Exclusión Mutua
– Secciones críticas
• En cada momento sólo se permite a un programa
estar en una sección crítica
• Por ejemplo, en un momento dado, sólo se permite a
un proceso enviar comandos a la impresora
Cooperación entre Procesos
mediante la Compartición
• La escritura debe ser exclusiva
(mutuamente)
• Las secciones críticas se usan para
asegurar la integridad de los datos
• Interbloqueo (deadlock)
• Inanición (starvation)
Cooperación entre Procesos
mediante la Comunicación
• Los mensajes son permisos
– La exclusión mutua no es una necesidad de control
• Posible interbloqueo
– Cada proceso espera un mensaje del otro proceso
• Posible inanición
– Dos procesos envían mensajes uno al otro mientras
un tercero espera un mensaje que no llega
Requisitos para la
Exclusión Mutua
• En cada momento sólo se la permite a un
proceso estar en sección critica para un recurso
¡¡¡ pero no sólo esto !!!, sino además:
• Un proceso que termina en su sección nocrítica debe hacerlo sin interferir con otros
procesos
• No interbloqueo o inanición
Requisitos para la
Exclusión Mutua
• Un proceso no debe ser demorado en su
acceso a la sección crítica cuando no hay otro
proceso usándola
• No se debe asumir nada relativo a la velocidad
de los procesos o el número de ellos
• Un proceso permanece en su sección crítica
por un tiempo finito
Corutina
• Diseñada para ser capaz de transmitir el control
de ejecución de acá para allá entre ellos
• Inadecuada para dar soporte al procesamiento
concurrente
Exclusión Mutua: Software
Alg. Dekker: Primera Tentativa
• Ocupado Esperando
– El proceso chequea continuamente si puede
entrar en la sección crítica
– El proceso no puede hacer nada productivo
hasta que obtiene permiso para entrar en su
sección crítica
Exclusión Mutua: Software
Alg. Dekker: Segunda Tentativa
• Cada proceso puede examinar el estado de otro pero
no puede alterarlo
• Cuando un proceso quiere entrar en la sección crítica
primera comprueba el estado de los otros procesos
• Si ningún otro proceso esta en sección crítica, activa
sus flag de estado para la sección crítica
• Este método no garantiza la exclusión mutua
• Cada proceso puede comprobar su flag y proceder a la
entrada en la sección critica al mismo tiempo
Exclusión Mutua: Software
Alg. Dekker: Tercera Tentativa
Exclusión Mutua: Software
Alg. Dekker: Cuarta Tentativa
• Activar el flag para entrar en sección crítica antes de
comprobar el resto de procesos
• Si algún proceso está en la sección crítica cuando el
flag está activado, el proceso se bloquea hasta que el
otro proceso sale de la sección crítica
• El interbloqueo es posible cuando dos procesos
activan sus flags para entrar en sección crítica y luego
deben esperar a que el otro salga de la sección crítica
• Un proceso activa su flag para indicar su
deseo de entrar en su sección crítica pero está
preparado para desactivar el flag
• Se comprueban los otros procesos. Si alguno
está en sección crítica, el flag se desactiva y
más tarde se vuelve a activar para indicar su
intención de entrar en región crítica. Esto se
repite hasta que el proceso finalmente entra
en su región crítica
Exclusión Mutua: Software
Alg. Dekker: Cuarta Tentativa
• Es posible que todos los procesos
activen sus flags, comprueben los otros
procesos y desactiven sus flags. Pero
esto no dura mucho tiempo, por eso no
se considera interbloqueo aunque este
retraso es injustificable
Exclusión Mutua: Software
Alg. Dekker: Solución Correcta
• Cada proceso obtiene un turno para su
sección crítica
• Si un proceso quiere entrar en su sección
crítica, activa un flag y espera su turno
Exclusión Mutua: Soporte Hardware
• Inhibición de Interrupciones
– Un proceso se ejecuta hasta que invoca un servicio del
sistema operativo o hasta que es interrumpido
– Inhibir las interrupciones garantiza la exclusión mutua
– Se limita la habilidad del procesador para entrelazar los
programas
– Multiprocesadores
• inhibir las interrupciones en un procesador no
garantiza la exclusión mutua
– Sólo un tipo de sección critica, no una para cada recurso
Exclusión Mutua: Soporte Hardware
• Instrucción Test and Set (comprueba y activa)
boolean testset (int i) {
if (i == 0) {
i = 1;
return true;
}
else {
return false;
}
}
Exclusión Mutua: Soporte Hardware
• Instrucciones máquina especiales
– Se realizan en un ciclo de reloj
– No está sujeta a interferencias de otras
instrucciones
– Lectura y escritura
– Lectura y comprobación
Exclusión Mutua: Soporte Hardware
• Instrucción de intercambio
void exchange(int register,
int memory) {
int temp;
temp = memory;
memory = register;
register = temp;
}
Instrucciones Máquina para la
Exclusión Mutua
• Ventajas
Instrucciones Máquina para la
Exclusión Mutua
• Inconvenientes
– Aplicable a cualquier número de procesos
sobre mono y multiprocesadores que
comparten memoria principal
– Es simple y además fáciles de verificar
– Se pueden utilizar para dar soporte a
múltiples secciones críticas
Semáforos
• El semáforo es un tipo de variable
especial que se usa para la señalización
• Si un proceso está esperando una señal,
se suspende hasta que se envía esa señal
• Las operaciones de espera y señalización
no pueden ser interrumpidas
• Se usa una cola para que los procesos
que esperen un semáforo
– La espera-activa consume tiempo del procesador
– Es posible la inanición si un proceso sale de la
sección crítica y hay muchos esperando
– Interbloqueo
• Si un proceso de baja prioridad está en sección crítica y un
proceso de mayor prioridad necesita entrar, el proceso de
mayor prioridad obtendrá el procesador para esperar entrar
en la sección crítica
Semáforos
• El semáforo es una variable que tiene un valor
entero
– Debe inicializarse a un número no negativo
– Las operaciones de espera (wait) decrementan el valor
del semáforo
– Las operaciones de señalización (signal) incrementan
el semáforo.
El Problema del Productor/Consumidor
• Uno o más productores generan datos y los
colocan en un buffer
• Un único consumidor extrae dichos datos del
buffer uno a uno
• Sólo un productor o el consumidor puede
acceder al buffer en cada instante
Consumidor
consumer:
while (true) {
while (in <= out)
/*do nothing */;
w = b[out];
out++;
/* consume item w */
}
Productor
producer:
while (true) {
/* produce item v */
b[in] = v;
in++;
}
Productor con Buffer Circular
producer:
while (true) {
/* produce item
while ((in + 1)
/* do nothing
b[in] = v;
in = (in + 1) %
}
v */
% n == out)
*/;
n
Consumidor con Buffer Circular
consumer:
while (true) {
while (in == out)
/* do nothing */;
w = b[out];
out = (out + 1) % n;
/* consume item w */
}
Buffer infinito
El Problema del Barbero
Monitores
• El Monitor es un módulo software
• Características principales
– Las variables locales son accedidas sólo por el monitor
– El proceso entra en el monitor invocando uno de sus
procedimientos
– Sólo un proceso puede estar ejecutando el monitor en
cada instante
Pase de Mensajes
• Fuerza la exclusión mutua
• Intercambio de información
send (destination, message)
receive (source, message)
Sincronización
• El emisor y el receptor puede o no
bloquearse en espera
• Envío bloqueante, recepción bloqueante
– Ambos el emisor y el receptor se bloquean
hasta que se entrega el mensaje
– Se le llama ‘rendezvous’ (cita)
Sincronización
• Emisor no bloqueante, receptor bloqueante
– El emisor continua procesando tan rápido como
el mensaje es enviado
– El receptor se bloquea hasta que llega el
mensaje que solicitó
• Emisor y receptor no bloqueantes
– No se requiere que ninguna parte espere
Direccionamiento
• Direccionamiento Indirecto
– los mensajes se envían a una estructura de datos
compartida que consiste en colas
– estas colas se llaman ‘mailboxes’
– un proceso envía un mensaje al mailbox y el otro
proceso recoge el mensaje del mailbox
Direccionamiento
• Direccionamiento Directo
– la primitiva de envío incluye un identificador
específico del proceso destinatario
– la primitiva de recepción puede saber con
antelación de qué proceso espera el mensaje
– la primitiva de recepción puede usar el parámetro
fuente para devolver un valor cuando la operación
de recepción ha tenido lugar
Formato de Mensaje
Problema del Lector/Escritor
• Un número indeterminado de lectores
pueden leer un fichero simultáneamente
• Sólo un escritor puede escribir en el
fichero cada vez
• Si un escritor está escribiendo en el
fichero, ningún lector puede leerlo
Descargar