Introduction aux systèmes d'exploitation
Hanifa Boucheneb Juan-Manuel Torres-Moreno
ellipses
1 Introduction11
1.1 Les systèmes d'exploitation11
1.2 Évolution des systèmes d'exploitation13
1.3 Interactions utilisateur/système18
1.4 Appels système18
1.4.1 Les processus19
1.4.2 Les fichiers20
1.5 Structure d'un système d'exploitation20
1.5.1 Structure en couches20
1.5.2 Structure monolithique21
1.5.3 Micro-kernel21
1.5.4 Le modèle client/serveur22
1.5.5 Machines virtuelles23
1.6 Exercices24
2 Processus et threads27
2.1 Processus27
2.1.1 Bloc de Contrôle de Processus27
2.1.2 États d'un processus28
2.1.3 Mode noyau et mode utilisateur d'un processus29
2.1.4 Espace d'adressage d'un processus29
2.1.5 API Posix pour les processus30
2.2 Threads43
2.2.1 Threads utilisateur et noyau44
2.2.2 Services pthread et pth de gestion de threads46
2.3 Exercices53
3 Communication interprocessus55
3.1 Espaces de données communs55
3.2 Les signaux sous GNU/Linux-Unix59
3.2.1 Envoi d'un signal61
3.2.2 Attente d'un signal61
3.2.3 Redéfinition du gestionnaire d'un signal61
3.2.4 Masquage des signaux62
3.2.5 Exemples63
3.3 Échanges de données entre processus67
3.3.1 Tubes de communication67
3.3.2 Tubes anonymes67
3.3.3 Tubes de communication nommés74
3.3.4 Sockets77
3.4 Exercices78
4 Synchronisation des processus et interblocages83
4.1 Synchronisation des processus83
4.1.1 Objets et sections critiques84
4.1.2 Masquage des interruptions85
4.1.3 Exclusion mutuelle par attente active86
4.1.4 Primitives SLEEP et WAKEUP87
4.1.5 Sémaphores87
4.1.6 Mutex de la libraire pthread96
4.2 Interblocages99
4.2.1 Définition d'un interblocage99
4.2.2 Graphe d'allocation des ressources101
4.2.3 Réduction du graphe d'allocation des ressources102
4.2.4 Détection et traitement des interblocages102
4.2.5 L'évitement des interblocages103
4.2.6 La prévention des interblocages103
4.3 Exercices104
5 Ordonnancement des processus107
5.1 Types d'ordonnanceurs107
5.2 Objectifs de l'ordonnanceur d'un système multi-utilisateur107
5.3 Ordonnanceurs non préemptifs108
5.4 Ordonnanceurs préemptifs110
5.4.1 Ordonnancement du plus petit temps d'exécution111
5.4.2 Ordonnancement circulaire111
5.4.3 Ordonnancement à base de priorités113
5.4.4 Files multiples (quantum variable)115
5.5 Ordonnancement à deux niveaux115
5.6 Ordonnancement des threads116
5.7 Cas d'étude : ordonnanceur Posix116
5.8 Exercices119
6 Gestion de la mémoire121
6.1 Espace d'adressage d'un processus122
6.2 Organisation de la mémoire physique127
6.3 Représentation de l'état de la mémoire131
6.3.1 Table de bits (bitmap)131
6.3.2 Liste chaînée132
6.3.3 Table de listes chaînées133
6.4 Allocation et libération d'espace133
6.5 Espace de va-et-vient134
6.6 Mémoire virtuelle135
6.6.1 Pagination pure135
6.6.2 Segmentation sans ou avec pagination145
6.6.3 Segmentation paginée dans le 80x86147
6.7 Mémoire cache149
6.7.1 Cas d'Unix150
6.7.2 Cas historique : MS-DOS150
6.8 Exercices151
7 Systèmes de fichiers et périphériques d'E/S153
7.1 Les fichiers153
7.2 Cycle de vie d'un fichier153
7.3 Accès aux fichiers154
7.3.1 Attributs des fichiers154
7.3.2 i-noeuds154
7.4 Services Posix sur les fichiers155
7.5 Répertoires165
7.6 Services Posix sur les répertoires165
7.7 Périphériques d'entrée/sortie167
7.8 Le répertoire /dev167
7.9 Les contrôleurs168
7.10 Cas du disque169
7.11 Exercices171
Annexes
A Introduction à Unix-GNU/Linux175
A.1 Bref historique175
A.2 Caractéristiques176
A.3 Début de session178
A.4 Commandes utiles GNU/Linux179
A.5 Scripts shell183
A.6 Éditeurs de texte189
A .7 Utilisateurs190
A.8 Fichiers et répertoires190
A.9 Processus192
A.10 Sites Internet195
B Solutions aux exercices197
B.1 Chapitre 1 : Introduction197
B.2 Chapitre 2 : Processus et threads198
B.3 Chapitre 3 : Communication interprocessus199
B.4 Chapitre 4 : Synchronisation des processus et interblocages202
B.5 Chapitre 5 : Ordonnancement des processus202
B.6 Chapitre 6 : Gestion de la mémoire203
B.7 Chapitre 7 : Système de fichiers et périphériques d'E/S205
Bibliographie207