Découverte du noyau GNU/Linux Premiers pas dans la compilation d'un noyau optim

Découverte du noyau GNU/Linux Premiers pas dans la compilation d'un noyau optimisé pour son matériel Stéphane Téletchéa stephane.teletchea@univ-nantes.fr http://steletch.free.fr Les composants matériels sont inutiles sans un système capable de les faire interagir entre eux pour transférer des données et effectuer des opérations complexes. Lors du démarrage de l'ordinateur le BIOS initialise électriquement chaque matériel, vérifie ses capacités et règle les divers composants du système (priorité des bus, fréquence d'horloge des ports PCI, fréquence du processeur, etc). Après cette phase d'initialisation, il faut qu'un second système prenne le relais pour gérer les accès aux ressources matérielles afin de répondre aux besoins des utilisateurs. Le rôle du noyau va être de compléter l'initialisation du matériel par exemple via le chargement de pilotes et/ou de firmwares spécifiques, puis de gérer l'accès concurrentiel aux ressources de l'ordinateur. Présenté ainsi, un noyau est donc premièrement un gestionnaire de ressources très efficace qui va autoriser l'utilisation d'un périphérique, charger en mémoire un fichier stocké sur le disque dur, lancer les commandes matérielles liées à l'impression de ce fichier. http://fr.wikipedia.org/wiki/Système_d'exploitation Organisation générale d'un ordinateur et d'un processeur L'accès à la mémoire de l'ordinateur et aux ressources du processeur se font généralement selon deux modes : le mode « superviseur » / « noyau » ou en « espace utilisateur ». L'architecture x86 permet d'utiliser 4 niveaux d'accès au matériel, mais en pratique deux sont utilisés : - ring 0, pour le noyau - ring 1, non utilisé - ring 2, non utilisé - ring 3, pour l'espace utilisateur En mode superviseur, dédié au fonctionnement du noyau, il y a un accès direct à la mémoire et au matériel, il faut donc un fonctionnement sans failles. L'espace utilisateur est contrôlé : les ressources mémoires sont bornées et si un dépassement mémoire apparaît, le noyau va prévenir celui-ci, en terminant le processus fautif. Les différents types de noyaux Philosophie de fonctionnement du noyau En fonction de l'approche envisagée pour le fonctionnement du noyau, il est possible d'insérer tout le code du noyau dans l'espace « réservé » ou d'en répartir une partie dans l'espace utilisateur. ● Approche micro-noyau : comme le noyau a comme rôle premier d'ordonnancer les priorités matérielles et les requêtes logicielles, cette partie de gestion de priorités est indépendante du matériel. Il est ainsi possible que le code de l'ordonnanceur soit en mode protégé, et que le reste des pilotes de périphériques soit dans l'espace utilisateur. Ex : Mach (Mac OS X). ● Approche monolithique : tout le code réside dans l'espace réservé, ce qui évite des changements de contexte mais le noyau en perd en portabilité. Ex : linux (avant 1.2), BSD4.4. ● Approche monolithique avec chargement de modules : tout le code est dans l'espace noyau, mais certaines parties du matériel sont prises en charge par des modules qui sont chargés dynamiquement. Ex : Linux >1.2, BSD, IRIX, ... ● Approche micro-noyau enrichi / hybride : une partie des fonctionnalités en mode utilisateur sont réintégrées dans l'espace noyau pour des raisons de performances. Ex : Windows NT. ● Approche « temp réel » : l'exécution d'une tâche est réalisée dans une durée garantie. Ex : Rtlinux. http://fr.wikipedia.org/wiki/Syst%C3%A8me_d%27exploitation#Le_noyau, image de Wooptoo Philosophie de fonctionnement du noyau Et le plus versatile, plus performant, plus portable est ... Linux a plus de 20 ans et plus de 15 millions de lignes de code ! Linux est un noyau à architecture monolithique modulaire ! Pourquoi compiler son propre noyau ? (1) Le noyau Linux est très versatile, les noyaux fournis avec les distributions sont très volumineux, et contiennent énormément de modules inutiles pour une utilisation sur un ordinateur donné (2) Le noyau de la distribution n'est pas optimisé pour l'architecture matérielle, il ne peut pas bénéficier de toutes les technologies, par exemple pour la gestion de l'énergie (3) Le noyau est trop ancien (besoin pour une mise à jour) (4) Une faille de sécurité a été découverte et il faut la corriger rapidement (5) L'espace disque est restreint et il vous faut récupérer l'espace occupé par le noyau et les modules (6) Les réglages par défaut pour la réactivité du système de vous conviennent pas (base de données, jeux, serveur de fichiers, bureautique) (7) Vous cherchez à utiliser une fonctionnalité inhabituelle … (8) Les contraintes matérielles sont très contraignantes (embarqué) Pourquoi compiler son propre noyau ? Principaux composants du noyau L'architecture du noyau linux est très complète, ce qui lui permet de gérer des ordinateurs personnels, des routeurs, des téléphones portables ou des super- calculateurs. En reprenant les concepts développés précédemment, il est possible de découper son fonctionnement en quelques briques élémentaires, suffisantes pour une première approche de son fonctionnement. Principaux composants du noyau : SCI Le « system call interface » est le composant qui gère l'interaction entre l'espace utilisateur et l'espace noyau. Il existe plus de 300 appels systèmes qui répondent à la norme POSIX sous linux, les principaux sont : Process Control load execute create process (ork) terminate process get/set process attributes wait for time, wait event, signal event allocate, free memory File management create file, delete file open, close read, write, reposition get/set file attributes Device Management request device, release device read, write, reposition get/set device attributes logically attach or detach devices Information Maintenance get/set time or date get/set system data get/set process, file, or device attributes Communication create, delete communication connection send, receive messages transfer status information attach or detach remote devices Principaux composants du noyau : gestionnaire de processus Chaque élément exécuté par le noyau est appelé thread ou « processus léger ». Ce terme regroupe le code exécuté, les données associées, la pile en cours de lecture/écriture, les registres solicités sur le processeurs, … Dans l'espace utilisateur, on parle de processus, qui regroupe en général sous le même terme le programme en cours d'exécution et ses différents routines, sans distinction. L'interaction entre l'espace noyau et l'espace utilisation se fait via l'abstraction fournie par les appels systèmes (SCI) et permet d'envoyer au processus un signal normalisé : 15 pour le terminer proprement 9 pour l'arrêter sans se préoccuper des actions en cours Il est aussi possible d'interagir sur le temps accordé pour l'exécution de chacun processus avec les commandes nice / renice. Principaux composants du noyau : VFS Le système de fichiers virtuels (Virtual File System) est une interface d'abstraction des systèmes de fichiers réels. Il permet d'accéder aux périphériques sans se préoccuper des détails de l'implémentation de chaque système de fichier, de la taille des fichiers gérés, des temps de réponse, etc. Le VFS est aussi particulièrement utile dans un système gouverné par le concept « tout est fichier » : ➢ pour accéder à un périphérique réel, il est possible de s'y référer à travers le « device » qui lui a été attribué (/dev/sda5) ; ➢ pour accéder à un composant de processus, un paramètre système, il est possible de lire la valeur dans /proc (aujourd'hui en cours d'abandon) ou /sys via les systèmes de fichiers procfs ou sysfs. Ex : cat /proc/loadavg 0.11 0.11 0.10 1/386 7298 Principaux composants du noyau : le gestionnaire de mémoire Dans l'espace noyau, le kernel a accès à toute la mémoire physique disponible sur l'ordinateur : 1 - caches du processeur 2 - mémoire DRAM 3 - ( mémoire « lointaine » (via NUMA) ) 4 - espace disque (via le swap) La mémoire est simulée comme « infinie » par le kernel pour que les processus aient toujours accès à une zone mémoire pour leur bon fonctionnement. En fonction de la demande, le noyau va découper l'espace mémoire par page de 4 ko et les attribuer au processus demandeur. Si cette mémoire n'est pas utilisée « pendant un certain temps », l'espace mémoire est déplacé sur disque par le mécanisme de swap, jusqu'à ce que le processus soit de nouveau actif. Si le processus se termine, la page est alors recyclée pour un autre processus. En fonction du type de processus, l'allocation peut être de taille différente Principaux composants du noyau : la pile réseau Le noyau linux a été créé en même temps que internet et a grandi avec lui. Très tôt, il a fallut communiquer entre les développeurs pour que les échanges de code se fassent correctement. Le support des protocoles réseau, des matériels, et des configurations extrêmes est ainsi très complet. Linux support bien entendu les protocoles ipv4, ipv6, tcp, udp, mais aussi bien d'autres protocoles très spécifiques (token ring, myrinet, …). Le fonctionnement de la pile réseau est considéré comme l'un des plus performants de tous les OS, en concurrence avec *BSD. Pour une utilisation spécifique de la machine, il faudra néanmoins envisager des réglages spécifiques du noyau (voir ci-après). Principaux composants du noyau : dépendants de l'architecture Bien que majoritairement monolithique, ce qui a été perçu initialement comme une erreur de conception limitant la portabilité, Linux est disponible pour un grand nombre d'architectures. La plus commune sur les ordinateurs personnels est l'architecture x86 et maintenant x86- 64. Chaque architecture implique une gestion spécifique de la mémoire, uploads/Industriel/ decouverte-du-noyau-gnu-linux.pdf

  • 11
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager