2012-02-28 20 views
11

acabo de empezar a codificar el controlador del dispositivo y nuevo para el enhebrado, revisé muchos documentos para tener una idea sobre los hilos. todavía tengo algunas dudas.¿Qué es un hilo Kernel?

  1. lo que es un hilo del núcleo?.
  2. ¿En qué se diferencia del hilo de usuario?
  3. ¿Cuál es la relación entre los dos hilos?
  4. ¿cómo puedo implementar los hilos del kernel?
  5. ¿dónde puedo ver el resultado de la implementación ?.

¿Alguien me puede ayudar? gracias.

+2

Has leído esto, supongo? http://en.wikipedia.org/wiki/Thread_(computing) Eso debería al menos responder algunas de sus preguntas. – Bart

+2

También hay [esta respuesta anterior] (http://stackoverflow.com/a/8809791/777186) en un contexto similar. – jogojapan

Respuesta

7

Un hilo del kernel es una tarea del kernel que se ejecuta solo en modo kernel; generalmente no ha sido creado por fork() o clone() llamadas al sistema. Un ejemplo es kworker o kswapd.

Probablemente no deberías implementar kernel threads si no sabes cuáles son.

Google ofrece muchas páginas sobre hilos del kernel, p. Frey's page.

+2

Solo para la información 'task-> mm' para el hilo del kernel es en realidad' NULL'. –

0

Puesto que está comparando hilos de kernel con hilos de usuario [land], supongo que quiere decir algo como lo siguiente.

La forma normal de implementar subprocesos hoy en día es hacerlo en el kernel, por lo que se pueden considerar subprocesos "normales". Sin embargo, también es posible hacerlo en el territorio del usuario, utilizando señales como SIGALRM, cuyo controlador guardará el estado del proceso actual (principalmente registros) y los cambiará a otro previamente guardado. Varios sistemas operativos lo usaron como una forma de implementar subprocesos antes de que obtuvieran el soporte adecuado para el hilo del kernel. Pueden ser más rápidos, ya que no tienes que entrar en el modo kernel, pero en la práctica se han desvanecido.

También hay subprocesos cooperativos de usuario, donde un subproceso se ejecuta hasta que llama a una función especial (normalmente llamada rendimiento), que luego cambia a otro subproceso de forma similar a como lo hace con SIGALRM anterior. La ventaja aquí es que el programa está en control total, lo que puede ser útil cuando tienes problemas de tiempo (un juego, por ejemplo). Tampoco tiene que preocuparse mucho por la seguridad de los hilos. La gran desventaja es que solo se puede ejecutar un hilo a la vez, y por lo tanto, este método tampoco es común ahora que los procesadores tienen múltiples núcleos.

Los hilos del kernel se implementan en el kernel. ¿Tal vez quiso decir cómo usarlos? La forma más común es llamar al pthread_create.

14
  1. Una hebra de kernel es task_struct sin componentes de espacio de usuario.
  2. lado de la falta de espacio de usuario, que tiene diferentes antepasados ​​(kthreadd hilo del núcleo en lugar del proceso init) y es creado por un API kernel-sólo que en lugar de las secuencias de clone de fork/exec llamadas al sistema.
  3. Dos hilos del núcleo tienen kthreadd como elemento principal. Aparte de eso, el hilo del kernel disfruta de la misma "independencia" que el otro a medida que el espacio de usuario procesa.
  4. Uso del kthread_run función/macro de la kthread.h header Lo más probable tendrá que escribir un módulo del núcleo con el fin de llamar a esta función, por lo que debe echar un vistazo a El Linux Device Drivers
  5. Si se refiere a la salida de texto de su implementación (a través de printk llamadas), puede ver esta salida en el registro del kernel usando el comando dmesg.