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. 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.
INSTRUCCIONES
ESPECIALES DE MAQUINA
En
configuraciones multiprocesador, varios procesadores
comparten el acceso a una memoria principal común. En
este caso, no hay relación maestro/esclavo, sino que
los procesadores funcionan independientemente en una
relación de igualdad. No hay un mecanismo de
interrupciones entre los procesadores en el que se
pueda basar la exclusión mutua.
A
nivel de hardware, como se ha mencionado, los accesos
a posiciones de memoria excluyen cualquier otro acceso
a la misma posición. Con esta base, los diseñadores
han propuesto varias instrucciones de máquina que
realizan dos acciones atómicamente, tales cono leer y
escribir o leer y examinar, sobre una misma posición
de memoria en un único ciclo de lectura de
instrucción.
Puesto
que estas acciones se realizan en un único ciclo de
instrucción, no están sujetas a injerencias por parte
de otras instrucciones.
-La
instrucción COMPARAR Y FIJAR (TS, Test and Set)puede
definirse de la siguiente forma:
booleano
TS(int i)
{
if (I==0)
{
I=1;
return cierto;
}
else
{
return falso;
}
}
La
instrucción examina el valor de su argumento i. Si el
valor es 0 , lo cambia por 1 y devuelve cierto. En
otro caso, el valor no se modifica y se devuelve
falso. La función Comparar y Fijar se ejecuta automáticamente
en su totalidad, es decir, no está sujeta a
interrupciones.
La
instrucción INTERCAMBIAR se puede definir como sigue:
void
intercambiar (int registro, int memoria)
{
int temp;
temp = memoria;
memoria = registro;
registro = temp;
}
Esta
instrucción intercambia el contenido de un registro
con el de una posición de memoria. Durante la
ejecución de la instrucción, se bloquea el acceso a la
posición de memoria de cualquier otra instrucción que
haga referencia a la misma posición.
Propiedades
de las soluciones con instrucciones de máquina
El
uso de instrucciones especiales de la máquina para
hacer cumplir la exclusión mutua tiene varias
ventajas:
- Es
aplicable a cualquier número de procesos en sistemas
con memoria compartida, tanto de monoprocesador como
de multiprocesador.
- Es
simple y fácil de verificar.
- Puede
usarse para disponer de varias secciones críticas;
cada sección crítica puede definirse con su propia
variable.
Algunas
desventajas importantes son las siguientes:
- SE
EMPLEA ESPERA ACTIVA. Así pues, mientras un proceso
está esperando para acceder a la sección crítica,
continúa consumiendo tiempo del procesador.
- PUEDE
PRODUCIRSE INANICIÓN. Cuando un proceso abandona la
sección crítica y hay más de un proceso esperando,
la selección es arbitraria. Así pues se podría
denegar el acceso a algún proceso indefinidamente.
- PUEDE
PRODUCIRSE INTERBLOQUEO. Supóngase la siguiente
escena en un sistema monoprocesador. El proceso "P1"
ejecuta una instrucción especial (sea TS o
Intercambiar) y entra su sección crítica. Se
interrumpe a "P1" para dar el procesador a "P2", que
tiene mayor prioridad. Si "P2" intenta ahora usar el
mismo recurso que "P1", se le negará el acceso por
el mecanismo de exclusión mutua. De este modo, "P2"
entrará en un bucle de espera activa. Sin embargo,
"P1" nunca será expedido porque su prioridad es
menor que la del proceso listo "p2".
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.
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.
Arriba
|