Leí que los subprocesos del kernel de Linux no tienen su propio espacio de direcciones, su campo mm está configurado en NULL. Sé que todos los subprocesos del kernel comparten espacio de direcciones, pero aun así, tienen su propia pila, ¿verdad? Necesitan describir de alguna manera ese campo, y sin mm, ¿cómo lo hacen? y otras listas como archivos abiertos, ¿dónde lo guardan? Además, ¿cuál es el punto de configurar el campo active_mm en mm de la tarea de usuario anterior? gracias de antemano.
Como sugiere su nombre, los subprocesos del kernel funcionan en modo kernel, por lo que un registro de la CPU hace referencia a su pila (es decir, ss , ebp ).
Las referencias de archivos abiertos (como cualquier otro proceso) se mantienen en el campo descriptor del proceso struct files_struct *files . No tienen nada que ver con los descriptores de memoria.
Para procesos regulares, los campos mm y active_mm normalmente son los mismos. Los subprocesos del kernel no poseen ningún descriptor de memoria, por lo que usan el que estaba activo ( active_mm ) del proceso en ejecución anterior, por lo tanto, los subprocesos del kernel mm siempre son nulos y usan active_mm .
¡Espero que esto ayude!