Arquitectos del Movimiento Moderno (Historia de la Arquitectura)
Exclusión mutua
1. EXCLUSIÓN MUTUA
U N P RO C E S O N O D E B E P O D E R S O L I C I TAR AC C E S O A U NA
S E C C I Ó N C R Í T I C A PA R A D E S P U É S S E R D E M O R A D O
INDEFINIDAMENTE, NO PUEDE PERMITIRSE EL
INTERBLOQUEO O LA INANICIÓN. SI NINGÚN PROCESO
ESTÁ EN SU SECCIÓN CRÍTICA, CUALQUIER PROCESO
Q U E S O L I C I T E E N T R A R E N L A S U YA D E B E P O D E R
HACERLO SIN DEMORA. NO SE DEBE SUPONER SOBRE LA
V ELOCIDAD R EL ATI VA D E LOS PROC ESOS O EL NÚMERO
DE PROCESADORES. UN PROCESO PERMANECE EN SU
SECCIÓN CRÍTICA POR UN TIEMPO FINITO. UNA MANERA
D E S AT I S FA C E R L O S R E Q U I S I TO S D E E X C L U S I Ó N M U T UA
ES DEJAR LA RESPONSABILIDAD A LOS PROCESOS QUE
D E S E E N E J E C U TA R C O N C URRE NT EM E NT E. TA N TO S I S O N
PROGRAMAS DEL SISTEMA COMO DE APLICACIÓN, LOS
P R O C E S O S D E B E N C O O R D I N A R S E U N O S C O N OT R O S PA R A
C U M P L I R L A E XC LU S I Ó N M U T UA , S I N AY U DA D E L
LENGUAJE DE PROGRAMACIÓN O DEL SISTEMA
O P E R AT I VO. E S TO S M É TO D O S S E C O N O C E N C O M O
SOLUCIONES POR SOFTWARE.
2. EXCLUSIÓN MUTUA:
SOLUCIONES POR SOFTWARE
Pueden implementarse soluciones
de software para los procesos
concurrentes que se ejecuten en
máquinas monoprocesador o
multiprocesador con memoria
principal compartida.
3. ALGORITMO DE DEKKER
Este método ilustra la
mayoría de los errores
habituales que se producen
en la construcción de
programas concurrentes.
4. Primer intento
Cualquier intento de exclusión
mutua debe depender de algunos
mecanismos básicos de
exclusión en el hardware. El más
habitual es que sólo se puede
acceder a una posición de
memoria en cada instante,
teniendo en cuenta esto se
reserva una posición de memoria
global llamada turno.
5. Segundo intento:
Cada proceso debe tener su propia
llave de la sección crítica para
que, si uno de ellos falla, pueda
seguir accediendo a su sección
crítica; para esto se define un
vector booleano señal. Cada
proceso puede evaluar el valor de
señal del otro, pero no
modificarlo.
6. Tercer intento
El segundo intento falla porque un
proceso puede cambiar su estado
después de que el otro proceso lo ha
comprobado pero antes de que pueda
entrar en su sección crítica.
Si un proceso falla dentro de su sección
crítica, incluso el código que da valor a
la variable señal que controla el acceso
a la sección crítica, el otro proceso se
bloquea y si un proceso falla fuera de su
sección crítica, el otro proceso no se
bloquea.
7. Cuarto intento
En el tercer intento, un proceso
fijaba su estado sin conocer el
estado del otro. Se puede arreglar
esto haciendo que los procesos
activen su señal para indicar que
desean entrar en la sección
crítica pero deben estar listos
para desactivar la variable señal y
ceder la preferencia al otro
proceso.
8. ALGORITMO DE PETERSON
El algoritmo de Deker resuelve el problema
de la exclusión mutua pero mediante un
programa complejo, difícil de seguir y
cuya corrección es difícil de demostrar.
Peterson ha desarrollado una solución
simple y elegante. Como antes, la
variable global señal indica la posición
de cada proceso con respecto a la
exclusión mutua y la variable global turno
resuelve los conflictos de simultaneidad.
9. DISCIPLINA DE COLA
La disciplina de cola mas simple es la de
primero en llegar/ primero en salir, pero
ésta puede no ser suficiente si algunos
mensajes son mas urgentes que otros.
Una alternativa es permitir la
especificación de prioridades de los
mensajes, en función del tipo de mensaje
o por designación del emisor. Otra
alternativa es permitir al receptor
examinar la cola de mensajes y
seleccionar el mensaje a recibir a
continuación.
10. EXCLUSIÓN MUTUA:
SOLUCIONES POR HARDWARE
INHABILITACIÓN DE INTERRUPCIONES
En una máquina monoprocesador, la ejecución de
procesos concurrentes no puede superponerse;
los procesos solo pueden intercalarse. Es más, un
proceso continuará ejecutándose hasta que
solicite un servicio el sistema operativo o hasta
que sea interrumpido. Por lo tanto, para
garantizar la exclusión mutua, es suficiente con
impedir que un proceso sea interrumpido. Esta
capacidad puede ofrecerse en forma de
primitivas definidas por el núcleo del sistema
para habilitar o inhabilitar las interrupciones.
11. Un proceso puede hacer cumplir la exclusión mutua del siguiente modo:
While (cierto)
{
/*inhabilitar interrupciones */;
/* sección critica */;
/* habilitar interrupciones */;
/* resto */;
}
Puesto que la sección crítica no puede ser interrumpida, la exclusión
mutua está garantizada. Sin embargo, el precio de esta solución es
alto. La eficiencia de la ejecución puede verse notablemente degradada
debido a que se limita la capacidad del procesador para intercalar
programas. Un segundo problema es que está técnica no funciona en
arquitecturas de multiprocesador. Cuando el sistema tenga más de un
procesador, es posible (y habitual) que haya más de un proceso
ejecutándose al mismo tiempo. En este caso, inhabilitar las
interrupciones no garantiza la exclusión mutua.