Nuestros programadores estrellas agotaron sus reservas de café, en su búsqueda noche y día por la respuesta, hasta que Gloria halló el hallazgo en GitHub así que hoy la compartimos aquí.
Solución:
- Un subproceso del kernel es un
task_struct
sin componentes de espacio de usuario. - Además de la falta de espacio de usuario, tiene diferentes ancestros (
kthreadd
subproceso del kernel en lugar delinit
proceso) y es creado por una API solo del kernel en lugar de secuencias declone
desdefork/exec
llamadas del sistema. - Dos subprocesos del kernel tienen
kthreadd
como padre. Aparte de eso, los subprocesos del núcleo disfrutan de la misma “independencia” entre sí que los procesos del espacio de usuario. - Utilizar el
kthread_run
función/macro del encabezado kthread.h Lo más probable es que tenga que escribir un módulo del kernel para llamar a esta función, por lo que debería echar un vistazo a los controladores de dispositivos de Linux - 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 eldmesg
mando.
Un subproceso del kernel es una tarea del kernel que se ejecuta solo en modo kernel; por lo general no ha sido creado por fork()
o clone()
llamadas del sistema. un ejemplo es kworker
o kswapd
.
Probablemente no debería implementar subprocesos del kernel si no sabe lo que son.
Google ofrece muchas páginas sobre hilos del núcleo, por ejemplo, la página de Frey.
subprocesos de usuario y pila:
Cada subproceso tiene su propia pila para que pueda usar sus propias variables locales, las variables globales compartidas del subproceso que forman parte de las secciones .data o .bss del ejecutable de Linux. Dado que los subprocesos comparten variables globales, es decir, usamos mecanismos de sincronización como mutex cuando queremos acceder/modificar variables globales en una aplicación de subprocesos múltiples. Las variables locales son parte de la pila individual de subprocesos, por lo que no es necesaria ninguna sincronización.
Subprocesos del núcleo
Los subprocesos del kernel surgieron de la necesidad de ejecutar el código del kernel en el contexto del proceso. Los subprocesos del kernel son la base del mecanismo de la cola de trabajo. Esencialmente, un kernel de subproceso es un subproceso que solo se ejecuta en modo kernel y no tiene espacio de direcciones de usuario u otro usuario. attributes.
Para crear un núcleo de subprocesos, utilice kthread_create():
#include
structure task_struct *kthread_create(int (*threadfn)(void *data),
void *data, const char namefmt[], ...);
subprocesos y pila del kernel:
Los subprocesos del kernel se utilizan para realizar tareas de posprocesamiento para el kernel, como subprocesos de descarga de pdf, subprocesos de trabajo, etc. al espacio de usuario. Los subprocesos del núcleo son programables y evitables como procesos normales.
Los subprocesos del kernel tienen sus propias pilas, que utilizan para administrar la información local.
Más sobre las pilas del kernel:- https://www.kernel.org/doc/Documentation/x86/kernel-stacks
Te invitamos a confirmar nuestro quehacer dejando un comentario o dejando una puntuación te damos las gracias.