Está en la página 1de 31

Concurrencia.

Exclusión
mutua y
sincronización
Capítulo 5
Los temas centrales del diseño de sistemas
operativos están todos relacionados con la
gestión de procesos e hilos:
• Multiprogramación: Gestión de múltiples procesos dentro de un
sistema monoprocesador.
• Multiprocesamiento: Gestión de múltiples procesos dentro de un
multiprocesador.
• Procesamiento distribuido: Gestión de múltiples procesos que
ejecutan sobre múltiples sistemas de cómputo distribuidos.
Coincidencia de varios procesos al mismo
tiempo.
La concurrencia es fundamental en todas
estas áreas y en el diseño del sistema
operativo.

Concurrenci La concurrencia abarca varios aspectos,


entre los cuales están:
a • La comunicación entre procesos
• La compartición de recursos,
• Competencia por recursos
• La sincronización de actividades de
múltiples procesos
• La reserva de tiempo de procesador
para los procesos.
La concurrencia aparece en
tres contextos diferentes:
• Múltiples aplicaciones. La multiprogramación fue ideada para permitir
compartir dinámicamente el tiempo de procesamiento entre varias
aplicaciones activas.
• Aplicaciones estructuradas. Como extensión de los principios del
diseño modular y de la programación estructurada, algunas
aplicaciones pueden ser programadas eficazmente como un conjunto
de procesos concurrentes.
• Estructura del sistema operativo. Las mismas ventajas constructivas
son aplicables a la programación de sistemas y, de hecho, los sistemas
operativos son a menudo implementados en sí mismos como un
conjunto de procesos o hilos.
• En un sistema multiprogramado de procesador
único, los procesos se entrelazan en el tiempo
para ofrecer la apariencia de ejecución
PRINCIPIOS simultánea.
DE LA • Aunque no se consigue procesamiento paralelo
CONCURREN real, e ir cambiando de un proceso a otro
supone cierta sobrecarga, la ejecución
CIA entrelazada proporciona importantes
beneficios en la eficiencia del procesamiento y
en la estructuración de los programas.
PRINCIPIOS DE LA CONCURRENCIA

La velocidad relativa de los procesos no puede predecirse. Depende de la actividad de otros


procesos, de la forma en que el sistema operativo trata las interrupciones y las políticas de
planificación.
Así surgen las siguientes dificultades:
• La compartición de recursos globales está llena de riesgos. (dos procesos hacen uso de la
misma variable global, y hacen cambios en lectura y escritura por lo tanto el orden en que
se ejejcuten las lecturas y escrituras es crítico).
• Para el SO resulta difícil asignar los recursos de forma óptima. (un proceso puede pedir el
uso de un dispotivio de E/S y suspenderse antes de usarlo. Si el SO bloquea el recurso (E/S)
e impide que otros procesos lo usen hay ineficiencia.
CONDICIÓN DE CARRERA

Una condición de carrera sucede cuando múltiples procesos o hilos leen


y escriben datos de manera que el resultado final depende del orden de
ejecución de las instrucciones en los múltiples procesos.
Como primer ejemplo, suponga:
• Dos procesos, P1 y P2, comparten la variable global a.
• En algún punto de su ejecución, P1 actualiza a al valor 1 y, en el mismo
punto en su ejecución, P2 actualiza a al valor 2.
• Así, las dos tareas compiten en una carrera por escribir la variable a.
CONDICIÓN DE CARRERA
Para nuestro segundo ejemplo:
• Considere dos procesos P3 y P4, que comparten las variables globales b y c, con valores iniciales
b = 1 y c = 2.
• En algún punto de su ejecución, P3 ejecuta la asignación b = b + c y, en algún punto de su
ejecución, P4 ejecuta la asignación c = b + c.
• Note que los dos procesos actualizan diferentes variables. Sin embargo, los valores finales de las
dos variables dependen del orden en que los dos procesos ejecuten estas dos asignaciones.
• Si P3 ejecuta su sentencia de asignación primero, entonces los valores finales serán b = 3 y c = 5.
• Si P4 ejecuta su sentencia de asignación primero, entonces los valores finales serán b = 4 y c = 3.
PREOCUPACIONES DEL
SISTEMA OPERATIVO
• Debe de ser capaz de seguir la pista de los distintos procesos activos. Lo hace
por medio del BCP.
• Debe ubicar y desubicar varios recursos para cada proceso activo. (tiempo de
procesador, memoria, archivos, dispositivos de E/S, etc.).
• Debe proteger los datos y recursos físicos de cada proceso contra acciones no
intencionadas de otros procesos.
• Los resultados de un proceso deben ser independientes a la velocidad relativa
a la que se realiza la ejecución con respecto a otros procesos concurrentes.
Interacciones entre procesos
Se puede clasificar las formas en que los procesos
interaccionan en base al grado en que perciben la
existencia de cada uno de los otros

Tres posibles grados de percepción más las


consecuencias de cada uno:
1. Procesos que no se perciben entre sí.
2. Procesos que se perciben indirectamente entre sí.
3. Procesos que se perciben directamente entre sí.
Procesos que no se perciben entre sí

Son procesos independientes que no se pretende


que trabajen juntos. endientes. Estos bien
pueden ser trabajos por lotes o bien sesiones
interactivas o una mezcla.
Aunque los procesos no estén trabajando juntos,
el sistema operativo necesita preocuparse de la
competencia por recursos.
Por ejemplo, dos aplicaciones independientes
pueden querer ambas acceder al mismo disco,
fichero o impresora. El sistema operativo debe
regular estos accesos.
Son procesos que no están
necesariamente al tanto de la
presencia de los demás
Procesos que se mediante sus respectivos ID de
perciben proceso, pero que comparten
indirectamente accesos a algún objeto, como un
entre sí. buffer de E/S.
Tales procesos exhiben
cooperación en la compartición
del objeto común.
Procesos que se perciben
directamente entre sí

Son procesos capaces de


comunicarse entre sí vía el ID
del proceso y que son
diseñados para trabajar
conjuntamente en cierta
actividad.
De nuevo, tales procesos
exhiben cooperación
Competencia entre procesos por recursos

• Los procesos concurrentes entran en conflicto entre ellos cuando


compiten por el uso del mismo recurso.
• En concreto, si dos procesos desean ambos acceder al mismo
recurso único, entonces, el sistema operativo reservará el recurso
para uno de ellos, y el otro tendrá que esperar.
• Por tanto, el proceso al que se le deniega el acceso será ralentizado.
En un caso extremo, el proceso bloqueado puede no conseguir
nunca el recurso y por tanto no terminar nunca satisfactoriamente.
Exclusión Mutua
En el caso de procesos en competencia, deben afrontarse problemas de
control.
1. Primero está la necesidad de exclusión mutua. Supóngase que dos o más
procesos requieren acceso a un recurso único no compartible, como una
impresora. Durante el curso de la ejecución, cada proceso estará enviando
mandatos al dispositivo de E/S, recibiendo información de estado,
enviando datos o recibiendo datos.
2. Nos referiremos a tal recurso como un recurso crítico y a la porción del
programa que lo utiliza como la sección crítica del programa. Es
importante que sólo se permita un programa al tiempo en su sección
crítica.
La aplicación de la exclusión mutua crea dos
problemas de control adicionales:
Interbloqueo. Inanición.
• Suponga que tres procesos (P1, P2, P3) requieren todos
accesos periódicos al recurso R.
• Considere la situación en la cual P1 está en posesión del
recurso y P2 y P3 están ambos retenidos, esperando por ese
recurso.
• Cuando P1 termine su sección crítica, debería permitírsele
acceso a R a P2 o P3.
• Asúmase que el sistema operativo le concede acceso a P3 y
que P1 solicita acceso otra vez antes de completar su
sección crítica.
• Si el sistema operativo le concede acceso a P1 después de
que P3 haya terminado, y posteriormente concede
alternativamente acceso a P1 y a P3, entonces a P2 puede
denegársele indefinidamente el acceso al recurso,
aunque no suceda un interbloqueo.
Requisitos para la exclusión mutua
1. La exclusión mutua debe hacerse cumplir: sólo se permite un proceso al
tiempo dentro de su sección crítica, de entre todos los procesos que tienen
secciones críticas para el mismo recurso u objeto compartido.
2. Un proceso que se pare en su sección no crítica debe hacerlo sin interferir
con otros procesos.
3. No debe ser posible que un proceso que solicite acceso a una sección crítica
sea postergado indefinidamente: ni interbloqueo ni inanición.
4. Cuando ningún proceso esté en una sección crítica, a cualquier proceso que
solicite entrar en su sección crítica debe permitírsele entrar sin demora.
5. Un proceso permanece dentro de su sección crítica sólo por un tiempo
finito.
Paradoja: la cena de los filósofos de Edsger
Dijkstra (TAREA)
• Cinco filósofos se sientan alrededor de una mesa y pasan su vida cenando y pensando. Cada filósofo
tiene un plato de fideos y un tenedor a la izquierda de su plato. Para comer los fideos son
necesarios dos tenedores y cada filósofo sólo puede tomar los que están a su izquierda y derecha. Si
cualquier filósofo toma un tenedor y el otro está ocupado, se quedará esperando, con el tenedor en
la mano, hasta que pueda tomar el otro tenedor, para luego empezar a comer.
• Si dos filósofos adyacentes intentan tomar el mismo tenedor a una vez, se produce una condición
de carrera: ambos compiten por tomar el mismo tenedor, y uno de ellos se queda sin comer.
• Si todos los filósofos toman el tenedor que está a su derecha al mismo tiempo, entonces todos se
quedarán esperando eternamente, porque alguien debe liberar el tenedor que les falta. Nadie lo
hará porque todos se encuentran en la misma situación (esperando que alguno deje sus tenedores).
Entonces los filósofos se morirán de hambre. Este bloqueo mutuo se denomina interbloqueo o
deadlock.
• El problema consiste en encontrar un algoritmo que permita que los filósofos nunca se mueran de
hambre.
Posibles soluciones para
la solución de la paradoja.
Semáforos
Pasamos ahora a mecanismos del sistema operativo y
del lenguaje de programación que se utilizan para
proporcionar concurrencia.

El primer avance fundamental en el tratamiento de


los problemas de programación concurrente ocurre
en 1965 con el tratado de Dijkstra. Dijkstra estaba
involucrado en el diseño de un sistema operativo
como una colección de procesos secuenciales
cooperantes y con el desarrollo de mecanismos
eficientes y fiables para dar soporte a la cooperación.
Semáforos
• Es un mecanismo de sincronización
• Una variable especial llamada semáforo es usada para comunicar
(tiene un valor de entero)
• Si un proceso esta esperando por una señal, es suspendido hasta
que esa señal se envía.
• Para transmitir una señal vía el semáforo s, el proceso ejecutará la
primitiva semSignal (s).
• Para recibir una señal vía el semáforo s, el proceso ejecutará la
primitiva semWait (s);
• Si la correspondiente señal no se ha transmitido todavía, el proceso
se suspenderá hasta que la transmisión tenga lugar.
Semáforos
Un Semáforo es una variable especial (de tipo
semáforo) que constituye una serie de
opciones elementales para poder restringir o
garantizar el acceso a los recursos en un
Sistema Operativo con un entorno de
multiprocesamiento.
Los semáforos y sus operaciones se encuentran
implementadas en el núcleo (KERNEL)del
sistema operativo.
Dependiendo del número de recursos a
gestionar, un semáforo puede ser:
1. Semáforo contador (Más de 1 recurso)
2. Semáforo binario (1 solo recurso)

Un semáforo se constituye por dos métodos


elementales
3. wait() – denominado P
4. signal() – denominado V
Inicia(Semáforo s, Entero r)
{
s = r;
Inicializació }
n
El número de recursos a
gestionar se define por la
variable entera r
Espera Wait() - P
P(Semáforo s)
{
if (s>0)
s = s-1;
else
wait();
}
Debido a que s representa el número de recursos disponibles, cuando
un proceso requiere utilizar alguno, llama al método wait(), en donde
si es que hay procesos disponibles se resta un número del semáforo,
sino se mantiene en un bucle hasta que tenga alguno libre.
Un proceso se bloquea
mientras se encuentra en el
bucle wait()
Señal Signal () - V
V(Semáforo s)
{
if (!procesos_bloqueados)
s = s+1;
else
signal();
}
Debido a que s representa el número de recursos disponibles, cuando
un proceso haya dejado de utilizar uno, se vuelve a sumar al semáforo,
siempre y cuando no haya procesos bloqueados.
Si es que existen procesos bloqueados,
ellos tienen prioridad para acceder a
los recursos que se hayan liberado.

También podría gustarte