2.2.3 Hilos en modo usuario y kernel

Existen dos niveles de implementación de hilos:

  1. Hilos a nivel de usuario.
  2. Hilos a nivel de kernel.
Hilos a nivel de usuario

Todo el trabajo de gestión de hilos lo realiza la aplicación y el núcleo o kernel no es consciente de la existencia de hilos. Es posible programar una aplicación como multihilo mediante una biblioteca de hilos. La misma contiene el código para crear y destruir hilos, intercambiar mensajes y datos entre hilos, para planificar la ejecución de hilos, para salvar y restaurar el contexto de los hilos.


Todas las operaciones descritas se llevan a cabo en el espacio de usuario de un mismo proceso. El kernel continúa planificando el proceso como una unidad y asignándole un único estado (listo, bloqueado, etcétera.)


Las ventajas que ofrecen son:

  • El intercambio de los hilos no necesita los privilegios del modo kernel, porque todas las estructuras de datos están en el espacio de direcciones de usuario de un mismo proceso. Por lo tanto, el proceso no debe cambiar a modo kernel para gestionar hilos. Se evita la sobrecarga de cambio de modo y con esto el sobrecoste u overhead.
  • Se puede realizar una planificación específica. Dependiendo de qué aplicación sea, se puede decidir por una u otra planificación según sus ventajas.
  • Los ULT se pueden ejecutar en cualquier sistema operativo. La biblioteca de hilos es un conjunto compartido.

Las desventajas más relevantes son:

  • En la mayoría de los sistemas operativos las llamadas al sistema (system calls) son bloqueantes. Cuando un hilo realiza una llamada al sistema, se bloquea el mismo y también el resto de los hilos del proceso.
  • Una aplicación multihilo no puede aprovechar las ventajas de los multiprocesadores. El núcleo asigna un solo proceso a un solo procesador, dado que el núcleo no interviene, ve al conjunto de hilos como un solo proceso.

Una solución al bloqueo mediante llamadas al sistema es usando la técnica de jacketing, que es convertir una llamada bloqueante en no bloqueante.

Hilos a nivel de kernel

Todo el trabajo de gestión de hilos lo realiza el kernel. En el área de la aplicación no hay código de gestión de hilos, únicamente un API (interfaz de programas de aplicación) para la gestión de hilos en el núcleo. Windows 2000, Linux y OS/2 utilizan este método.


Todas las operaciones descritas se llevan a cabo en el espacio de usuario de un mismo proceso. El kernel continúa planificando el proceso como una unidad y asignándole un único estado (listo, bloqueado, etc.)


Las ventajas que ofrecen son:

  • El kernel puede planificar simultáneamente múltiples hilos del mismo proceso en múltiples procesadores.
  • Si se bloquea un hilo, puede planificar otro del mismo proceso.
  • Las propias funciones del kernel pueden ser multihilo.

La desventaja más relevante es:

  • El paso de control de un hilo a otro precisa de un cambio de modo.

Una solución al bloqueo mediante llamadas al sistema es usando la técnica de jacketing, que es convertir una llamada bloqueante en no bloqueante.

Reflexiona la siguiente pregunta que será tratada en la sesión de clase.

¿Cuándo considerarías implementar hilos a nivel kernel y a nivel usuario?