Tutoriel de {développement} de programmation avancée Linux <br /> Partie 1 Noyau Linux Partie 2 Guide de programmation du module du noyau Linux Partie 3 Guide du programmeur Linux Partie 4 Structure du système du concept du noyau Linux Partie 5 Structure du système spécifique au noyau Linux
Table des matières Introduction à Raymond Préface
"Annonce" du groupe d'ingénierie de documentation Linux
Préface du traducteur, première partie Préface du noyau Linux
Chapitre 1 Bases matérielles et bases logicielles 6
1.1 Bases du matériel 6
1.1.1 Processeur 7
1.1.2 Mémoire 8
1.1.3 Autobus 8
1.1.4 Contrôleurs et périphériques 8
1.1.5 Espace d'adressage 9
1.1.6 Horloge 9
1.2 Bases du logiciel 9
1.2.1 Langage informatique 9
1.2.2 Qu'est-ce qu'un système d'exploitation 11
1.2.3 Structure des données du noyau 13
Chapitre 2 Gestion de la mémoire 15
2.1 Modèle abstrait de mémoire virtuelle 15
2.1.1 Demande page 17
2.1.2 Échange 17
2.1.3 Mémoire virtuelle partagée 18
2.1.4 Mode d'adressage physique et mode d'adressage virtuel 18
2.1.5 Contrôle d'accès 18
2.2 Mise en cache 19
2.3 Tableau des pages Linux 20
2.4 Attribution des pages et recyclage 21
2.4.1 Attribution des pages 22
2.4.2 Recyclage des pages 22
2.5 Mappage mémoire 22
2.6 Demande de pagination 23
2.7 Cache de pages Linux 24
2.8 Changement de page et élimination 25
2.8.1 Réduction de la taille du tampon et du cache de pages 25
2.8.2 Remplacement des pages de mémoire partagée du System V 26
2.8.3 Échanger et retirer des pages 27
2.9 Échanger le cache 27
2.10 changement de page 28
Chapitre 3 Processus 29
3.1 Processus Linux 29
3.2 Identifiants 31
3.3 Planification 32
3.4 Documentation 34
3.5 Mémoire virtuelle 35
3.6 Créer un processus 36
3.7 Heure et minuteries 37
3.8 Exécution du programme 38
3.8.1 ELF 39
3.8.2 Fichiers de scripts 40
Chapitre 4 Mécanisme de communication inter-processus 41
4.1 Mécanisme de signalisation 41
4.2 Tuyaux 42
4.3 Prises 44
4.3.1 Mécanisme de communication inter-processus du Système V 44
4.3.2 File d'attente des messages 44
4.3.3 Sémaphore 45
4.3.4 Stockage partagé 47
Chapitre 5 PCI 49
5.1 Espace d'adressage PCI 49
5.2 En-tête de configuration PCI 50
5.3 E/S PCI et espace d'adressage de stockage 51
5.4 Pont PCI-ISA 51
5.5 Pont PCI-PCI 51
5.5.1 Pont PCI-PCI : E/S PCI et adresses de stockage
Fenêtre sur l'espace 51
5.5.2 Pont PCI-PCI : cycle de configuration PCI et PCI
Autobus numéro 52
5.6 Initialisation Linux PCI 53
5.6.1 Structure des données PCI du noyau Linux 53
5.6.2 Pilote de périphérique PCI 53
5.6.3 Fonctions du BIOS PCI 56
5.6.4 Processus de correction PCI 57
Chapitre 6 Gestion des interruptions et pilotes de périphérique 60
6.1 Interruptions et gestion des interruptions 60
6.1.1 Contrôleur d'interruption programmable 61
6.1.2 Initialiser la structure des données du traitement des interruptions 61
6.1.3 Gestion des interruptions 62
6.2 Pilotes de périphérique 63
6.2.1 Tests et interruptions 64
6.2.2 Accès direct à la mémoire (DMA) 65
6.2.3 Mémoire 66
6.2.4 Interface entre le pilote de périphérique et le noyau 66
6.2.5 Disque dur 69
6.2.6 Équipements réseau 74
Chapitre 7 Systèmes de fichiers 77
7.1 Le deuxième système de fichiers étendu EXT2 78
7.1.1 Nœud inode du système EXT2 79
7.1.2 Super bloc dans le système EXT2 80
7.1.3 Descripteurs de groupe pour les systèmes EXT2 80
7.1.4 Répertoire du système EXT2 81
7.1.5 Recherche de fichiers dans le système de fichiers EXT2 81
7.1.6 Modification de fichiers dans le système de fichiers EXT2
Taille 82
7.2 Système de fichiers virtuel 83
7.2.1 Super bloc du système de fichiers VFS 84
7.2.2 Nœud inode du système de fichiers VFS 84
7.2.3 Enregistrement du système de fichiers 85
7.2.4 Assemblage du système de fichiers 85
7.2.5 Recherche de fichiers dans un système de fichiers virtuel 87
7.2.6 Démontage du système de fichiers 87
7.2.7 Cache inode du système de fichiers VFS 87
7.2.8 Mise en cache du répertoire 88
7.3 Mise en cache du tampon 88
7.3.1 Démon du noyau bdflush 90
7.3.2 processus de mise à jour 90
7.4 Système de fichiers /proc 91
7.5 Fichiers d'appareil spéciaux 91
Chapitre 8 Réseau 92
8.1 Présentation du réseau TCP/IP 92
8.2 Hiérarchie du réseau TCP/IP sous Linux 95
8.3 Interface de prise BSD 96
8.4 Couche de socket d'INET 97
8.4.1 Création d'un socket BSD 98
8.4.2 Adresse de liaison pour INET BSD Socket 99
8.4.3 Établissement de la connexion INET BSD Socket 99
8.4.4 Écoute des sockets INET BSD 100
8.4.5 Accepter les demandes de connexion 100
8.5 Couche IP 100
8.5.1 Tampon de prise 100
8.5.2 Réception de messages IP 101
8.5.3 Envoi de paquets IP 102
8.5.4 Partage de données 102
8.6 Protocole de résolution d'adresse 103
8.7 Routage IP 104
Chapitre 9 Mécanismes et modules du noyau 107
9.1 Mécanisme du noyau 107
9.1.1 Contrôle de la moitié inférieure 107
9.1.2 File d'attente des tâches 108
9.1.3 Minuteries 109
9.1.4 File d'attente 110
9.1.5 Verrouillage de rotation 110
9.1.6 Sémaphore 110
9.2 Modules 111
9.2.1 Chargement des modules 112
9.2.2 Désinstallation des modules 113
Chapitre 10 Processeurs 115
10,1X86 115
10.2 BRAS 115
10.3 Processeur Alpha AXP 115
Chapitre 11 Code source du noyau Linux 117
11.1 Comment obtenir le code source du noyau Linux 117
11.2 Disposition du code source du noyau 117
11.3 Par où commencer 118
Chapitre 12 Structures de données Linux 120
Annexe A Sites Web et FTP utiles 138
Annexe B Glossaire 139
Partie 2 Guide de programmation du module du noyau Linux Remerciements Préface Chapitre 1 Hello, World 145
1.1 Makefiles du module noyau 146
1.2 Module noyau multi-fichiers 147
Chapitre 2 Fichiers de périphériques de caractères 149
Chapitre 3 Système de fichiers /proc 158
Chapitre 4 Utilisation de /proc pour l'entrée 162
Chapitre 5 Utilisation des fichiers de périphérique pour l'entrée 170
Chapitre 6 Paramètres de démarrage 182
Chapitre 7 Appels système 185
Chapitre 8 Gestion des blocages 190
Chapitre 9 Remplacement de printk 199
Chapitre 10 Planification des tâches 202
Chapitre 11 Gestionnaires d'interruptions 207
Chapitre 12 Multitraitement symétrique 211
Chapitre 13 Erreurs courantes 212
Annexe A Différences entre 2.0 et 2.2 213
Annexe B Autres ressources 214
Annexe C Donnez votre évaluation 215
Partie 3 Guide du programmeur Linux Chapitre 1 Système d'exploitation Linux 219
Chapitre 2 Noyau Linux 220
Chapitre 3 Paquet de bibliothèque Linux 221
Chapitre 4 Appels système 222
Chapitre 5 « Couteau suisse » : ioctl 223
Chapitre 6 Communication inter-processus Linux 224
6.1 Introduction 224
6.2 Tubes Unix semi-duplex 224
6.2.1 Notions de base 224
6.2.2 Création de pipelines en langage C 225
6.2.3 Méthode simple 229
6.2.4 Opérations atomiques sur les canalisations 233
6.2.5 Plusieurs points à noter concernant les tuyaux semi-duplex
Numéro 233
6.3 Tubes nommés 234
6.3.1 Notions de base 234
6.3.2 Création du FIFO 234
6.3.3 Fonctionnement FIFO 235
6.3.4 Action de blocage sur FIFO 236
6.3.5 Signal SIGPIPE 237
6.4 Système V IPC 237
6.4.1 Notions de base 237
6.4.2 File d'attente des messages 239
6.4.3 Sémaphore 251
6.4.4 semtool : opérations de sémaphore interactives
Programme 260
6.4.5 Mémoire partagée 267
Chapitre 7 Programmation sonore 274
7.1 Programmation des haut-parleurs internes 274
7.2 Programmation de la carte son 274
Chapitre 8 Graphiques des unités de caractères 276
8.1 Fonctions d'E/S dans la libc 277
8.1.1 Sortie formatée 277
8.1.2 Entrée formatée 278
8.2 bibliothèque termcap 278
8.2.1 Préface 278
8.2.2 Obtention de la description du terminal 279
8.2.3 Afficher la description du terminal 279
8.2.4 capacités termcap 280
8.3 Introduction à Ncurses 280
8.4 Initialisation 282
8.5 Windows 283
8.6 Sortie 284
8.6.1 Sortie formatée 285
8.6.2 Insérer des caractères/lignes 286
8.6.3 Supprimer des caractères/lignes 286
8.6.4 Cases et lignes 287
8.6.5 Caractères d'arrière-plan 287
8.7 Entrée 288
8.8 Options 289
8.8.1 Options de sortie 289
8.8.2 Options de saisie 290
8.8.3 Propriétés des bornes 291
8.8.4 Utiliser les options 291
8.9 Mettre à jour le terminal 292
8.10 Propriétés et couleurs de la vidéo 293
8.11 Coordonnées du curseur et de l'écran 294
8.12 Roulement 294
8.13 Clavier 295
8.14 Balises logicielles 295
8.15 Divers 295
8.16 Accès de bas niveau 296
8.17 Vidage d'écran 296
8.18 Simulation Termcap 296
8.19 Fonction Terminfo 296
8.20 Fonctions de débogage 297
8.21 Capacités Terminfo 297
8.21.1 Capacités booléennes 297
8.21.2 Capacités numériques 298
8.21.3 Capacités de chaîne 299
8.22 Présentation de la fonction [N]Malédictions 306
Chapitre 9 Programmation des ports d'E/S 307
9.1 Programmation de la souris 307
9.2 Programmation du modem 308
9.3 Programmation de l'imprimante 308
9.4 Programmation du joystick 308
Chapitre 10 Portage d'applications vers Linux 309
10.1 Introduction 309
10.2 Traitement du signal 309
10.2.1 Sous SVR4, BSD et POSIX.1
Signal 310
10.2.2 Options de signal Linux 310
10.2.3 Signaux sous Linux 310
10.2.4 Signaux pris en charge par Linux 311
10.3 Borne E/S 311
10.4 Informations et contrôle du processus 311
10.4.1 Processus KVM 312
10.4.2 Système de fichiers ptrace et /proc 312
10.4.3 Contrôle de processus sous Linux 312
10.5 Compilation conditionnelle portable 313
10.6 Instructions complémentaires 314
Annexe Appels système alphabétiques 315
Partie 4 Résumé de la structure du système du concept du noyau Linux 323
Préface 324
Chapitre 1 Structure du système 325
1.1 Présentation du système 325
1.2 Objectifs du noyau 325
1.3 Présentation de la structure du noyau 325
1.4 Prise en charge de plusieurs développeurs 327
1.5 Structure des données du système 328
1.5.1 Liste des tâches 328
1.5.2 Mappage mémoire 328
1.5.3 Nœuds d'indexation 328
1.5.4 Connexion de données 329
Chapitre 2 Structure du système des sous-systèmes 330
2.1 Structure du système de planification de processus 330
2.1.1 Objectifs 330
2.1.2Module 330
2.1.3 Expression des données 331
2.1.4 Dépendances, flux de données et flux de contrôle 331
2.2 Structure du système de gestion de mémoire 331
2.2.1 Objectifs 331
2.2.2 Modules 331
2.2.3 Représentation des données 331
2.2.4 Flux de données, flux de contrôle et dépendances 332
2.3 Structure du système de fichiers virtuel 333
2.3.1 Objectifs 333
2.3.2 Modules 333
2.3.3 Représentation des données 333
2.3.4 Flux de données, flux de contrôle et dépendances 334
2.4 Structure du système d'interface réseau 334
2.4.1 Objectifs 334
2.4.2 Modules 334
2.4.3 Représentation des données 335
2.4.4 Flux de données, flux de contrôle et dépendances 335
2.5 Structure du système de communication inter-processus 335
Chapitre 3 Conclusion 336
Annexe A Définition des termes 337
Annexe B Références 338
Partie 5 Résumé de la structure système spécifique du noyau Linux 341
Chapitre 1 Préface 342
1.1 Objectifs 342
1.2 Introduction à Linux 342
1.3 Connaissance de base de la structure du système logiciel 342
1.4 Méthodes et approches 343
1.5 Lecteurs auxquels ce livre est destiné 344
1.6 Disposition des chapitres de cette partie 344
Chapitre 2 Structure du système 345
Chapitre 3 Structure du sous-système 346
3.1 Planificateur de processus 346
3.1.1 Objectifs 346
3.1.2 Interface externe 346
3.1.3 Description du sous-système 346
3.1.4 Structure des données 347
3.1.5 Structure du sous-système 348
3.1.6 Dépendances du sous-système 348
3.2 Gestionnaire de mémoire 348
3.2.1 Objectifs 348
3.2.2 Interface externe 349
3.2.3 Description du sous-système 349
3.2.4 Structure des données 350
3.2.5 Structure du sous-système 350
3.2.6 Dépendances du sous-système 351
3.3 Système de fichiers virtuel 352
3.3.1 Objectifs 352
3.3.2 Interface externe 352
3.3.3 Description du sous-système 353
3.3.4 Pilotes de périphérique 353
3.3.5 Système de fichiers logique 354
3.3.6 Modules 354
3.3.7 Structure des données 355
3.3.8 Structure du sous-système 355
3.3.9 Dépendances du sous-système 355
3.4 Communication inter-processus 355
3.4.1 Objectifs 355
3.4.2 Interface externe 357
3.4.3 Description du sous-système 357
3.4.4 Structure des données 358
3.4.5 Structure du sous-système 359
3.4.6 Dépendances du sous-système 359
3.5Interface réseau 360
3.5.1 Objectifs 360
3.5.2 Interface externe 361
3.5.3 Description du sous-système 361
3.5.4 Structure des données 362
3.5.5 Structure du sous-système 363
3.5.6 Dépendances du sous-système 363
Chapitre 4 Conclusion 365
Annexe A Définition des termes 366
Annexe B Références 368
Sixième partie Annexe Annexe A Licence de copie de projet de document Linux 372
Annexe B Licence publique générale GNU 374
Développer