systémes d'exploitation

699

Upload: selman-dridi

Post on 21-Jul-2015

289 views

Category:

Documents


1 download

TRANSCRIPT

  • mohamed aliTexte tap la machineBY dali200821 for tunisia-sat
  • Conceptionde systmes

    dexploitationLe casLinux

  • CHEZ LE MME DITEUR

    C. 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 dadministration

    B. 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.

  • Conceptionde systmes

    dexploitationLe casLinux

    Patrick Cegielski

    Deuxime dition

  • Le code de la proprit intellectuelle du 1er juillet 1992 interdit en effet expressment laphotocopie usage collectif sans autorisation des ayants droit. Or, cette pratique sestgnralise notamment dans les tablissements denseignement, provoquant une baissebrutale des achats de livres, au point que la possibilit mme pour les auteurs de crer desuvres 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 oudu Centre Franais dexploitation du droit de copie, 20, rue des Grands Augustins, 75006 Paris. Groupe Eyrolles, 2003, 2004, ISBN : 2-212-11479-6

    DITIONS EYROLLES61, bd Saint-Germain75240 Paris Cedex 05

    www.editions-eyrolles.com

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

    www.editions-eyrolles.com
  • Pour Irne et Marie

  • Prface

    Le but de ce livre est de faire comprendre comment on conoit un systme dexploitation enillustrant 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 justifions auchapitre 3.

    En prrequis, nous supposons que le lecteur connat la notion de systme dexploitation en tantquutilisateur, 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 etquil 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 lonveut utiliser et de manipuler quelque peu les fichiers ; on se sert pour cela de linterprteurde commandes (et de ses commandes telles que copy, rename...) ;

    le niveau administrateur : cela consiste paramtrer le systme et le tenir jour ; il estindispensable 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 enutilisant 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 nospropos par Linux, plus particulirement par le tout premier noyau 0.01. Lintrt de choisirLinux est que le code est diffus.

    Ce livre na dautre but que de publier en un seul volume les aspects suivants de la conceptiondun systme dexploitation :

    les concepts gnraux sous-jacents limplmentation dun systme dexploitation, tels quonles trouve dans [TAN-87] dont nous nous inspirons fortement ;

    les concepts dun systme dexploitation de type Unix, en suivant le plus possible la normePosix ;

    de la documentation sur le microprocesseur Intel 80386 ; celle-ci exigeant un ouvrage de lataille de celui-ci, nous en supposons connue au moins une partie, celle qui concerne le modedit rel ;

    la documentation sur les contrleurs de priphriques et leur implmentation sur un compa-tible PC, ncessaire la programmation dun systme dexploitation ;

    une prsentation des choix faits pour limplmentation de Linux 0.01, suivie dextraits defichiers sources, reprables facilement par lindication Linux 0.01 situe en marge, puis para-phrass en franais ; ces paraphrases, commenant presque toujours par autrement dit , ne

  • iv Prface

    sont pas thoriquement indispensables mais sont souvent apprciables ; comme nous lavonsdj dit, tout le source est comment, mme si pour des raisons logiques il est dispers toutau long de louvrage.

    Chemin faisant, nous montrons ainsi une mthode pour tudier les sources dautres systmesdexploitation.

    Lindex fait rfrences aux concepts mais aussi tous les noms apparaissant dans les fichierssource, ce qui permet de se rendre directement au commentaire de la partie qui intresse lelecteur.

    Prface la seconde dition

    Dans cette seconde dition, paraissant dix mois aprs la premire, le corps du texte principalna pas chang, part la correction dune coquille. En revanche, chaque chapitre se conclutdsormais par une section volution du noyau renforce, prenant en compte la version 2.6.0de ce dernier. Nous conseillons de lire le livre sans tenir compte de ces sections puis dy revenirdans un deuxime temps.

    Nous expliquons au chapitre 3 pourquoi il est prfrable, dans un premier temps, de sattacherau tout premier noyau. Je pense que pour les aficionados du tout dernier noyau en date, cesdernires sections seront utiles.

    Remerciements

    Je tiens remercier tout particulirement Mathieu Ropert, tudiant de lI.U.T. de Fontaine-bleau en 20012003, pour sa relecture trs attentive du manuscrit.

  • Table des matires

    Prface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii

    PREMIRE PARTIE :

    PRINCIPES DE CONCEPTION DES SYSTMES

    DEXPLOITATION 1

    Chapitre 1 Structure dun systme dexploitation . . 31 Les trois grandes fonctions . . . . . . . . . . . . . . . . . . . . . . . 3

    1.1 Chargement des programmes . . . . . . . . . . . . . . . 31.2 Le systme dexploitation en tant que

    machine virtuelle . . . . . . . . . . . . . . . . . . . . . . . . . . 41.3 Le systme dexploitation en tant que

    gestionnaire de ressources . . . . . . . . . . . . . . . . . . 42 Caractristiques dun systme dexploitation . . . . . . . 5

    2.1 Systmes multi-tches . . . . . . . . . . . . . . . . . . . . . 52.2 Systmes multi-utilisateurs . . . . . . . . . . . . . . . . . 7

    3 Structure externe dun systme dexploitation . . . . . . 93.1 Noyau et utilitaires . . . . . . . . . . . . . . . . . . . . . . . . 93.2 Le gestionnaire de tches . . . . . . . . . . . . . . . . . . 93.3 Le gestionnaire de mmoire . . . . . . . . . . . . . . . . 93.4 Le gestionnaire de fichiers . . . . . . . . . . . . . . . . . . 93.5 Le gestionnaire de priphriques . . . . . . . . . . . . 103.6 Le chargeur du systme dexploitation . . . . . . . 103.7 Linterprteur de commandes . . . . . . . . . . . . . . . 10

    4 Structure interne dun systme dexploitation . . . . . . 104.1 Les systmes monolithiques . . . . . . . . . . . . . . . . 114.2 Systmes modes noyau et utilisateur . . . . . . 114.3 Systmes couches . . . . . . . . . . . . . . . . . . . . . . . 114.4 Systmes micro-noyau . . . . . . . . . . . . . . . . . . . 124.5 Systmes modules . . . . . . . . . . . . . . . . . . . . . . . 13

    5 Mise en uvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145.1 Les appels systme . . . . . . . . . . . . . . . . . . . . . . . . 145.2 Les signaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    Chapitre 2 Principe de traitement des entres-

    sorties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Principe du matriel dentre-sortie . . . . . . . . . . . . . . . 15

    1.1 Les priphriques dentre-sortie . . . . . . . . . . . . 151.2 Les contrleurs de priphriques . . . . . . . . . . . . 161.3 Transferts synchrones et asynchrones . . . . . . . 171.4 Priphriques partags et ddis . . . . . . . . . . . . 18

    2 Principe des logiciels dentre-sortie . . . . . . . . . . . . . . 182.1 Objectifs des logiciels des entres-sorties . . . . 18

    2.2 Les pilotes de priphriques . . . . . . . . . . . . . . . . 192.3 Logiciel dentre-sortie indpendant du

    matriel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.4 Logiciels dentre-sortie faisant partie de

    lespace de lutilisateur . . . . . . . . . . . . . . . . . . . . 21

    Chapitre 3 Le systme Linux tudi . . . . . . . . . . . . . . . 231 Le systme Linux tudier. . . . . . . . . . . . . . . . . . . . . . . 23

    1.1 Noyau et distribution . . . . . . . . . . . . . . . . . . . . . . 231.2 Noyau minimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231.3 Obtention des sources . . . . . . . . . . . . . . . . . . . . . 241.4 Programmation Linux . . . . . . . . . . . . . . . . . . . . . 241.5 Versions du noyau Linux . . . . . . . . . . . . . . . . . . . 24

    2 Les sources du noyau 0.01 . . . . . . . . . . . . . . . . . . . . . . . 252.1 Vue densemble sur larborescence . . . . . . . . . . 252.2 Larborescence dtaille . . . . . . . . . . . . . . . . . . . . 25

    3 Vue densemble sur limplmentation . . . . . . . . . . . . . 323.1 Caractristiques . . . . . . . . . . . . . . . . . . . . . . . . . . . 323.2 tapes de limplmentation . . . . . . . . . . . . . . . . 32

    4 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344.1 Cas du noyau 2.4.18 . . . . . . . . . . . . . . . . . . . . . . . 344.2 Aide au parcours du code source . . . . . . . . . . . 354.3 Cas du noyau 2.6.0 . . . . . . . . . . . . . . . . . . . . . . . . 35

    DEUXIME PARTIE :

    UTILISATION DU MICRO-PROCESSEUR

    INTEL 37

    Chapitre 4 Prise en compte de la mmoire Intel . . . 391 La segmentation sous Intel . . . . . . . . . . . . . . . . . . . . . . . 39

    1.1 Notion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391.2 La segmentation en mode protg sur Intel . . 39

    2 La segmentation sous Linux . . . . . . . . . . . . . . . . . . . . . . 452.1 Mode noyau et mode utilisateur . . . . . . . . . . . . 452.2 Segmentation en mode noyau . . . . . . . . . . . . . . 462.3 Accs la mmoire vive . . . . . . . . . . . . . . . . . . . 50

    3 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513.1 Prise en compte dautres micro-processeurs . . 513.2 Accs la mmoire vive . . . . . . . . . . . . . . . . . . . 523.3 Utilisation de la segmentation . . . . . . . . . . . . . . 52

    Chapitre 5 Adaptation des entres-sorties et des

    interruptions Intel . . . . . . . . . . . . . . . . . . . . . 551 Accs aux ports dentre-sortie . . . . . . . . . . . . . . . . . . . 55

  • vi Table des matires

    1.1 Accs aux ports dentre-sortie sous 80x86 . . 551.2 Encapsulation des accs aux ports dentre-

    sortie sous Linux . . . . . . . . . . . . . . . . . . . . . . . . . . 552 Les interruptions sous Linux . . . . . . . . . . . . . . . . . . . . . 56

    2.1 Rappels sur les vecteurs dinterruption dIntel 56

    2.2 Adaptations sous Linux . . . . . . . . . . . . . . . . . . . . 603 Initialisation des exceptions . . . . . . . . . . . . . . . . . . . . . . 61

    3.1 Initialisation provisoire . . . . . . . . . . . . . . . . . . . . . 613.2 Initialisation dfinitive . . . . . . . . . . . . . . . . . . . . . 62

    4 Initialisation des interruptions matrielles . . . . . . . . . . 644.1 Un problme de conception . . . . . . . . . . . . . . . . 644.2 Contrleur dinterruptions programmable . . . . 654.3 Programmation des registres de contrle

    dinitialisation du PIC . . . . . . . . . . . . . . . . . . . . . 664.4 Programmation des registres de contrle

    des oprations du PIC . . . . . . . . . . . . . . . . . . . . . 684.5 Reprogrammation du PIC dans le cas de

    Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704.6 Gestionnaires des interruptions matrielles . . . 714.7 Manipulation des interruptions matrielles . . . 72

    5 Initialisation de linterruption logicielle . . . . . . . . . . . . 726 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

    6.1 Accs aux ports dentre-sortie . . . . . . . . . . . . . 736.2 Insertion des portes dinterruption . . . . . . . . . . 736.3 Initialisation des exceptions . . . . . . . . . . . . . . . . 746.4 Initialisation des interruptions matrielles . . . . 766.5 Manipulation des interruptions matrielles . . . 76

    TROISIME PARTIE :

    LES GRANDES STRUCTURES

    DE DONNES 79

    Chapitre 6 Les structures de donnes concernant

    les processus . . . . . . . . . . . . . . . . . . . . . . . . . . 811 Descripteur de processus. . . . . . . . . . . . . . . . . . . . . . . . . 81

    1.1 Structure du descripteur de processus . . . . . . . 811.2 Aspects structurels . . . . . . . . . . . . . . . . . . . . . . . . 821.3 tat dun processus . . . . . . . . . . . . . . . . . . . . . . . 821.4 Priorit dun processus . . . . . . . . . . . . . . . . . . . . 831.5 Signaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 841.6 Code de statut . . . . . . . . . . . . . . . . . . . . . . . . . . . . 851.7 Espace dadressage . . . . . . . . . . . . . . . . . . . . . . . . 851.8 Identificateurs du processus . . . . . . . . . . . . . . . . 851.9 Hirarchie des processus . . . . . . . . . . . . . . . . . . . 861.10 Propritaire dun processus . . . . . . . . . . . . . . . . . 871.11 Informations temporelles . . . . . . . . . . . . . . . . . . . 881.12 Utilisation du coprocesseur mathmatique . . . 89

    1.13 Informations sur les fichiers utiliss . . . . . . . . . 891.14 Table locale de descripteurs . . . . . . . . . . . . . . . . 901.15 Segment dtat de tche . . . . . . . . . . . . . . . . . . . 90

    2 Tche initiale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943 Table des processus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

    3.1 Stockage des descripteurs de processus . . . . . . 983.2 Implmentation de la table des processus . . . . 993.3 Reprage dun descripteur de processus . . . . . 993.4 La tche en cours . . . . . . . . . . . . . . . . . . . . . . . . . 99

    4 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004.1 Structure du descripteur de processus . . . . . . . 1004.2 Table des processus . . . . . . . . . . . . . . . . . . . . . . . 102

    Chapitre 7 Description du systme de fichiers . . . . . 1031 tude gnrale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

    1.1 Notion de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . 1031.2 Gestion des fichiers . . . . . . . . . . . . . . . . . . . . . . . . 1041.3 Les fichiers du point de vue utilisateur . . . . . . 1041.4 La conception des systmes de fichiers . . . . . . 106

    2 Caractristiques dun fichier . . . . . . . . . . . . . . . . . . . . . . 1092.1 Types de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . 1092.2 Droits daccs dun fichier sous Unix . . . . . . . 1102.3 Mode dun fichier sous Unix . . . . . . . . . . . . . . . 111

    3 Notion de tampon de disque dur . . . . . . . . . . . . . . . . . 1114 Structure dun disque Minix . . . . . . . . . . . . . . . . . . . . . 112

    4.1 Bloc sous Minix et Linux . . . . . . . . . . . . . . . . . 1124.2 Structure gnrale dun disque Minix . . . . . . . 1124.3 Les nuds dinformation sur disque . . . . . . . . . 1134.4 Le super bloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

    5 Systme de fichiers Minix charg en mmoire . . . . . 1165.1 Antmmoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1165.2 Les descripteurs de nud dinformation . . . . . 1195.3 Table des super-blocs . . . . . . . . . . . . . . . . . . . . . . 1215.4 Les descripteurs de fichiers . . . . . . . . . . . . . . . . . 122

    6 Fichiers de priphriques. . . . . . . . . . . . . . . . . . . . . . . . . 1236.1 Caractristiques . . . . . . . . . . . . . . . . . . . . . . . . . . . 1236.2 Reprage des fichiers de priphriques . . . . . . 124

    7 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1247.1 Prise en charge de plusieurs systmes de

    fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1247.2 Cas de Posix . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1257.3 Systme de fichiers virtuel . . . . . . . . . . . . . . . . . 1257.4 Super-bloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1267.5 Nud dinformation . . . . . . . . . . . . . . . . . . . . . . . 1287.6 Descripteur de fichier . . . . . . . . . . . . . . . . . . . . . . 1297.7 Rpertoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1307.8 Types de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . 131

  • Table des matires vii

    7.9 Dclaration dun systme de fichiers . . . . . . . . 1317.10 Descripteur de tampon . . . . . . . . . . . . . . . . . . . . 131

    Chapitre 8 Les terminaux sous Linux . . . . . . . . . . . . . . 1331 Les terminaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

    1.1 Notion de terminal . . . . . . . . . . . . . . . . . . . . . . . . 1331.2 Les terminaux du point de vue matriel . . . . . 1331.3 Le pilote de terminal . . . . . . . . . . . . . . . . . . . . . . 1391.4 Les diffrents terminaux et les normes . . . . . . . 1391.5 Modlisation en voies de communication . . . . 140

    2 Paramtrage des voies de communication . . . . . . . . . 1402.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1402.2 La structure de paramtrisation . . . . . . . . . . . . 1412.3 Paramtrage des modes dentre . . . . . . . . . . . 1412.4 Paramtrage des modes de sortie . . . . . . . . . . . 1432.5 Le tableau des caractres de contrle . . . . . . . 1452.6 Paramtrage des modes locaux . . . . . . . . . . . . . 1482.7 Paramtrages des modes de contrle . . . . . . . . 150

    3 Implmentation des voies de communication . . . . . . . 1513.1 Implmentation dun tampon dentre ou

    de sortie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1513.2 Implmentation des voies de communication . 153

    4 Implmentation du terminal . . . . . . . . . . . . . . . . . . . . . . 1544.1 Dfinition du terminal . . . . . . . . . . . . . . . . . . . . . 1544.2 Les caractres de contrle . . . . . . . . . . . . . . . . . . 1554.3 Caractristiques de la console . . . . . . . . . . . . . . 1554.4 Caractristiques des liaisons srie . . . . . . . . . . . 1564.5 Les tampons du terminal . . . . . . . . . . . . . . . . . . 156

    5 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

    QUATRIME PARTIE :

    ASPECT DYNAMIQUE SANS AFFICHAGE 163

    Chapitre 9 Implmentation des appels systme

    sous Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1651 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

    1.1 Dfinition des appels systme . . . . . . . . . . . . . . 1651.2 Notion de code derreur . . . . . . . . . . . . . . . . . . . 1681.3 Insertion et excution des appels systme . . . . 1691.4 Fonction dappel . . . . . . . . . . . . . . . . . . . . . . . . . . 171

    2 Liste des codes derreur . . . . . . . . . . . . . . . . . . . . . . . . . 1723 Liste des appels systme . . . . . . . . . . . . . . . . . . . . . . . . . 1744 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178

    Chapitre 10 Mesure du temps sous Linux . . . . . . . . . . . 1891 Les horloges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

    1.1 Le matriel de lhorloge . . . . . . . . . . . . . . . . . . . . 1901.2 Le logiciel des horloges . . . . . . . . . . . . . . . . . . . . 191

    2 Horloges matrielles des PC . . . . . . . . . . . . . . . . . . . . . . 194

    2.1 Lhorloge temps rel des PC . . . . . . . . . . . . . . . 1942.2 Minuteur priodique programmable . . . . . . . . . 196

    3 Programmation du minuteur sous Linux . . . . . . . . . . . 1983.1 Initialisation du minuteur . . . . . . . . . . . . . . . . . . 1993.2 Variable de sauvegarde du temps . . . . . . . . . . . 1993.3 Gestionnaire de linterruption dhorloge . . . . . . 1993.4 La comptabilisation du processus en cours . . . 200

    4 Maintien de la date et de lheure sous Linux . . . . . . . 2014.1 Variable structure de conservation du temps 201

    4.2 Initialisation de la variable structure . . . . . . . 2025 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

    Chapitre 11 Le gestionnaire des tches . . . . . . . . . . . . . 2091 Commutation de processus . . . . . . . . . . . . . . . . . . . . . . 209

    1.1 Notion gnrale . . . . . . . . . . . . . . . . . . . . . . . . . . . 2091.2 Gestion du coprocesseur arithmtique . . . . . . . 2091.3 Cas de Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

    2 Ordonnancement des processus . . . . . . . . . . . . . . . . . . 2102.1 Politique dordonnancement . . . . . . . . . . . . . . . . 2112.2 Algorithme dordonnancement . . . . . . . . . . . . . . 212

    3 Initialisation du gestionnaire des tches . . . . . . . . . . . 2154 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

    Chapitre 12 Les signaux sous Linux . . . . . . . . . . . . . . . . . 2211 Notion gnrale de signal . . . . . . . . . . . . . . . . . . . . . . . . 2212 Liste et signification des signaux . . . . . . . . . . . . . . . . . 2213 Vue densemble de manipulation des signaux . . . . . . 2234 Implmentation des deux appels systme . . . . . . . . . . 224

    4.1 Implmentation de lappel systme denvoi

    dun signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2244.2 Implmentation de lappel systme de

    droutement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2255 Implmentation du traitement des signaux . . . . . . . . 2256 Fonction de gestion de signal par dfaut . . . . . . . . . . 2277 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

    CINQUIME PARTIE :

    AFFICHAGE 231

    Chapitre 13 Le pilote dcran sous Linux . . . . . . . . . . . . 2331 Affichage brut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

    1.1 Rappels sur laffichage texte sur lIBM-PC . . . 2331.2 Implmentation sous Linux . . . . . . . . . . . . . . . . . 234

    2 Notion daffichage structur . . . . . . . . . . . . . . . . . . . . . 2372.1 Principe du logiciel daffichage structur . . . . 2372.2 Cas de Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238

    3 Les suites dchappement ECMA-48 . . . . . . . . . . . . . . 2383.1 Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2383.2 Smantique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

  • viii Table des matires

    4 Le pilote dcran sous Linux . . . . . . . . . . . . . . . . . . . . . 2404.1 Prise en compte des caractristiques

    ECMA-48 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2404.2 Fonction dcriture sur la console . . . . . . . . . . . 2414.3 Traitement des cas spciaux . . . . . . . . . . . . . . . 245

    5 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2545.1 Affichage graphique et affichage console . . . . 2545.2 Caractristiques de lcran . . . . . . . . . . . . . . . . . 2545.3 Les consoles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259

    Chapitre 14 Laffichage des caractres sous Linux . . . 2631 Traitement des caractres . . . . . . . . . . . . . . . . . . . . . . . . 263

    1.1 Les caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2631.2 Classification primaire des caractres . . . . . . . . 2631.3 Fonctions de classification des caractres . . . . 2641.4 Fonctions de conversion . . . . . . . . . . . . . . . . . . . 265

    2 criture sur une voie de communication . . . . . . . . . . . 2662.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2662.2 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . 2662.3 Attente du vidage du tampon dcriture . . . . . 2672.4 Traitement des processus en attente . . . . . . . . 268

    3 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2693.1 Traitement des caractres . . . . . . . . . . . . . . . . . . 2693.2 criture sur une voie de communication . . . . . 269

    Chapitre 15 Laffichage format du noyau . . . . . . . . . . 2731 Nombre variable darguments . . . . . . . . . . . . . . . . . . . . 273

    1.1 Lapport du C standard . . . . . . . . . . . . . . . . . . . . 2731.2 Implmentation de stdarg.h sous Linux . . 274

    2 Formatage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2752.1 La fonction sprintf() . . . . . . . . . . . . . . . . . . 2752.2 Structure des formats . . . . . . . . . . . . . . . . . . . . . 2752.3 Le cas de Linux 0.01 . . . . . . . . . . . . . . . . . . . . . . 2772.4 Implmentation de vsprintf() sous Linux 277

    2.5 Les fonctions auxiliaires . . . . . . . . . . . . . . . . . . . . 2803 La fonction printk() . . . . . . . . . . . . . . . . . . . . . . . . . 2834 La fonction panic() . . . . . . . . . . . . . . . . . . . . . . . . . . 2845 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284

    SIXIME PARTIE :

    ASPECT DYNAMIQUE AVEC AFFICHAGE 289

    Chapitre 16 Gestionnaires des exceptions . . . . . . . . . . . 2911 Traitement des exceptions sous Linux . . . . . . . . . . . . . 2912 Structure gnrale des routines . . . . . . . . . . . . . . . . . . . 292

    2.1 Dfinitions des gestionnaires . . . . . . . . . . . . . . . 2922.2 Structure dun gestionnaire . . . . . . . . . . . . . . . . 2922.3 Les fonctions de traitement du code derreur 293

    2.4 Les fonctions C des gestionnaires par dfaut . 294

    2.5 Les macros auxiliaires . . . . . . . . . . . . . . . . . . . . . 2963 La routine int3() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2964 La routine device_not_available() . . . . . . 297

    4.1 La routine principale . . . . . . . . . . . . . . . . . . . . . . 2974.2 La fonction math_state_restore() . . 298

    5 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298

    Chapitre 17 Mmoire virtuelle sous Linux . . . . . . . . . . . 3011 tude gnrale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301

    1.1 Mmoire virtuelle . . . . . . . . . . . . . . . . . . . . . . . . . 3011.2 Mise en place de la mmoire virtuelle . . . . . . . 301

    2 Pagination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3022.1 Notion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3022.2 Pagination plusieurs niveaux . . . . . . . . . . . . . . 3022.3 Protection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304

    3 La pagination sous Intel 80386 . . . . . . . . . . . . . . . . . 3043.1 Taille des pages . . . . . . . . . . . . . . . . . . . . . . . . . . . 3043.2 Structure des entres des tables . . . . . . . . . . . . 3053.3 Activation de la pagination . . . . . . . . . . . . . . . . . 3063.4 Structure dune adresse virtuelle . . . . . . . . . . . . 3063.5 Mcanisme de protection matrielle . . . . . . . . . 306

    4 La pagination sous Linux . . . . . . . . . . . . . . . . . . . . . . . . 3064.1 Mise en place des lments . . . . . . . . . . . . . . . . 3064.2 Initialisation de la pagination . . . . . . . . . . . . . . . 3074.3 Zone fixe et zone de mmoire dynamique . . . . 3084.4 Structures de gestion des tables de pages . . . . 3094.5 Obtention dun cadre de page libre . . . . . . . . . 3104.6 Libration dun cadre de page . . . . . . . . . . . . . . 311

    5 Traitement de lexception de dfaut de page . . . . . . . 3115.1 Le code principal . . . . . . . . . . . . . . . . . . . . . . . . . . 3125.2 Exception dessai dcriture sur une page en

    lecture seule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3135.3 Exception de page non prsente . . . . . . . . . . . . 314

    6 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315

    SEPTIME PARTIE :

    FICHIERS RGULIERS 325

    Chapitre 18 Le pilote du disque dur . . . . . . . . . . . . . . . . 3271 Gomtrie des disques durs . . . . . . . . . . . . . . . . . . . . . . 327

    1.1 Description gnrale . . . . . . . . . . . . . . . . . . . . . . . 3271.2 Prise en charge par Linux . . . . . . . . . . . . . . . . . . 328

    2 Le contrleur de disque dur IDE . . . . . . . . . . . . . . . . . . 3302.1 Les registres IDE . . . . . . . . . . . . . . . . . . . . . . . . . . 3302.2 Les commandes du contrleur IDE . . . . . . . . . . 334

    3 Prise en charge du contrleur par Linux . . . . . . . . . . . 3413.1 Constantes lies au contrleur . . . . . . . . . . . . . . 341

  • Table des matires ix

    3.2 Routine dinterruption matrielle du disque

    dur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3423.3 Passage des commandes . . . . . . . . . . . . . . . . . . . 3443.4 Fonction dattente du contrleur . . . . . . . . . . . 3453.5 Rcupration des erreurs . . . . . . . . . . . . . . . . . . . 345

    4 Partitionnement du disque dur . . . . . . . . . . . . . . . . . . . 3464.1 Un choix dIBM . . . . . . . . . . . . . . . . . . . . . . . . . . . 3464.2 Utilisation par Linux . . . . . . . . . . . . . . . . . . . . . . . 348

    5 Requtes un disque dur . . . . . . . . . . . . . . . . . . . . . . . . 3485.1 Notion de requte . . . . . . . . . . . . . . . . . . . . . . . . . 3485.2 Structure des requtes . . . . . . . . . . . . . . . . . . . . . 3485.3 Tableau des listes de requtes . . . . . . . . . . . . . . 3495.4 Initialisation du disque dur . . . . . . . . . . . . . . . . . 3495.5 Requte de lecture ou dcriture . . . . . . . . . . . . 3505.6 Gestion des tampons . . . . . . . . . . . . . . . . . . . . . . 3515.7 Ajout dune requte . . . . . . . . . . . . . . . . . . . . . . . 3535.8 Traitement des requtes . . . . . . . . . . . . . . . . . . . 3555.9 Le gestionnaire dinterruption en cas

    dcriture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3565.10 Rinitialisation du disque dur . . . . . . . . . . . . . . . 3575.11 Le gestionnaire dinterruption en cas de

    lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3596 Pilote du disque dur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3597 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360

    7.1 Priphriques bloc . . . . . . . . . . . . . . . . . . . . . . . . . 3607.2 Gomtrie dun disque dur . . . . . . . . . . . . . . . . . 3637.3 Initialisation dun disque dur traditionnel . . . . 3637.4 Contrleur de disque dur . . . . . . . . . . . . . . . . . . . 3667.5 Interruption matrielle dun disque dur . . . . . . 3687.6 Passage des commandes . . . . . . . . . . . . . . . . . . . 3697.7 Partitionnement des disques durs . . . . . . . . . . . 3697.8 Requtes un disque dur . . . . . . . . . . . . . . . . . . 370

    Chapitre 19 Gestion de lantmmoire . . . . . . . . . . . . . . 3731 Description des fonctions . . . . . . . . . . . . . . . . . . . . . . . . 373

    1.1 Gestion des listes de tampons . . . . . . . . . . . . . . 3731.2 Fonctions daccs aux tampons . . . . . . . . . . . . . 3741.3 Rcriture des tampons modifis . . . . . . . . . . . 374

    2 Implmentation des fonctions de gestion de listes . . 3742.1 Fonctions de hachage . . . . . . . . . . . . . . . . . . . . . 3742.2 Insertion dans les listes . . . . . . . . . . . . . . . . . . . . 3742.3 Suppression des listes . . . . . . . . . . . . . . . . . . . . . . 3752.4 Recherche dun descripteur de tampon . . . . . . 375

    3 Rcriture sur un disque donn . . . . . . . . . . . . . . . . . . . 3764 Les fonctions de manipulation des tampons . . . . . . . 376

    4.1 Relchement dun tampon . . . . . . . . . . . . . . . . . 3764.2 Dtermination dun descripteur de tampon . . 377

    4.3 Cration dun descripteur de tampon . . . . . . . . 3774.4 Lecture dun tampon . . . . . . . . . . . . . . . . . . . . . . 379

    5 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379

    Chapitre 20 Les priphriques bloc . . . . . . . . . . . . . . . . . 3851 Vue densemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3852 Accs bas niveau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386

    2.1 Dtermination des priphriques bloc . . . . . . . 3862.2 Table des pilotes de bas niveau . . . . . . . . . . . . . 3872.3 Fonction daccs bas niveau . . . . . . . . . . . . . . 387

    3 Les fonctions de lecture et dcriture de bloc . . . . . . 3883.1 Fonction dcriture . . . . . . . . . . . . . . . . . . . . . . . . 3883.2 Fonction de lecture . . . . . . . . . . . . . . . . . . . . . . . . 389

    4 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391

    Chapitre 21 Gestion des nuds dinformation . . . . . . . 3951 Chargement dun super-bloc . . . . . . . . . . . . . . . . . . . . . 3952 Gestion des tables de bits des donnes . . . . . . . . . . . . 395

    2.1 Recherche dun bloc de donnes libre . . . . . . . 3952.2 Macros auxiliaires . . . . . . . . . . . . . . . . . . . . . . . . . 3972.3 Libration dun bloc de donnes . . . . . . . . . . . . 398

    3 Les fonctions internes des nuds dinformation . . . . 3993.1 Verrouillage dun descripteur de nud . . . . . . 3993.2 Dverrouillage dun descripteur de nud . . . . 3993.3 Fonction dattente de dverrouillage . . . . . . . . 4003.4 criture dun nud dinformation sur disque . 4003.5 Lecture dun nud dinformation sur disque . 401

    4 Gestion des blocs sur noeud dinformation . . . . . . . . . 4024.1 Dtermination du numro de bloc physique . . 4024.2 Agrgation dun bloc physique . . . . . . . . . . . . . 4024.3 Implmentation de la fonction auxiliaire . . . . . 403

    5 Mise zro dun nud dinformation sur disque . . . 4055.1 Mise zro dun bloc dindirection simple . . . 4055.2 Mise zro dun bloc dindirection double . . . 4065.3 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . 407

    6 Fonctions de service des nuds dinformation . . . . . 4076.1 Synchronisation des nuds dinformation . . . . 4086.2 Recherche dun nouveau descripteur de

    nud dinformation . . . . . . . . . . . . . . . . . . . . . . . 4086.3 Remplissage dune zone de mmoire . . . . . . . . 4096.4 Libration dun nud dinformation en

    table des bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4106.5 Relchement dun nud dinformation . . . . . . 4116.6 Recherche dun nud dinformation libre

    sur disque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4126.7 Chargement dun nud dinformation . . . . . . . 413

    7 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414

  • x Table des matires

    Chapitre 22 Gestion interne des fichiers rguliers

    et des rpertoires . . . . . . . . . . . . . . . . . . . . . . 4191 Montage dun systme de fichiers . . . . . . . . . . . . . . . . 419

    1.1 Chargement dun super-bloc . . . . . . . . . . . . . . . 4191.2 Initialisation du systme de fichiers . . . . . . . . . 4211.3 Lecture de la table des partitions . . . . . . . . . . . 422

    2 Gestion des rpertoires . . . . . . . . . . . . . . . . . . . . . . . . . . 4232.1 tude gnrale des rpertoires . . . . . . . . . . . . . . 4232.2 Les fichiers rpertoire sous Linux . . . . . . . . . . . 4272.3 Fonctions internes de gestion des rpertoires . 428

    3 Gestion interne des fichiers rguliers . . . . . . . . . . . . . . 4333.1 Gestion des noms de fichiers . . . . . . . . . . . . . . . 4333.2 Lecture et criture dans un fichier rgulier . . . 438

    4 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4404.1 Montage dun systme de fichiers . . . . . . . . . . . 4414.2 Gestion des rpertoires et des fichiers . . . . . . . 444

    HUITIME PARTIE :

    PRIPHRIQUES CARACTRE 449

    Chapitre 23 Le clavier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4511 Principe du logiciel de lecture au clavier . . . . . . . . . . . 451

    1.1 Modes brut et structur . . . . . . . . . . . . . . . . . . . 4511.2 Tampon de lecture . . . . . . . . . . . . . . . . . . . . . . . . 4511.3 Quelques problmes pour le pilote . . . . . . . . . . 453

    2 Interface du clavier sur lIBM-PC . . . . . . . . . . . . . . . . . 4532.1 Aspect physique . . . . . . . . . . . . . . . . . . . . . . . . . . 4532.2 Make-code et break-code . . . . . . . . . . . . . . . . . . 4542.3 Les registres du contrleur de clavier . . . . . . . . 4542.4 Principe de lecture des scan codes . . . . . . . . . . 4572.5 Le port 61h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457

    3 Principe du traitement du clavier sous Linux . . . . . . . 4573.1 Le gestionnaire du clavier . . . . . . . . . . . . . . . . . . 4583.2 Initialisation du gestionnaire de clavier . . . . . . 4583.3 Grandes tapes du gestionnaire de clavier . . . 458

    4 Traitement du mode donnes brutes . . . . . . . . . . . . . . 4594.1 Grandes tapes . . . . . . . . . . . . . . . . . . . . . . . . . . . 4594.2 Dtermination de la fonction de traitement . . 4604.3 Cas des touches prfixielles . . . . . . . . . . . . . . . . . 4614.4 Cas dune touche normale . . . . . . . . . . . . . . . . . 4634.5 Les touches de dplacement du curseur . . . . . 4664.6 Les touches de fonction . . . . . . . . . . . . . . . . . . . . 4674.7 La touche moins . . . . . . . . . . . . . . . . . . . . . . . . . . 4684.8 Mise en tampon brut du clavier . . . . . . . . . . . . 468

    5 Traitement du mode structur . . . . . . . . . . . . . . . . . . . 4695.1 Appel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4695.2 Passage du tampon brut au tampon structur 470

    6 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472

    Chapitre 24 Les liaisons srie . . . . . . . . . . . . . . . . . . . . . . . 4771 tude gnrale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477

    1.1 Communication srie asynchrone . . . . . . . . . . . 4771.2 Communication srie synchrone . . . . . . . . . . . . 4821.3 Le standard dinterface srie RS-232 . . . . . . . . 484

    2 LUART PC16550D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4842.1 Le brochage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4852.2 Lensemble de registres . . . . . . . . . . . . . . . . . . . . 4852.3 Programmation de lUART . . . . . . . . . . . . . . . . 489

    3 Cas de Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4893.1 Initialisation des liaisons srie . . . . . . . . . . . . . . 4893.2 Gestionnaires dinterruption . . . . . . . . . . . . . . . . 491

    4 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495

    Chapitre 25 Les priphriques caractre . . . . . . . . . . . . 5011 Fonctions de lecture/criture . . . . . . . . . . . . . . . . . . . . . 501

    1.1 Fonction daccs de haut niveau . . . . . . . . . . . . 5011.2 Fonctions daccs de bas niveau . . . . . . . . . . . . 5011.3 Implmentation de la fonction daccs de

    haut niveau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5022 Fonctions daccs de bas niveau des terminaux . . . . 503

    2.1 Cas dun terminal quelconque . . . . . . . . . . . . . . 5032.2 Cas du terminal en cours . . . . . . . . . . . . . . . . . . 503

    3 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503

    NEUVIME PARTIE :

    COMMUNICATION PAR TUBES 507

    Chapitre 26 Communication par tubes sous Linux . . . 5091 tude gnrale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509

    1.1 Notion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5091.2 Types de tubes de communication . . . . . . . . . . 510

    2 Gestion interne sous Linux . . . . . . . . . . . . . . . . . . . . . . . 5102.1 Descripteur de nud dinformation dun tube 510

    2.2 Oprations dentre-sortie . . . . . . . . . . . . . . . . . . 5113 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513

    DIXIME PARTIE :

    LE MODE UTILISATEUR 517

    Chapitre 27 Appels systme du systme de fichiers . 5191 Points de vue utilisateur et programmeur . . . . . . . . . . 519

    1.1 Les fichiers du point de vue utilisateur . . . . . . 5191.2 Les fichiers du point de vue du programmeur 521

    2 Entres-sorties Unix sur fichier . . . . . . . . . . . . . . . . . . 5222.1 Ouverture et fermeture de fichiers . . . . . . . . . . 5222.2 Lecture et criture de donnes . . . . . . . . . . . . . . 525

  • Table des matires xi

    2.3 Positionnement dans un fichier . . . . . . . . . . . . . 5282.4 Sauvegarde des donnes modifies . . . . . . . . . . 529

    3 Implmentation Linux des entres-sorties . . . . . . . . . . 5293.1 Appel systme douverture . . . . . . . . . . . . . . . . . 5293.2 Appel systme de cration . . . . . . . . . . . . . . . . . 5333.3 Appel systme de fermeture . . . . . . . . . . . . . . . . 5343.4 Appel systme de lecture des donnes . . . . . . . 5343.5 Appel systme dcriture des donnes . . . . . . . 5373.6 Appel systme de positionnement . . . . . . . . . . . 5383.7 Appel systme de sauvegarde des donnes . . . 539

    4 Liens et fichiers partags . . . . . . . . . . . . . . . . . . . . . . . . 5394.1 tude gnrale . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5394.2 Cration de liens symboliques sous Unix . . . . 5414.3 Implmentation sous Linux . . . . . . . . . . . . . . . . . 542

    5 Manipulations des fichiers . . . . . . . . . . . . . . . . . . . . . . . 5445.1 Les appels systme Unix . . . . . . . . . . . . . . . . . . 5445.2 Implmentation sous Linux . . . . . . . . . . . . . . . . . 546

    6 Gestion des rpertoires . . . . . . . . . . . . . . . . . . . . . . . . . . 5506.1 Les appels systme Unix . . . . . . . . . . . . . . . . . . 5506.2 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . 552

    7 Autres appels systme . . . . . . . . . . . . . . . . . . . . . . . . . . . 5587.1 Duplication de descripteur dentre-sortie . . . . 5587.2 Rcupration des attributs des fichiers . . . . . . 5597.3 Dates associes aux fichiers . . . . . . . . . . . . . . . . 5627.4 Proprits des fichiers ouverts . . . . . . . . . . . . . . 5637.5 Montage et dmontage de systmes de

    fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5658 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566

    Chapitre 28 Appels systme concernant les

    processus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5691 Cration des processus . . . . . . . . . . . . . . . . . . . . . . . . . . 569

    1.1 Description des appels systme . . . . . . . . . . . . . 5691.2 Implmentation de fork() . . . . . . . . . . . . . . . 5721.3 Le format dexcutable a.out . . . . . . . . . . . . . 5771.4 Implmentation de execve() . . . . . . . . . . . . 583

    2 Gestion des attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5922.1 Description des appels systme . . . . . . . . . . . . . 5922.2 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . 593

    3 Gestion des groupes et des sessions de processus . . . 5943.1 Description des appels systme . . . . . . . . . . . . . 5943.2 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . 595

    4 Terminaison du processus en cours . . . . . . . . . . . . . . . 5964.1 Description de lappel systme . . . . . . . . . . . . . 5964.2 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . 597

    5 Attente de la fin dun processus fils . . . . . . . . . . . . . . . 6005.1 Les appels systme . . . . . . . . . . . . . . . . . . . . . . . . 600

    5.2 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . 6016 Autres appels systme . . . . . . . . . . . . . . . . . . . . . . . . . . . 603

    6.1 Lappel systme break() . . . . . . . . . . . . . . . . 6036.2 Lappel systme acct() . . . . . . . . . . . . . . . . . . 603

    7 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603

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

    1.1 Liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6091.2 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . 610

    2 Appels systme lis lordonnancement . . . . . . . . . . . 6112.1 Priorit des processus . . . . . . . . . . . . . . . . . . . . . . 6112.2 Contrle de lexcution dun processus . . . . . . 612

    3 Appels systme concernant les signaux . . . . . . . . . . . . 6123.1 mission dun signal . . . . . . . . . . . . . . . . . . . . . . . 6123.2 Droutement dun signal . . . . . . . . . . . . . . . . . . . 6133.3 Attente dun signal . . . . . . . . . . . . . . . . . . . . . . . . 614

    4 Appels systme concernant les priphriques . . . . . . . 6154.1 Cration dun fichier spcial . . . . . . . . . . . . . . . . 6154.2 Oprations de contrle dun priphrique . . . . 616

    5 Appels systme concernant la mmoire. . . . . . . . . . . . 6185.1 Structure de la mmoire utilisateur . . . . . . . . . 6185.2 Changement de la taille du segment des

    donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6195.3 Accs une adresse physique . . . . . . . . . . . . . . 620

    6 Tubes de communication . . . . . . . . . . . . . . . . . . . . . . . . 6206.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6206.2 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . 621

    7 Autres appels systme . . . . . . . . . . . . . . . . . . . . . . . . . . . 6228 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623

    Chapitre 30 Fonctions de la bibliothque C . . . . . . . . . 6251 La fonction printf() . . . . . . . . . . . . . . . . . . . . . . . . . 625

    1.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6251.2 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . 625

    2 Fonction concernant les signaux . . . . . . . . . . . . . . . . . . 6262.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6262.2 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . 626

    3 Fonctions sur les chanes de caractres . . . . . . . . . . . . 6264 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631

    ONZIME PARTIE :

    DMARRAGE DU SYSTME 633

    Chapitre 31 Dmarrage du systme Linux . . . . . . . . . . 6351 Source et grandes tapes . . . . . . . . . . . . . . . . . . . . . . . . 635

    1.1 Fichiers sources concerns . . . . . . . . . . . . . . . . . 6351.2 Dbut de lamorage . . . . . . . . . . . . . . . . . . . . . . 635

    2 Le chargeur damorage . . . . . . . . . . . . . . . . . . . . . . . . . 636

  • xii Table des matires

    2.1 Les grandes tapes . . . . . . . . . . . . . . . . . . . . . . . . 6362.2 Transfert du code damorage . . . . . . . . . . . . . . 6372.3 Configuration de la pile en mode rel . . . . . . . 6372.4 Affichage dun message de chargement . . . . . . 6382.5 Chargement de limage du noyau . . . . . . . . . . . 638

    3 Passage au mode protg . . . . . . . . . . . . . . . . . . . . . . . . 6423.1 Les grandes tapes . . . . . . . . . . . . . . . . . . . . . . . . 6423.2 Sauvegarde de la position du curseur

    graphique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6433.3 Inhibition des interruptions matrielles . . . . . . 6433.4 Transfert du code du systme . . . . . . . . . . . . . . 6433.5 Chargement de tables provisoires de

    descripteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6443.6 Activation de la broche A20 . . . . . . . . . . . . . . . 6443.7 Reprogrammation du PIC . . . . . . . . . . . . . . . . . . 6453.8 Passage au mode protg . . . . . . . . . . . . . . . . . . 645

    4 La fonction startup_32() . . . . . . . . . . . . . . . . . . . 6454.1 Les grandes tapes . . . . . . . . . . . . . . . . . . . . . . . . 6454.2 Initialisation des registres de segmentation . . . 6464.3 Configuration de la pile en mode noyau . . . . . 646

    4.4 Initialisation provisoire de la table des

    interruptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6464.5 Initialisation de la table globale des

    descripteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6474.6 Valeurs finales des registres de segment de

    donnes et de pile . . . . . . . . . . . . . . . . . . . . . . . . . 6484.7 Vrification de lactivation de la broche A20 649

    4.8 Vrification de la prsence du coprocesseur

    arithmtique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6494.9 Mise en place de la pagination . . . . . . . . . . . . . 6494.10 Passage la fonction start_kernel() . . 649

    5 La fonction start_kernel() . . . . . . . . . . . . . . . . 6505.1 Les grandes tapes . . . . . . . . . . . . . . . . . . . . . . . . 6505.2 Initialisation du terminal . . . . . . . . . . . . . . . . . . . 6515.3 Passage au mode utilisateur . . . . . . . . . . . . . . . . 6525.4 Le processus 1 : init . . . . . . . . . . . . . . . . . . . . . . . 653

    6 volution du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654

    Bibliographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659

    Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669

  • Table des figures

    1.1 Processus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.2 Minix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    4.1 Segmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404.2 Slection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444.3 Choix dun descripteur . . . . . . . . . . . . . . . . . . . . . . . . . 45

    6.1 Structure du TSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916.2 Sauvegarde de ltat du coprocesseur arithmtique 93

    6.3 Stockage du descripteur et de la pile noyau . . . . . . 98

    7.1 Arborescence de fichiers . . . . . . . . . . . . . . . . . . . . . . . 1067.2 Liste chane et table de bits . . . . . . . . . . . . . . . . . . . 1077.3 Systme de fichiers Minix . . . . . . . . . . . . . . . . . . . . . 112

    8.1 Un des premiers terminaux . . . . . . . . . . . . . . . . . . . . . 1348.2 Le terminal M40 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1358.3 Classification des terminaux . . . . . . . . . . . . . . . . . . . . 1358.4 Terminal RS-232 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1368.5 Terminal mapp en mmoire . . . . . . . . . . . . . . . . . . . 1388.6 cran de lIBM-PC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1398.7 Gestion dune voie de communication . . . . . . . . . . . 1408.8 Caractres de contrle dUnix . . . . . . . . . . . . . . . . . 145

    10.1 Horloge programmable . . . . . . . . . . . . . . . . . . . . . . . . . 19010.2 Maintien de lheure courante . . . . . . . . . . . . . . . . . . . 19110.3 Traitement des alarmes . . . . . . . . . . . . . . . . . . . . . . . . 193

    13.1 Caractres ASCII modifis . . . . . . . . . . . . . . . . . . . . . . 235

    17.1 Pagination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30317.2 Table de pages deux niveaux . . . . . . . . . . . . . . . . . 304

    20.1 Priphrique bloc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385

    22.1 CP/M. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42522.2 MS-DOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42622.3 Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42722.4 Rpertoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428

    23.1 Tampon de caractres . . . . . . . . . . . . . . . . . . . . . . . . . 45223.2 Scan codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455

    24.1 Niveaux logiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47824.2 Port srie simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47924.3 Rception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48124.4 Synchronisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482

    26.1 Tube de communication . . . . . . . . . . . . . . . . . . . . . . . 509

  • Premire partie

    Principes de conception des systmes

    dexploitation

  • Chapitre 1

    Structure dun systme dexploitation

    Nous supposons que le lecteur a vu Linux en tant quutilisateur de ce systme dexploitationet aussi, ventuellement, en tant quadministrateur systme, en particulier pour les systmesindividuels. Nous allons passer ltape suivante : la faon dont ce systme dexploitation estconu.

    On peut sintresser la conception de Linux pour quatre raisons : par curiosit intellectuelle,pour comprendre comment on conoit un systme dexploitation, pour participer au dvelop-pement du noyau Linux, ou pour sen inspirer pour dvelopper un autre systme dexploi-tation. Notre but est surtout de satisfaire les deux premires motivations, mais cet ouvragepourra galement servir pour les deux autres.

    Lintrt de Linux est que les sources sont publiques et que, au-del des grands principes, nouspourrons visualiser la mise en place des fonctionnalits du systme partir de ces sources etfaire des expriences en changeant telle ou telle implmentation.

    Dans ce chapitre, nous allons rappeler ce quest un systme dexploitation du point de vue delutilisateur 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 dexploitation

    Un systme dexploitation effectue fondamentalement trois tches indpendantes : il permetde charger les programmes les uns aprs les autres, il mule une machine virtuelle et il gre lesressources. Prcisons chacune de ces tches.

    1.1 Chargement des programmes

    Les premiers micro-ordinateurs taient fournis sans systme dexploitation. Les tous premiersmicro-ordinateurs navaient quun seul programme : un interprteur du langage BASIC quitait contenu en mmoire ROM. Lors de lapparition des lecteurs de cassettes puis, de faonplus fiable, des lecteurs de disquettes, cela commena changer : si une disquette excutabletait place dans le lecteur de disquettes, ce programme tait excut (il fallait ventuellementensuite remplacer cette disquette par une disquette de donnes), sinon linterprteur BASICreprenait la main.

    Avec cette faon de faire, chaque changement de programme exigeait le redmarrage du micro-ordinateur avec la disquette du programme dsir dans le lecteur de disquettes. Ctait le casen 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. Celui-ci, contenu sur disquette ou en mmoire RAM, affichait une invite lcran. On pouvait alorsremplacer la disquette systme de dmarrage par une disquette contenant le programme d-sir : en crivant le nom du programme sur la ligne de commande et en appuyant sur la toucheRetour, le programme tait charg et excut. la fin de lexcution de ce programme, onpouvait charger un nouveau programme, sans devoir redmarrer le systme. Ceci permet, parexemple, dcrire un texte avec un traitement de texte puis dappeler un autre programmepour limprimer.

    1.2 Le systme dexploitation en tant que machine virtuelle

    La gestion dun systme informatique donn, par exemple lIBM-PC, se fait a priori en lan-Notion dAPIgage machine. Ceci est primaire et lourd grer pour la plupart des ordinateurs, en particulieren ce qui concerne les entres-sorties. Bien peu de programmes seraient dvelopps si chaqueprogrammeur devait connatre le fonctionnement, par exemple, de tel ou tel disque dur ettoutes les erreurs qui peuvent apparatre lors de la lecture dun bloc. Il a donc fallu trouverun moyen de librer les programmeurs de la complexit du matriel. Cela consiste enrober lematriel avec une couche de logiciel qui gre lensemble du systme. Il faut prsenter au pro-grammeur une API (pour langlais Application Programming interface, interface de program-mation dapplication), ce qui correspond une machine virtuelle plus facile comprendreet programmer.

    Considrons par exemple la programmation des entres-sorties des disques durs au moyen duCas dudisque durcontrleur IDE utilis sur lIBM-PC.

    Nous verrons au chapitre 18 que le contrleur IDE possde 8 commandes principales quiconsistent toutes charger entre 1 et 5 octets dans ses registres. Ces commandes permettentde lire et dcrire des donnes, de dplacer le bras du disque, de formater le disque ainsi quedinitialiser, de tester, de restaurer et de recalibrer le contrleur et les disques.

    Les commandes fondamentales sont la lecture et lcriture, chacune demandant sept para-mtres regroups dans six octets. Ces paramtres spcifient les lments tels que ladressedu premier secteur lire ou crire, le nombre de secteurs lire ou crire, ou si lon doitessayer de corriger les erreurs. la fin de lopration, le contrleur retourne 14 champs dtatet 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 disquecontient des fichiers nomms ; chaque fichier peut tre ouvert en lecture ou en criture ; ilsera lu ou crit, et finalement ferm. La partie machine virtuelle des systmes dexploitationsoustrait le matriel au regard du programmeur et offre une vue simple et agrable de fichiersnomms qui peuvent tre lus et crits.

    1.3 Le systme dexploitation en tant que gestionnaire de ressources

    Les ordinateurs modernes se composent de processeurs, de mmoires, dhorloges, de disques,de moniteurs, dinterfaces rseau, dimprimantes, et dautres priphriques qui peuvent treutiliss 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 entreles diffrents programmes qui y font appel.

    Imaginez ce qui se produirait si trois programmes qui sexcutent sur un ordinateur essayaientsimultanment dimprimer leurs rsultats sur la mme imprimante. Les premires lignes impri-mes pourraient provenir du programme 1, les suivantes du programme 2, puis du programme3 et ainsi de suite. Il en rsulterait le dsordre le plus total. Le systme dexploitation peutviter ce chaos potentiel en transfrant les rsultats imprimer dans un fichier tampon surle disque. Lorsquune impression se termine, le systme dexploitation peut alors imprimer undes fichiers 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 dexploitation

    2.1 Systmes multi-tches

    La plupart des systmes dexploitation modernes permettent lexcution de plusieurs tches la fois : un ordinateur peut, pendant quil excute le programme dun utilisateur, lire lesdonnes dun disque ou afficher des rsultats sur un terminal ou une imprimante. On parle desystme dexploitation multi-tches ou multi-programm dans ce cas.

    Processus

    La notion fondamentale des systmes dexploitation multi-tches est celle de processus. Lanotion de programme ne suffit pas. Rien nempche que le mme programme soit excutplusieurs fois en mme temps : on peut vouloir, par exemple, deux fentres emacs ou deuxfentres 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 etpar 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. Linux

    Temps partag

    La plupart des systmes dexploitation multi-tches sont implments sur un ordinateur ayantun seul micro-processeur. Celui-ci, un instant donn, nexcute rellement quun seul pro-gramme, mais le systme peut le faire passer dun programme un autre en excutant chaqueprogramme pendant quelques dizaines de millisecondes ; ceci donne aux utilisateurs limpres-sion que tous les programmes sont excuts en mme temps. On parle alors de systme temps partag.

    Certains qualifient de pseudo-paralllisme cette commutation trs rapide du processeur dunprogramme un autre, pour la diffrencier du vrai paralllisme qui se produit au niveau dumatriel lorsque le processeur travaille en mme temps que certains priphriques dentre-sortie.

  • 6 Premire partie : Principes de conception des systmes dexploitation

    Abstraction du droulement

    Conceptuellement, chaque processus a son propre processeur virtuel. Bien sr, le vrai pro-cesseur commute entre plusieurs processus. Mais, pour bien comprendre le systme, il est pr-frable de penser un ensemble de processus qui sexcutent en (pseudo-) paralllisme pluttqu lallocation du processeur entre diffrents processus. Cette commutation rapide est appe-le multi-programmation.

    La figure 1.1 ([TAN-87], p. 56) montre quatre processus sexcutant en mme temps. La fi-gure (b) prsente une abstraction de cette situation. Les quatre programmes deviennent quatreprocessus indpendants disposant chacun de leur propre contrle de flux (cest--dire leurcompteur ordinal). la figure (c), on peut constater que, sur un intervalle de temps assezgrand, tous les processus ont progress, mais qu un instant donn, il ny a quun seul proces-sus actif.

    Figure 1.1 : Processus

    Variables denvironnement

    Comme nous lavons dj dit, la donne du programme est insuffisante pour la dterminationdun processus. Il faut lui indiquer toute une srie de variables denvironnement : les fi-chiers sur lesquels il opre, o en est le compteur ordinal, etc. Ces variables denvironnementsont ncessaires pour deux raisons :

    La premire est que deux processus peuvent utiliser le mme code (deux fentres emacs parexemple) mais les fichiers concerns peuvent tre diffrents, le compteur ordinal ne pas entre au mme endroit...

    La seconde est due au caractre multi-tches, trait par pseudo-paralllisme. Priodique-ment, le systme dexploitation dcide dinterrompre un processus en cours afin de dmarrerlexcution dun autre processus. Lorsquun processus est temporairement suspendu de cettemanire, il doit pouvoir retrouver plus tard exactement ltat dans lequel il se trouvait aumoment de sa suspension. Il faut donc que toutes les informations dont il a besoin soientsauvegardes quelque part pendant sa mise en attente. Sil possde, par exemple, plusieursfichiers ouverts, les positions dans ces fichiers doivent tre mmorises.

  • Chapitre 1. Structure dun systme dexploitation 7

    La liste des variables denvironnement dpend du systme dexploitation en question, et mmede sa version. Elle se trouve dans le descripteur du processus (en anglais process descrip-tor).

    Espace mmoire dun processus

    Dans de nombreux systmes dexploitation, chaque processus possde son propre espace m-moire, 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 nesera pas uniforme et variera vraisemblablement si les mmes processus sont excuts nou-veau. Il ne faut donc pas que les processus fassent une quelconque prsomption sur le facteurtemps.

    Considrons le cas dun processus dentre-sortie qui met en marche le moteur dun lecteur dedisquettes, excute 1 000 fois une boucle pour que la vitesse de la disquette se stabilise, puisdemande la lecture du premier enregistrement. Si le processeur a aussi t allou un autreprocessus pendant lexcution de la boucle, le processus dentre-sortie risque dtre ractivtrop 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 certainsvnements doivent absolument se produire au bout de quelques millisecondes, il faut prendredes mesures particulires pour sen assurer. On utilise alors des minuteurs, comme nous leverrons.

    Cependant, la plupart des processus ne sont pas affects par la multi-programmation du pro-cesseur et par les diffrences de vitesse dexcution qui existent entre eux.

    2.2 Systmes multi-utilisateurs

    Un systme multi-utilisateurs est capable dexcuter de faon (pseudo-) concurrente etindpendante des applications appartenant plusieurs utilisateurs.

    Concurrente signifie que les applications peuvent tre actives au mme moment et se dis-puter laccs diffrentes ressources comme le processeur, la mmoire, les disques durs... Indpendante signifie que chaque application peut raliser son travail sans se proccuperde ce que font les applications des autres utilisateurs.

    Un systme multi-utilisateurs est ncessairement multi-tches mais la rciproque est fausse : lesystme dexploitation MS-DOS est mono-utilisateur et mono-tche ; les systmes MacOS 6.1et Windows 3.1 sont mono-utilisateurs mais multi-tches ; Unix et Windows NT sont multi-utilisateurs.

    Mise en place

    Comme pour les systmes multi-tches, la multi-utilisation est mule en attribuant des lapsde temps chaque utilisateur. Naturellement, le fait de basculer dune application lautreralentit chacune dentre elles et affecte 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 cer-tain nombre de mcanismes :

    un mcanisme dauthentification permettant de vrifier lidentit de lutilisateur ;

    un mcanisme de protection contre les programmes utilisateur errons, qui pourraientbloquer les autres applications en cours dexcution sur le systme, ou mal intentionns, quipourraient perturber ou espionner les activits des autres utilisateurs ;

    un mcanisme de comptabilit pour limiter le volume des ressources alloues chaqueutilisateur.

    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 fichiers, ilreoit des courriers lectroniques privs, etc. Le systme dexploitation doit assurer que lapartie 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 dansle but de violer lespace priv dun autre utilisateur.

    Chaque utilisateur est identifi par un numro unique, appel lidentifiant de lutilisateur,ou UID (pour langlais User IDentifier). En gnral, seul un nombre limit de personnes estautoris utiliser un systme informatique. Lorsque lun de ces utilisateurs commence unesession de travail, le systme dexploitation lui demande un nom dutilisateur et un motde 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 tremembre dun ou de plusieurs groupes dutilisateurs. Un groupe est galement identifi parun numro unique dnomm identifiant de groupe, ou GID (pour langlais Group IDenti-fier). Par exemple, chaque fichier est associ un et un seul groupe. Sous Unix, il est possiblepar exemple de limiter laccs en lecture et en criture au seul possesseur dun fichier, en lec-ture au groupe, et dinterdire tout accs aux autres utilisateurs.

    Super-utilisateur

    Un systme dexploitation multi-utilisateurs prvoit un utilisateur particulier appel super-utilisateur ou superviseur (root en anglais). Ladministrateur du systme doit se connec-ter en temps que super-utilisateur pour grer les comptes des utilisateurs et raliser les tchesde maintenance telles que les sauvegardes et les mises jour des programmes. Le super-utilisateur peut faire pratiquement nimporte quoi dans la mesure o le systme dexploitationne lui applique jamais les mcanismes de protection, ceux-ci ne concernant que les autres uti-lisateurs, appels utilisateurs ordinaires. Le super-utilisateur peut, en particulier, accder tous les fichiers du systme et interfrer sur lactivit de nimporte quel processus en coursdexcution. Il ne peut pas, en revanche, accder aux ports dentre-sortie qui nont pas tprvus par le noyau, comme nous le verrons.

  • Chapitre 1. Structure dun systme dexploitation 9

    3 Structure externe dun systme dexploitation

    3.1 Noyau et utilitaires

    Le systme dexploitation comporte un certain nombre de routines (sous-programmes). Lesplus importantes constituent le noyau (kernel en anglais). Celui-ci est charg en mmoirevive linitialisation du systme et contient de nombreuses procdures ncessaires au bonfonctionnement du systme. Les autres routines, moins critiques, sont appeles des utilitaires.

    Le noyau dun systme dexploitation se compose de quatre parties principales : le gestion-naire de tches (ou des processus), le gestionnaire de mmoire, le gestionnaire de fichiers et legestionnaire de priphriques dentre-sortie. Il possde galement deux parties auxiliaires : lechargeur du systme dexploitation et linterprteur de commandes.

    3.2 Le gestionnaire de tches

    Sur un systme temps partag, lune des parties les plus importantes du systme dexploita-tion 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). Prio-diquement, 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 dallocationdu processus soit quil est bloqu (en attente dune donne dun des priphriques).

    Le contrle de plusieurs activits parallles est un travail difficile. Cest pourquoi les concep-teurs des systmes dexploitation ont constamment, au fil des ans, amlior le modle de pa-ralllisme pour le rendre plus simple demploi.

    Certains systmes dexploitation permettent uniquement des processus non premptifs, cequi signifie que le gestionnaire des tches nest invoqu que lorsquun processus cde volontai-rement le processeur. Mais les processus dun systme multi-utilisateur doivent tre premptifs.

    3.3 Le gestionnaire de mmoire

    La mmoire est une ressource importante qui doit tre gre avec prudence. Le moindre micro-ordinateur a, ds la fin des annes 1980, dix fois plus de mmoire que lIBM 7094, lordinateurle plus puissant du dbut des annes soixante. Mais la taille des programmes augmente toutaussi vite que celle des mmoires.

    La gestion de la mmoire est du ressort du gestionnaire de mmoire. Celui-ci doit connatreles parties libres et les parties occupes de la mmoire, allouer de la mmoire aux processusqui en ont besoin, rcuprer la mmoire utilise par un processus lorsque celui-ci se termineet traiter le va-et-vient (swapping en anglais, ou pagination) entre le disque et la mmoireprincipale lorsque cette dernire ne peut pas contenir tous les processus.

    3.4 Le gestionnaire de fichiers

    Comme nous lavons dj dit, une des tches fondamentales du systme dexploitation est demasquer les spcificits des disques et des autres priphriques dentre-sortie et doffrir auprogrammeur un modle agrable et facile demploi. Ceci se fait travers la notion de fichier.

  • 10 Premire partie : Principes de conception des systmes dexploitation

    3.5 Le gestionnaire de priphriques

    Le contrle des priphriques dentre-sortie (E/S) de lordinateur est lune des fonctions pri-mordiales dun systme dexploitation. Ce dernier doit envoyer les commandes aux priph-riques, intercepter les interruptions, et traiter les erreurs. Il doit aussi fournir une interfacesimple et facile demploi entre les priphriques et le reste du systme qui doit tre, dans lamesure du possible, la mme pour tous les priphriques, cest--dire indpendante du pri-phrique utilis. Le code des entres-sorties reprsente une part importante de lensemble dunsystme dexploitation.

    De nombreux systmes dexploitation offrent un niveau dabstraction qui permet aux utilisa-teurs de raliser des entres-sorties sans entrer dans le dtail du matriel. Ce niveau dabs-traction fait apparatre chaque priphrique comme un fichier spcial, qui permettent detraiter les priphriques dentre-sortie comme des fichiers. Cest le cas dUnix. Dans ce cas,on appelle fichier rgulier tout fichier situ en mmoire de masse.

    3.6 Le chargeur du systme dexploitation

    En gnral, de nos jours, lorsque lordinateur (compatible PC ou Mac) est mis sous tension, ilexcute un logiciel appel BIOS (pour Basic Input Output System) plac une adresse biendtermine et contenu en mmoire RAM. Ce logiciel initialise les priphriques, charge unsecteur dun disque, et excute ce qui y est plac. Lors de la conception dun systme dexploi-tation, on place sur ce secteur le chargeur du systme dexploitation ou, plus exactement, lechargeur du chargeur du systme dexploitation (ou pr-chargeur) puisque le contenu dunsecteur est insuffisant pour le chargeur lui-mme.

    La conception du chargeur et du pr-chargeur est indispensable, mme si ceux-ci ne font pasexplicitement partie du systme dexploitation.

    3.7 Linterprteur de commandes

    Le systme dexploitation proprement dit est le code qui permet de dfinir les appels systme.Les programmes systme tels que les diteurs de texte, les compilateurs, les assembleurs, lesditeurs de liens et les interprteurs de commandes ne font pas partie du systme dexploi-tation. Cependant linterprteur de commandes (shell en anglais) est souvent considrcomme en faisant partie.

    Sous sa forme la plus rudimentaire, linterprteur de commandes excute une boucle infinie quiaffiche une invite (montrant par l que lon attend quelque chose), lit le nom du programmesaisi par lutilisateur ce moment-l et lexcute.

    4 Structure interne dun systme dexploitation

    Aprs avoir examin un systme dexploitation de lextrieur (du point de vue de linterfaceprsente lutilisateur et au programmeur), nous allons examiner son fonctionnement interne.

  • Chapitre 1. Structure dun systme dexploitation 11

    4.1 Les systmes monolithiques

    Andrew Tanenbaum appelle systme monolithique (dun seul bloc) un systme dexploita-tion qui est une collection de procdures, chacune pouvant tout moment appeler nimportequelle autre procdure, en remarquant que cest lorganisation (plutt chaotique) la plus r-pandue.

    Pour construire le code objet du systme dexploitation, il faut compiler toutes les procdures,ou les fichiers qui les contiennent, puis les runir au moyen dun diteur de liens. Dans unsystme monolithique, il ny a aucun masquage de linformation : chaque procdure est visiblede toutes les autres, par opposition aux structures constitues de modules ou dunits de pro-grammes et dans lesquelles les informations sont locales aux modules et o il existe des pointsde passage obligs pour accder aux modules.

    MS-DOS est un exemple dun tel systme.

    4.2 Systmes modes noyau et utilisateur

    Dans beaucoup de systmes dexploitation, il existe deux modes : le mode noyau et le modeutilisateur. Le systme dexploitation dmarre en mode noyau, ce qui permet dinitialiser lespriphriques et de mettre en place les routines de service pour les appels systme, et commuteensuite en mode utilisateur. En mode utilisateur, on ne peut pas avoir accs directement auxpriphriques : on doit utiliser ce quon appelle des appels systme pour avoir accs cequi a t prvu par le systme : le noyau reoit cet appel systme, vrifie quil sagit dunedemande valable (en particulier du point de vue des droits daccs), lexcute, puis renvoieau 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 expliquepourquoi on ne peut pas tout programmer sur un tel systme.

    Les micro-processeurs modernes aident la mise en place de tels systmes. Cest lorigine Aidedu mode protg des micro-processeurs dIntel depuis le 80286 : il existe plusieurs niveauxde privilges avec une vrification matrielle, et non plus seulement logicielle, des rgles depassage dun niveau lautre.

    4.3 Systmes couches

    Les systmes prcdents peuvent tre considrs comme des systmes deux couches et tregnraliss en systmes plusieurs couches : chaque couche sappuie sur celle qui lui est im-mdiatement infrieure.

    Le premier systme utiliser cette technique a t le systme THE dvelopp au TechnischeHogeschool dEindhoven (do son nom) aux Pays-Bas par Diskstra (1968) et ses lves. Lesystme dexploitation Multics, lorigine dUnix, tait aussi un systme couches.

    Le systme dexploitation Minix de Tanenbaum, schmatis sur la figure 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) etfournit 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 aumcanisme des messages. La partie de cette couche qui traite des interruptions est crite enlangage 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 typede priphrique (disque, horloge, terminal...). Elle contient de plus une tche particulire, latche systme.Toutes les tches de la couche 2 et tout le code de la couche 1 ne forment quun seul pro-gramme binaire, appel le noyau (kernel en anglais). Les tches de la couche 2 sont tota-lement indpendantes bien quelles fassent partie dun mme programme objet : elles sontslectionnes indpendamment les unes des autres et communiquent par envoi de messages.Elles sont regroupes en un seul code binaire pour faciliter lintgration de Minix desmachines deux modes.

    La couche 3 renferme deux gestionnaires qui fournissent des services aux processus des utili-sateurs. Le gestionnaire de mmoire (MM pour langlais Memory Manager) traite tousles appels systme de Minix, tels que fork(), exec() et brk(), qui concernent la gestionde la mmoire. Le systme de fichiers (FS pour langlais File System) se charge des appelssystme du systme de fichiers, tels que read(), mount() et chdir().

    La couche 4 contient enfin 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 officiellement que deuxcouches : le mode noyau et le mode utilisateur.

    4.4 Systmes micro-noyau

    Les systmes dexploitation base de micro-noyau ne possdent que quelques fonctions, engnral quelques primitives de synchronisation, un gestionnaire des tches simple, et un m-canisme de communication entre processus. Des processus systme sexcutent au-dessus dumicro-noyau pour implmenter les autres fonctions dun systme dexploitation, comme lallo-cation mmoire, les gestionnaires de priphriques, les gestionnaires dappels systme, etc.

    Le systme dexploitation Amoeba de Tanenbaum fut lun des premiers systmes micro-noyau.

  • Chapitre 1. Structure dun systme dexploitation 13

    Ce type de systmes dexploitation promettait beaucoup ; malheureusement ils se sont rvlsplus lents que les systmes monolithiques, du fait du cot des passages de messages entre lesdiffrentes couches du systme dexploitation.

    Pourtant, les micro-noyaux prsentent des avantages thoriques sur les systmes monoli-thiques. 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 quidoit 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 architecturesdans la mesure o toutes les composantes dpendantes du matriel sont en gnral localisesdans le code du micro-noyau. Enfin, les systmes base de micro-noyau ont tendance mieuxutiliser la mmoire vive que les systmes monolithiques.

    4.5 Systmes modules

    Un module est un fichier 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 quiimplmente un systme de fichiers, un pilote de priphrique, ou tout autre fonctionnalitde haut niveau dun systme dexploitation. Le module, contrairement aux couches externesdun systme base de micro-noyau, ne sexcute pas dans un processus spcifique. Il est aucontraire excut en mode noyau au nom du processus courant, comme toute fonction liestatiquement dans le noyau.

    La notion de module reprsente une fonctionnalit du noyau qui offre bon nombre des avan- Intrttages thoriques dun micro-noyau sans pnaliser les performances. Parmi les avantages desmodules, citons :

    Une approche modulaire : puisque chaque module peut tre li et dli en cours dexcutiondu systme, les programmeurs ont d introduire des interfaces logicielles trs claires permet-tant daccder aux structures de donnes gres par les modules. Cela rend le dveloppementde nouveaux modules plus simple.

    Indpendance vis--vis de la plateforme : mme sil doit se baser sur des caractristiques biendfinies du matriel, un module ne dpend pas dune plateforme particulire. Ainsi, un pilotede disque bas sur le standard SCSI fonctionne aussi bien sur un ordinateur compatible IBMque sur un Alpha.

    Utilisation conomique de la mmoire : un module peut tre insr dans le noyau lorsque lesfonctionnalits 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 ralisautomatiquement par le noyau.

    Aucune perte de performances : une fois insr dans le noyau, le code dun module est qui-valent au code li statiquement au noyau. De ce fait, aucun passage de message nest n-cessaire lorsque les fonctions du module sont invoques. Bien entendu, une petite perte deperformance est cause par le chargement et la suppression des modules. Cependant, cetteperte est comparable celle dont sont responsables la cration et la destruction du processusdun systme base de micro-noyau.

  • 14 Premire partie : Principes de conception des systmes dexploitation

    5 Mise en uvre

    5.1 Les appels systme

    Linterface entre le systme dexploitation et les programmes de lutilisateur est constituedun ensemble d instructions tendues fournies par le systme dexploitation, qualifiesdappels systme.

    Les appels systme crent, dtruisent et utilisent divers objets logiciels grs par le systmedexploitation, dont les plus importants sont les processus et les fichiers.

    5.2 Les signaux

    Les processus sexcutant indpendamment les uns des autres, il sagit de pseudo-paralllisme.Il faut cependant quelquefois fournir de linformation un processus. Comment le systmedexploitation procde-t-il ? On a imagin une mthode analogue celle des interruptions logi-cielles pour les micro-processeurs, appele signal.

    Considrons, par exemple, le cas de lenvoi dun message. Pour empcher la perte des mes-sages, on convient que le rcepteur envoie lui-mme un acquittement ds quil reoit une par-tie du message (dune taille dtermine) ; on envoie nouveau cette partie si lacquittementne parvient pas dans un temps dtermin. Pour mettre en place un tel envoi, on utilisera unprocessus : il envoie une partie du message, demande son systme dexploitation de lavertirlorsquun certain temps est coul, il vrifie alors quil a reu lacquittement du message etsinon lenvoie nouveau.

    Lorsque le systme dexploitation envoie un signal un processus, ce signal provoque la sus-pension temporaire du travail en cours, la sauvegarde des registres dans la pile et lexcutiondune procdure particulire de traitement du signal reu. la fin de la procdure de traite-ment du signal, le processus est redmarr dans ltat o il se trouvait juste avant la rceptiondu signal.

    Conclusion

    Nous venons de rappeler les trois fonctions principales dun systme dexploitation, ses carac-tristiques, sa structure externe, sa structure interne, et la faon de le mettre en uvre. Lestrois notions essentielles y sont les processus, les fichiers, et les appels systme. Cest celles-ci quon doit sattacher pour bien comprendre la suite. Nous allons aborder dans le chapitresuivant la faon dont le micro-processeur communique avec lextrieur et ses incidences sur lessystmes dexploitation, avant daborder le systme Linux proprement parler.

  • Chapitre 2

    Principe de traitement des

    entres-sorties

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

    1 Principe du matriel dentre-sortie

    On peut considrer le matriel qui permet les entres-sorties de diverses manires. Les ing-nieurs en lectricit y voient des circuits intgrs, des circuits lectriques, des moteurs et descomposants physiques. Les programmeurs sont plus sensibles linterface que le matriel offre leurs programmes : les commandes quil accepte, les fonctions quil excute, et les erreursquil signale. On sattache, lorsquon soccupe de la conception dun systme dexploitation, la programmation du matriel et non sa conception, construction, ou entretien. Nous exami-nerons donc la programmation du matriel et non son fonctionnement interne. Nanmoins, cesdeux aspects sont souvent intimement lis. Cest pourquoi nous prsentons dans le paragraphesuivant quelques aspects du matriel concernant les entres-sorties qui influent directement sursa programmation.

    1.1 Les priphriques dentre-sortie

    Les priphriques dentre-sortie se rpartissent, du point de vue matriel, en deux grandescatgories : les priphriques bloc et les priphriques caractre :

    Priphrique bloc. Un priphrique bloc mmorise les informations dans des blocs detaille fixe, chaque bloc ayant une adresse propre. La proprit fondamentale de ces p-riphriques est quils permettent de lire ou dcrire un bloc indpendamment de tous lesautres. Les disques sont des priphriques bloc.La frontire entre les priphriques bloc et les autres nest pas toujours bien dfinie. Toutle monde saccorde dire quun disque est un priphrique bloc car on peut toujoursaccder un autre cylindre et atteindre le bloc requis quelle que soit la position initialedu bras. Considrons prsent une bande magntique qui contient des blocs de 1 Ko. Silon souhaite lire le bloc N, le drouleur peut rembobiner la bande et se positionner surce bloc N. Cette opration est analogue une recherche sur un disque mais le temps misest beaucoup plus long. De plus, on ne peut pas toujours rcrire un bloc au milieu dunebande. 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 vuematriel, est le priphrique caractre. Un tel priphrique accepte un flot de carac-tres sans se soucier dune quelconque structure en blocs. On ne peut pas y a