Le noyau est-il un processus?


30
  1. Sous Linux, nous disons toujours que le premier processus est init(pid == 1). Mais pourquoi ce n'est pas le noyau (démarrage) qui configure le système et crée le initprocessus. Le noyau est-il un processus?
  2. Nous savons que tous les threads de l'espace utilisateur sont enracinés lors du processus d'initialisation. Alors qu'en est-il du planificateur et d'autres éléments du noyau, comme la gestion de la mémoire?

Fondamentalement, ce qui m'embrouille, c'est la structure du noyau. S'il s'agit d'un processus, s'agit-il d'un processus unique ou de plusieurs processus?

Réponses:


19

Réponses courtes:

  1. Non, ce n'est pas un processus
  2. 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.


3
Je me demande si l'OP en sait assez pour avoir le souffle coupé par les micro-noyaux? Je ne l'ai pas inclus mon montage parce que je pensais que ce serait distrayant, en tout cas.
new123456

4
Une façon de penser le noyau est comme une gigantesque bibliothèque, avec des points d'entrée (les appels système) pour lui demander de faire quelque chose en votre nom. Un autre point de vue complémentaire est qu'il attend les événements à gérer, que ce soit un appel système de l'utilisateur ou une interruption matérielle (par exemple, un nouveau paquet réseau est arrivé). Certaines choses prennent du temps à gérer, donc le noyau expédie simplement le travail aux threads internes et revient à celui qui a appelé.
vonbrand

15

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 pscommande. 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.


1

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.


1

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)


0

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.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.