Détection des tâches bloquées et soft lockups sous Linux : mécanismes internes et débogage pratique
1. Introduction : Que fait le noyau Linux lorsqu’un système semble figé ?
Lorsqu’un serveur Linux cesse de répondre — les requêtes ne sont plus traitées, les logs stagnent, mais SSH reste accessible — il est tentant de redémarrer la machine. Pourtant, le noyau dispose de mécanismes intégrés pour détecter ces situations critiques. Deux d’entre e ...
Publié le 25 septembre à 16h02
Exploration approfondie du Makefile principal du noyau Linux
Première approche de la compilation du noyau
Avant d'entamer la compilation, il convient d'installer la bibliothèque de compression nécessaire sur le système Debian/Ubuntu :
sudo apt-get install lzop
La séquence de compilation pour une plateforme ARM s'enchaîne ensuite ainsi :
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
make dist ...
Publié le 4 septembre à 10h25
Gestion mémoire dans le noyau Linux
Terminologie essentielle
Page physique (Page Frame) : unité élémentaire de gestion de la mémoire physique
Page virtuelle : unité d'adressage dans l'espace virtuel d'un processus
Numéro de page physique (PFN) : identifiant attribué par le système à chaque cadre de page selon son ordre d'adressage physique
MMU (Memory Management Unit) : composan ...
Publié le 3 septembre à 10h22
Mécanisme de pages chaudes et froides dans le gestionnaire de mémoire Linux
Introduction
Lors des opérations d'accès à la mémoire, le processus suit généralement cette séquence :
Le CPU émet une instruction d'accès mémoire
Conversion d'adresse, l'UMM convertit via la table de pages ou utilise le TLB pour obtenir l'adresse physique
Accès au cache
En cas de cache manquant, accès à la mémoire physique et chargement dans ...
Publié le 24 août à 12h24
Gestion dynamique des logs dans le noyau Linux avec Dynamic Debug
Le mécanisme dynamic_debug est une fonctionnalité puissante du noyau Linux permettant d'activer ou de désactiver sélectivement les messages de débogage (pr_debug, dev_dbg) au moment de l'exécution, sans redémarrer le système ni recompiler le code. Contrairement aux macros statiques, cette méthode offre une flexibilité totale pour isoler des pro ...
Publié le 7 août à 03h40
Administration et Gestion des États de Sécurité SELinux
Fonctionnement et Philosophie
Ancré historiquement dans les travaux du Flux Team de l'Université de l'Utah et de la NSA (National Security Agency), ce système de sécurité open source impose des règles globales qui prévalent même sur les privilèges root. La logique repose sur le principe du moindre privilège : chaque service ou application ne do ...
Publié le 4 août à 00h52
Traitement des signaux Linux : Mécanismes et implémentation
Moment de traitement des signaux
Dans le noyau Linux, le traitement des signaux intervient au moment précis où une tâche retourne de l'espace noyau vers l'espace utilisateur. Peu importe la raison de l'entrée en mode noyau (appel système, exception synchrone, interruption), le noyau vérifie systématiquement la présence de signaux en attente ava ...
Publié le 3 août à 00h57
Analyse du processus d'exécution de exec dans le noyau Linux
Lors de l'appel système exec dans le noyau Linux, l'exécutable est chargé et la pile est configurée. Cet article détaille ces étapes en se basant sur le code source du noyau version 2.6.32, en mettant l'accent sur le chargement ELF et la mise en place de la pile.
La fonction sys_execve est l'entrée de l'appel système exec. Son implémentation ré ...
Publié le 1 août à 06h10
Maîtrise des processus et de la gestion des signaux sous Linux
Le concept de processus est fondamental pour comprendre le fonctionnement interne de Linux. Un processus représente l'exécution dynamique d'un programme, gérant les ressources système telles que le processeur (CPU) et la mémoire vive (RAM).
Différence entre Programme et Processus
Un programme est une entité statique : c'est un fichier binaire s ...
Publié le 17 juillet à 02h31
Appel de fonctions entre modules kernel Linux (KO)
void alpha_function(void)
{
printk(KERN_INFO "alpha_function: exécution\r\n");
}
static int __init alpha_init(void)
{
printk(KERN_INFO "moduleAlpha: initialisation\r\n");
return 0;
}
static void __exit alpha_exit(void)
{
printk(KERN_INFO "moduleAlpha: nettoyage\r\n");
}
EXPORT_SYMBOL_GPL(alpha_function);
MODULE_LIC ...
Publié le 13 juillet à 04h34