Sistemas operativos modernos
colo (en hardware) para utiUzarlas. Los buses modernos cuentan con estos recursos, pero en los anteriores que carecían de ellos no era posible implementar TSL en forma correcta. Fue por eso que se inventó el protocolo de Peterson, para efectuar la sincronización totalmente en soft ware (Peterson, 1981). Si se implementa y usa en forma correcta, TSL garantiza el funcionamiento de la exclu sión mutua. Sin embargo, este método de exclusión mutua utiliza un bloqueo giratorio por que la CPU solicitante tan sólo da vueltas en un ciclo, probando el bloqueo tan a menudo como puede. Esto no sólo desperdicia por completo el tiempo de la UCP solicitante, sino que podría imponer una carga muy pesada al bus o a la memoria, haciendo mucho más lenta la operación de las demás CPUs que están tratando de efectuar su trabajo normal. A primera vista, podría parecer que el uso de cachés elimina el problema de la competen cia por el bus, pero no es así. En teoría, una vez que la CPU solicitante ha leído la palabra del bloqueo, debe tener una copia en su caché. Mientras ninguna otra CPU intente usar el bloqueo, la CPU solicitante deberá tener la capacidad de operar desde su caché. Cuando la CPU que tiene el bloqueo escriba en él un 1 para liberarlo, el protocolo de caché anulará de manera automáti ca la validez de todas las copias de esa palabra en cachés remotos y obligará a obtener otra vez el valor correcto. El problema es que los cachés operan en bloques de 32 o 64 bytes. Por lo regular, la CPU que tiene el bloqueo necesita las palabras que están a su alrededor. Puesto que la instrucción T S L es de escritura (porque modifica el bloqueo), necesita acceso exclusivo al bloque de ca ché que confiene el bloqueo. Por tanto, cada T S L anula la validez del bloque en el caché del poseedor del bloqueo y obtiene una copia privada, exclusiva, para la CPU solicitante. En cuan to el poseedor del bloqueo tenga acceso a una palabra adyacente a dicho bloqueo, el bloque de caché se traslada a su máquina. Por ello, el bloque de caché que contiene el bloqueo estará pa sando en forma continua entre el poseedor del bloqueo y el solicitante del bloqueo, generando aún más tráfico de bus que el que generarían lecturas individuales de la palabra del bloqueo. Si pudiéramos deshacemos de todas las escrituras inducidas por T S L en el lado del solici tante, reduciríamos este movimiento de caché de manera considerable. Esto puede lograrse si se hace que la CPU solicitante primero efectúe una lectura pura para ver si el bloqueo está li bre. Sólo si el bloqueo aparentemente está libre, esa CPU ejecutará una T S L para obtenerlo. El resultado de este pequeño cambio es que casi todos los sondeos ahora son lecturas en vez de escrituras. Si la CPU que fiene el bloqueo sólo está leyendo las variables del mismo bloque de caché, cada CPU podrá tener una copia en modo compartido de sólo lectura, y se efimina- rán todas las transferencias de bloques de caché. Cuando por fin se libere el bloqueo, la CPU que lo tenía efectuará una escritura, que requiere acceso exclusivo, y esto anulará la validez de todas las demás copias en cachés remotos. La siguiente vez que la CPU solicitante lea el blo queo, el bloque de caché volverá a cargarse. Cabe señalar que si dos o más CPUs están tratan do de obtener el mismo bloqueo, podría suceder que ambas detecten al mismo fiempo que está libre y ambas ejecuten una T S L al mismo fiempo para obtenerlo. Sólo una de estas instruccio nes se logrará, por lo que no hay una condición de competencia porque la adquisición real se efectúa con la instrucción TSL, y ésta es atómica. Ver que un bloqueo está libre y de inmedia to tratar de apoderarse de él con una instrucción C X o T S L no garanfiza que se obtendrá. Al guien más podría ganar.
RkJQdWJsaXNoZXIy MjI4NDcx