Réponses courtes:
- Non, ce n'est pas un processus
- Les threads utilisateur ne sont pas enracinés à l'init.
Init n'est que le premier processus; il ne gère aucun processus ou thread. Il en crée, en utilisant les syscalls du noyau fork () et exec.
Je pense que vous avez une idée confuse de ce qu'est un processus. cela ne signifie pas seulement un peu de code d'exécution. Oui, le noyau s'exécute avant init (et même le chargeur de démarrage avant cela). Mais un «processus» a une définition spécifique de:
- Fonctionne dans l'espace utilisateur
- Fonctionne avec un ID de processus
- De nombreuses interactions doivent passer par le noyau
- Toutes les ressources doivent provenir du noyau
- Doit être planifié par le noyau
Ainsi, une fois le noyau initialisé, il exécute init, qui génère ensuite tout autre processus que sa configuration lui demande.
En ce qui concerne # 2, tout le noyau est, bien, dans le noyau. Considérez le noyau comme une grande zone de code. Encore une fois, pas un processus, mais un gros blob de code. Certaines parties du noyau traitent de la gestion de la mémoire, certaines parties de la planification de parties de lui-même (comme les pilotes, etc.) et certaines parties des processus de planification.
Le noyau ne se comporte pas du tout comme un processus. Il n'est pas planifié, il s'exécute au nom d'un processus (appelé processus-contexte ou contexte utilisateur), ou s'exécute à la suite d'une interruption ou d'une exception (appelé contexte-interruption).
Cela dit, le noyau Linux génère des threads du noyau pour effectuer certaines tâches, ou pour éviter d'exécuter trop longtemps quelque chose sur le contexte d'interruption (c'est ce que fait le thread ksoftirqd, en évitant des latences excessives qui pourraient conduire, par exemple: à une perte d'audio, ...) .
Vous pouvez voir les threads du noyau sur la sortie de la
ps
commande. Ils sont facilement identifiables: leur nom est entre parenthèses. Certains d'entre eux exécutent une instance par CPU, le CPU est identifié par un nombre après une barre oblique, donc [ksoftirqd / 0] est l'instance de ksoftirqd sur CPU 0.la source
Il y a des concepts dans les micro-noyaux où diverses parties du noyau sont en effet des processus avec la sentinelle principale qui gère principalement IPC.
Linux - pour le meilleur ou pour le pire - n'est pas un système de micro-noyau.
la source
Non, ce n'est pas ... Le noyau (et les extensions du noyau) sont directement chargés dans la mémoire. S'il y a du code dangereux dans le noyau, rien ne s'interpose entre lui et les gros ennuis.
Cela mis à part, le noyau exécute / bascule essentiellement entre les processus. De toute évidence, quelque chose qui exécute des processus ne sera pas un processus lui-même.
(tl; dr 1. no 2. partie du noyau / son extension)
la source
ninjalj a écrit: "Le noyau ne se comporte pas vraiment du tout comme un processus. Il n'est pas programmé".
Eh bien, il y a le processus inactif (essentiellement pid 0, bien qu'il ne soit affiché nulle part) qui est planifié et presque toujours dans un état exécutable.
la source
Source: https://courses.cs.washington.edu/courses/cse351/19su/lectures/18/CSE351-L18-processes_19su.pdf , page 36
la source