next up previous
Next: Parte II Up: Pregunta 1 Previous: Pregunta 1

Parte I

En una empresa famosa, proveedora de Sistemas Operativos, se quiere implementar un Sistema Operativo multi-procesador. El jefe de la empresa (que no sabe mucho de software) quiere que usted implemente exclusión mutua ( lock/unlock) en el kernel a bajo nivel.

El requerimiento es implementarlo sin busy-wait, utilizando colas de espera (parecido al nSystem). Tampoco se puede detener la ejecución del resto de los procesadores.

Escriba el mejor código que pueda para un lock/unlock de bajo nivel, suponiendo alguna ayuda razonable del hardware (instrucción test-and-set o swap atómicas) y responda al requerimiento del jefe. Argumente.

lock(key)
{
    while(test_and_set(key))
	    ;
}

unlock(key)
{
    key = FALSE;
}

Esto es lo mejor que se puede hacer, puesto que cualquier implementación de cola de espera requiere acceso exclusivo al código que manipula la cola de espera, lo que es imposible de implementar sin lock/unlock. Nuestro jefe no entiende nada.



José M. Piquer
Sat Oct 23 20:21:27 CLST 1999