Kernel de Linux: tarea vs hilo

Kernel de Linux: tarea vs hilo

Cuando estaba leyendo un libro (programación del kernel de Linux), encontré un párrafo interesante/confuso sobre mm_segment_t addr_limit(uno de los miembros de struct_task) como se muestra a continuación:

mm_segment_t addr_limit;
A diferencia de los kernels más antiguos, desde la versión 2.4 las tareas (threads) también pueden estar dentro del kernel. Estos pueden acceder a un espacio de direcciones más grande que las tareas en el espacio del usuario.límite_direccióndescribe el espacio de direcciones al que es posible acceder utilizando el núcleo de la tarea.

Preguntas:

  1. En el primer punto dice "(tareas) hilostambién puede serdentro del núcleo" está ahí. ¿Qué significa? ¿Los subprocesos no están necesariamente dentro del núcleo?

  2. En la segunda frase, "Estospuede acceder a un espacio de direcciones más grande que las tareas en el espacio del usuario". No entiendo quéestos¿medio? Si está hablando de subprocesos, ¿cómo pueden los subprocesos tener un espacio de direcciones mayor que las tareas?

Respuesta1

La frase "dentro del núcleo" probablemente se refiere ahilos del núcleoque son utilizados por el propio núcleo para trabajos que pueden realizarse de forma asincrónica. Puede ver ejemplos de estos subprocesos en su árbol de procesos:

# ps aux | grep '\[.*\]$' | head
root         2  0.0  0.0      0     0 ?        S    May05   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    May05   0:03 [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S    May05   0:00 [kworker/0:0]
root         5  0.0  0.0      0     0 ?        S    May05   0:00 [kworker/u:0]
root         6  0.0  0.0      0     0 ?        S    May05   0:00 [migration/0]
root         7  0.0  0.0      0     0 ?        S    May05   0:00 [watchdog/0]
root         8  0.0  0.0      0     0 ?        S    May05   0:00 [migration/1]
root         9  0.0  0.0      0     0 ?        S    May05   0:00 [kworker/1:0]
root        10  0.0  0.0      0     0 ?        S    May05   0:02 [ksoftirqd/1]
root        11  0.0  0.0      0     0 ?        S    May05   0:00 [watchdog/1]

Estos subprocesos se crean mediante el código del núcleo que llama a kthread_create(). Estos subprocesos se ejecutan en modo kernel y realizan diversas tareas que espera del kernel.

Las "tareas en el espacio de usuario", por otro lado, representan subprocesos o procesos como normalmente los consideraría, creados mediante fork+exec o pthread_create. Estos se ejecutan en modo de usuario y realizan llamadas al sistema cuando requieren servicios del kernel. La redacción es un poco extraña porque, por supuesto, el kernel conoce estas tareas y mantiene información (como la de struct_task) sobre ellas para poder programar tiempo para ellas en la CPU.

En cuanto a (2), "estos" se refiere específicamente a "subprocesos del kernel". Creo que los subprocesos del kernel comparten el mismo espacio de direcciones que el kernel.

información relacionada