HILOS: ¿Hilos del núcleo frente a hilos compatibles con el núcleo frente a hilos a nivel de usuario?

9

¿Alguien sabe cuál es la diferencia entre estos?

Me parece que los hilos del kernel corresponden al código que ejecuta el kernel (intuitivamente), pero no estoy seguro de los otros dos ...

Además, ¿se consideraría el estándar pthreads a nivel de usuario y compatible con el kernel, ya que está accediendo a una biblioteca mientras el kernel realiza toda la programación / cambio de subprocesos?

Templario oscuro
fuente

Respuestas:

14

El término "hilos de kernel" puede usarse para referirse a hilos reales que se ejecutan completamente en el espacio del kernel o puede referirse a hilos de espacio de usuario programados por el kernel. El término "subprocesos admitidos por el núcleo" significa el último, subprocesos que se ejecutan en el espacio del usuario pero son facilitados por el núcleo, lo que generalmente significa que el núcleo los programa.

"Subprocesos a nivel de usuario" generalmente significa subprocesos visibles para el espacio del usuario. Es decir, lo que crea cuando llama a la función "crear hilo" de su estándar de subprocesos. En general, el término "subproceso a nivel de usuario" se utiliza para referirse a un subproceso creado por el código de la aplicación, independientemente de cómo lo implemente el sistema. Puede ser un hilo de espacio de usuario puro con poco o ningún soporte de kernel o puede ser un hilo programado por el kernel.

El estándar pthreads puede implementarse como subprocesos de espacio de usuario puro (donde el núcleo programa el proceso y el proceso programa los subprocesos), subprocesos compatibles con el núcleo (donde el núcleo programa los subprocesos directamente) o un enfoque híbrido (donde el núcleo programa un subproceso a nivel de kernel que luego, en el espacio de usuario, programa un subproceso a nivel de usuario). El estándar no exige ningún medio particular de implementación. La implementación más común es la asignación de 1 a 1, donde cada subproceso de nivel de usuario tiene un subproceso correspondiente que está programado por el núcleo.

David Schwartz
fuente
¿Cómo es la implementación en Linux?
yati sagade
3
En todos los sistemas Linux modernos (2.6 kernel o posterior) que conozco, la implementación de subprocesos predeterminada del sistema es 1 a 1, cada subproceso de nivel de usuario tiene una KSE (entidad de programación del kernel correspondiente), básicamente, un subproceso programado por el Kernel de Linux). El núcleo programará directamente el hilo que cree con 'pthread_create'. Los sistemas modernos generalmente usan NPTL , los sistemas más antiguos usaban LinuxThreads , ambos son 1 a 1.
David Schwartz
"o un enfoque híbrido (donde el núcleo programa un subproceso a nivel del núcleo que luego, en el espacio de usuario, programa un subproceso a nivel de usuario)". Hola David, ¿podrías explicar esto de nuevo? No estoy seguro de lo que está pasando ... Cuando dices mapeo 1 a 1, ¿te refieres a los bloques de control de subprocesos cuando mencionas cabezas de nivel de núcleo?
Dark Templar
Por 1-a-1 quiero decir que cada vez que llama 'pthread_create', se crea un nuevo contexto programado por el núcleo. En un enfoque híbrido , el número de contextos programados por el núcleo es menor que el número de subprocesos creados: el núcleo programa uno de esos contextos y luego la biblioteca de subprocesos programa uno de los subprocesos creados por la aplicación.
David Schwartz