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