conception des systèmes d'exploition cas de linux

699

Upload: clubtutorielinformatique

Post on 31-Jul-2015

1.020 views

Category:

Documents


9 download

DESCRIPTION

Plus de Livres ici :https://www.facebook.com/ClubTutorialInformatique

TRANSCRIPT

Conception de systmes dexploitation Le cas Linux

CHEZ LE MME DITEURC. BLAESS. Scripts sous Linux. Shell Bash, Sed, Awk, Perl, Tcl, Tk, Python, Ruby... N11405, 2004, 784 pages. C. BLAESS. Programmation systme en C sous Linux. Signaux, processus, threads, IPC et sockets. N11054, 2000, 960 pages. P. FICHEUX. Linux embarqu. N11024, 2002, 326 pages.

Ouvrages dadministrationB. BOUTHERIN, B. DELAUNAY. Scuriser un rseau Linux, 2e dition. N11445, 2004, 200 pages. E. DREYFUS. BSD, 2e dition (coll. Cahiers de lAdmin). N11463, 2004, 300 pages. C. HUNT. Serveurs rseau Linux. N11229, 2003, 650 pages. V. STANFIELD & R..W. SMITH Guide de ladministrateur Linux. N11263, 2003, 654 pages. A. BERLAT, J.-F. BOUCHAUDY, G. GOUBET. Unix Utilisateur. N11319, 2e dition, 2003, 350 pages. A. BERLAT, J.-F. BOUCHAUDY, G. GOUBET. Unix Shell. N11147, 2e dition, 2002, 412 pages. J.-F. BOUCHAUDY, G. GOUBET. Unix Administration. N11053, 2e dition, 2002, 580 pages. J.-F. BOUCHAUDY, G. GOUBET. Linux Administration. N11505, 4e dition 2004, 936 pages.

Patrick Cegielski

Conception de systmes dexploitation Le cas LinuxDeuxime dition

DITIONS EYROLLES 61, bd Saint-Germain 75240 Paris Cedex 05 www.editions-eyrolles.com

Avec la contribution de Mathieu Ropert, Sbastien Blondeel et Florence Henry.

Le code de la proprit intellectuelle du 1er juillet 1992 interdit en effet expressment la photocopie usage collectif sans autorisation des ayants droit. Or, cette pratique sest gnralise notamment dans les tablissements denseignement, provoquant une baisse brutale des achats de livres, au point que la possibilit mme pour les auteurs de crer des uvres nouvelles et de les faire diter correctement est aujourdhui menace. En application de la loi du 11 mars 1957, il est interdit de reproduire intgralement ou partiellement le prsent ouvrage, sur quelque support que ce soit, sans lautorisation de lditeur ou du Centre Franais dexploitation du droit de copie, 20, rue des Grands Augustins, 75006 Paris. Groupe Eyrolles, 2003, 2004, ISBN : 2-212-11479-6

Pour Irne et Marie

PrfaceLe but de ce livre est de faire comprendre comment on conoit un systme dexploitation en illustrant notre propos sur un cas concret dont nous commentons les sources compltement. Le choix sest port tout naturellement sur le premier noyau Linux, ce que nous justions au chapitre 3. En prrequis, nous supposons que le lecteur connat la notion de systme dexploitation en tant quutilisateur, pour des systmes dexploitation tels que MS-DOS, Unix, MacOs ou Windows (95, 98, 2000, NT ou XP), un langage dassemblage pour les microprocesseurs Intel 80x86 et quil sache programmer en langage C. On peut distinguer cinq niveaux de rapports avec un systme dexploitation : le niveau utilisateur : le but principal consiste essentiellement charger les logiciels que lon veut utiliser et de manipuler quelque peu les chiers ; on se sert pour cela de linterprteur de commandes (et de ses commandes telles que copy, rename...) ; le niveau administrateur : cela consiste paramtrer le systme et le tenir jour ; il est indispensable pour les systmes dexploitation capables daccueillir plusieurs utilisateurs ; le niveau criture de scripts pour automatiser certaines squences rptitives de commandes ; le niveau programmation systme : cette programmation se fait pour Linux en langage C en utilisant les appels systme ; le niveau conception du systme, et plus particulirement du noyau. Nous allons nous intresser ici la conception du systme dexploitation, en illustrant nos propos par Linux, plus particulirement par le tout premier noyau 0.01. Lintrt de choisir Linux est que le code est dius. Ce livre na dautre but que de publier en un seul volume les aspects suivants de la conception dun systme dexploitation : les concepts gnraux sous-jacents limplmentation dun systme dexploitation, tels quon les trouve dans [TAN-87] dont nous nous inspirons fortement ; les concepts dun systme dexploitation de type Unix, en suivant le plus possible la norme Posix ; de la documentation sur le microprocesseur Intel 80386 ; 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 rel ; la documentation sur les contrleurs de priphriques et leur implmentation sur un compatible PC, ncessaire la programmation dun systme dexploitation ; une prsentation des choix faits pour limplmentation de Linux 0.01, suivie dextraits de chiers sources, reprables facilement par lindication Linux 0.01 situe en marge, puis paraphrass en franais ; ces paraphrases, commenant presque toujours par autrement dit , ne

iv Prface sont pas thoriquement indispensables mais sont souvent apprciables ; comme nous lavons dj dit, tout le source est comment, mme si pour des raisons logiques il est dispers tout au long de louvrage. Chemin faisant, nous montrons ainsi une mthode pour tudier les sources dautres systmes dexploitation. Lindex fait rfrences aux concepts mais aussi tous les noms apparaissant dans les chiers source, ce qui permet de se rendre directement au commentaire de la partie qui intresse le lecteur.

Prface la seconde dition Dans cette seconde dition, paraissant dix mois aprs la premire, le corps du texte principal na pas chang, part la correction dune coquille. En revanche, chaque chapitre se conclut dsormais par une section volution du noyau renforce, prenant en compte la version 2.6.0 de ce dernier. Nous conseillons de lire le livre sans tenir compte de ces sections puis dy revenir dans un deuxime temps. Nous expliquons au chapitre 3 pourquoi il est prfrable, dans un premier temps, de sattacher au tout premier noyau. Je pense que pour les acionados du tout dernier noyau en date, ces dernires sections seront utiles.

RemerciementsJe tiens remercier tout particulirement Mathieu Ropert, tudiant de lI.U.T. de Fontainebleau en 20012003, pour sa relecture trs attentive du manuscrit.

Table des matiresPrface

............................................

iii

2.2 2.3

Les pilotes de priphriques

................

19 19 21 23 23 23 23 24 24 24 25 25 25 32 32 32 34 34 35 35

PREMIRE PARTIE : PRINCIPES DE CONCEPTION DES SYSTMES DEXPLOITATION Chapitre 1 1 Structure dun systme dexploitation 2.4 1 3 3 3 4 4 5 5 7 9 9 9 9 9 10 10 10 10 11 11 11 12 13 14 14 14 15 15 15 16 17 18 18 18 3 4 3 2 Chapitre 3 1

Logiciel dentre-sortie indpendant du matriel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Logiciels dentre-sortie faisant partie de lespace de lutilisateur

.................... ...............

..

Le systme Linux tudi

Les trois grandes fonctions . . . . . . . . . . . . . . . . . . . . . . . 1.1 Chargement des programmes . . . . . . . . . . . . . . . 1.2 1.3 Le systme dexploitation en tant que machine virtuelle . . . . . . . . . . . . . . . . . . . . . . . . . . Le systme dexploitation en tant que gestionnaire de ressources

Le systme Linux tudier . . . . . . . . . . . . . . . . . . . . . . . 1.1 Noyau et distribution . . . . . . . . . . . . . . . . . . . . . .

2

3

4

5

.................. ....... 2.1 Systmes multi-tches . . . . . . . . . . . . . . . . . . . . . 2.2 Systmes multi-utilisateurs . . . . . . . . . . . . . . . . . Structure externe dun systme dexploitation . . . . . . 3.1 Noyau et utilitaires . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Le gestionnaire de tches . . . . . . . . . . . . . . . . . . 3.3 Le gestionnaire de mmoire . . . . . . . . . . . . . . . . 3.4 Le gestionnaire de chiers . . . . . . . . . . . . . . . . . . 3.5 Le gestionnaire de priphriques . . . . . . . . . . . . 3.6 Le chargeur du systme dexploitation . . . . . . . 3.7 Linterprteur de commandes . . . . . . . . . . . . . . . Structure interne dun systme dexploitation . . . . . . 4.1 Les systmes monolithiques . . . . . . . . . . . . . . . . 4.2 Systmes modes noyau et utilisateur . . . . . . 4.3 Systmes couches . . . . . . . . . . . . . . . . . . . . . . . 4.4 Systmes micro-noyau . . . . . . . . . . . . . . . . . . . 4.5 Systmes modules . . . . . . . . . . . . . . . . . . . . . . . Mise en uvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1 Les appels systme . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Les signaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Caractristiques dun systme dexploitation Principe de traitement des entressorties

............................ ..................... ..................... 1.5 Versions du noyau Linux . . . . . . . . . . . . . . . . . . . Les sources du noyau 0.01 . . . . . . . . . . . . . . . . . . . . . . . 2.1 Vue densemble sur larborescence . . . . . . . . . . 2.2 Larborescence dtaille . . . . . . . . . . . . . . . . . . . . Vue densemble sur limplmentation . . . . . . . . . . . . . 3.1 Caractristiques . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 tapes de limplmentation . . . . . . . . . . . . . . . . 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 . . . . . . . . . . . . . . . . . . . . . . . .1.2 Noyau minimal 1.3 1.4 Obtention des sources Programmation Linux

DEUXIME PARTIE : UTILISATION DU MICRO-PROCESSEUR INTEL Chapitre 4 1 1.1 1.2 2 2.1 2.2 2.3 Prise en compte de la mmoire Intel 37

...

39 39 39 39 45 45 46 50 51 51 52 52 55 55

La segmentation sous Intel . . . . . . . . . . . . . . . . . . . . . . . Notion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . La segmentation en mode protg sur Intel . . Mode noyau et mode utilisateur . . . . . . . . . . . . Segmentation en mode noyau . . . . . . . . . . . . . . Accs la mmoire vive

La segmentation sous Linux . . . . . . . . . . . . . . . . . . . . . .

Chapitre 2 1

2

................................. Principe du matriel dentre-sortie . . . . . . . . . . . . . . . 1.1 Les priphriques dentre-sortie . . . . . . . . . . . . 1.2 Les contrleurs de priphriques . . . . . . . . . . . . 1.3 Transferts synchrones et asynchrones . . . . . . . 1.4 Priphriques partags et ddis . . . . . . . . . . . . Principe des logiciels dentre-sortie . . . . . . . . . . . . . . 2.1 Objectifs des logiciels des entres-sorties . . . .

...................

volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1 Prise en compte dautres micro-processeurs . . 3.2 3.3 Accs la mmoire vive Utilisation de la segmentation interruptions Intel

................... ..............

Chapitre 5 1

Adaptation des entres-sorties et des

Accs aux ports dentre-sortie

..................... ...................

vi Table des matires1.1 1.2 2 Accs aux ports dentre-sortie sous 80x86 Encapsulation des accs aux ports dentresortie sous Linux 2.1 2.2 3

..

55 55 56 56 60 61 61 62 64 64 65 66 68 70 71 72 72 73 73 73 74 76 76 5 79 81 81 81 82 82 83 84 85 85 85 86 87 88 89 7 6 3 4 1 4 2 3

1.13 Informations sur les chiers utiliss . . . . . . . . . 1.14 Table locale de descripteurs . . . . . . . . . . . . . . . . 1.15 Segment dtat de tche

89 90 90 94 97 98 99 99 99 100

Les interruptions sous Linux

.......................... .....................

...................

Tche initiale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Table des processus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1 Stockage des descripteurs de processus . . . . . . 3.2 3.3 3.4 4.1 4.2 Implmentation de la table des processus

Rappels sur les vecteurs dinterruption dIntel Adaptations sous Linux

4

.................... Initialisation des exceptions . . . . . . . . . . . . . . . . . . . . . . 3.1 Initialisation provisoire . . . . . . . . . . . . . . . . . . . . . 3.2 Initialisation dnitive . . . . . . . . . . . . . . . . . . . . . Initialisation des interruptions matrielles . . . . . . . . . . 4.1 Un problme de conception . . . . . . . . . . . . . . . . 4.2 Contrleur dinterruptions programmable . . . .4.3 4.4 4.5 4.6 4.7 Programmation des registres de contrle dinitialisation du PIC . . . . . . . . . . . . . . . . . . . . . Programmation des registres de contrle des oprations du PIC . . . . . . . . . . . . . . . . . . . . . Reprogrammation du PIC dans le cas de Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Gestionnaires des interruptions matrielles . . . Manipulation des interruptions matrielles

....

Reprage dun descripteur de processus . . . . . La tche en cours . . . . . . . . . . . . . . . . . . . . . . . . .

volution du noyau

.............................

Structure du descripteur de processus . . . . . . . 100 Table des processus . . . . . . . . . . . . . . . . . . . . . . . 102 Description du systme de chiers

Chapitre 7

.....

103

tude gnrale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 1.1 Notion de chiers . . . . . . . . . . . . . . . . . . . . . . . . . 103

5 6

... Initialisation de linterruption logicielle . . . . . . . . . . . . volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1 Accs aux ports dentre-sortie . . . . . . . . . . . . . 6.2 Insertion des portes dinterruption . . . . . . . . . . 6.3 Initialisation des exceptions . . . . . . . . . . . . . . . . 6.4 Initialisation des interruptions matrielles . . . . 6.5 Manipulation des interruptions matrielles . . .

2

TROISIME PARTIE : LES GRANDES STRUCTURES DE DONNES Chapitre 6 1 Les structures de donnes concernant les processus . . . . . . . . . . . . . . . . . . . . . . . . . .

Descripteur de processus . . . . . . . . . . . . . . . . . . . . . . . . . 1.1 Structure du descripteur de processus . . . . . . . 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11 1.12 Aspects structurels

........................

tat dun processus . . . . . . . . . . . . . . . . . . . . . . . Priorit dun processus . . . . . . . . . . . . . . . . . . . .

........................ ...... ...... Caractristiques dun chier . . . . . . . . . . . . . . . . . . . . . . 2.1 Types de chiers . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Droits daccs dun chier sous Unix . . . . . . . 2.3 Mode dun chier sous Unix . . . . . . . . . . . . . . . Notion de tampon de disque dur . . . . . . . . . . . . . . . . . Structure dun disque Minix .. . . . . . . . . . . . . . . . . . . . 4.1 Bloc sous Minix et Linux . . . . . . . . . . . . . . . . . 4.2 Structure gnrale dun disque Minix . . . . . . . 4.3 Les nuds dinformation sur disque . . . . . . . . . 4.4 Le super bloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Systme de chiers Minix charg en mmoire . . . . . 5.1 Antmmoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Les descripteurs de nud dinformation . . . . . 5.3 Table des super-blocs . . . . . . . . . . . . . . . . . . . . . . 5.4 Les descripteurs de chiers . . . . . . . . . . . . . . . . . Fichiers de priphriques . . . . . . . . . . . . . . . . . . . . . . . . . 6.1 Caractristiques . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Reprage des chiers de priphriques . . . . . . volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.2 1.3 1.4 Gestion des chiers Les chiers du point de vue utilisateur La conception des systmes de chiers 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 Prise en charge de plusieurs systmes de chiers

104 104 106 109 109 110 111 111 112 112 112 113 115 116 116 119 121 122 123 123 124 124 124

.................................. Code de statut . . . . . . . . . . . . . . . . . . . . . . . . . . . . Espace dadressage . . . . . . . . . . . . . . . . . . . . . . . . Identicateurs du processus . . . . . . . . . . . . . . . . Hirarchie des processus . . . . . . . . . . . . . . . . . . . Propritaire dun processus . . . . . . . . . . . . . . . . . Informations temporelles . . . . . . . . . . . . . . . . . . . Utilisation du coprocesseur mathmatique . . .Signaux

................................... ...............................

Cas de Posix . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Systme de chiers virtuel . . . . . . . . . . . . . . . . . 125 Super-bloc 126 Nud dinformation . . . . . . . . . . . . . . . . . . . . . . . 128 Descripteur de chier . . . . . . . . . . . . . . . . . . . . . . 129 Rpertoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Types de chiers . . . . . . . . . . . . . . . . . . . . . . . . . . 131

Table des matires vii7.9 Dclaration dun systme de chiers . . . . . . . . 131 7.10 Descripteur de tampon . . . . . . . . . . . . . . . . . . . . 131 Chapitre 8 1 2.1 2.2 3 Lhorloge temps rel des PC . . . . . . . . . . . . . . . 194 Minuteur priodique programmable . . . . . . . . . 196

2

3

.............. Les terminaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1 Notion de terminal . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Les terminaux du point de vue matriel . . . . . 1.3 Le pilote de terminal . . . . . . . . . . . . . . . . . . . . . . 1.4 Les dirents terminaux et les normes . . . . . . . 1.5 Modlisation en voies de communication . . . . Paramtrage des voies de communication . . . . . . . . . 2.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 La structure de paramtrisation . . . . . . . . . . . . 2.3 Paramtrage des modes dentre . . . . . . . . . . . 2.4 Paramtrage des modes de sortie . . . . . . . . . . . 2.5 Le tableau des caractres de contrle . . . . . . . 2.6 Paramtrage des modes locaux . . . . . . . . . . . . . 2.7 Paramtrages des modes de contrle . . . . . . . . Implmentation des voies de communication . . . . . . .Les terminaux sous Linux 3.1 3.2

133 133 133 133 139 139 140 140 140 141 141 143 145 148 150 151

Programmation du minuteur sous Linux . . . . . . . . . . . 198 3.1 Initialisation du minuteur . . . . . . . . . . . . . . . . . . 199 3.2 3.3 3.4 Variable de sauvegarde du temps . . . . . . . . . . . 199 Gestionnaire de linterruption dhorloge . . . . . . 199 La comptabilisation du processus en cours

...

200 201 202 204 209

4

Maintien de la date et de lheure sous Linux . . . . . . . 201 4.1 4.2 Variable structure de conservation du temps Initialisation de la variable structure

5 1

volution du noyau

....... ............................. .............

Chapitre 11 Le gestionnaire des tches

Commutation de processus . . . . . . . . . . . . . . . . . . . . . . 209 1.1 Notion gnrale . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

2

Implmentation dun tampon dentre ou de sortie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Implmentation des voies de communication 153 154 154 155 155 156 156 156

3 4 1 2 3 4

4

5

. Implmentation du terminal . . . . . . . . . . . . . . . . . . . . . . 4.1 Dnition du terminal . . . . . . . . . . . . . . . . . . . . . 4.2 Les caractres de contrle . . . . . . . . . . . . . . . . . . 4.3 Caractristiques de la console . . . . . . . . . . . . . . 4.4 Caractristiques des liaisons srie . . . . . . . . . . . 4.5 Les tampons du terminal . . . . . . . . . . . . . . . . . . volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

....... ............................. Ordonnancement des processus . . . . . . . . . . . . . . . . . . 2.1 Politique dordonnancement . . . . . . . . . . . . . . . . 2.2 Algorithme dordonnancement . . . . . . . . . . . . . . Initialisation du gestionnaire des tches . . . . . . . . . . . volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.2 1.3 Gestion du coprocesseur arithmtique Cas de Linux

209 209 210 211 212 215 215 221 221 221 223 224

Chapitre 12 Les signaux sous Linux Notion gnrale de signal

................. ........................ Liste et signication des signaux . . . . . . . . . . . . . . . . . Vue densemble de manipulation des signaux . . . . . . Implmentation des deux appels systme . . . . . . . . . .4.1 4.2 Implmentation de lappel systme denvoi

dun signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 Implmentation de lappel systme de droutement 225 225 227 227

QUATRIME PARTIE : ASPECT DYNAMIQUE SANS AFFICHAGE Chapitre 9 1 Implmentation des appels systme sous Linux 163 165 5 6 7

.............................

.............................. ........ Fonction de gestion de signal par dfaut . . . . . . . . . . volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Implmentation du traitement des signaux

Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 1.1 Dnition des appels systme . . . . . . . . . . . . . . 165

2 3 4 1

................... 1.3 Insertion et excution des appels systme . . . . 1.4 Fonction dappel . . . . . . . . . . . . . . . . . . . . . . . . . . Liste des codes derreur . . . . . . . . . . . . . . . . . . . . . . . . . Liste des appels systme . . . . . . . . . . . . . . . . . . . . . . . . . volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.2 Notion de code derreur

168 169 171 172 174 178 189 189 190 191 194

CINQUIME PARTIE : AFFICHAGE Chapitre 13 Le pilote dcran sous Linux 1 Achage brut

231 233 233 233 234 237 237 238 238 238 239

2

Chapitre 10 Mesure du temps sous Linux

2

........... Les horloges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1 Le matriel de lhorloge . . . . . . . . . . . . . . . . . . . . 1.2 Le logiciel des horloges . . . . . . . . . . . . . . . . . . . . Horloges matrielles des PC . . . . . . . . . . . . . . . . . . . . . .

3

............ .................................. 1.1 Rappels sur lachage texte sur lIBM-PC . . . 1.2 Implmentation sous Linux . . . . . . . . . . . . . . . . . Notion dachage structur . . . . . . . . . . . . . . . . . . . . . 2.1 Principe du logiciel dachage structur . . . . 2.2 Cas de Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les suites dchappement ECMA-48 . . . . . . . . . . . . . . 3.1 Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Smantique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

viii Table des matires4 Le pilote dcran sous Linux . . . . . . . . . . . . . . . . . . . . . 240 4.1 Prise en compte des caractristiques 4.2 4.3 5 ECMA-48 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Fonction dcriture sur la console . . . . . . . . . . . 241 Traitement des cas spciaux 2.5 3 4 Les macros auxiliaires

.....................

296

La routine int3() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 La routine device_not_available() . . . . . . 297 4.1 La routine principale . . . . . . . . . . . . . . . . . . . . . . 297 4.2 La fonction math_state_restore() volution du noyau

...............

245 5 1

volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 5.1 Achage graphique et achage console . . . . 254 5.2 5.3 Caractristiques de lcran Les consoles

.. .............................

298 298 301 301 301 301 302 302 302 304 304 304 305 306 306 306 306 306 307 308 309 310 311 311 312

................. .............................. ...

254 259 263

Chapitre 17 Mmoire virtuelle sous Linux

Chapitre 14 Lachage des caractres sous Linux 1

Traitement des caractres . . . . . . . . . . . . . . . . . . . . . . . . 263 1.1 Les caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

2

2

3

........ 1.3 Fonctions de classication des caractres . . . . 1.4 Fonctions de conversion . . . . . . . . . . . . . . . . . . . criture sur une voie de communication . . . . . . . . . . . 2.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Attente du vidage du tampon dcriture . . . . . 2.4 Traitement des processus en attente . . . . . . . . volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1 Traitement des caractres . . . . . . . . . . . . . . . . . . 3.2 criture sur une voie de communication . . . . .1.2 Classication primaire des caractres

263 264 265 266 266 266 267 268 269 269 269 273 273 273 274 275 275 275 277 280 283 284 284 5 4

3

Chapitre 15 Lachage format du noyau 1

2

.......... Nombre variable darguments . . . . . . . . . . . . . . . . . . . . 1.1 Lapport du C standard . . . . . . . . . . . . . . . . . . . . 1.2 Implmentation de stdarg.h sous Linux . . Formatage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 La fonction sprintf() . . . . . . . . . . . . . . . . . . 2.2 Structure des formats . . . . . . . . . . . . . . . . . . . . . 2.3 Le cas de Linux 0.01 . . . . . . . . . . . . . . . . . . . . . .2.4 2.5

........... tude gnrale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1 Mmoire virtuelle . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Mise en place de la mmoire virtuelle . . . . . . . Pagination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 Notion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Pagination plusieurs niveaux . . . . . . . . . . . . . . 2.3 Protection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . La pagination sous Intel 80386 . . . . . . . . . . . . . . . . . 3.1 Taille des pages . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Structure des entres des tables . . . . . . . . . . . . 3.3 Activation de la pagination . . . . . . . . . . . . . . . . . 3.4 Structure dune adresse virtuelle . . . . . . . . . . . . 3.5 Mcanisme de protection matrielle . . . . . . . . . La pagination sous Linux . . . . . . . . . . . . . . . . . . . . . . . . 4.1 Mise en place des lments . . . . . . . . . . . . . . . . 4.2 Initialisation de la pagination . . . . . . . . . . . . . . . 4.3 Zone xe et zone de mmoire dynamique . . . . 4.4 Structures de gestion des tables de pages . . . . 4.5 Obtention dun cadre de page libre . . . . . . . . . 4.6 Libration dun cadre de page . . . . . . . . . . . . . . Traitement de lexception de dfaut de page . . . . . . . 5.1 Le code principal . . . . . . . . . . . . . . . . . . . . . . . . . .5.2 5.3

Implmentation de vsprintf() sous Linux 277 Les fonctions auxiliaires 6

Exception dessai dcriture sur une page en lecture seule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 Exception de page non prsente

3 4 5

.................... La fonction printk() .. . . . . . . . . . . . . . . . . . . . . . . . La fonction panic() . . . . . . . . . . . . . . . . . . . . . . . . . . volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

volution du noyau

............ .............................

314 315

SEPTIME PARTIE : FICHIERS RGULIERS Chapitre 18 Le pilote du disque dur

325 327 327 327 328 330 330 334 341 341

SIXIME PARTIE : ASPECT DYNAMIQUE AVEC AFFICHAGE Chapitre 16 Gestionnaires des exceptions 1 2 289 291 291 292 292 292 293 294

1

........... Traitement des exceptions sous Linux . . . . . . . . . . . . . Structure gnrale des routines . . . . . . . . . . . . . . . . . . . 2.1 Dnitions des gestionnaires . . . . . . . . . . . . . . . 2.2 Structure dun gestionnaire . . . . . . . . . . . . . . . .2.3 2.4 Les fonctions de traitement du code derreur Les fonctions C des gestionnaires par dfaut

2

3

.

................ Gomtrie des disques durs . . . . . . . . . . . . . . . . . . . . . . 1.1 Description gnrale . . . . . . . . . . . . . . . . . . . . . . . 1.2 Prise en charge par Linux . . . . . . . . . . . . . . . . . . Le contrleur de disque dur IDE . . . . . . . . . . . . . . . . . . 2.1 Les registres IDE . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Les commandes du contrleur IDE . . . . . . . . . . Prise en charge du contrleur par Linux . . . . . . . . . . . 3.1 Constantes lies au contrleur . . . . . . . . . . . . . .

Table des matires ix3.2 3.3 3.4 3.5 4 Routine dinterruption matrielle du disque dur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 Passage des commandes . . . . . . . . . . . . . . . . . . . 344 Fonction dattente du contrleur . . . . . . . . . . . 345 Rcupration des erreurs 345 346 346 348 348 348 348 349 349 350 351 353 355 356 3 5 1 2 4.3 4.4 Cration dun descripteur de tampon . . . . . . . . 377 Lecture dun tampon . . . . . . . . . . . . . . . . . . . . . . 379

volution du noyau

............................. .................

379 385

5

................... Partitionnement du disque dur . . . . . . . . . . . . . . . . . . . 4.1 Un choix dIBM . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Utilisation par Linux . . . . . . . . . . . . . . . . . . . . . . . Requtes un disque dur . . . . . . . . . . . . . . . . . . . . . . . . 5.1 Notion de requte . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Structure des requtes . . . . . . . . . . . . . . . . . . . . . 5.3 Tableau des listes de requtes . . . . . . . . . . . . . . 5.4 Initialisation du disque dur . . . . . . . . . . . . . . . . . 5.5 Requte de lecture ou dcriture . . . . . . . . . . . . 5.6 Gestion des tampons . . . . . . . . . . . . . . . . . . . . . . 5.7 Ajout dune requte . . . . . . . . . . . . . . . . . . . . . . . 5.8 Traitement des requtes . . . . . . . . . . . . . . . . . . .5.9 Le gestionnaire dinterruption en cas dcriture

Chapitre 20 Les priphriques bloc

Vue densemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 Accs bas niveau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 2.1 2.2 2.3 Dtermination des priphriques bloc . . . . . . . 386 Table des pilotes de bas niveau . . . . . . . . . . . . . 387 Fonction daccs bas niveau

..............

387

3

Les fonctions de lecture et dcriture de bloc . . . . . . 388 3.1 Fonction dcriture . . . . . . . . . . . . . . . . . . . . . . . . 388 3.2 Fonction de lecture volution du noyau

4 1 2

........................ .............................

389 391 395 395 395 395 397 398 399 399 399 400 400 401 402 402 402 403 405 405 406 407 407 408

Chapitre 21 Gestion des nuds dinformation Chargement dun super-bloc

.................................

5.10 Rinitialisation du disque dur . . . . . . . . . . . . . . . 357 5.11 Le gestionnaire dinterruption en cas de 6 7

................................... Pilote du disque dur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1 Priphriques bloc . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Gomtrie dun disque dur . . . . . . . . . . . . . . . . . 7.3 Initialisation dun disque dur traditionnel . . . . 7.4 Contrleur de disque dur . . . . . . . . . . . . . . . . . . . 7.5 Interruption matrielle dun disque dur . . . . . . 7.6 Passage des commandes . . . . . . . . . . . . . . . . . . . 7.7 Partitionnement des disques durs . . . . . . . . . . . 7.8 Requtes un disque dur . . . . . . . . . . . . . . . . . .lecture

359 359 360 360 363 363 366 368 369 369 370 373 373 373 374 374 374 374 374 375 375 376 376 376 377

4

5

Chapitre 19 Gestion de lantmmoire 1

2

3 4

.............. Description des fonctions . . . . . . . . . . . . . . . . . . . . . . . . 1.1 Gestion des listes de tampons . . . . . . . . . . . . . . 1.2 Fonctions daccs aux tampons . . . . . . . . . . . . . 1.3 Rcriture des tampons modis . . . . . . . . . . . Implmentation des fonctions de gestion de listes . . 2.1 Fonctions de hachage . . . . . . . . . . . . . . . . . . . . . 2.2 Insertion dans les listes . . . . . . . . . . . . . . . . . . . . 2.3 Suppression des listes . . . . . . . . . . . . . . . . . . . . . . 2.4 Recherche dun descripteur de tampon . . . . . . Rcriture sur un disque donn . . . . . . . . . . . . . . . . . . . Les fonctions de manipulation des tampons . . . . . . . 4.1 Relchement dun tampon . . . . . . . . . . . . . . . . . 4.2 Dtermination dun descripteur de tampon . .

6

....... ..................... Gestion des tables de bits des donnes . . . . . . . . . . . . 2.1 Recherche dun bloc de donnes libre . . . . . . . 2.2 Macros auxiliaires . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Libration dun bloc de donnes . . . . . . . . . . . . Les fonctions internes des nuds dinformation . . . . 3.1 Verrouillage dun descripteur de nud . . . . . . 3.2 Dverrouillage dun descripteur de nud . . . . 3.3 Fonction dattente de dverrouillage . . . . . . . . 3.4 criture dun nud dinformation sur disque . 3.5 Lecture dun nud dinformation sur disque . Gestion des blocs sur noeud dinformation . . . . . . . . . 4.1 Dtermination du numro de bloc physique . . 4.2 Agrgation dun bloc physique . . . . . . . . . . . . . 4.3 Implmentation de la fonction auxiliaire . . . . . Mise zro dun nud dinformation sur disque . . . 5.1 Mise zro dun bloc dindirection simple . . . 5.2 Mise zro dun bloc dindirection double . . . 5.3 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonctions de service des nuds dinformation . . . . . 6.1 Synchronisation des nuds dinformation . . . .6.2 6.3 6.4 6.5 6.6 6.7

Recherche dun nouveau descripteur de nud dinformation . . . . . . . . . . . . . . . . . . . . . . . 408 Remplissage dune zone de mmoire . . . . . . . . 409 Libration dun nud dinformation en table des bits

.............................

410

Relchement dun nud dinformation . . . . . . 411 Recherche dun nud dinformation libre sur disque Chargement dun nud dinformation

7

volution

................................ ....... du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

412 413 414

x Table des matiresChapitre 22 Gestion interne des chiers rguliers et des rpertoires . . . . . . . . . . . . . . . . . . . . . . 419 1 6 1 volution du noyau tude gnrale

.............................

472 477 477 477 482 484 484 485 485 489 489 489 491 495 501

2

3

4

................ 1.1 Chargement dun super-bloc . . . . . . . . . . . . . . . 1.2 Initialisation du systme de chiers . . . . . . . . . 1.3 Lecture de la table des partitions . . . . . . . . . . . Gestion des rpertoires . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 tude gnrale des rpertoires . . . . . . . . . . . . . . 2.2 Les chiers rpertoire sous Linux . . . . . . . . . . . 2.3 Fonctions internes de gestion des rpertoires . Gestion interne des chiers rguliers . . . . . . . . . . . . . . 3.1 Gestion des noms de chiers . . . . . . . . . . . . . . . 3.2 Lecture et criture dans un chier rgulier . . . volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1 Montage dun systme de chiers . . . . . . . . . . . 4.2 Gestion des rpertoires et des chiers . . . . . . .Montage dun systme de chiers

Chapitre 24 Les liaisons srie

419 419 421 422 423 423 427 428 433 433 438 440 441 444

2

3

4 1

....................... ................................. 1.1 Communication srie asynchrone . . . . . . . . . . . 1.2 Communication srie synchrone . . . . . . . . . . . . 1.3 Le standard dinterface srie RS-232 . . . . . . . . LUART PC16550D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 Le brochage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Lensemble de registres . . . . . . . . . . . . . . . . . . . . 2.3 Programmation de lUART . . . . . . . . . . . . . . . . Cas de Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1 Initialisation des liaisons srie . . . . . . . . . . . . . . 3.2 Gestionnaires dinterruption . . . . . . . . . . . . . . . . volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ............

Chapitre 25 Les priphriques caractre

HUITIME PARTIE : PRIPHRIQUES CARACTRE Chapitre 23 Le clavier 1

Fonctions de lecture/criture . . . . . . . . . . . . . . . . . . . . . 501 1.1 Fonction daccs de haut niveau . . . . . . . . . . . . 501 1.2 1.3 Fonctions daccs de bas niveau . . . . . . . . . . . . 501 Implmentation de la fonction daccs de haut niveau 502 503 503 503 503

449 451 451 451 451 453 453 453 454 454 457 457 457 458 458 458 459 459 460 461 463 466 467 468 468 469 2 2 3 2

2

3

4

5

............................. Principe du logiciel de lecture au clavier . . . . . . . . . . . 1.1 Modes brut et structur . . . . . . . . . . . . . . . . . . . 1.2 Tampon de lecture . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Quelques problmes pour le pilote . . . . . . . . . . Interface du clavier sur lIBM-PC .. . . . . . . . . . . . . . . . 2.1 Aspect physique . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Make-code et break-code . . . . . . . . . . . . . . . . . . 2.3 Les registres du contrleur de clavier . . . . . . . . 2.4 Principe de lecture des scan codes . . . . . . . . . . 2.5 Le port 61h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Principe du traitement du clavier sous Linux . . . . . . . 3.1 Le gestionnaire du clavier . . . . . . . . . . . . . . . . . . 3.2 Initialisation du gestionnaire de clavier . . . . . . 3.3 Grandes tapes du gestionnaire de clavier . . . Traitement du mode donnes brutes . . . . . . . . . . . . . . 4.1 Grandes tapes . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Dtermination de la fonction de traitement . . 4.3 Cas des touches prxielles . . . . . . . . . . . . . . . . . 4.4 Cas dune touche normale . . . . . . . . . . . . . . . . . 4.5 Les touches de dplacement du curseur . . . . . 4.6 Les touches de fonction . . . . . . . . . . . . . . . . . . . . 4.7 La touche moins . . . . . . . . . . . . . . . . . . . . . . . . . . 4.8 Mise en tampon brut du clavier . . . . . . . . . . . . Traitement du mode structur . . . . . . . . . . . . . . . . . . . 5.1 Appel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.2

Fonctions daccs de bas niveau des terminaux

............................... .... 2.1 Cas dun terminal quelconque . . . . . . . . . . . . . . 2.2 Cas du terminal en cours . . . . . . . . . . . . . . . . . . volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

NEUVIME PARTIE : COMMUNICATION PAR TUBES Chapitre 26 Communication par tubes sous Linux 1 507 509 509 509 510 510 510 511 513

... tude gnrale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1 Notion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Types de tubes de communication . . . . . . . . . . Gestion interne sous Linux . . . . . . . . . . . . . . . . . . . . . . .2.1 2.2 Descripteur de nud dinformation dun tube Oprations dentre-sortie

3

volution du noyau

.................. .............................

DIXIME PARTIE : LE MODE UTILISATEUR Chapitre 27 Appels systme du systme de chiers 1

517

.

519

Points de vue utilisateur et programmeur . . . . . . . . . . 519 1.1 Les chiers du point de vue utilisateur . . . . . . 519 1.2 2.1 2.2 Les chiers du point de vue du programmeur 521 522 522 525 Entres-sorties Unix sur chier

469 Passage du tampon brut au tampon structur 470

.................. Ouverture et fermeture de chiers . . . . . . . . . . Lecture et criture de donnes . . . . . . . . . . . . . .

Table des matires xi2.3 2.4 3 3.1 Positionnement dans un chier . . . . . . . . . . . . . 528 Sauvegarde des donnes modies . . . . . . . . . . 529 529 529 533 534 534 537 538 539 539 539 541 542 544 544 546 550 550 552 558 558 559 562 563 565 566 7 8 1 6 5 4 3 2 7 1 Appel systme douverture 5.2 6 6.1 6.2 Implmentation

...........................

601

Autres appels systme . . . . . . . . . . . . . . . . . . . . . . . . . . . 603 Lappel systme break() . . . . . . . . . . . . . . . . 603 Lappel systme acct() . . . . . . . . . . . . . . . . . . 603

4

5

6

7

.......... ................. 3.2 Appel systme de cration . . . . . . . . . . . . . . . . . 3.3 Appel systme de fermeture . . . . . . . . . . . . . . . . 3.4 Appel systme de lecture des donnes . . . . . . . 3.5 Appel systme dcriture des donnes . . . . . . . 3.6 Appel systme de positionnement . . . . . . . . . . . 3.7 Appel systme de sauvegarde des donnes . . . Liens et chiers partags . . . . . . . . . . . . . . . . . . . . . . . . 4.1 tude gnrale . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Cration de liens symboliques sous Unix . . . . 4.3 Implmentation sous Linux . . . . . . . . . . . . . . . . . Manipulations des chiers . . . . . . . . . . . . . . . . . . . . . . . 5.1 Les appels systme Unix . . . . . . . . . . . . . . . . . . 5.2 Implmentation sous Linux . . . . . . . . . . . . . . . . . Gestion des rpertoires . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1 Les appels systme Unix . . . . . . . . . . . . . . . . . . 6.2 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . Autres appels systme . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1 Duplication de descripteur dentre-sortie . . . . 7.2 Rcupration des attributs des chiers . . . . . . 7.3 Dates associes aux chiers . . . . . . . . . . . . . . . . 7.4 Proprits des chiers ouverts . . . . . . . . . . . . . .Implmentation Linux des entres-sorties 7.5 Montage et dmontage de systmes de chiers

volution du noyau

.............................

603 609 609 609 610 611 611 612 612 612 613 614 615 615 616 618 618

Chapitre 29 Les autres appels systme sous Linux Appels systme de mesure du temps

... .............. 1.1 Liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . Appels systme lis lordonnancement . . . . . . . . . . . 2.1 Priorit des processus . . . . . . . . . . . . . . . . . . . . . . 2.2 Contrle de lexcution dun processus . . . . . . Appels systme concernant les signaux . . . . . . . . . . . . 3.1 mission dun signal . . . . . . . . . . . . . . . . . . . . . . . 3.2 Droutement dun signal . . . . . . . . . . . . . . . . . . . 3.3 Attente dun signal . . . . . . . . . . . . . . . . . . . . . . . . Appels systme concernant les priphriques . . . . . . . 4.1 Cration dun chier spcial . . . . . . . . . . . . . . . . 4.2 Oprations de contrle dun priphrique . . . . Appels systme concernant la mmoire . . . . . . . . . . . . 5.1 Structure de la mmoire utilisateur . . . . . . . . .5.2 5.3

Changement de la taille du segment des donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619 Accs une adresse physique 620 620 620 621 622 623 625

8

volution

................................... du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Chapitre 28 Appels systme concernant les processus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 1 Cration des processus . . . . . . . . . . . . . . . . . . . . . . . . . . 569 1.1 Description des appels systme . . . . . . . . . . . . . 569 1.2 1.3 1.4 2 Implmentation de fork() . . . . . . . . . . . . . . . 572 Le format dexcutable a.out . . . . . . . . . . . . . 577 Implmentation de execve() 583 592 592 593 594 594 595 596 596 597 600 600

.............. ........................ 6.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . Autres appels systme . . . . . . . . . . . . . . . . . . . . . . . . . . . volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Tubes de communication

Chapitre 30 Fonctions de la bibliothque C 1.1 1.2 2

.........

La fonction printf() .. . . . . . . . . . . . . . . . . . . . . . . . 625 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . 625

Gestion des attributs

3

4

5

............ ............................ 2.1 Description des appels systme . . . . . . . . . . . . . 2.2 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . Gestion des groupes et des sessions de processus . . . 3.1 Description des appels systme . . . . . . . . . . . . . 3.2 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . Terminaison du processus en cours . . . . . . . . . . . . . . . 4.1 Description de lappel systme . . . . . . . . . . . . . 4.2 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . Attente de la n dun processus ls . . . . . . . . . . . . . . . 5.1 Les appels systme . . . . . . . . . . . . . . . . . . . . . . . .

Fonction concernant les signaux . . . . . . . . . . . . . . . . . . 626 2.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626 2.2 Implmentation

...........................

626 631

3 4

Fonctions sur les chanes de caractres . . . . . . . . . . . . 626 volution du noyau

.............................

ONZIME PARTIE : DMARRAGE DU SYSTME Chapitre 31 Dmarrage du systme Linux 1 633

..........

635

Source et grandes tapes . . . . . . . . . . . . . . . . . . . . . . . . 635 1.1 Fichiers sources concerns . . . . . . . . . . . . . . . . . 635 1.2 Dbut de lamorage Le chargeur damorage

2

...................... .........................

635 636

xii Table des matires2.1 2.2 2.3 2.4 2.5 3 Les grandes tapes . . . . . . . . . . . . . . . . . . . . . . . . 636 Transfert du code damorage . . . . . . . . . . . . . . 637 Conguration de la pile en mode rel . . . . . . . 637 Achage dun message de chargement . . . . . . 638 Chargement de limage du noyau 4.4 4.5 4.6 4.7 4.8 4.9 5 Initialisation provisoire de la table des interruptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646 Initialisation de la table globale des descripteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647 Valeurs nales des registres de segment de donnes et de pile . . . . . . . . . . . . . . . . . . . . . . . . . 648 Vrication de lactivation de la broche A20 649 Vrication de la prsence du coprocesseur arithmtique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649 Mise en place de la pagination . . . . . . . . . . . . . 649 649 650 650 651 652 653 654 659 669

...........

638

Passage au mode protg . . . . . . . . . . . . . . . . . . . . . . . . 642 3.1 Les grandes tapes . . . . . . . . . . . . . . . . . . . . . . . . 642 3.2 3.3 3.4 3.5 3.6 3.7 3.8 Sauvegarde de la position du curseur graphique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643 Inhibition des interruptions matrielles . . . . . . 643 Transfert du code du systme . . . . . . . . . . . . . . 643 Chargement de tables provisoires de descripteurs

..............................

644

Activation de la broche A20 . . . . . . . . . . . . . . . 644 Reprogrammation du PIC . . . . . . . . . . . . . . . . . . 645 Passage au mode protg 645 645 645 646 646 6

4

.................. La fonction startup_32() . . . . . . . . . . . . . . . . . . . 4.1 Les grandes tapes . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Initialisation des registres de segmentation . . . 4.3 Conguration de la pile en mode noyau . . . . .

.. ................ 5.1 Les grandes tapes . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Initialisation du terminal . . . . . . . . . . . . . . . . . . . 5.3 Passage au mode utilisateur . . . . . . . . . . . . . . . . 5.4 Le processus 1 : init . . . . . . . . . . . . . . . . . . . . . . . volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4.10 Passage la fonction start_kernel() La fonction start_kernel()

Bibliographie Index

.......................................

..............................................

Table des gures1.1 1.2 4.1 4.2 4.3 6.1 6.2 6.3 7.1 7.2 7.3 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 Processus Minix

.................................... .......................................

6 12 40 44 45 91 98 106 107 112

10.1 Horloge programmable . . . . . . . . . . . . . . . . . . . . . . . . . 190 10.2 Maintien de lheure courante . . . . . . . . . . . . . . . . . . . 191 10.3 Traitement des alarmes . . . . . . . . . . . . . . . . . . . . . . . . 193 13.1 Caractres ASCII modis . . . . . . . . . . . . . . . . . . . . . . 235 17.1 Pagination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 17.2 Table de pages deux niveaux . . . . . . . . . . . . . . . . . 304 20.1 Priphrique bloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 22.1 CP/M . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 22.2 MS-DOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426 22.3 Unix

Segmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

..................................... Choix dun descripteur . . . . . . . . . . . . . . . . . . . . . . . . .Slection Structure du TSS

............................. ......

Sauvegarde de ltat du coprocesseur arithmtique 93 Stockage du descripteur et de la pile noyau Arborescence de chiers

....................... Liste chane et table de bits . . . . . . . . . . . . . . . . . . . Systme de chiers Minix . . . . . . . . . . . . . . . . . . . . . .............................. .................... Terminal RS-232 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Terminal mapp en mmoire . . . . . . . . . . . . . . . . . . . cran de lIBM-PC . . . . . . . . . . . . . . . . . . . . . . . . . . . . Gestion dune voie de communication . . . . . . . . . . . Caractres de contrle dUnix . . . . . . . . . . . . . . . . .Le terminal M40 Classication des terminaux

........................................ ......................... ...................................

427

22.4 Rpertoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 23.1 Tampon de caractres 23.2 Scan codes 452 455 478 479 481 482 509

Un des premiers terminaux . . . . . . . . . . . . . . . . . . . . . 134 135 135 136 138 139 140 145

24.1 Niveaux logiques 24.2 Port srie simple 24.3 24.4

.............................. .............................. Rception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Synchronisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .......................

26.1 Tube de communication

Premire partie

Principes de conception des systmes dexploitation

Chapitre 1

Structure dun systme dexploitationNous supposons que le lecteur a vu Linux en tant quutilisateur de ce systme dexploitation et aussi, ventuellement, en tant quadministrateur systme, en particulier pour les systmes individuels. Nous allons passer ltape suivante : la faon dont ce systme dexploitation est conu. On peut sintresser la conception de Linux pour quatre raisons : par curiosit intellectuelle, pour comprendre comment on conoit un systme dexploitation, pour participer au dveloppement du noyau Linux, ou pour sen inspirer pour dvelopper un autre systme dexploitation. Notre but est surtout de satisfaire les deux premires motivations, mais cet ouvrage pourra galement servir pour les deux autres. Lintrt de Linux est que les sources sont publiques et que, au-del des grands principes, nous pourrons visualiser la mise en place des fonctionnalits du systme partir de ces sources et faire des expriences en changeant telle ou telle implmentation. Dans ce chapitre, nous allons rappeler ce quest un systme dexploitation du point de vue de lutilisateur et quelles sont les grandes parties dun tel systme. Dans les chapitres suivants, nous verrons comment mettre en place chacune de ces fonctions.

1 Les trois grandes fonctions dun systme dexploitationUn systme dexploitation eectue fondamentalement trois tches indpendantes : il permet de charger les programmes les uns aprs les autres, il mule une machine virtuelle et il gre les ressources. Prcisons chacune de ces tches.

1.1 Chargement des programmesLes premiers micro-ordinateurs taient fournis sans systme dexploitation. Les tous premiers micro-ordinateurs navaient quun seul programme : un interprteur du langage BASIC qui tait contenu en mmoire ROM. Lors de lapparition des lecteurs de cassettes puis, de faon plus able, des lecteurs de disquettes, cela commena changer : si une disquette excutable tait place dans le lecteur de disquettes, ce programme tait excut (il fallait ventuellement ensuite remplacer cette disquette par une disquette de donnes), sinon linterprteur BASIC reprenait la main. Avec cette faon de faire, chaque changement de programme exigeait le redmarrage du microordinateur avec la disquette du programme dsir dans le lecteur de disquettes. Ctait le cas en particulier de lApple II.

4 Premire partie : Principes de conception des systmes dexploitation Les micro-ordinateurs furent ensuite, en option, fournis avec un systme dexploitation. Celuici, contenu sur disquette ou en mmoire RAM, achait une invite lcran. On pouvait alors remplacer la disquette systme de dmarrage par une disquette contenant le programme dsir : en crivant le nom du programme sur la ligne de commande et en appuyant sur la touche Retour, le programme tait charg et excut. la n de lexcution de ce programme, on pouvait charger un nouveau programme, sans devoir redmarrer le systme. Ceci permet, par exemple, dcrire un texte avec un traitement de texte puis dappeler un autre programme pour limprimer.

1.2 Le systme dexploitation en tant que machine virtuelleNotion dAPI

La gestion dun systme informatique donn, par exemple lIBM-PC, se fait a priori en langage machine. Ceci est primaire et lourd grer pour la plupart des ordinateurs, en particulier en ce qui concerne les entres-sorties. Bien peu de programmes seraient dvelopps si chaque programmeur devait connatre le fonctionnement, par exemple, de tel ou tel disque dur et toutes les erreurs qui peuvent apparatre lors de la lecture dun bloc. Il a donc fallu trouver un moyen de librer les programmeurs de la complexit du matriel. Cela consiste enrober le matriel avec une couche de logiciel qui gre lensemble du systme. Il faut prsenter au programmeur une API (pour langlais Application Programming interface, interface de programmation dapplication), ce qui correspond une machine virtuelle plus facile comprendre et programmer. Considrons par exemple la programmation des entres-sorties des disques durs au moyen du contrleur IDE utilis sur lIBM-PC. Nous verrons au chapitre 18 que le contrleur IDE possde 8 commandes principales qui consistent toutes charger entre 1 et 5 octets dans ses registres. Ces commandes permettent de lire et dcrire des donnes, de dplacer le bras du disque, de formater le disque ainsi que dinitialiser, de tester, de restaurer et de recalibrer le contrleur et les disques. Les commandes fondamentales sont la lecture et lcriture, chacune demandant sept paramtres regroups dans six octets. Ces paramtres spcient les lments tels que ladresse du premier secteur lire ou crire, le nombre de secteurs lire ou crire, ou si lon doit essayer de corriger les erreurs. la n de lopration, le contrleur retourne 14 champs dtat et derreur regroups dans 7 octets. La plupart des programmeurs ne veulent pas se soucier de la programmation des disques durs. Ils veulent une abstraction simple de haut niveau : considrer par exemple que le disque contient des chiers nomms ; chaque chier peut tre ouvert en lecture ou en criture ; il sera lu ou crit, et nalement ferm. La partie machine virtuelle des systmes dexploitation soustrait le matriel au regard du programmeur et ore une vue simple et agrable de chiers nomms qui peuvent tre lus et crits.

Cas du disque dur

1.3 Le systme dexploitation en tant que gestionnaire de ressourcesLes ordinateurs modernes se composent de processeurs, de mmoires, dhorloges, de disques, de moniteurs, dinterfaces rseau, dimprimantes, et dautres priphriques qui peuvent tre utiliss par plusieurs utilisateurs en mme temps. Le travail du systme dexploitation consiste

Chapitre 1. Structure dun systme dexploitation 5 ordonner et contrler lallocation des processeurs, des mmoires et des priphriques entre les dirents programmes qui y font appel. Imaginez ce qui se produirait si trois programmes qui sexcutent sur un ordinateur essayaient simultanment dimprimer leurs rsultats sur la mme imprimante. Les premires lignes imprimes pourraient provenir du programme 1, les suivantes du programme 2, puis du programme 3 et ainsi de suite. Il en rsulterait le dsordre le plus total. Le systme dexploitation peut viter ce chaos potentiel en transfrant les rsultats imprimer dans un chier tampon sur le disque. Lorsquune impression se termine, le systme dexploitation peut alors imprimer un des chiers se trouvant dans le tampon. Simultanment, un autre programme peut continuer gnrer des rsultats sans se rendre compte quil ne les envoie pas (encore) limprimante.

2 Caractristiques dun systme dexploitation2.1 Systmes multi-tchesLa plupart des systmes dexploitation modernes permettent lexcution de plusieurs tches la fois : un ordinateur peut, pendant quil excute le programme dun utilisateur, lire les donnes dun disque ou acher des rsultats sur un terminal ou une imprimante. On parle de systme dexploitation multi-tches ou multi-programm dans ce cas. Processus La notion fondamentale des systmes dexploitation multi-tches est celle de processus. La notion de programme ne sut pas. Rien nempche que le mme programme soit excut plusieurs fois en mme temps : on peut vouloir, par exemple, deux fentres emacs ou deux fentres gv pour comparer des textes. Un processus est une instance de programme en train de sexcuter. Un processus est reprsent par un programme (le code), mais galement par ses donnes et par les paramtres indiquant o il en est, lui permettant ainsi de continuer sil est interrompu (pile dexcution, compteur ordinal...). On parle de lenvironnement du programme. Un processus sappelle aussi tche (task en anglais) dans le cas de Linux. Temps partag La plupart des systmes dexploitation multi-tches sont implments sur un ordinateur ayant un seul micro-processeur. Celui-ci, un instant donn, nexcute rellement quun seul programme, mais le systme peut le faire passer dun programme un autre en excutant chaque programme pendant quelques dizaines de millisecondes ; ceci donne aux utilisateurs limpression que tous les programmes sont excuts en mme temps. On parle alors de systme temps partag. Certains qualient de pseudo-paralllisme cette commutation trs rapide du processeur dun programme un autre, pour la direncier du vrai paralllisme qui se produit au niveau du matriel lorsque le processeur travaille en mme temps que certains priphriques dentresortie.Linux

6 Premire partie : Principes de conception des systmes dexploitation Abstraction du droulement Conceptuellement, chaque processus a son propre processeur virtuel. Bien sr, le vrai processeur commute entre plusieurs processus. Mais, pour bien comprendre le systme, il est prfrable de penser un ensemble de processus qui sexcutent en (pseudo-) paralllisme plutt qu lallocation du processeur entre dirents processus. Cette commutation rapide est appele multi-programmation. La gure 1.1 ([TAN-87], p. 56) montre quatre processus sexcutant en mme temps. La gure (b) prsente une abstraction de cette situation. Les quatre programmes deviennent quatre processus indpendants disposant chacun de leur propre contrle de ux (cest--dire leur compteur ordinal). la gure (c), on peut constater que, sur un intervalle de temps assez grand, tous les processus ont progress, mais qu un instant donn, il ny a quun seul processus actif.

Figure 1.1 : Processus

Variables denvironnement Comme nous lavons dj dit, la donne du programme est insusante pour la dtermination dun processus. Il faut lui indiquer toute une srie de variables denvironnement : les chiers sur lesquels il opre, o en est le compteur ordinal, etc. Ces variables denvironnement sont ncessaires pour deux raisons : La premire est que deux processus peuvent utiliser le mme code (deux fentres emacs par exemple) mais les chiers concerns peuvent tre dirents, le compteur ordinal ne pas en tre au mme endroit... La seconde est due au caractre multi-tches, trait par pseudo-paralllisme. Priodiquement, le systme dexploitation dcide dinterrompre un processus en cours an de dmarrer lexcution dun autre processus. Lorsquun processus est temporairement suspendu de cette manire, il doit pouvoir retrouver plus tard exactement ltat dans lequel il se trouvait au moment de sa suspension. Il faut donc que toutes les informations dont il a besoin soient sauvegardes quelque part pendant sa mise en attente. Sil possde, par exemple, plusieurs chiers ouverts, les positions dans ces chiers doivent tre mmorises.

Chapitre 1. Structure dun systme dexploitation 7 La liste des variables denvironnement dpend du systme dexploitation en question, et mme de sa version. Elle se trouve dans le descripteur du processus (en anglais process descriptor). Espace mmoire dun processus Dans de nombreux systmes dexploitation, chaque processus possde son propre espace mmoire, non accessible aux autres processus. On parle de lespace dadressage du processus. Incidence sur le traitement des dures Puisque le processeur commute entre les processus, la vitesse dexcution dun processus ne sera pas uniforme et variera vraisemblablement si les mmes processus sont excuts nouveau. Il ne faut donc pas que les processus fassent une quelconque prsomption sur le facteur temps. Considrons le cas dun processus dentre-sortie qui met en marche le moteur dun lecteur de disquettes, excute 1 000 fois une boucle pour que la vitesse de la disquette se stabilise, puis demande la lecture du premier enregistrement. Si le processeur a aussi t allou un autre processus pendant lexcution de la boucle, le processus dentre-sortie risque dtre ractiv trop tard, cest--dire aprs le passage du premier enregistrement devant la tte de lecture. Lorsquun processus a besoin de mesurer des dures avec prcision, cest--dire lorsque certains vnements doivent absolument se produire au bout de quelques millisecondes, il faut prendre des mesures particulires pour sen assurer. On utilise alors des minuteurs, comme nous le verrons. Cependant, la plupart des processus ne sont pas aects par la multi-programmation du processeur et par les dirences de vitesse dexcution qui existent entre eux.

2.2 Systmes multi-utilisateursUn systme multi-utilisateurs est capable dexcuter de faon (pseudo-) concurrente et indpendante des applications appartenant plusieurs utilisateurs. Concurrente signie que les applications peuvent tre actives au mme moment et se disputer laccs direntes ressources comme le processeur, la mmoire, les disques durs... Indpendante signie que chaque application peut raliser son travail sans se proccuper de ce que font les applications des autres utilisateurs. Un systme multi-utilisateurs est ncessairement multi-tches mais la rciproque est fausse : le systme dexploitation MS-DOS est mono-utilisateur et mono-tche ; les systmes MacOS 6.1 et Windows 3.1 sont mono-utilisateurs mais multi-tches ; Unix et Windows NT sont multiutilisateurs. Mise en place Comme pour les systmes multi-tches, la multi-utilisation est mule en attribuant des laps de temps chaque utilisateur. Naturellement, le fait de basculer dune application lautre ralentit chacune dentre elles et aecte le temps de rponse peru par les utilisateurs.

8 Premire partie : Principes de conception des systmes dexploitation Mcanismes associs Lorsquils permettent la multi-utilisation, les systmes dexploitation doivent prvoir un certain nombre de mcanismes : un mcanisme dauthentication permettant de vrier lidentit de lutilisateur ; un mcanisme de protection contre les programmes utilisateur errons, qui pourraient bloquer les autres applications en cours dexcution sur le systme, ou mal intentionns, qui pourraient perturber ou espionner les activits des autres utilisateurs ; un mcanisme de comptabilit pour limiter le volume des ressources alloues chaque utilisateur. Utilisateurs Dans un systme multi-utilisateurs, chaque utilisateur possde un espace priv sur la machine : gnralement, il possde un certain quota de lespace disque pour enregistrer ses chiers, il reoit des courriers lectroniques privs, etc. Le systme dexploitation doit assurer que la partie prive de lespace dun utilisateur ne puisse tre visible que par son propritaire. Il doit, en particulier, assurer quaucun utilisateur ne puisse utiliser une application du systme dans le but de violer lespace priv dun autre utilisateur. Chaque utilisateur est identi par un numro unique, appel lidentiant de lutilisateur, ou UID (pour langlais User IDentier). En gnral, seul un nombre limit de personnes est autoris utiliser un systme informatique. Lorsque lun de ces utilisateurs commence une session de travail, le systme dexploitation lui demande un nom dutilisateur et un mot de passe. Si lutilisateur ne rpond pas par des informations valides, laccs lui est refus. Groupe dutilisateurs Pour pouvoir partager de faon slective le matriel avec dautres, chaque utilisateur peut tre membre dun ou de plusieurs groupes dutilisateurs. Un groupe est galement identi par un numro unique dnomm identiant de groupe, ou GID (pour langlais Group IDentier). Par exemple, chaque chier est associ un et un seul groupe. Sous Unix, il est possible par exemple de limiter laccs en lecture et en criture au seul possesseur dun chier, en lecture au groupe, et dinterdire tout accs aux autres utilisateurs. Super-utilisateur Un systme dexploitation multi-utilisateurs prvoit un utilisateur particulier appel superutilisateur ou superviseur (root en anglais). Ladministrateur du systme doit se connecter en temps que super-utilisateur pour grer les comptes des utilisateurs et raliser les tches de maintenance telles que les sauvegardes et les mises jour des programmes. Le superutilisateur peut faire pratiquement nimporte quoi dans la mesure o le systme dexploitation ne lui applique jamais les mcanismes de protection, ceux-ci ne concernant que les autres utilisateurs, appels utilisateurs ordinaires. Le super-utilisateur peut, en particulier, accder tous les chiers du systme et interfrer sur lactivit de nimporte quel processus en cours dexcution. Il ne peut pas, en revanche, accder aux ports dentre-sortie qui nont pas t prvus par le noyau, comme nous le verrons.

Chapitre 1. Structure dun systme dexploitation 9

3 Structure externe dun systme dexploitation3.1 Noyau et utilitairesLe systme dexploitation comporte un certain nombre de routines (sous-programmes). Les plus importantes constituent le noyau (kernel en anglais). Celui-ci est charg en mmoire vive linitialisation du systme et contient de nombreuses procdures ncessaires au bon fonctionnement du systme. Les autres routines, moins critiques, sont appeles des utilitaires. Le noyau dun systme dexploitation se compose de quatre parties principales : le gestionnaire de tches (ou des processus), le gestionnaire de mmoire, le gestionnaire de chiers et le gestionnaire de priphriques dentre-sortie. Il possde galement deux parties auxiliaires : le chargeur du systme dexploitation et linterprteur de commandes.

3.2 Le gestionnaire de tchesSur un systme temps partag, lune des parties les plus importantes du systme dexploitation est le gestionnaire de tches (en anglais scheduler) ou ordonnanceur. Sur un systme un seul processeur, il divise le temps en laps de temps (en anglais slices, tranches). Priodiquement, le gestionnaire de tches dcide dinterrompre le processus en cours et de dmarrer (ou reprendre) lexcution dun autre, soit parce que le premier a puis son temps dallocation du processus soit quil est bloqu (en attente dune donne dun des priphriques). Le contrle de plusieurs activits parallles est un travail dicile. Cest pourquoi les concepteurs des systmes dexploitation ont constamment, au l des ans, amlior le modle de paralllisme pour le rendre plus simple demploi. Certains systmes dexploitation permettent uniquement des processus non premptifs, ce qui signie que le gestionnaire des tches nest invoqu que lorsquun processus cde volontairement le processeur. Mais les processus dun systme multi-utilisateur doivent tre premptifs.

3.3 Le gestionnaire de mmoireLa mmoire est une ressource importante qui doit tre gre avec prudence. Le moindre microordinateur a, ds la n des annes 1980, dix fois plus de mmoire que lIBM 7094, lordinateur le plus puissant du dbut des annes soixante. Mais la taille des programmes augmente tout aussi vite que celle des mmoires. La gestion de la mmoire est du ressort du gestionnaire de mmoire. Celui-ci doit connatre les parties libres et les parties occupes de la mmoire, allouer de la mmoire aux processus qui en ont besoin, rcuprer la mmoire utilise par un processus lorsque celui-ci se termine et traiter le va-et-vient (swapping en anglais, ou pagination) entre le disque et la mmoire principale lorsque cette dernire ne peut pas contenir tous les processus.

3.4 Le gestionnaire de chiersComme nous lavons dj dit, une des tches fondamentales du systme dexploitation est de masquer les spcicits des disques et des autres priphriques dentre-sortie et dorir au programmeur un modle agrable et facile demploi. Ceci se fait travers la notion de chier.

10 Premire partie : Principes de conception des systmes dexploitation

3.5 Le gestionnaire de priphriquesLe contrle des priphriques dentre-sortie (E/S) de lordinateur est lune des fonctions primordiales dun systme dexploitation. Ce dernier doit envoyer les commandes aux priphriques, intercepter les interruptions, et traiter les erreurs. Il doit aussi fournir une interface simple et facile demploi entre les priphriques et le reste du systme qui doit tre, dans la mesure du possible, la mme pour tous les priphriques, cest--dire indpendante du priphrique utilis. Le code des entres-sorties reprsente une part importante de lensemble dun systme dexploitation. De nombreux systmes dexploitation orent un niveau dabstraction qui permet aux utilisateurs de raliser des entres-sorties sans entrer dans le dtail du matriel. Ce niveau dabstraction fait apparatre chaque priphrique comme un chier spcial, qui permettent de traiter les priphriques dentre-sortie comme des chiers. Cest le cas dUnix. Dans ce cas, on appelle chier rgulier tout chier situ en mmoire de masse.

3.6 Le chargeur du systme dexploitationEn gnral, de nos jours, lorsque lordinateur (compatible PC ou Mac) est mis sous tension, il excute un logiciel appel BIOS (pour Basic Input Output System) plac une adresse bien dtermine et contenu en mmoire RAM. Ce logiciel initialise les priphriques, charge un secteur dun disque, et excute ce qui y est plac. Lors de la conception dun systme dexploitation, on place sur ce secteur le chargeur du systme dexploitation ou, plus exactement, le chargeur du chargeur du systme dexploitation (ou pr-chargeur) puisque le contenu dun secteur est insusant pour le chargeur lui-mme. La conception du chargeur et du pr-chargeur est indispensable, mme si ceux-ci ne font pas explicitement partie du systme dexploitation.

3.7 Linterprteur de commandesLe systme dexploitation proprement dit est le code qui permet de dnir les appels systme. Les programmes systme tels que les diteurs de texte, les compilateurs, les assembleurs, les diteurs de liens et les interprteurs de commandes ne font pas partie du systme dexploitation. Cependant linterprteur de commandes (shell en anglais) est souvent considr comme en faisant partie. Sous sa forme la plus rudimentaire, linterprteur de commandes excute une boucle innie qui ache une invite (montrant par l que lon attend quelque chose), lit le nom du programme saisi par lutilisateur ce moment-l et lexcute.

4 Structure interne dun systme dexploitationAprs avoir examin un systme dexploitation de lextrieur (du point de vue de linterface prsente lutilisateur et au programmeur), nous allons examiner son fonctionnement interne.

Chapitre 1. Structure dun systme dexploitation 11

4.1 Les systmes monolithiquesAndrew Tanenbaum appelle systme monolithique (dun seul bloc) un systme dexploitation qui est une collection de procdures, chacune pouvant tout moment appeler nimporte quelle autre procdure, en remarquant que cest lorganisation (plutt chaotique) la plus rpandue. Pour construire le code objet du systme dexploitation, il faut compiler toutes les procdures, ou les chiers qui les contiennent, puis les runir au moyen dun diteur de liens. Dans un systme monolithique, il ny a aucun masquage de linformation : chaque procdure est visible de toutes les autres, par opposition aux structures constitues de modules ou dunits de programmes et dans lesquelles les informations sont locales aux modules et o il existe des points de passage obligs pour accder aux modules. MS-DOS est un exemple dun tel systme.

4.2 Systmes modes noyau et utilisateurDans beaucoup de systmes dexploitation, il existe deux modes : le mode noyau et le mode utilisateur. Le systme dexploitation dmarre en mode noyau, ce qui permet dinitialiser les priphriques et de mettre en place les routines de service pour les appels systme, et commute ensuite en mode utilisateur. En mode utilisateur, on ne peut pas avoir accs directement aux priphriques : on doit utiliser ce quon appelle des appels systme pour avoir accs ce qui a t prvu par le systme : le noyau reoit cet appel systme, vrie quil sagit dune demande valable (en particulier du point de vue des droits daccs), lexcute, puis renvoie au mode utilisateur. Le mode noyau ne peut tre chang que par une compilation du noyau ; mme le super-utilisateur agit en mode utilisateur. Unix et Windows (tout au moins depuis Windows 95) sont de tels systmes. Ceci explique pourquoi on ne peut pas tout programmer sur un tel systme. Les micro-processeurs modernes aident la mise en place de tels systmes. Cest lorigine du mode protg des micro-processeurs dIntel depuis le 80286 : il existe plusieurs niveaux de privilges avec une vrication matrielle, et non plus seulement logicielle, des rgles de passage dun niveau lautre.Aide

4.3 Systmes couchesLes systmes prcdents peuvent tre considrs comme des systmes deux couches et tre gnraliss en systmes plusieurs couches : chaque couche sappuie sur celle qui lui est immdiatement infrieure. Le premier systme utiliser cette technique a t le systme THE dvelopp au Technische Hogeschool dEindhoven (do son nom) aux Pays-Bas par Diskstra (1968) et ses lves. Le systme dexploitation Multics, lorigine dUnix, tait aussi un systme couches. Le systme dexploitation Minix de Tanenbaum, schmatis sur la gure 1.2 ([TAN-87], p.100), qui inspira Linux, est un systme quatre couches : La couche 1, la plus basse, traite les interruptions et les droutements (traps en anglais) et fournit aux couches du dessus un modle constitu de processus squentiels indpendants qui

12 Premire partie : Principes de conception des systmes dexploitation

Figure 1.2 : Minix

communiquent au moyen de messages. Le code de cette couche a deux fonctions majeures : la premire est le traitement des interruptions et des droutements ; la deuxime est lie au mcanisme des messages. La partie de cette couche qui traite des interruptions est crite en langage dassemblage ; les autres fonctions de la couche, ainsi que les couches suprieures, sont crites en langage C. La couche 2 contient les pilotes de priphriques (device drivers en anglais), un par type de priphrique (disque, horloge, terminal...). Elle contient de plus une tche particulire, la tche systme. Toutes les tches de la couche 2 et tout le code de la couche 1 ne forment quun seul programme binaire, appel le noyau (kernel en anglais). Les tches de la couche 2 sont totalement indpendantes bien quelles fassent partie dun mme programme objet : elles sont slectionnes indpendamment les unes des autres et communiquent par envoi de messages. Elles sont regroupes en un seul code binaire pour faciliter lintgration de Minix des machines deux modes. La couche 3 renferme deux gestionnaires qui fournissent des services aux processus des utilisateurs. Le gestionnaire de mmoire (MM pour langlais Memory Manager) traite tous les appels systme de Minix, tels que fork(), exec() et brk(), qui concernent la gestion de la mmoire. Le systme de chiers (FS pour langlais File System) se charge des appels systme du systme de chiers, tels que read(), mount() et chdir(). La couche 4 contient enn tous les processus des utilisateurs : interprteurs de commandes, diteurs de texte, compilateurs, et programmes crits par les utilisateurs. Linux sinspirera de cette division en couches, bien quon ny trouve ociellement que deux couches : le mode noyau et le mode utilisateur.

4.4 Systmes micro-noyauLes systmes dexploitation base de micro-noyau ne possdent que quelques fonctions, en gnral quelques primitives de synchronisation, un gestionnaire des tches simple, et un mcanisme de communication entre processus. Des processus systme sexcutent au-dessus du micro-noyau pour implmenter les autres fonctions dun systme dexploitation, comme lallocation mmoire, les gestionnaires de priphriques, les gestionnaires dappels systme, etc. Le systme dexploitation Amoeba de Tanenbaum fut lun des premiers systmes micronoyau.

Chapitre 1. Structure dun systme dexploitation 13 Ce type de systmes dexploitation promettait beaucoup ; malheureusement ils se sont rvls plus lents que les systmes monolithiques, du fait du cot des passages de messages entre les direntes couches du systme dexploitation. Pourtant, les micro-noyaux prsentent des avantages thoriques sur les systmes monolithiques. Ils ncessitent par exemple de la part de leurs concepteurs une approche modulaire, dans la mesure o chaque couche du systme est un programme relativement indpendant qui doit interagir avec les autres couches via une interface logicielle propre et bien tablie. De plus, un systme base de micro-noyau peut tre port assez aisment sur dautres architectures dans la mesure o toutes les composantes dpendantes du matriel sont en gnral localises dans le code du micro-noyau. Enn, les systmes base de micro-noyau ont tendance mieux utiliser la mmoire vive que les systmes monolithiques.

4.5 Systmes modulesUn module est un chier objet dont le code peut tre li au noyau (et en tre supprim) en cours dexcution. Ce code objet est en gnral constitu dun ensemble de fonctions qui implmente un systme de chiers, un pilote de priphrique, ou tout autre fonctionnalit de haut niveau dun systme dexploitation. Le module, contrairement aux couches externes dun systme base de micro-noyau, ne sexcute pas dans un processus spcique. Il est au contraire excut en mode noyau au nom du processus courant, comme toute fonction lie statiquement dans le noyau. La notion de module reprsente une fonctionnalit du noyau qui ore bon nombre des avantages thoriques dun micro-noyau sans pnaliser les performances. Parmi les avantages des modules, citons : Une approche modulaire : puisque chaque module peut tre li et dli en cours dexcution du systme, les programmeurs ont d introduire des interfaces logicielles trs claires permettant daccder aux structures de donnes gres par les modules. Cela rend le dveloppement de nouveaux modules plus simple. Indpendance vis--vis de la plateforme : mme sil doit se baser sur des caractristiques bien dnies du matriel, un module ne dpend pas dune plateforme particulire. Ainsi, un pilote de disque bas sur le standard SCSI fonctionne aussi bien sur un ordinateur compatible IBM que sur un Alpha. Utilisation conomique de la mmoire : un module peut tre insr dans le noyau lorsque les fonctionnalits quil apporte sont requises et en tre supprim lorsquelles ne le sont plus. De plus, ce mcanisme peut tre rendu transparent lutilisateur puisquil peut tre ralis automatiquement par le noyau. Aucune perte de performances : une fois insr dans le noyau, le code dun module est quivalent au code li statiquement au noyau. De ce fait, aucun passage de message nest ncessaire lorsque les fonctions du module sont invoques. Bien entendu, une petite perte de performance est cause par le chargement et la suppression des modules. Cependant, cette perte est comparable celle dont sont responsables la cration et la destruction du processus dun systme base de micro-noyau.Intrt

14 Premire partie : Principes de conception des systmes dexploitation

5 Mise en uvre5.1 Les appels systmeLinterface entre le systme dexploitation et les programmes de lutilisateur est constitue dun ensemble d instructions tendues fournies par le systme dexploitation, qualies dappels systme. Les appels systme crent, dtruisent et utilisent divers objets logiciels grs par le systme dexploitation, dont les plus importants sont les processus et les chiers.

5.2 Les signauxLes processus sexcutant indpendamment les uns des autres, il sagit de pseudo-paralllisme. Il faut cependant quelquefois fournir de linformation un processus. Comment le systme dexploitation procde-t-il ? On a imagin une mthode analogue celle des interruptions logicielles pour les micro-processeurs, appele signal. Considrons, par exemple, le cas de lenvoi dun message. Pour empcher la perte des messages, on convient que le rcepteur envoie lui-mme un acquittement ds quil reoit une partie du message (dune taille dtermine) ; on envoie nouveau cette partie si lacquittement ne parvient pas dans un temps dtermin. Pour mettre en place un tel envoi, on utilisera un processus : il envoie une partie du message, demande son systme dexploitation de lavertir lorsquun certain temps est coul, il vrie alors quil a reu lacquittement du message et sinon lenvoie nouveau. Lorsque le systme dexploitation envoie un signal un processus, ce signal provoque la suspension temporaire du travail en cours, la sauvegarde des registres dans la pile et lexcution dune procdure particulire de traitement du signal reu. la n de la procdure de traitement du signal, le processus est redmarr dans ltat o il se trouvait juste avant la rception du signal.

ConclusionNous venons de rappeler les trois fonctions principales dun systme dexploitation, ses caractristiques, sa structure externe, sa structure interne, et la faon de le mettre en uvre. Les trois notions essentielles y sont les processus, les chiers, et les appels systme. Cest cellesci quon doit sattacher pour bien comprendre la suite. Nous allons aborder dans le chapitre suivant la faon dont le micro-processeur communique avec lextrieur et ses incidences sur les systmes dexploitation, avant daborder le systme Linux proprement parler.

Chapitre 2

Principe de traitement des entres-sortiesNous allons prsenter dans ce chapitre le principe des entres-sorties la fois du point de vue matriel et du point de vue logiciel, ce dernier aspect nous intressant plus particulirement.

1 Principe du matriel dentre-sortieOn peut considrer le matriel qui permet les entres-sorties de diverses manires. Les ingnieurs en lectricit y voient des circuits intgrs, des circuits lectriques, des moteurs et des composants physiques. Les programmeurs sont plus sensibles linterface que le matriel ore leurs programmes : les commandes quil accepte, les fonctions quil excute, et les erreurs quil signale. On sattache, lorsquon soccupe de la conception dun systme dexploitation, la programmation du matriel et non sa conception, construction, ou entretien. Nous examinerons donc la programmation du matriel et non son fonctionnement interne. Nanmoins, ces deux aspects sont souvent intimement lis. Cest pourquoi nous prsentons dans le paragraphe suivant quelques aspects du matriel concernant les entres-sorties qui inuent directement sur sa programmation.

1.1 Les priphriques dentre-sortieLes priphriques dentre-sortie se rpartissent, du point de vue matriel, en deux grandes catgories : les priphriques bloc et les priphriques caractre : Priphrique bloc. Un priphrique bloc mmorise les informations dans des blocs de taille xe, chaque bloc ayant une adresse propre. La proprit fondamentale de ces priphriques est quils permettent de lire ou dcrire un bloc indpendamment de tous les autres. Les disques sont des priphriques bloc. La frontire entre les priphriques bloc et les autres nest pas toujours bien dnie. Tout le monde saccorde dire quun disque est un priphrique bloc car on peut toujours accder un autre cylindre et atteindre le bloc requis quelle que soit la position initiale du bras. Considrons prsent une bande magntique qui contient des blocs de 1 Ko. Si lon souhaite lire le bloc N, le drouleur peut rembobiner la bande et se positionner sur ce bloc N. Cette opration est analogue une recherche sur un disque mais le temps mis est beaucoup plus long. De plus, on ne peut pas toujours rcrire un bloc au milieu dune bande. Les bandes magntiques peuvent donc tre utilises comme des priphriques bloc, mais cest un cas extrme : elles ne sont normalement pas utilises de cette manire.

16 Premire partie : Principes de conception des systmes dexploitation Priphrique caractre. Le deuxime type de priphrique dentre-sortie, du point de vue matriel, est le priphrique caractre. Un tel priphrique accepte un ot de caractres sans se soucier dune quelconque structure en blocs. On ne peut pas y accder grce un index et il ne possde pas de fonction de recherche. Les terminaux, les imprimantes, les bandes de papier, les cartes perfores, les interfaces rseau, les souris et la plupart des priphriques qui ne se comportent pas comme des disques peuvent tre considrs comme des priphriques caractre. Cette classication nest pas parfaite. Quelques priphriques nappartiennent aucune de ces deux catgories. Les horloges ne possdent pas de blocs et nacceptent pas non plus de ux de caractres. Elles ne font que gnrer des interruptions intervalles rguliers. Le modle des priphriques bloc et caractre est quand mme assez gnral et peut servir de base pour rendre une partie du logiciel de traitement des interruptions indpendante des priphriques.

1.2 Les contrleurs de priphriquesNotion de contrleur Les units dentre-sortie sont constitues de composants mcaniques et de composants lectroniques. On peut souvent dissocier ces deux types de composants pour avoir une vue plus modulaire et plus gnrale. Les composants lectroniques sont appels contrleurs de priphriques ou adaptateurs. Cette distinction entre le contrleur et le priphrique proprement dit est importante pour le systme dexploitation car celui-ci communique pratiquement toujours avec le contrleur, et non avec le priphrique. Un contrleur pour plusieurs priphriques La carte dun contrleur possde en gnral un connecteur qui permet de la relier la partie mcanique du priphrique. De nombreux contrleurs acceptent deux, quatre ou huit priphriques identiques. Si linterface entre le contrleur et le priphrique est normalise (interface ANSI, IEEE ou ISO) ou largement rpandue (standard de fait), les fabricants de contrleurs et de priphriques peuvent sy conformer. De nombreuses rmes fabriquent, par exemple, des disques qui acceptent le contrleur de disques dIBM. Interface entre contrleur et priphrique Linterface entre le contrleur et le priphrique est souvent de trs bas niveau. Un disque dur peut, par exemple, tre format en pistes de 8 secteurs de 512 octets. Un secteur est, physiquement, une srie de bits constitus dun prambule, de 4096 bits de donnes et doctets constituant un code correcteur derreur (en anglais error-correcting code ou ECC). Le prambule est crit lors du formatage du disque et contient les numros de cylindre et de secteur, la taille des secteurs et dautres donnes de ce type. Le travail du contrleur est de regrouper ce ot de bits en srie dans un bloc doctets en corrigeant les erreurs si ncessaire. Le bloc doctets est constitu, bit aprs bit, dans un tampon du contrleur. Puis, si aucune erreur nest dtecte, et aprs vrication du code correcteur derreur, il est copi en mmoire vive.

Chapitre 2. Principe de traitement des entres-sorties 17 Interface entre contrleur et micro-processeur Chaque contrleur communique avec le processeur par lintermdiaire de quelques cellules mmoire situes sur le contrleur, appeles registres du contrleur. Le micro-processeur accde ces registres de lune des deux faons suivantes : Sur certains processeurs, les registres des contrleurs sont accessibles via lespace mmoire adressable. Cette conguration est appele entres-sorties mappes en mmoire. Le micro-processeur 680x0, par exemple, utilise cette mthode. Dautres processeurs utilisent un espace mmoire particulier pour les entres-sorties et allouent chaque con