Noyau, espace utilisateur et processus
Tu sais expliquer qui a le droit de toucher au matériel, d'où vient un kernel panic, et tu sais lister, surveiller et arrêter les processus d'un serveur.
Mis à jour le
Pourquoi on voit ça
Quand un serveur rame ou plante, la première question est toujours la même : qui est responsable ? Un programme qui s’emballe, ou le système lui-même ? Pour répondre, il faut connaître la frontière entre le noyau et le reste, puis savoir regarder ce qui tourne.
C’est la base de tout le parcours Linux. Les leçons suivantes (/proc, le démarrage, puis systemd) s’appuient sur ces deux idées : le noyau commande le matériel, et tout le reste est fait de processus.
Deux espaces séparés
Linux coupe la machine en deux zones.
| Espace noyau | Espace utilisateur | |
|---|---|---|
| Niveau du processeur | ring 0 | ring 3 |
| Qui s’y trouve | le noyau et ses pilotes | tous les programmes : ton shell, nginx, un script Python |
| Accès au matériel | direct | interdit |
| Si ça plante | toute la machine s’arrête | seul le programme s’arrête |
Les rings sont des niveaux de privilège du processeur. En ring 0, tout est permis. En ring 3, le processeur refuse les opérations sensibles.
Le point qui surprend : même les programmes de root tournent en ring 3. Root a tous les droits sur les fichiers et sur les processus, mais ses programmes restent des programmes. Ils n’entrent pas dans le noyau.
Les appels système
Un programme a pourtant besoin du matériel : lire un fichier sur le disque, envoyer un paquet sur le réseau, afficher du texte. Il ne le fait jamais lui-même. Il le demande au noyau, par un appel système (syscall).
Pense à un restaurant :
- le client (le programme) est en salle, il passe commande ;
- le cuisinier (le noyau) est le seul à toucher aux fourneaux (le matériel) ;
- la commande est l’appel système.
Le client ne rentre jamais en cuisine. S’il demande quelque chose d’interdit, le cuisinier refuse. C’est comme ça que le noyau protège la machine : tout passe par lui, donc il peut tout contrôler.
Quand tu tapes cat fichier.txt, le programme cat enchaîne des appels système : ouvrir le fichier, lire son contenu, l’écrire à l’écran.
Le kernel panic
Un kernel panic, c’est le noyau qui rencontre une erreur dont il ne peut pas se remettre. Il préfère tout arrêter plutôt que d’abîmer les données. L’écran se fige sur un message d’erreur et le serveur ne répond plus.
À retenir pour le diagnostic :
- un kernel panic vient du noyau ou d’un pilote (un pilote est du code chargé dans le noyau, il tourne donc en ring 0) ;
- il ne vient jamais d’un programme, même lancé par root.
Si un programme plante en espace utilisateur, le noyau l’arrête et continue sa vie. Le client qui renverse son verre ne met pas le feu à la cuisine.
Donc si on te dit « le script de sauvegarde lancé en root a provoqué un kernel panic », le script a peut-être déclenché le problème, mais le bug est dans le noyau ou dans un pilote.
Contexte, pas à apprendre. Il existe une seule exception : si le tout premier processus de la machine, le PID 1, s’arrête, le noyau ne peut pas continuer sans lui et panique.
Les processus et le PID
Un processus est un programme en cours d’exécution. Le fichier /usr/bin/top posé sur le disque est un programme. Dès que tu le lances, il devient un processus.
L’image classique : le programme est la partition, le processus est le musicien en train de la jouer. La partition peut rester dans un tiroir sans que rien ne se passe, et plusieurs musiciens peuvent jouer la même en même temps.
Chaque processus reçoit un numéro unique : le PID (Process ID). C’est son identifiant, celui que tu donnes aux commandes pour le désigner. Si tu lances trois fois le même programme, tu obtiens trois processus et trois PID différents.
Les PID sont communs à toute la machine : il n’y a pas une numérotation par utilisateur. Et chaque processus a été lancé par un autre, son parent. En remontant de parent en parent, tu arrives toujours au PID 1, le premier processus lancé au démarrage.
Voir ce qui tourne
ps : la photo
ps aux
ps aux affiche tous les processus de la machine, à l’instant où tu tapes la commande.
USER PID %CPU %MEM COMMAND
root 1 0.0 0.1 /sbin/init
root 612 0.0 0.2 sshd: /usr/sbin/sshd -D
www-data 1234 0.3 1.2 nginx: worker process
(Colonnes simplifiées.) Tu y lis le propriétaire, le PID, la part de CPU et de mémoire, et la commande. Pour retrouver un programme précis :
ps aux | grep nginx
top et htop : le film
top
top affiche les processus en temps réel : la liste se rafraîchit toute seule, les plus gourmands en CPU en haut. Tu quittes avec q.
htop fait la même chose en plus confortable : couleurs, barres de CPU et de mémoire, défilement au clavier. Il n’est pas toujours installé (apt install htop).
| Commande | Ce qu’elle donne | Quand l’utiliser |
|---|---|---|
ps aux |
une photo de tous les processus | chercher un PID, filtrer avec grep |
top |
un film, rafraîchi en continu | trouver ce qui consomme maintenant |
htop |
le même film, plus lisible | pareil, si le paquet est installé |
Arrêter un processus
kill vise un processus par son PID :
kill 1234
Sans option, kill demande au processus de s’arrêter. Le processus peut finir proprement : fermer ses fichiers, libérer ses ressources. S’il est bloqué et n’écoute plus, tu forces :
kill -9 1234
Avec -9, le noyau supprime le processus sans le prévenir. À garder en dernier recours.
-9 seulement si le processus ne répond plus.killall vise par nom et touche tous les processus qui le portent :
killall nginx
Moyen de s’en souvenir : kill + un numéro, killall + un nom.
Limiter le nombre de processus : ulimit -u
Un utilisateur (ou un script mal écrit) peut créer des processus en boucle jusqu’à saturer la machine. Pour l’empêcher, chaque session a un plafond.
ulimit -u
Cette commande affiche le nombre maximal de processus que l’utilisateur courant peut lancer. Avec une valeur, elle fixe la limite pour la session en cours :
ulimit -u 200
Au-delà de la limite, la création d’un nouveau processus est refusée. Le reste du serveur continue de tourner.
À retenir
- Le noyau tourne en ring 0 et il est le seul à toucher au matériel. Tout le reste, programmes de root compris, tourne en ring 3.
- Un programme demande un service au noyau par un appel système : le client commande, le cuisinier cuisine.
- Un kernel panic vient du noyau ou d’un pilote, jamais d’un programme.
- Un processus est un programme en cours d’exécution, identifié par son PID.
ps auxdonne une photo,topethtopun film.kill+ PID,killall+ nom,ulimit -upour le plafond de processus par utilisateur.
Entraînement
11 questions, dont 3 à compléter. Tu réponds, on passe à la suivante. La note arrive à la fin.
Ta note
Cartes · 9
Réviser les cartes ici
Pourquoi