Los turnstiles de Solaris: cómo una estructura de datos casi olvidada terminó en tu sistema operativo

Fuentes: Solaris Turnstiles

Solaris, el sistema operativo de Sun Microsystems, destacó en su época por su soporte de multiprocesamiento simétrico (SMP). Entre sus aportaciones más conocidas figuran el slab allocator, ZFS, Solaris Containers y DTrace, pero hay una innovación mucho menos divulgada: los turnstiles.

Los turnstiles son estructuras de datos asociadas a cerrojos (mutexes) en contención. Resuelven dos problemas clave. Primero, evitan inflar cada mutex con metadatos sobre hilos en espera, algo costoso cuando se usa locking fino y la mayoría de cerrojos están libres. Segundo, mitigan la inversión de prioridad: cuando un hilo de alta prioridad espera un cerrojo retenido por uno de baja, este hereda temporalmente la prioridad del primero, evitando que tareas de prioridad media lo adelanten y bloqueen al hilo alto de forma indefinida.

El mecanismo es elegante: cada hilo recibe su propio turnstile al crearse; al bloquearse, lo dona al cerrojo que espera. La asociación entre cerrojo y turnstile se gestiona mediante una tabla hash. Para soportar herencia de prioridad multi-salto, el kernel recorre cadenas de tipo turnstile→propietario→turnstile hasta dar con un hilo que no espera nada.

Esta idea, aparentemente oscura, trascendió Solaris: variantes se encuentran hoy en otros UNIX derivados, en navegadores web y en runtimes de lenguajes. Entre las alternativas de otros sistemas están AutoBoost de Windows y el rt-mutex de Linux con herencia de prioridad.