Está en la página 1de 7

PLANTEAMIENTO:

a) Plantear el enunciado del caso. Esto es sí es TSL o SWAP; RR, JSF, prioridad, etc.
b) Evaluar la solución TSL con y sin falla
c) Plantear la solución SWAP con y sin falla, especificar tipo de algoritmo de planificación
d) Evaluar la solución SWAP con y sin falla

Grupos de 2 o 3 estudiantes
INSTRUC

VARIABLES TSL no falla cuando los proc


hacen trampa, es decir, desa
cerrojo Variable compartida cerrojo cuando salen de la secc
target Variable que apunta al valor de cerrojo y no intentan forzar la entrad
rv Copia de cerrojo otro proceso está en ela regió

FUNCIONES
TestAndSet(
boolean
*target) Función que activa el cerrojo

PROCESOS
Cuando un proceso A desea en
A Proceso con funcionamiento normal que el proceso A entra en la región
solicita la región crítica primero que B este no puede, se mantiene en
B Proceso con funcionamiento normal a FALSE. Después de esto, el cic

ITERACIÓN PROCESO INSTRUCCIÓN cerrojo


0 - - FALSE
while( TestAndSet(&cerrojo) );
rv = *target
A *target = TRUE TRUE

return rv

while( TestAndSet(&cerrojo) );

rv = *target

B *target = TRUE TRUE

1 return rv

A cerrojo = FALSE; FALSE

while( TestAndSet(&cerrojo) );
rv = *target
*target = TRUE TRUE
B
return rv

cerrojo = FALSE; FALSE


INSTRUCCIÓN TSL

TSL no falla cuando los procesos no Definición de la instrucción TSL


hacen trampa, es decir, desactivan el
rrojo cuando salen de la sección crítica boolean TestAndSet(boolean *target){
y no intentan forzar la entrada cuando boolean rv = *target;//se hace una copia
otro proceso está en ela región crítica. *target = TRUE;//se activa el cerrojo
return rv;//Se retorna el valor anterior
}

uando un proceso A desea entrar en la región crítica, entra en un ciclo while que verifica si la variable compartida está activada. Si no es as
proceso A entra en la región crítica y la variable compartida cerrojo se hace TRUE. Cuando otro proceso (B) desea entrar a la sección crític
te no puede, se mantiene en espera ocupada ejecutando el ciclo while hasta que el proceso A sale de la región crítica al hacer cerrojo igu
FALSE. Después de esto, el ciclo while de B temrina y este entra en la región crítica.

target rv TestAndSet() DESCRIPCIÓN


- - - Ningún proceso está en la región crítica
FALSE A desea entrar a la sección crítica
FALSE rv toma el valor de cerrojo
TRUE El cerrojo se activa al activar la variable que
apunta a él
Ya que TestAndSet() retorna FALSE, A sale
FALSE FALSE
del ciclo while y entra a la sección crítica
TRUE B desea entrar a la sección crítica
TRUE La variable compartida cerrojo es TRUE
porque A está en la sección crítica
TRUE

Se retorna TRUE porque A está en la región


TRUE TRUE crítica. B no sale del ciclo hasta que cerrojo
== FALSE. Espera ocupada.
A sale de la región crítica. El cerrojo se
desactiva.
FALSE B desea entrar a la sección crítica
FALSE rv toma el valor de cerrojo
TRUE El cerrojo se activa al activar la variable que
apunta a él
Ya que TestAndSet() retorna FALSE, B sale
FALSE FALSE
del ciclo while y entra a la sección crítica

B sale de la región crítica. El cerrojo se


desactiva.
Implementación de la exclusión mutua con
TSL

do {
...
//solicitud para entrar en sección crítica
while( TestAndSet(&cerrojo) );
//SECCIÓN CRÍTICA...

cerrojo = FALSE;
//SECCIÓN RESTANTE...
} while(TRUE);

ompartida está activada. Si no es así,


so (B) desea entrar a la sección crítica,
la región crítica al hacer cerrojo igual

La instrucción TSL no funciona en sistemas multiprocesador porque si un proceso se queda por mucho
tiempo en la sección crítica, los otros procesos que quieren entrar en la región crítica se quedarán
esperando (espera ocupada) a que se desocupe el recurso que desean. En un sistema multiprocesador
esto se traduce en tiempos de CPU grandes que hacen que el sistema sea lento. El profe dice: ¿Es
esta la razón? revisar el concepto de interrupción.

Se debe garantizar que al implementar la instrucción TSL se utilice el hardware que bloquee el bus de
memoria, sino sólo se trabajará con interrupciones y esto sólo afecta 1 procesador, no garantiza la
exclusión mutua. El profe dice: ¿Es esta la razón? revisar el concepto de
interrupción y los efectos de bloquesr el bus de memoria.
INSTRUCCIÓN TS

VARIABLES TSL falla cuando los procesos


hacen trampa. Por ejemplo,
cerrojo Variable compartida cuando desctivan el cerrojo
target Variable que apunta al valor de cerrojo justo antes de solicitar la
rv Copia de cerrojo entrada a la sección crítica.

FUNCIONES
TestAndSet(
boolean Función que activa el cerrojo
*target)

PROCESOS

A Proceso con funcionamiento normal que


solicita la región crítica primero que B
B Proceso con funcionamiento normal

ITERACIÓN PROCESO INSTRUCCIÓN cerrojo


0 - - FALSE
while( TestAndSet(&cerrojo) );
rv = *target
A *target = TRUE TRUE

return rv

cerrojo = FALSE; FALSE


1
while( TestAndSet(&cerrojo) );

rv = *target
B
*target = TRUE TRUE

return rv

El profe dice: ¿Es cierto que los procesos A y B llegan a estar simultá
INSTRUCCIÓN TSL

Implementación de la exclusión mutu


TSL
TSL falla cuando los procesos Definición de la instrucción TSL
hacen trampa. Por ejemplo,
cuando desctivan el cerrojo do {
boolean TestAndSet(boolean *target){ ...
justo antes de solicitar la boolean rv = *target;//se hace una copia
entrada a la sección crítica. //solicitud para entrar en sección crític
*target = TRUE;//se activa el cerrojo
return rv;//Se retorna el valor anterior while( TestAndSet(&cerrojo) );
} //SECCIÓN CRÍTICA...

cerrojo = FALSE;
//SECCIÓN RESTANTE...
} while(TRUE);

target rv TestAndSet() DESCRIPCIÓN


- - - Ningún proceso está en la región crítica
FALSE A desea entrar a la sección crítica
FALSE rv toma el valor de cerrojo
TRUE El cerrojo se activa al activar la variable que
apunta a él
Ya que TestAndSet() retorna FALSE, A sale
FALSE FALSE
del ciclo while y entra a la sección crítica
B desactiva el cerrojo para poder entrar a la
región crítica.
FALSE B desea entrar a la sección crítica
FALSE La variable compartida cerrojo es FALSE
porque B hizo trampa
TRUE
Ya que TestAndSet() retorna FALSE, B sale
FALSE FALSE del ciclo while y entra a la sección crítica. A
y B están en la sección crítica.

rocesos A y B llegan a estar simultáneamente en la sección crítica.


entación de la exclusión mutua con

ud para entrar en sección crítica


TestAndSet(&cerrojo) );
ÓN CRÍTICA...

= FALSE;
ÓN RESTANTE...
RUE);

También podría gustarte