Conception des systèmes d'exploitation

-

Livres
699 pages
Lire un extrait
Obtenez un accès à la bibliothèque pour le consulter en ligne
En savoir plus

Description

Comprendre les systèmes d'exploitation : au cœur de Linux


Cet ouvrage s'adresse à tous ceux qui, au-delà de l'utilisation d'un système d'exploitation et de la programmation système, veulent comprendre comment est conçu et implémenté le noyau du système Linux. Il en explore le code source dans sa toute première version (Linux 0.01), et commente ses évolutions vers les noyaux actuels. L'ouvrage éclaire notamment l'utilisation des ressources du microprocesseur et les commandes des cartes des périphériques, et permet de comprendre comment aborder la conception de pilotes.



Deuxième édition mise à jour : de Minix à Linux 2.6



Dans cette deuxième édition mise à jour et augmentée, l'auteur montre comment appliquer au noyau Linux 2.6 la méthode préconisée pour étudier un noyau, en soulignant que les concepts fondamentaux sous-jacents au micro-noyau demeurent inchangés depuis le tout premier noyau de treize ans d'âge, tandis que les structures associées évoluent pour tenir compte de nouvelles fonctionnalités.



À qui s'adresse cet ouvrage ?




  • Tous ingénieurs et développeurs système, en particulier Unix/Linux.


  • Développeurs C et autres langages de bas niveau.


  • Étudiants en IUT informatique, licences et maîtrises d'informatique, écoles d'ingénieurs (informatique théorique et électronique), et leurs enseignants.




  • Principes de conception des systèmes d'exploitation


  • Utilisation du microprocesseur Intel


  • Les grandes structures de données


  • Aspect dynamique sans affichage


  • Aspect dynamique avec affichage


  • Fichiers réguliers


  • Périphériques caractère


  • Communication par tubes


  • Le mode utilisateur


  • Démarrage du système

Sujets

Informations

Publié par
Ajouté le 07 juillet 2011
Nombre de lectures 372
EAN13 9782212850284
Langue Français
Signaler un problème
Conception systèmes de exploitation d’ Le casLinux
CHEZ LE MÊME ÉDITEUR
C. BLAESS. –Scripts sous Linux. N°11405, 2004, 784 pages.
Shell Bash, Sed, Awk, Perl, Tcl, Tk, Python, Ruby...
C. BLAESS. –Programmation système en C sous Linux. Signaux, processus, threads, IPC et sockets.N°11054, 2000, 960 pages.
P. FICHEUX. –Linux embarqué. N°11024, 2002, 326 pages.
Ouvrages d’administration e B. BOUTHERIN, B. DELAUNAY. –édition.Sécuriser un réseau Linux, 2 N°11445, 2004, 200 pages.
E. DREYFUS. –BSD, 2e édition(coll.Cahiers de l’Admin). N°11463, 2004, 300 pages.
C. HUNT. –Serveurs réseau Linux. N°11229, 2003, 650 pages.
V. STANFIELD& R..W. SMITHGuide de l’administrateur Linux. N°11263, 2003, 654 pages.
A. BERLAT, J.-F. BOUCHAUDY, G. GOUBET. –Unix Utilisateur. e N°11319, 2 édition, 2003, 350 pages.
A. BERLAT, J.-F. BOUCHAUDY, G. GOUBET. –Unix Shell. e N°11147, 2 édition, 2002, 412 pages.
J.-F. BOUCHAUDY, G. GOUBET. –Unix Administration. e N°11053, 2 édition, 2002, 580 pages.
J.-F. BOUCHAUDY, G. GOUBET. –Linux Administration. e N°11505, 4 édition 2004, 936 pages.
Patrick Cegielski
Conception systèmes de exploitation d’ Linux Le cas
Deuxième édition
ÉDITIONS EYROLLES 61, bd Saint-Germain 75240 Paris Cedex 05 www.editions-eyrolles.com
Avec la contribution de Mathieu Ropert, Sébastien Blondeel
et Florence Henry.
er Le code de la propriété intellectuelle du 1 juillet 1992 interdit en effet expressément la photocopie à usage collectif sans autorisation des ayants droit. Or, cette pratique s’est généralisée notamment dans les établissements d’enseignement, provoquant une baisse brutale des achats de livres, au point que la possibilité même pour les auteurs de créer des œuvres nouvelles et de les faire éditer correctement est aujourd’hui menacée. En application de la loi du 11 mars 1957, il est interdit de reproduire intégralement ou partiellement le présent ouvrage, sur quelque support que ce soit, sans l’autorisation de l’Éditeur ou du Centre Français d’exploitation du droit de copie, 20, rue des Grands Augustins, 75006 Paris. © Groupe Eyrolles, 2003, 2004, ISBN : 2-212-11479-6
Pour Irène et Marie
Préface
Le but de ce livre est de faire comprendre comment on conçoit un système d’exploitation en illustrant notre propos sur un cas concret dont nous commentons les sources complètement. Le choix s’est porté tout naturellement sur le premier noyau Linux, ce que nous justifions au chapitre 3. En prérequis, nous supposons que le lecteur connaît la notion de système d’exploitation en tant qu’utilisateur, pour des systèmes d’exploitation tels que MSDOS,Unix, MacOs ou Windows (95, 98, 2000, NT ou XP), un langage d’assemblage pour les microprocesseurs Intel80x86et qu’il sache programmer en langage C. On peut distinguer cinq niveaux de rapports avec un système d’exploitation :
leniveau utilisateur: le but principal consiste essentiellement à charger les logiciels que l’on veut utiliser et de manipuler quelque peu les fichiers ; on se sert pour cela de l’interpréteur de commandes (et de ses commandes telles quecopy,rename...) ; leniveau administrateur: cela consiste à paramétrer le système et à le tenir à jour ; il est indispensable pour les systèmes d’exploitation capables d’accueillir plusieurs utilisateurs ; leniveau écriture de scripts;pour automatiser certaines séquences répétitives de commandes leniveau programmation système: cette programmation se fait pour Linux en langage C en utilisant lesappels système; leniveau conception du système, et plus particulièrement du noyau.
Nous allons nous intéresser ici à la conception du système d’exploitation, en illustrant nos propos par Linux, plus particulièrement par le tout premier noyau 0.01. L’intérêt de choisir Linux est que le code est diffusé. Ce livre n’a d’autre but que de publier en un seul volume les aspects suivants de la conception d’un système d’exploitation :
les concepts généraux sousjacents à l’implémentation d’un système d’exploitation, tels qu’on les trouve dans [TAN87] dont nous nous inspirons fortement ; les concepts d’un système d’exploitation de typeUnix, en suivant le plus possible la norme Posix; de la documentation sur le microprocesseur Intel80386; celleci exigeant un ouvrage de la taille de celuici, nous en supposons connue au moins une partie, celle qui concerne le mode dit « réel » ; la documentation sur les contrôleurs de périphériques et leur implémentation sur un compa tible PC, nécessaire à la programmation d’un système d’exploitation ; une présentation des choix faits pour l’implémentation de Linux 0.01, suivie d’extraits de fichiers sources, repérables facilement par l’indicationLinux 0.01située en marge, puis para phrasés en français ; ces paraphrases, commençant presque toujours par « autrement dit », ne
iv – Préface
sont pas théoriquement indispensables mais sont souvent appréciables ; comme nous l’avons déjà dit, tout le source est commenté, même si pour des raisons logiques il est dispersé tout au long de l’ouvrage.
Chemin faisant, nous montrons ainsi une méthode pour étudier les sources d’autres systèmes d’exploitation.
L’index fait références aux concepts mais aussi à tous les noms apparaissant dans les fichiers source, ce qui permet de se rendre directement au commentaire de la partie qui intéresse le lecteur.
Préface à la seconde édition
Dans cette seconde édition, paraissant dix mois après la première, le corps du texte principal n’a pas changé, à part la correction d’une coquille. En revanche, chaque chapitre se conclut désormais par une section « évolution du noyau » renforcée, prenant en compte la version 2.6.0 de ce dernier. Nous conseillons de lire le livre sans tenir compte de ces sections puis d’y revenir dans un deuxième temps. Nous expliquons au chapitre 3 pourquoi il est préférable, dans un premier temps, de s’attacher au tout premier noyau. Je pense que pour lesaficionadosdu tout dernier noyau en date, ces dernières sections seront utiles.
Remerciements
Je tiens à remercier tout particulièrement MathieuRopert, étudiant de l’I.U.T. de Fontaine bleau en 2001–2003, pour sa relecture très attentive du manuscrit.
Préface
Table
des
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
iii
PREMIÈRE PARTIE : PRINCIPES DE CONCEPTION DES SYSTÈMES D’EXPLOITATION 1 Chapitre 1 Structure d’un système d’exploitation. .3 1 Les trois grandes fonctions. . . . . . . . . . . . . . . . . . . . . . .3 1.1 Chargement des programmes. . . . . . . . . . . . . . .3 1.2 Le système d’exploitation en tant que machine virtuelle. . . . . . . . . . . . . . . . . . . . . . . . . .4 1.3 Le système d’exploitation en tant que gestionnaire de ressources. . . . . . . . . . . . . . . . . .4 2 Caractéristiques d’un système d’exploitation. . . . . . .5 2.1 Systèmes multitâches. . . . . . . . . . . . . . . . . . . . .5 2.2 Systèmes multiutilisateurs. . . . . . . . . . . . . . . . .7 3 Structure externe d’un système d’exploitation. . . . . .9 3.1 Noyau et utilitaires. . . . . . . . . . . . . . . . . . . . . . . .9 3.2 Le gestionnaire de tâches. . . . . . . . . . . . . . . . . .9 3.3 Le gestionnaire de mémoire. . . . . . . . . . . . . . . .9 3.4 Le gestionnaire de fichiers. . . . . . . . . . . . . . . . . .9 3.5 Le gestionnaire de périphériques. . . . . . . . . . . .10 3.6 Le chargeur du système d’exploitation. . . . . . .10 3.7 L’interpréteur de commandes. . . . . . . . . . . . . . .10 4 Structure interne d’un système d’exploitation. . . . . .10 4.1 Les systèmes monolithiques. . . . . . . . . . . . . . . .11 4.2 Systèmes à modes noyau et utilisateur. . . . . .11 4.3 Systèmes à couches. . . . . . . . . . . . . . . . . . . . . . .11 4.4 Systèmes à micronoyau. . . . . . . . . . . . . . . . . . .12 4.5 Systèmes à modules. . . . . . . . . . . . . . . . . . . . . . .13 5 Mise en uvre. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14 5.1 Les appels système. . . . . . . . . . . . . . . . . . . . . . . .14 5.2 Les signaux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14 Chapitre 2 Principe de traitement des entrées sorties. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 1 Principe du matériel d’entréesortie. . . . . . . . . . . . . . .15 1.1 Les périphériques d’entréesortie. . . . . . . . . . . .15 1.2 Les contrôleurs de périphériques. . . . . . . . . . . .16 1.3 Transferts synchrones et asynchrones. . . . . . .17 1.4 Périphériques partagés et dédiés. . . . . . . . . . . .18 2 Principe des logiciels d’entréesortie. . . . . . . . . . . . . .18 2.1 Objectifs des logiciels des entréessorties. . . .18
matières
2.2 Les pilotes de périphériques. . . . . . . . . . . . . . . . 2.3 Logiciel d’entréesortie indépendant du matériel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4 Logiciels d’entréesortie faisant partie de l’espace de l’utilisateur. . . . . . . . . . . . . . . . . . . . Chapitre 3 Le système Linux étudié. . . . . . . . . . . . . . . 1 Le système Linux à étudier. . . . . . . . . . . . . . . . . . . . . . . 1.1 Noyau et distribution. . . . . . . . . . . . . . . . . . . . . . 1.2 Noyau minimal. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Obtention des sources. . . . . . . . . . . . . . . . . . . . . 1.4 Programmation Linux. . . . . . . . . . . . . . . . . . . . . 1.5 Versions du noyau Linux. . . . . . . . . . . . . . . . . . . 2 Les sources du noyau 0.01. . . . . . . . . . . . . . . . . . . . . . . 2.1 Vue d’ensemble sur l’arborescence. . . . . . . . . . 2.2 L’arborescence détaillée. . . . . . . . . . . . . . . . . . . . 3 Vue d’ensemble sur l’implémentation. . . . . . . . . . . . . 3.1 Caractéristiques. . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Étapes de l’implémentation. . . . . . . . . . . . . . . . 4 Évolution du noyau. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1 Cas du noyau 2.4.18. . . . . . . . . . . . . . . . . . . . . . . 4.2 Aide au parcours du code source. . . . . . . . . . . 4.3 Cas du noyau 2.6.0. . . . . . . . . . . . . . . . . . . . . . . .
DEUXIÈME PARTIE : UTILISATION DU MICROPROCESSEUR INTEL Chapitre 4 Prise en compte de la mémoire Intel. . . 1 La segmentation sous Intel. . . . . . . . . . . . . . . . . . . . . . . 1.1 Notion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 La segmentation en mode protégé sur Intel. . 2 La segmentation sous Linux. . . . . . . . . . . . . . . . . . . . . . 2.1 Mode noyau et mode utilisateur. . . . . . . . . . . . 2.2 Segmentation en mode noyau. . . . . . . . . . . . . . 2.3 Accès à la mémoire vive. . . . . . . . . . . . . . . . . . . 3 Évolution du noyau. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1 Prise en compte d’autres microprocesseurs. . 3.2 Accès à la mémoire vive. . . . . . . . . . . . . . . . . . . 3.3 Utilisation de la segmentation. . . . . . . . . . . . . . Chapitre 5 Adaptation des entréessorties et des interruptions Intel. . . . . . . . . . . . . . . . . . . . . 1 Accès aux ports d’entréesortie. . . . . . . . . . . . . . . . . . .
19
19
21 23 23 23 23 24 24 24 25 25 25 32 32 32 34 34 35 35
37 39 39 39 39 45 45 46 50 51 51 52 52
55 55
vi
2
3
4
5 6
Table des matières
1.1 Accès aux ports d’entréesortie sous 80x86. . 1.2 Encapsulation des accès aux ports d’entrée sortie sous Linux. . . . . . . . . . . . . . . . . . . . . . . . . . Les interruptions sous Linux. . . . . . . . . . . . . . . . . . . . . 2.1 Rappels sur les vecteurs d’interruption d’Intel 2.2 Adaptations sous Linux. . . . . . . . . . . . . . . . . . . . Initialisation des exceptions. . . . . . . . . . . . . . . . . . . . . . 3.1 Initialisation provisoire. . . . . . . . . . . . . . . . . . . . . 3.2 Initialisation définitive. . . . . . . . . . . . . . . . . . . . . Initialisation des interruptions matérielles. . . . . . . . . . 4.1 Un problème de conception. . . . . . . . . . . . . . . . 4.2 Contrôleur d’interruptions programmable. . . . 4.3 Programmation des registres de contrôle d’initialisation du PIC. . . . . . . . . . . . . . . . . . . . . 4.4 Programmation des registres de contrôle des opérations du PIC. . . . . . . . . . . . . . . . . . . . . 4.5 Reprogrammation du PIC dans le cas de Linux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6 Gestionnaires des interruptions matérielles. . . 4.7 Manipulation des interruptions matérielles. . . Initialisation de l’interruption logicielle. . . . . . . . . . . . Évolution du noyau. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1 Accès aux ports d’entréesortie. . . . . . . . . . . . . 6.2 Insertion des portes d’interruption. . . . . . . . . . 6.3 Initialisation des exceptions. . . . . . . . . . . . . . . . 6.4 Initialisation des interruptions matérielles. . . . 6.5 Manipulation des interruptions matérielles. . .
TROISIÈME PARTIE : LES GRANDES STRUCTURES DE DONNÉES Chapitre 6 Les structures de données concernant les processus. . . . . . . . . . . . . . . . . . . . . . . . . . 1 Descripteur de processus. . . . . . . . . . . . . . . . . . . . . . . . . 1.1 Structure du descripteur de processus. . . . . . . 1.2 Aspects structurels. . . . . . . . . . . . . . . . . . . . . . . . 1.3 État d’un processus. . . . . . . . . . . . . . . . . . . . . . . 1.4 Priorité d’un processus. . . . . . . . . . . . . . . . . . . . 1.5 Signaux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6 Code de statut. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7 Espace d’adressage. . . . . . . . . . . . . . . . . . . . . . . . 1.8 Identificateurs du processus. . . . . . . . . . . . . . . . 1.9 Hiérarchie des processus. . . . . . . . . . . . . . . . . . . 1.10 Propriétaire d’un processus. . . . . . . . . . . . . . . . . 1.11 Informations temporelles. . . . . . . . . . . . . . . . . . . 1.12 Utilisation du coprocesseur mathématique. . .
55
55 56 56 60 61 61 62 64 64 65
66
68
70 71 72 72 73 73 73 74 76 76
79
81 81 81 82 82 83 84 85 85 85 86 87 88 89
1.13 Informations sur les fichiers utilisés. . . . . . . . .89 1.14 Table locale de descripteurs. . . . . . . . . . . . . . . .90 1.15 Segment d’état de tâche. . . . . . . . . . . . . . . . . . .90 2 Tâche initiale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .94 3 Table des processus. . . . . . . . . . . . . . . . . . . . . . . . . . . . .97 3.1 Stockage des descripteurs de processus. . . . . .98 3.2 Implémentation de la table des processus. . . .99 3.3 Repérage d’un descripteur de processus. . . . .99 3.4 La tâche en cours. . . . . . . . . . . . . . . . . . . . . . . . .99 4 Évolution du noyau. . . . . . . . . . . . . . . . . . . . . . . . . . . . .100 4.1 Structure du descripteur de processus. . . . . . .100 4.2 Table des processus. . . . . . . . . . . . . . . . . . . . . . .102 Chapitre 7 Description du système de fichiers. . . . .103 1 Étude générale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103 1.1 Notion de fichiers. . . . . . . . . . . . . . . . . . . . . . . . .103 1.2 Gestion des fichiers. . . . . . . . . . . . . . . . . . . . . . . .104 1.3 Les fichiers du point de vue utilisateur. . . . . .104 1.4 La conception des systèmes de fichiers. . . . . .106 2 Caractéristiques d’un fichier. . . . . . . . . . . . . . . . . . . . . .109 2.1 Types de fichiers. . . . . . . . . . . . . . . . . . . . . . . . . .109 2.2 Droits d’accès d’un fichier sousUnix. . . . . . .110 2.3 Mode d’un fichier sousUnix. . . . . . . . . . . . . . .111 3 Notion de tampon de disque dur. . . . . . . . . . . . . . . . .111 4 Structure d’un disqueMinix. . . . . . . . . . . . . . . . . . . . .112 4.1 Bloc sousMinixet Linux. . . . . . . . . . . . . . . . .112 4.2 Structure générale d’un disqueMinix. . . . . . .112 4.3 Les nuds d’information sur disque. . . . . . . . .113 4.4 Le super bloc. . . . . . . . . . . . . . . . . . . . . . . . . . . . .115 5 Système de fichiersMinixchargé en mémoire. . . . .116 5.1 Antémémoire. . . . . . . . . . . . . . . . . . . . . . . . . . . . .116 5.2 Les descripteurs de nud d’information. . . . .119 5.3 Table des superblocs. . . . . . . . . . . . . . . . . . . . . .121 5.4 Les descripteurs de fichiers. . . . . . . . . . . . . . . . .122 6 Fichiers de périphériques. . . . . . . . . . . . . . . . . . . . . . . . .123 6.1 Caractéristiques. . . . . . . . . . . . . . . . . . . . . . . . . . .123 6.2 Repérage des fichiers de périphériques. . . . . .124 7 Évolution du noyau. . . . . . . . . . . . . . . . . . . . . . . . . . . . .124 7.1 Prise en charge de plusieurs systèmes de fichiers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124 7.2 Cas dePosix. . . . . . . . . . . . . . . . . . . . . . . . . . . .125 7.3 Système de fichiers virtuel. . . . . . . . . . . . . . . . .125 7.4 Superbloc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .126 7.5 Nud d’information. . . . . . . . . . . . . . . . . . . . . . .128 7.6 Descripteur de fichier. . . . . . . . . . . . . . . . . . . . . .129 7.7 Répertoire. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .130 7.8 Types de fichiers. . . . . . . . . . . . . . . . . . . . . . . . . .131