Linux-kernel version-2.6 livre-kerneldev
From UnixWiki
J'ai récemment acheté la seconde édition du livre "Linux Kernel Development", qui parle de la programmation dans le noyau Linux. Cette édition datant de Janvier 2005 est donc suffisement récente, et l'auteur précise que tout ce qui est écrit est valide au moins jusqu'au noyau 2.6.10. Ce livre permet de de mieux comprendre comment fonctionne un noyau Linux, car la programmation système fait souvent appel aux services du kernel, et il est utile de savoir comment fonctionne cette partie transparente. Ce livre a été ecrit par Robert Love qui est un développeur très actif du noyau. Il travaille actuellement pour Novell. Il n'y a donc pas de doute à avoir quant à ses connaissances sur le sujet. En ce qui concerne les livres parlant du noyau Linux, on en trouve aussi de très bons chez O'Reilly, comme "Linux Device Drivers" et surtout "Understanding the Linux kernel".
Cependant, le livre de Robert Love a l'avantage d'être plus accessible selon moi. Pour pouvoir lire ce livre, il est naturellement nécessaire de bien connaître la programmation en langage C, et si possible en programmation système. Il faut naturellement avoir l'habitude de l'environnement Linux, tout du moins d'Unix. C'est une bonne chose de connaître l'assembleur x86 ou d'avoir des notions sur le fonctionnement du processeur (les registres, les interruptions), mais cela n'est pas indispensable. Ce livre peut se décomposer en deux parties. La première parle du fonctionnement du noyau lui-même, et de tous les aspects élémentaires qui permettent d'assurer le fonctionnement du système et la cohérence dans le code. Les premiers chapitres abordent donc la gestion des processus, le scheduler (le code qui répartit les ressources entre les process), les interruptions, la gestion de la mémoire, la synchronisation entre les accès concurrents à une même donnée, ... Cette partie est parfois un peu pénible, mais nécessaire pour aborder le noyau. La seconde partie s'intéresse plus sur des aspects fonctionnels comme le système de fichiers, les modules, les entrées/sortie... A la fin, quelques annexes expliquent notamment comment écrire du code portable, ou les techniques de déboguage.
On comprend assez rapidement la logique dans laquelle se trouvent les développeurs du noyau. Le développement dans le kernel-space est un domaine beaucoup plus délicat que la programmation en user-space, car il faut avoir en tête de nombreux problèmes qui peuvent se poser, notamment aux accès concurrents qui peuvent survenir sur des données. Il font donc penser à vérouiller les accès. Dans certains contextes, certains types d'accès à la mémoire ou certaines actions sont impossibles, ... Le noyau n'a rien au dessus de lui pour assurer le fonctionnement en cas de plantage. Un bug dans un driver du noyau peut donc aboutir au plantage de tout le système. Il faut de plus tenir compte de la variété des architectures sur lesquelles le noyau peut fonctionner.
C'est donc un très bon livre pour s'initier au monde du noyau, mais il est nécessaire de passer rapidement à la pratique et de compléter ses connaissances par d'autres lectures pour pouvoir vraiment maîtriser le sujet. J'aurais aimé avoir plus de conseils pratiques expliquant quels outils utiliser pour développer (notamment UML), car il est souvent difficile de trouver de s'orienter lorsqu'on a un problème particulier.
