Académique Documents
Professionnel Documents
Culture Documents
net/publication/332864969
CITATIONS READS
0 4,410
1 author:
Youssef Elmir
École supérieure en Sciences et Technologies de l'Informatique et du Numérique - ESTIN
28 PUBLICATIONS 122 CITATIONS
SEE PROFILE
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by Youssef Elmir on 04 May 2019.
Filière : Informatique
Spécialité : Systèmes Informatiques
Polycopié
Module : Système d’Exploitation 1
Systèmes d'Exploitation 1
Partie 1 (Cours)
2ème Année Licence en Informatique
Elmir Youssef
Cette première partie est organisée sous forme des chapitres du contenu
théorique.
Une deuxième partie sera préparée et organisée sous forme d’un tutoriel
contenant des fiches de travaux dirigés (exercices avec solutions) ainsi que des
fiches de travaux pratiques.
Page | 2
Table des matières
Avant-propos ...................................................................................................................................... 2
Table des matières ........................................................................................................................ 3
I. Introduction aux systèmes d'exploitation ................................................................................... 6
I.1. Définition d'un système d'exploitation ................................................................................ 6
I.1.1. Rappels sur l'architecture des ordinateurs ......................................................................... 6
I.1.2. Définition du système d'exploitation ................................................................................. 9
I.2. Fonctions d'un système d'exploitation ................................................................................ 9
I.2.1. La machine virtuelle .......................................................................................................... 9
I.2.2. La gestion et le partage des ressources ............................................................................. 9
I.2.3. Les outils d'exploitation..................................................................................................... 9
I.3. Organisation en couches d'un système d'exploitation ........................................................ 10
I.4. Virtualisation de la machine.............................................................................................. 10
I.5. Evolution des systèmes informatiques .............................................................................. 11
I.5.1. Un rapide historique ....................................................................................................... 11
I.5.2. Les entrées-sorties .......................................................................................................... 11
I.5.3. Multiprogrammation....................................................................................................... 11
I.5.4. Les compilateurs ............................................................................................................. 12
I.5.5. Mémoire virtuelle ........................................................................................................... 12
I.5.6. Les communications ........................................................................................................ 13
I.6. Exemples de systèmes d'exploitation ................................................................................ 13
II. Mécanismes de base d’exécution des programmes .................................................................. 16
II.1. Structure matérielle d'une machine de Von Neumann ...................................................... 16
II.2. Cheminement d'un programme dans un système ............................................................. 16
II.2.1. Editeur de texte (Text Editor) ......................................................................................... 17
II.2.2. Compilateur (Compiler) .................................................................................................. 17
II.2.3. Editeur de liens (Linker) .................................................................................................. 18
II.2.4. Le chargeur (Loader) ...................................................................................................... 19
II.3. Concepts de processus et multiprogrammation ................................................................ 19
II.3.1. Définition ....................................................................................................................... 19
II.3.2. Contexte d’un processus ................................................................................................ 19
II.3.3. Image mémoire d’un processus ...................................................................................... 20
II.3.4. Descripteur de Processus (PCB) ...................................................................................... 20
II.3.5. Etat d’un processus ........................................................................................................ 22
Page | 3
II.3.6. Multiprogrammation...................................................................................................... 22
II.3.7. Mécanisme de commutation de contexte ...................................................................... 22
II.4. Les systèmes d'interruption ............................................................................................. 23
II.4.1. Définition et organigramme général d'une interruption. ................................................ 23
II.4.2. Mécanismes de gestion des interruptions ...................................................................... 24
II.4.3. Systèmes d'interruption sur les PCs. ............................................................................... 25
III. Gestion des Entrées / Sorties physiques .................................................................................. 26
III.1. Définition d'une E/S ........................................................................................................ 26
III.2. Types d'E/S ..................................................................................................................... 26
III.3. Organisation des transferts ............................................................................................. 26
III.3.1. Instructions d'E/S .......................................................................................................... 26
III.3.2. Découpage fonctionnel matériel/logiciel d'une E/S........................................................ 27
III.4. Modes de pilotage d'une E/S : ......................................................................................... 27
III.4.1. Pilotage synchrone ........................................................................................................ 27
III.4.2. Pilotage asynchrone ...................................................................................................... 28
III.5. Gestion d’E/S simultanées .............................................................................................. 28
IV. Gestion du processeur central ................................................................................................ 30
IV.1. Définition ....................................................................................................................... 30
IV.2. Objectifs de scheduling. .................................................................................................. 30
IV.3. Critères de scheduling. ................................................................................................... 30
IV.4. Niveaux de scheduling .................................................................................................... 30
IV.5. Politiques de scheduling. ................................................................................................ 31
IV.5.1. First in first out FIFO (first come first served FCFS) ........................................................ 31
IV.5.2. Short job first SJF .......................................................................................................... 31
IV.5.3. Avec priorité ................................................................................................................. 32
IV.5.4. Tourniquet .................................................................................................................... 32
IV.6. Contrôle de processus .................................................................................................... 33
IV.6.1. Etats d'un processus ..................................................................................................... 33
IV.6.2. Bloc de contrôle de processus PCB ................................................................................ 33
IV.6.3. Création de processus ................................................................................................... 34
IV.6.4. Destruction d'un processus ........................................................................................... 35
V. Gestion de la mémoire centrale............................................................................................... 36
V.1. Objectifs d'un gestionnaire de la mémoire. ...................................................................... 36
V.1.1. Rôle ............................................................................................................................... 36
Page | 4
V.1.2. Exigence ........................................................................................................................ 37
V.2. Fonctions. ...................................................................................................................... 37
V.3. Modes de partage de la mémoire. ................................................................................... 38
V.3.1. Système mono-programmé............................................................................................ 38
V.3.2. Système multiprogrammé .............................................................................................. 38
V.4. Protection de la mémoire. .............................................................................................. 40
V.4.1. Système mono-programmé............................................................................................ 40
V.4.2. Système multiprogrammé .............................................................................................. 41
V.5. Partage de code. ............................................................................................................. 42
V.5.1. Code partagé ................................................................................................................. 42
VI. Gestion des périphériques ...................................................................................................... 43
VI.1. Les périphériques ........................................................................................................... 43
VI.1.1. Les périphériques graphiques........................................................................................ 43
VI.1.2. Les disques de stockage ................................................................................................ 43
VI.1.3. Ordonnancement du disque dur ................................................................................... 44
VII. Gestion des fichiers ............................................................................................................... 45
VII.1. Définition ...................................................................................................................... 45
VII.2. Le support physique ...................................................................................................... 45
VII.2.1. Formatage physique .................................................................................................... 45
VII.2.2. La taille du disque ........................................................................................................ 46
VII.2.3. Adresses sur le disque .................................................................................................. 46
VII.2.4. Les temps d'accès ........................................................................................................ 48
VII.2.5. Formatage logique ....................................................................................................... 49
VII.3. Organisation de l'espace disque ..................................................................................... 49
VII.4. Gestion des blocs libres ................................................................................................. 49
VIII. Conclusion ........................................................................................................................... 51
IX. Bibliographie ......................................................................................................................... 52
Page | 5
I. Introduction aux systèmes d'exploitation
Les trois éléments essentiels d'un ordinateur sont, du moins pour ce qui nous concerne, le
processeur, la mémoire et le dispositif de gestion des entrées-sorties. Ils communiquent entre
eux par l'intermédiaire du bus. Schématiquement un ordinateur peut être symbolisé comme
suit :
Le bus est le circuit d'échange des informations. Son débit ou bande passante est
un paramètre important pour définir la rapidité d'une machine. Souvent, dans les micro-
ordinateurs, elle est trop faible par rapport à la rapidité du processeur. Celui-ci attend
fréquemment les informations en provenance de la mémoire ou des contrôleurs d'entrées-
sorties. Dans le schéma ci-dessus on ne les a pas distingués mais un écran et un disque ne
sont pas branchés sur le même contrôleur. Par exemple on trouve les mêmes processeurs
PowerPC dans les Macintoshs et certaines machines SP (Scalable POWERparallel) d'IBM
(International Business Machines Corporation). La rapidité du bus et sa bande passante ne
sont pourtant pas les mêmes, ce qui est une explique des différences de performances comme
de prix. Les ordinateurs les plus performants possèdent un bus qui permet de transférer en
parallèle 256 bits ou plus, les moins performants 32 bits seulement. Il faut donc plus de
cycles pour transférer une information de même longueur (c'est à dire contenant le même
nombre de bits) de la mémoire vers le processeur et la rapidité effective de la machine n'a
rien à voir avec celle du processeur. Un processeur moderne peut contenir plusieurs unités de
calcul, additionneur, multiplicateur entier ou flottant. Certains peuvent effectuer des
opérations plus complexes comme plusieurs additions et multiplications flottantes
simultanément. Le processeur peut donc réaliser plusieurs instructions élémentaires
parallèlement. Les plus puissants possèdent une structure, appelée pipe-line qui permet
d'enchaîner, dans certains cas, une opération à chaque cycle d'horloge alors que la précédente
n'est pas terminée. Ceci accélère considérablement le débit de calcul. Cette complexité
explique que la cadence de l'horloge ne permette pas de comparer des processeurs
d'architecture différente. Deux directions se font jour pour augmenter les performances:
compliquer l'architecture interne du processeur mais conserver un cycle relativement lent
(IBM Power par exemple) ou diminuer le temps de cycle (Intel par exemple) mais avec une
architecture plus simple. Il n'existe pas de meilleur choix: suivant les programmes l'une ou
l'autre architecture se révèle la meilleure. Les unités de commande travaillent selon les
processeurs sur des mots de 32 bits (Intel Pentium IV) ou, de plus en plus aujourd'hui, sur 64
Page | 6
bits (AMD (Advanced Micro Devices) Athlon, IBM Power...). Le jeu d'instructions varie
fortement d'une réalisation à l'autre : instructions courtes RISC (reduced instruction set
computer) (Power IBM, Sparc Sun, Intel Itanium par exemple) ou longues (Intel Pentium,
AMD Athlon). Le code d'un langage évolué correspond donc à un nombre plus ou moins
grand d'instructions machine et la comparaison des performances est beaucoup plus
compliquée que la simple mesure des cycles d'horloge.
Les processeurs modernes intègrent dans leur puce une mémoire cache accessible très
rapidement pour accélérer les opérations. On ajoute également un deuxième niveau de
mémoire, placée juste à côté du processeur sur la carte mère, connue sous le nom de cache
niveau 2 ou L2. Les communications avec le processeur sont plus rapides que celles avec la
mémoire car elles ne passent pas par le bus dont la bande passante est bien inférieure au débit
que peut accepter le processeur. Lorsqu'une instruction ou une donnée est contenue dans un
cache son fonctionnement est accéléré car il n'attend plus un transfert. Le processeur
demande simultanément l'information voulue à la mémoire et aux caches. Lorsqu'elle est
disponible dans celles-ci la réponse arrive très rapidement et la requête est abandonnée. On a
donc intérêt à posséder des caches de grande dimension car, statistiquement, la chance d'y
retrouver une information est plus grande. Idéalement toute la mémoire devrait être un
immense cache accessible très rapidement mais cela exploserait le prix des machines. C'est le
cas des superordinateurs comme les Cray qui ne possèdent pas de caches. La mémoire est
construite avec les dispositifs les plus rapides, identiques à ceux utilisés dans les caches des
machines ordinaires. Les performances sont optimales mais le coût est absolument prohibitif!
La mémoire est organisée, dans tous les ordinateurs, en groupes de 8 bits appelés octets ou
bytes en anglais. Chaque octet possède une adresse numérique. Cependant le quantum
manipulé par le processeur est le mot qui regroupe de quatre à huit octets selon le processeur.
Le mot est de deux octets dans les micro-ordinateurs anciens. Les ordinateurs personnels et
les stations de travail utilisent des mots de quatre ou huit octets. Les superordinateurs Cray
possèdent des mots de huit octets. L'accès à la mémoire se fait de façon matricielle, selon des
lignes et des colonnes. Comme une ligne ou une colonne qui vient d'être lue ou écrite est
inhibée pendant un certain temps appelé temps de latence, la mémoire est divisée en bancs.
Deux octets dont les adresses sont consécutives sont placés dans des bancs différents ainsi
plusieurs bancs peuvent être accédé simultanément, ce qui améliore les échanges avec le
processeur. Il ne faut pas oublier que le temps d'accès à la mémoire est bien plus long que le
temps de cycle du processeur, de l'ordre de quatre fois au minimum. Multiplier les bancs
permet d'échanger plus rapidement plusieurs informations entre le processeur et la mémoire.
Un PC comporte habituellement quatre bancs, une grosse machine seize ou plus. Chaque
octet est accompagné d'un certain nombre de bits qui servent au contrôle d'erreurs et à leur
correction lors des échanges. Ce nombre peut atteindre 8 sur les gros ordinateurs, il est limité
à un seul sur les micro-ordinateurs. La fiabilité, les capacités de fonctionner en
environnement dégradé, sont liées à ce nombre. On comprend donc pourquoi,
indépendamment de sa rapidité, le prix de la mémoire varie avec les modèles de machines.
Il faut distinguer le rôle des différentes mémoires qui existent dans la machine. Les disques
servent à stocker l'information de façon permanente. Leur contenu se conserve même lorsque
l'ordinateur n'est plus sous tension. Cependant comme les transferts entre ces périphériques et
le processeur sont lents, celui-ci ne travaille jamais directement avec ces supports. Le
processeur échange ses informations avec la mémoire et la mémoire dialogue avec les
disques. Pour exécuter un programme il faut donc d'abord le déplacer du support permanent
(le disque) vers la mémoire. Puis, au cours de l'exécution les données lues dans les fichiers
Page | 7
sont déplacées par morceaux des disques vers la mémoire pour être employées par le
processeur. Il en est de même, en sens inverse, pour les écritures. Il existe un mécanisme
caché en deux étapes qui fait obligatoirement transiter les échanges par la mémoire. Cette
hiérarchie se retrouve également dans les échanges entre la mémoire et le processeur avec les
caches. Le processeur recherche ses informations d'abord dans ceux-ci. Ceci met en œuvre
des algorithmes complexes car il faut savoir gérer les cas où les données recherchées ne s'y
trouvent pas. Enfin il faut également considérer le rôle des registres, véritable mémoire
interne du processeur. L'utilisateur n'y accède pas directement mais un compilateur bien écrit
sait en tenir compte.
Il convient de ne pas confondre la taille de la mémoire qui définit les possibilités logicielles
de la machine et la taille des disques qui indique sa capacité à stocker des informations
permanentes. Le couple longueur du mot, longueur du registre d'adresse (ou compteur
ordinal) est la première notion de l'architecture physique visible de l'extérieur. En particulier
il permet de définir les tailles maximum des programmes et des tableaux : tous les adressages
nécessaires pour accéder aux informations que ce soit dans la mémoire ou sur disque se font
au moyen de nombres entiers. Une architecture à mot de 32 bits permet donc d'adresser un
peu plus de quatre Giga-octets et il devient impossible d'adresser directement un système de
fichiers ou une mémoire plus grande. Il faut se déplacer par indirection au moyen
d'informations relais jamais séparées par une distance supérieure à cette valeur fatidique, ce
qui diminue fortement l'efficacité de l'ordinateur. On comprend donc pourquoi aujourd'hui on
développe des processeurs à mot de 64 bits : l'ordre de grandeur du plus grand entier est 1,8
1019, ce qui laisse une marge certaine pour les disques et les mémoires que l'on sait fabriquer
aujourd'hui !
Le troisième paramètre important pour l'utilisateur est la largeur du bus qui définit combien
de bits peuvent être transférés en parallèle. La rapidité de travail effectif d'une machine y est
très sensible. Les contrôleurs sont construits pour assurer les communications avec les
périphériques. Ils sont spécialisés dans leur usage et possèdent leur propre mémoire. Un
contrôleur d'écran stocke ainsi une partie des informations qu'il présente à l'utilisateur. Un ou
des processeurs auxiliaires présents sur la carte assurent le fonctionnement de base. Le
problème fondamental est de réussir à faire fonctionner cet ensemble, à assurer les échanges
d'information entre les différents éléments qui constituent la machine et surtout, du point de
vue de l'utilisateur, à dialoguer avec lui. C'est le rôle du système d'exploitation. A titre
d'exemple, voici quelques performances mesurées entre deux machines qui diffèrent
essentiellement par leur processeur. La première est équipée d'un Pentium MMX, la seconde
d'un Pentium II, tous les deux à 233 MHz. Les disques sont les mêmes ainsi que la mémoire.
Le programme de mesure est Wintune 95 et le système d'exploitation Windows 95. Certes ces
données sont anciennes mais elles permettent de comprendre l'influence de l'architecture et le
peu d'intérêt qu'il faut porter à la vitesse d'horloge, sauf lorsqu'il s'agit de processeurs de la
même famille qui ne différent que par leur cadence d'horloge. Le résultat est intéressant
quoiqu'il faille toujours considérer des tests avec la plus extrême prudence.
Page | 8
Que signifie ce test ? Comme l'architecture interne des deux processeurs n'est pas la même
ces différences peuvent provenir de la taille des caches (plus grands pour le PII) comme de
l'efficacité des instructions. On a cependant le sentiment que le PII ne prend toute son
efficacité que lorsque la taille des blocs échangés est suffisamment grande. Et ceci dépend
beaucoup des codes des programmes mais aussi de celui du système d'exploitation. Les gains
peuvent donc être fort décevants lorsqu'on change de processeur sans se préoccuper des
programmes.
Les principales fonctions du système d'exploitation peuvent être classées en trois rubriques:
Page | 9
éditeurs, outils divers...
Là encore la distinction n'est pas nette entre certains outils et le système d'exploitation. Les
communications peuvent également être considérées comme partie du système.
Une des premiers systèmes d'exploitation à gérer le concept de machine virtuelle (l'adaptation
du temps partagé) a été l'OS/360 d'IBM, proposé vers 1968 sous le nom de CP/CMS (Control
Program/Cambridge Monitor System), puis sous le nom de VM/370 (Virtual Machine
Facility) en 1979.
Chaque machine virtuelle peut exécuter son propre système d'exploitation. Lorsqu'une
machine virtuelle exécute en mode interactif un appel système, l'appel est analysé par le
Page | 10
moniteur temps partagé de cette machine, CMS. Toute instruction d'entrées/sorties (E/S),
toute instruction d'accès mémoire est convertie par VM/370 qui l’exécute dans sa simulation
du matériel. La séparation complète de la multiprogrammation et de la machine étendue rend
les éléments du système d'exploitation plus simples et plus souples. VM/370 a gagné de la
simplicité en déplaçant une grande partie du code d'un système d'exploitation dans le
moniteur CMS.
Vers 1950 est apparu le moniteur d'enchaînement. Il permettait l'exécution d'une série de
travaux en séquence, c'est à dire l'un après l'autre. C'est l'ancêtre du traitement par lot. Il
possédait déjà des fonctions de protection: maximum de temps par travail, supervision des
périphériques, protection de la zone mémoire utilisée, gestion et abandon des travaux erronés.
Ces avancées étaient fondamentales car elles introduisaient un environnement autour du
programme à exécuter.
L'informatique moderne nait dans les années 1960. On peut résumer rapidement ses avancées
autour de l'invention des notions suivantes :
Les échanges entre la mémoire et le processeur sont très rapides. Le débit des périphériques
est beaucoup plus lent, surtout lorsqu'il met en œuvre des éléments mécaniques. D'où l'idée
de tampons (ou buffers), zones spéciales de la mémoire réservées au stockage de
l'information en attente de transfert. Dans les machines les plus performantes les contrôleurs
d'E/S sont de véritables ordinateurs affectés uniquement à cette tâche.
I.5.3. Multiprogrammation
La multiprogrammation ne doit pas être confondue avec le temps partagé qui apparaitra plus
tard. L'idée part du constat que le processeur est mal employé à chaque fois qu'un programme
est interrompu par l'attente d'une communication avec un périphérique : plutôt que de le
Page | 11
mettre en sommeil pourquoi ne pas l'affecter à une autre tâche ? Un ensemble de programmes
est donc chargé simultanément en mémoire, leur exécution est chainée, c'est à dire que le
processeur exécute successivement des séquences d'instructions pour chacun. Le passage de
l'un à l'autre est optimisé de façon à occuper au mieux la partie la plus précieuse de la
machine: le processeur. L'unité centrale est affectée à une nouvelle tâche chaque fois qu'un
programme est en attente d'échanges, c'est à dire effectue des entrées-sorties. La commutation
des tâches doit être très rapide. Il faut aussi que le débit des échanges entre la mémoire et le
processeur soit suffisant pour que ceci ne soit pas le facteur de blocage. La bande passante du
bus doit donc être grande. Un système multitâche est complexe car il faut sauvegarder le
contexte de travail de chaque programme lorsque son exécution est interrompue. De plus il
n'est pas aisé de se prémunir contre des blocages possibles lorsque toutes les tâches se
mettent en attente d'une ressource déjà réservée.
L'emploi des premiers ordinateurs était une affaire d'hyper-spécialistes puisqu'on doit coder
directement en langage machine voire en binaire ! Dès le milieu des années 50 des
théoriciens se demandent s'il est possible d'imaginer un langage proche de l'expression
humaine et un outil capable de le traduire en code binaire tout en optimisant le code réalisé.
Un compilateur traduit un programme écrit dans un langage aussi naturel que possible en un
code binaire compréhensible par l'ordinateur. Il peut éventuellement optimiser son
déroulement. Par exemple, tous les compilateurs savent détecter dans les boucles les
instructions qui ne dépendent pas de celles-ci et sont donc répétées inutilement. Ils les
déplacent automatiquement. De même ils savent utiliser les jeux de registres du processeur
pour minimiser les transferts de et vers la mémoire. Le premier compilateur est apparu en
1961. Il s'agit de Fortran, langage orienté vers le calcul scientifique (FORmulae
TRANslation), développé à l'époque dans l'unique but de vérifier s'il était possible d'écrire un
tel outil. Il ne faut pas confondre un compilateur avec un interpréteur - Basic fut le premier -
qui lit puis décode chaque instruction successivement au moment de son exécution. Depuis
bien d'autres langages ont été inventé. Mentionnons le langage C, inventé pour développer
plus rapidement qu'en langage assembleur un nouveau système d'exploitation : il s'agissait
d'Unix.
Page | 12
I.5.6. Les communications
Les années 80 ont été marquées par le développement des échanges d'informations entre
ordinateurs. Les systèmes se sophistiquent jusqu'à faire éclater l'organisation en étoile qui
prévalait jusqu'alors: tous les terminaux, tous les périphériques étaient alors reliés à une
machine unique qui centralisait toutes les fonctions. Les réseaux, en conjonction avec
l'effondrement du prix des mémoires et des processeurs et l'augmentation vertigineuse de leur
rapidité, vont amener à la notion d'informatique distribuée. Les machines sont déplacées près
des hommes. Il apparaît la notion de serveur, machine virtuelle répartie éventuellement sur
plusieurs machines physiques, répondant aux requêtes d'utilisateurs distribués
géographiquement sur un grand territoire: serveur de fichiers, serveur de calcul, de
messagerie... Le réseau devient le bus d'une espèce de machine virtuelle à l'échelle d'un
campus ou d'une entreprise. La demande croissante de puissance fait apparaître les machines
multiprocesseurs et les ordinateurs massivement parallèles. Dans tous les cas ceci revient à
faire travailler ensemble plusieurs processeurs (de quelques-uns à quelques milliers) pour
exécuter une ou plusieurs tâches. Le gros problème, loin d'être résolu aujourd'hui, est de faire
coopérer cet ensemble. Les machines multiprocesseurs sont limitées par les conflits dans
l'accès à une mémoire commune. On montre qu'il est inutile de dépasser quelques dizaines de
processeurs dans le meilleur des cas car le gain devient de plus en plus faible et se révèle trop
onéreux. Les ordinateurs parallèles sont des machines où chaque processeur dispose de sa
propre mémoire. Le point critique est l'échange des informations entre ces processeurs qui
doivent coopérer. Il n'existe pas de compilateur capable de générer automatiquement le code
parallèle et leur programmation demande de grands efforts. Ils sont encore largement
expérimentaux même si tous les grands constructeurs commencent à en produire.
Comme son nom l'indique l'ordinateur individuel n'est employé que par une seule personne à
la fois. Celle-ci dispose de moyens de communication: écran, clavier, souris, une imprimante
et éventuellement d'une tablette graphique. Des mémoires secondaires appelées aussi unités
de stockage: disque, disquette ou bande magnétique permettent de conserver l'information de
façon permanente. La taille de la mémoire principale est un paramètre important pour définir
quels programmes peuvent être employés. Le système d'exploitation gère cet ensemble de
façon plus ou moins transparente pour l'utilisateur. Il permet de donner des ordres à la
machine et d'en recevoir en retour des informations qui sont le résultat du traitement
demandé. Les ressources de l'ordinateur ne sont employées que par l'unique usager de la
machine. Quelques fonctions peuvent s'exécuter simultanément. Par exemple il est possible
d'afficher une horloge tout en utilisant un traitement de textes ou graver un CD (Compact
disc) mais la simultanéité n'est pas le point de force de cette machine. Ce parallélisme qui
n'est qu'apparent s'améliore dans les dernières versions des systèmes d'exploitation et parce
que la puissance des processeurs ne cesse de croître. Les mécanismes de sécurité nécessaires
pour préserver la confidentialité des informations sont peu ou mal employés lorsqu'ils
existent.
Un ordinateur qui contrôle un procédé industriel doit veiller sur un ensemble de paramètres
physiques et engager des actions en fonction de leurs valeurs. Les délais de réponse peuvent
être très courts et doivent être toujours garantis. Ceci est particulièrement vrai en ce qui
concerne la sécurité: au cas où certains paramètres sortiraient de leur plage de valeurs
normales il est indispensable de réagir de façon appropriée en un temps défini. Un système
Page | 13
d'exploitation orienté temps réel doit donc pouvoir garantir une réponse avec une contrainte
dans le temps.
Les informations doivent être acquises sur les différents dispositifs d'entrés
périodiquement. Cette période doit être respectée précisément ainsi qu'il a été
défini dans le cahier des charges. Le traitement de ces informations est effectué en un
temps maximum T. Ce temps peut être défini soit port d'entrée par port d'entrée soit
pour l'ensemble des mesures à acquérir mais il est évident que le système ne pourra
fonctionner correctement que si, dans tous les cas, T est plus petit, voire beaucoup
plus petit que .
Les fonctions de sécurité sont prioritaires, certaines le sont plus que d'autres. Il faut
donc disposer des moyens matériels et logiciels pour gérer ces priorités et pouvoir, le
cas échéant, interrompre toute activité moins prioritaire.
Il doit également présenter la souplesse nécessaire pour que l'on puisse aisément
piloter des dispositifs au travers de cartes électroniques standards du marché.
De tels systèmes sont appelés systèmes temps réel. Certains systèmes d'exploitation peuvent
s'en rapprocher, notamment parce que la puissance des processeurs aujourd'hui permet à un
système de répondre relativement rapidement, mais sans disposer de toutes les fonctions qui
pourraient permettre de garantir les délais de traitement. Enfin n'oublions pas que les
commandes de processus industriel doivent être particulièrement fiables, en relation avec le
niveau de sécurité exigé, ce qui peut nécessiter des dispositifs électroniques et logiques
supplémentaires. Dans certains cas plusieurs ordinateurs effectuent le même travail,
comparent en permanence leurs résultats et prennent une décision ... à la majorité!
Le cas des systèmes embarqués est particulier : outre les contraintes des systèmes temps réel
il est impossible pour des raisons diverses; (environnement, volume, poids..) d'employer les
composants que l'on retrouve dans la plupart des ordinateurs. Il faut alors employer des
systèmes d'exploitation spécifiques, le plus souvent allégés et ne comportant que les fonctions
utiles. Ne parlons pas des systèmes militaires et spatiaux !
L'invention du temps partagé est le fruit d'une simple constatation: l'homme est beaucoup
plus lent que la machine et prend un temps non négligeable pour élaborer une requête ou
analyser les réponses de l'ordinateur. Dans toute phase d'interaction la machine attend. La
fonction d'un système temps partagé est donc de donner à tous ces acteurs humains
Page | 14
l'impression qu'ils sont chacun seul en face de la machine. Chacun doit avoir le sentiment que
l'ordinateur est à sa disposition; la qualité du service sera appréciée en termes de temps de
réponse. Il faut donc ajouter les services adéquats pour tenir compte du fait que l'ordinateur
est utilisé simultanément par un grand nombre de personnes. On combine donc dans un tel
système les aspects évoqués pour les ordinateurs individuels et transactionnels. Il faut ajouter
un programme gestionnaire qui partage le temps disponible entre les différents utilisateurs.
Par exemple, si on estime que 90% du temps passé devant un terminal est un temps de
réflexion indispensable entre requêtes successives, 10% des utilisateurs seulement sont
réellement actifs à un moment donné. Si le programme gestionnaire alloue des tranches de
temps de 50 ms à chacun, le temps d'attente moyen est donc de 0,5s environ pour ces dix
utilisateurs (ce ne sont jamais les mêmes). La machine peut être utilisée en fait par cent
personnes.
De tels systèmes ne sont pas adaptés aux travaux qui nécessitent peu de dialogues. On
remplace alors le terminal par un ensemble de fichiers utilisés soit en lecture soit en écriture.
Ces programmes sont exécutés en traitement par lot ou batch. Leur déroulement est
volontairement ralenti par rapport aux tâches qui dialoguent avec les hommes. On diminue
donc la priorité - déjà évoquée pour les systèmes temps réel - de ces calculs. Les systèmes en
temps partagé sont souvent employés pour le temps réel et le transactionnel, en leur ajoutant
le cas échéant les quelques fonctionnalités qui leur manquent.
Aujourd'hui deux systèmes prédominent : Windows, dans toutes ses variations, sur les postes
personnels, Unix et de plus en plus sa version Linux, sur les serveurs et les gros ordinateurs
(Windows est réservé aux processeurs Intel). La puissance des processeurs permet
d'employer l'un ou l'autre système pour couvrir la plupart des gammes d'application, au
moyen de modules spécifiques éventuellement. Windows ne dispose pas des éléments
nécessaires au temps partagé mais parvient à servir plusieurs utilisateurs simultanés, s'ils sont
physiquement connectés à un autre poste relié par le réseau, en employant une technologie
client-serveur.
Page | 15
II. Mécanismes de base d’exécution des programmes
II.1. Structure matérielle d'une machine de Von Neumann
Cette architecture est appelée ainsi en référence au mathématicien John Von Neumann qui a
élaboré la première description d’un ordinateur dont le programme est stocké dans sa
mémoire. L’architecture dite architecture de Von Neumann est un modèle pour un ordinateur
qui utilise une structure de stockage unique pour conserver à la fois les instructions et les
données demandées ou produites par le calcul. De telles machines sont aussi connues sous le
nom d’ordinateur à programme enregistré. La séparation entre le stockage et le processeur est
implicite dans ce modèle.
1. L’unité arithmétique et logique (UAL) ou unité de traitement : son rôle est d’effectuer
les opérations de base ;
2. L’unité de contrôle, chargée du « séquençage » des opérations ;
3. la mémoire qui contient à la fois les données et le programme qui indiquera à l’unité
de contrôle quels sont les calculs à faire sur ces données. La mémoire se divise entre
mémoire volatile (programmes et données en cours de fonctionnement) et mémoire
permanente (programmes et données de base de la machine) ;
4. les dispositifs d’entrée-sortie, qui permettent de communiquer avec le monde
extérieur.
Le passage d’un programme de la forme externe à la forme interne se fait en plusieurs étapes.
Un programme est généralement écrit dans un langage évolué (Pascal, C, VB, Java, etc.).
Pour faire exécuter un programme par une machine, on passe généralement par les étapes
suivantes:
Page | 16
Figure 4. Cheminement d’un programme dans un système
C’est un logiciel interactif qui permet de saisir du texte à partir d’un clavier, et de
l’enregistrer dans un fichier.
Un compilateur est un programme qui traduit des programmes écrits dans des langages
évolués (Pascal, C, Ada, Java, …etc.) en programmes binaires ou en langage machine,
appelés aussi objets.
Page | 17
II.2.3. Editeur de liens (Linker)
1. des instructions,
2. des données localement définies,
3. des données externes, et
4. des procédures ou sous-programmes externes (bibliothèques de fonctions).
Avant d’exécuter le programme objet, il est nécessaire de rassembler les parties non locales et
les procédures externes avec le programme.
L’éditeur de liens est donc un logiciel permettant de combiner plusieurs programmes objets
en un seul programme.
Pour pouvoir développer de gros programmes, on structure ceux-ci en modules que l’on
traduit indépendamment. Ainsi, un programme peut être constitué de plusieurs fichiers dont
l’un est le programme principal. Ce dernier fait appel aux sous-programmes, ce qui donne
lieu à des références extérieures.
Lors de la compilation, le compilateur ne peut pas remplacer les références extérieures par les
adresses correspondantes puisqu’il ne les connaît pas. Le programme objet généré contient
Page | 18
donc le code machine des instructions et la liste des références extérieures, ainsi que la liste
des adresses potentiellement référençables depuis l’extérieur du module. Après la
compilation, chaque sous-programme commence à l’adresse logique 0.
Après l’édition de liens, le programme exécutable doit se trouver en mémoire centrale pour
être exécuté. Le chargeur est un programme qui installe ou charge un exécutable en mémoire
centrale à partir d’une adresse déterminée par le système d’exploitation.
Le contexte d’un processus est l’ensemble des données qui permettent de reprendre
l’exécution d’un processus qui a été interrompu. Il est formé des contenus de :
Page | 19
II.3.3. Image mémoire d’un processus
L’espace mémoire alloué à un processus, dit image mémoire (Memory Map) du processus,
est divisé en un ensemble de parties :
4. Tas (Heap) : une zone à partir de laquelle l’espace peut être alloué dynamiquement en
cours d’exécution (Runtime), en utilisant par exemple les fonctions new et malloc.
Chaque processus est représenté dans le système d’exploitation par un bloc de contrôle de
processus (Process Control Bloc, PCB). Le contenu du PCB varie d’un système à un autre
suivant sa complexité. Il peut contenir :
1. Identité du processus : chaque processus possède deux noms pour son identification :
− Un nom externe sous forme de chaîne de caractères fourni par l’usager (c’est le
nom du fichier exécutable).
− Un nom interne sous forme d’un entier fourni par le système. Toute référence au
processus à l’intérieur du système se fait par le nom interne pour des raisons de
facilité de manipulation.
2. Etat du processus : l’état peut être nouveau, prêt, en exécution, en attente, arrêté,
…etc.
3. Contexte du processus : compteur ordinal, mot d’état, registres ;
4. Informations sur le scheduling de l’unité centrale : ces informations comprennent la
priorité du processus, des pointeurs sur les files d’attente de scheduling, …etc.
5. Informations sur la gestion mémoire : ces informations peuvent inclure les valeurs des
registres base et limite, les tables de pages ou les tables de segments.
6. Information sur l’état des E/S : l’information englobe la liste de périphériques d’E/S
alloués à ce processus, une liste de fichiers ouverts, etc.
7. Informations de Comptabilisation : ces informations concernent l’utilisation des
ressources par le processus pour facturation du travail effectué par la machine (chaque
chose a un coût).
Page | 20
Figure 7. Bloc de contrôle de processus (PCB).
Le système d’exploitation maintient dans une table appelée «table des processus» les
informations sur tous les processus créés (une entrée par processus : Bloc de Contrôle de
Processus PCB). Cette table permet au SE de localiser et gérer tous les processus.
Page | 21
II.3.5. Etat d’un processus
Un processus prend un certain nombre d’états durant son exécution, déterminant sa situation
dans le système vis-à-vis de ses ressources. Les trois principaux états d’un processus sont :
II.3.6. Multiprogrammation
Le passage dans l’exécution d’un processus à un autre nécessite une opération de sauvegarde
du contexte du processus arrêté, et le chargement de celui du nouveau processus. Ceci
s’appelle la commutation du contexte (Context Switch).
Page | 22
Figure 10. Mécanisme de commutation de contexte.
− La première phase consiste à commuter le petit contexte (CO, PSW) par une
instruction indivisible.
− La deuxième phase consiste quant à elle à commuter le grand contexte par celui du
nouveau processus.
II.4.1.1. Définition
Une interruption est une réponse à un événement qui interrompt l’exécution du programme
en cours à un point observable (interruptible) du processeur central. Physiquement,
l’interruption se traduit par un signal envoyé au processeur. Elle permet de forcer le
Page | 23
processeur à suspendre l’exécution du programme en cours, et à déclencher l’exécution d’un
programme prédéfini, spécifique à l’événement, appelé routine d’interruption (Rit).
Page | 24
II.4.3. Systèmes d'interruption sur les PCs.
Les interruptions ne jouent pas seulement un rôle important dans le domaine logiciel, mais
aussi pour l'exploitation de l'électronique.
On distingue donc :
Page | 25
III. Gestion des Entrées / Sorties physiques
L'une des principales fonctions d'un système d'exploitation consiste à contrôler tous les
périphériques d'entrée/sortie (E/S) de l'ordinateur. Il doit émettre des commandes vers les
périphériques, intercepter les interruptions et gérer les erreurs. Il fournit également une
interface simple entre les périphériques et le reste du système. Dans la mesure du possible,
l'interface doit être la même pour tous les périphériques (indépendance des périphériques).
Les entrées sont les données envoyées par un périphérique (disque, réseau, clavier…) à
destination de l'unité centrale.
Les sorties sont les données émises par l'unité centrale à destination
d'un périphérique (disque, réseau, écran…).
Les principes de base sont employés pour réaliser les entrées-sorties entre la mémoire et un
périphérique.
On peut imaginer, toujours dans le cas du système d'exploitation le plus rudimentaire, que le
processeur pilote lui-même le dispositif de lecture ou d'écriture. Il gère directement le disque
choisissant l'emplacement où écrire et enchaîne une à une toutes les opérations nécessaires.
Ceci est un gaspillage car le processeur devra consacrer le plus clair de son temps à cette
gestion, travaillant fort peu pour l'usager. On a donc depuis longtemps introduit une certaine
intelligence dans les dispositifs de gestion des entrées-sorties. On distingue:
Les coupleurs: processeurs simples qui disposent d'un peu de mémoire et d'un jeu
d'instructions limité. Ils peuvent gérer les adresses sur le disque et les déplacements
des têtes d'écriture.
Les canaux et dispositifs d'accès direct à la mémoire (DMA ou direct memory access)
qui sont de véritables processeurs, parfois non interruptibles, qui peuvent interrompre
le processeur. Ils peuvent activer en parallèle plusieurs disques ou coupleurs,
possèdent une mémoire qui leur permet de stocker l'information et de réordonner les
accès pour accélérer les échanges.
Les instructions d'entrée-sortie sont privilégiées, c'est-à-dire qu'elles ne peuvent figurer que
dans des programmes exécutés en mode système. En mode utilisateur, un programme
demande au système d'opérer l'entrée-sortie dont il a besoin. La seule façon pour exécuter une
opération d’entrée-sortie par un programme est de faire un appel à une fonction du système
judicieusement choisie par le programmeur. Cette fonction, une fois appelée, va s'exécuter en
Page | 26
mode système et aura donc de ce fait accès aux instructions d'entrée/sortie. La forme de cet
appel au système est celle d'un appel de procédure.
Chaque périphérique est connecté à l'ordinateur par l'intermédiaire d'une carte électronique
spéciale appelée contrôleur de périphérique.
Les entrées-sorties synchrones ne présentent d'intérêt que pour des processeurs rudimentaires
lorsqu'il n'y a pas de raison de vouloir mieux employer les temps d'attente. C'est le cas, par
exemple, du microprocesseur affecté au clavier d'un ordinateur. Leur programmation est
simple puisque l'état de l'activité, en chaque point interruptible, est toujours parfaitement
Page | 27
déterminé. Les coupleurs synchrones ne se rencontrent que dans des dispositifs spécialisés
dont l'état est parfaitement prévisible à tout instant. Leur programmation est facile donc
efficace et ne demande que peu de mémoire pour stocker le programme.
Le pilotage des entrées-sorties asynchrones est plus complexe. On ne peut pas prévoir à
l'avance l'état des différents processus qui devront communiquer entre eux. Leur
programmation nécessite le recours à des interruptions car le processeur et le coupleur
travaillent simultanément à la différence du pilotage synchrone où ils travaillent en
alternance. Chacun doit pouvoir être interrompu à des moments imprévisibles entre deux
instructions. Ce mode de fonctionnement est évidemment plus performant puisque le
processeur n'est pas immobilisé inutilement : lorsqu'il attend que le coupleur ait effectué une
opération d'écriture pour un processus il peut retourner à d'autres activités. Cependant ceci
est la source de nombreuses possibilités d'erreurs. Il faut veiller à synchroniser correctement
le périphérique et le processeur. Les données doivent être prêtes au moment voulu. Une
mauvaise synchronisation est la source de nombreuses erreurs souvent difficiles à détecter et
à corriger. Les canaux et dispositifs DMA fonctionnent généralement dans ce mode. Le
processeur peut consulter leur mot d'état pour connaître leur activité. Dans le dispositif DMA
le plus simple il se réduit à un registre qui contient l'adresse en mémoire des données à
transférer, le nombre d'octets et le sens du transfert. Le processeur connaît l'état d'avancement
du travail grâce à cette information.
Lorsqu’une requête d’E/S arrive en mode synchrone, une requête est en cours d’exécution à
la fois, puisque le CPU attend la fin d’E/S.
Néanmoins, en mode asynchrone et mode DMA, l’E/S demandée est lancée. Puis, le contrôle
est rendu immédiatement à un programme utilisateur, qui peut formuler de nouvelles requêtes
d’E/S.
A cet effet, le système s’exploitation maintient une table contenant une entrée pour chaque
périphérique d’E/S ; c’est la table d’état des périphériques (Device-Status Table).
Page | 28
Figure 16. Table d’état des périphériques.
Chaque entrée de la table indique le type du périphérique, son adresse et son état (inactif ou
occupé), ainsi qu’une liste des requêtes formulées d’E/S. Cette liste contient, pour chaque
requête, le type d’opération, l’adresse de données et la longueur des données, …etc.
Page | 29
IV. Gestion du processeur central
Dans un système multitâche, la ressource la plus importante d’une machine est le processeur.
Cette ressource est allouée à un et un processus sélectionné parmi un ensemble des processus
éligibles. Par conséquent, il convient à bien gérer ce dernier afin de le rendre plus productif.
En effet, un système d’exploitation dispose d’un module qui s’occupe de l’allocation du
processeur en l’occurrence le Dispatcheur. Ce module est exécuté chaque fois qu’un
processus se termine ou se bloque dans le but de réquisitionner le processeur pour un autre
processus. En plus de ce Dispatcheur, un système d’exploitation dispose d’un autre module
permettant ainsi la mise en ordre des processus qui demandent le processeur.
IV.1. Définition
L'ordonnancement est la partie du système d'exploitation qui détermine dans quel ordre les
processus prêts à s'exécuter (présents dans la file des prêts) seront élus. Ses objectifs sont :
Page | 30
IV.5. Politiques de scheduling.
Les algorithmes d’ordonnancement se distinguent les uns des autres du fait que certains
autorisent la réquisition de l’unité centrale alors que d’autres l’interdisent. La réquisition est
la possibilité de retirer à n’importe quel instant le processeur à un processus même si ce
dernier est en cours d’exécution.
IV.5.1. First in first out FIFO (first come first served FCFS)
Dans cet algorithme ; connu sous le nom FIFO (First In, First Out) ; les processus sont rangés
dans la file d’attente des processus prêts selon leur ordre d’arriver. Les règles régissant cet
ordonnancement sont :
1. Quand un processus est prêt à s’exécuter, il est mis en queue de la file d’attente des
processus prêts.
2. Quand le processeur devient libre, il est alloué au processus se trouvant en tête de file
d’attente des processus prêts.
3. Le processus élu relâche le processeur s’il se termine ou s’il demande une entrée
sortie.
Cet algorithme est sans réquisition et non adapté à un système temps partagé car dans un
système pareil, chaque utilisateur obtient le processeur à des intervalles réguliers.
SJF choisit de façon prioritaire les processus ayant le plus court temps d’exécution sans
réellement tenir compte de leur date d’arrivée. Dans cet algorithme les différents processus
sont rangés dans la file d'attente des processus prêts selon un ordre croissant de leur temps
d'exécution (cycle de calcul). Les règles régissant cet ordonnancement sont :
1. Quand un processus est prêt à s’exécuter, il est inséré dans la file d’attente des
processus prêts à sa position approprie.
2. Quand le processeur devient libre, il est assigné au processus se trouvant en tête de la
file d’attente des processus prêts (ce processus possède le plus petit cycle processeur).
Si deux processus ont la même longueur de cycle, on applique dans ce cas
l’algorithme FCFS.
3. Si le système ne met pas en œuvre la réquisition, le processus élu relâche le
processeur s’il se termine ou s’il demande une entrée sortie. Dans le cas contraire, le
processus élu perd le processeur également. Quand un processus ayant un cycle
d’exécution inférieur au temps processeur restant du processus élu, vient d’entrer dans
la file d’attente des prêts. Le processus élu dans ce cas sera mis dans la file d’attente
des éligibles, et le processeur est alloué au processus qui vient d’entrer.
Cet algorithme peut être avec ou sans réquisition et son implémentation est difficile, car il
n’existe aucune manière pour connaître le cycle suivant du processeur.
Page | 31
IV.5.3. Avec priorité
Dans cet algorithme, les processus sont rangés dans la file d’attente des processus prêt par
ordre décroissant de priorité. L’ordonnancement dans ce cas est régit par les règles suivantes :
1. Quand un processus est admis par le système, il est inséré dans la file d’attente des
processus prêts à sa position approprie (dépend de la valeur de priorité).
2. Quand le processeur devient libre, il est alloué au processus qui se trouve en tête de
file d’attente des processus prêts (le plus prioritaire).
3. Un processus élu relâche le processeur s’il se termine ou se bloque (E/S ou autre).
Cet algorithme peut être avec ou sans réquisition. Un processus de priorité basse risque de ne
pas être servi (problème de famine) d’où la nécessité d’ajuster périodiquement les priorités
des processus prêts. L’ajustement consiste à incrémenter graduellement la priorité des
processus de la file d’attente des éligibles (par exemple à chaque 15 mn on incrémente d’une
unité la priorité des processus prêts).
IV.5.4. Tourniquet
Dans cet algorithme les processus sont rangés dans une file d'attente des éligibles, le
processeur est alloué successivement aux différents processus pour une tranche de temps fixe
Q appelé Quantum. Cet Ordonnancement est régit par les règles suivantes :
1. Un processus qui rentre dans l’état éligible est mis en queue de la file d'attente des
prêts.
2. Si un processus élu se termine ou se bloque avant de consommer son quantum de
temps, le processeur est immédiatement alloué au prochain processus se trouvant en
tête de la file d'attente des prêts.
3. Si le processus élu continue de s'exécuter au bout de son quantum, dans ce cas le
processus sera interrompu et mis en queue de la file d'attente des prêts et le processeur
est réquisitionné pour être réalloué au prochain processus en tête de cette même file
d’attente.
Cet algorithme est avec réquisition, il est adapté aux systèmes temps partagé. La stratégie du
tourniquet garantit que tout processus est servi au bout d’un temps fini. Son avantage est
d’éviter la famine. On dit qu'un processus est en famine lorsqu'il est prêt à être exécuté et se
voit refuser l'accès à une ressource (ici le processeur) pendant un temps indéterminé.
L’efficacité de cet ordonnanceur dépend principalement de la valeur du quantum Q:
Page | 32
IV.6. Contrôle de processus
Un processus est une entité dynamique qui matérialise un programme en cours d'exécution
avec ses propres ressources physiques (mémoire, processeur, entrée/sortie, …) et logiques
(données, variables,…). Contrairement à un programme (texte exécutable) qui a une
existence statique.
− Processus système : processus lancé par le système (Init processus père des tous les
processus du système)
− Processus utilisateur : processus lancée par l’utilisateur (commande utilisateur)
Dans les systèmes mono programmés, un programme ne quitte pas l’unité centrale avant de
terminer son exécution. Pendant cette période, il dispose de toutes les ressources de la
machine. Par contre, ce n’est pas le cas dans les systèmes multiprogrammés et temps-partagé,
un processus peut se trouver dans l’un des états suivants :
Lorsqu’un processus est temporairement suspendu, il faut qu’il puisse retrouver l’état où il se
trouvait au moment de suspension, il faut que toutes les informations dont il a besoin soient
sauvegardées pendant sa mise en attente.
Page | 33
Notons que le contexte d’un processus dépend du système, mais dans tous les cas c’est un
bloc de contrôle de processus (BCP) qui contient toute information nécessaire à la reprise
d’un processus interrompu : Etat du processus (prêt, suspendu, ..), quantité de mémoire,
temps CPU (utilisé, restant), priorité, etc.
Les BCP sont rangés dans une table (table des processus) qui se trouve dans l’espace
mémoire du système (figure 18).
Il existe des appels système permettant de créer un processus, charger son contexte et lancer
son exécution (fork, exec sous Unix). Un processus (père) peut créer d’autres processus (fils)
qui hérite les descripteurs de son père. Ce dernier à son tour crée d’autres processus. Un
processus a un seul père mais peut avoir plusieurs fils.
Page | 34
IV.6.4. Destruction d'un processus
Les processus peuvent se terminer ou ils peuvent être éliminés par d’autres processus (la
primitive kill). A la destruction d’un processus, on libère toutes les ressources qu’il avait.
Dans certains cas, la destruction d’un processus entraîne l’élimination de ces descendants;
cette opération n’affecte pas les processus qui peuvent continuer indépendamment de leur
père (processus orphelins).
Page | 35
V. Gestion de la mémoire centrale
Quand le nombre de tâches devient élevé, pour satisfaire au principe d'équitabilité et pour
minimiser le temps de réponse des processus, il faut pouvoir simuler la présence simultanée
en MC de tous les processus. D'où la technique de "va et vient" ou recouvrement (swapping),
qui consiste à stocker temporairement sur disque l'image d'un processus, afin de libérer de la
place en MC pour d'autres processus.
D'autre part, la taille d'un processus doit pouvoir dépasser la taille de la mémoire disponible,
même si l'on enlève tous les autres processus. L'utilisation de pages (mécanisme de
pagination) ou de segments (mécanisme de segmentation) permet au système de conserver en
MC les parties utilisées des processus et de stocker, si nécessaire, le reste sur disque.
Le rôle du gestionnaire de la mémoire est de connaître les parties libres et occupées, d'allouer
de la mémoire aux processus qui en ont besoin, de récupérer de la mémoire à la fin de
l'exécution d'un processus et de traiter le recouvrement entre le disque et la mémoire
centrale, lorsqu'elle ne peut pas contenir tous les processus actifs.
Editeur
Bibliothèque
de liens
statique
Module
executable
Chargeur
L’espace d’adressage d’un processus est généré par le compilateur et l’éditeur de liens.
Toute instruction ou donnée de l’espace d’adressage doit être chargée en mémoire centrale
(principale, physique) avant d’être traitée par un processeur.
Page | 36
Le gestionnaire de la mémoire est le composant du système d’exploitation qui se charge de
gérer l’allocation d’espace mémoire aux processus à exécuter :
V.1.2. Exigence
V.2. Fonctions.
S'il y a une requête d'allocation dynamique de mémoire pour un processus, on lui alloue de la
place dans le tas (Thermal-assisted switching) (heap : des parties d'un grand pool de
mémoire) si le système d’exploitation le permet, ou bien de la mémoire supplémentaire
contiguë à la partition du processus (agrandissement de celle-ci). Quand il n'y a plus de place,
on déplace un ou plusieurs processus :
A chaque retour de recouvrement (swap), on réserve au processus une partition un peu plus
grande que nécessaire, utilisable pour l'extension de la partition du processus venant d'être
chargé ou du processus voisin.
Il existe trois façons de mémoriser l'occupation de la mémoire : les tables de bits (bits maps),
les listes chaînées et les subdivisions (buddy).
Page | 37
V.3. Modes de partage de la mémoire.
V.3.1. Système mono-programmé
Programme
utilisateur Programme
utilisateur
Programme
utilisateur
Système Système
d’exploitation d’exploitation
dans la RAM dans la RAM
Optimisation du taux d'utilisation du processeur en réduisant notamment les attentes sur des
entrées-sorties.
Deux préoccupations:
Page | 38
Files d'attente
multiples
File d'attente
unique
Système Système
d’exploitation d’exploitation
Initialement, l’espace mémoire réservée aux utilisateurs constitue une seule partition.
Quand un nouveau processus doit être chargé, on lui alloue une zone contiguë de taille
suffisamment grande pour le contenir.
Cette forme d’allocation conduit éventuellement à l’apparition de trous trop petits pour les
allouer à d’autres processus : c’est la fragmentation externe.
Solutions:
Page | 39
Figure 23. Partitions variables.
Pour protéger le code et les données du système d’exploitation des programmes des
utilisateurs, on utilise un registre limite qui indique la limite de la zone réservée aux
utilisateurs.
Chaque adresse référencée par un processus est comparée avec le registre limite.
Page | 40
Figure 24. Protection de la mémoire dans un système mono-programmé.
Comme on ne peut prévoir dans quelle partition sera chargé un processus, les adresses
attribuées par le compilateur et l’éditeur de liens aux instructions et aux données d’un
programme doivent être relatives à une adresse 0.
La translation peut se faire lors du chargement du processus (utilisée dans OS/360 d’IBM.
Les adresses relatives sont remplacées par des adresses absolues (en ajoutant à chaque fois
l’adresse de début de la partition).
Cette solution n’est pas intéressante car en remplaçant les adresses relatives en adresses
absolues, il ne sera plus possible de déplacer le processus.
Pour éviter la translation d’adresse au cours du chargement d’un processus, une autre solution
consiste à doter la machine de 2 registres spéciaux :
– Le registre de base ;
– Le registre limite.
Quand un processus est élu (par l’ordonnanceur), système d’exploitation charge dans le
registre de base l’adresse absolue du début de sa partition et dans le registre limite la longueur
de la partition.
Durant l’exécution d’une instruction, chaque adresse relative référencée par l’instruction est
vérifiée en la comparant avec le contenu du registre limite, afin d’interdire tout accès en
dehors de la partition courante.
Les adresses physiques sont obtenues en ajoutant le contenu du registre de base aux adresses
relatives.
Page | 41
Figure 25. Protection de la mémoire dans un système multiprogrammé.
Un des avantages est le partage de code commun. Particulièrement important pour les
systèmes à temps partagé où plusieurs utilisateurs partagent un programme (éditeur de texte,
base de données, etc.)
Une copie en lecture seule (code réentrant) est partagée entre plusieurs utilisateurs. Seule la
position dans le code change selon les utilisateurs.
Le code partagé doit apparaître au même endroit dans l'espace logique de tous les processus.
Editeur
limite
Editeur
Editeur
limite
Mémoire physique
Figure 26. Une bibliothèque de liens dynamiques (Dynamic Link Library: DLL) utilisée par plusieurs utilisateurs.
Page | 42
VI. Gestion des périphériques
La gestion des périphériques représente peut-être le défi le plus considérable d’un système
d’exploitation. Ce dernier doit contrôler tout un ensemble de périphériques avec des
différences multidimensionnelles. Rapidité du périphérique, volume des informations, service
proposé, direction du flux d’informations et protocoles de communication sont autant de
grandeurs aux éventails très larges. Outre cette diversité, le système d’exploitation doit
pouvoir traiter un grand nombre de périphériques, ce traitement doit se dérouler dans un
environnement parallélisé. Les périphériques agissent en général indépendamment de l’unité
centrale, en fonction de leur propre fréquence et synchronisation. Le système d’exploitation,
qui la plupart du temps s’exécute sur une seule unité centrale, doit donc gérer des requêtes
simultanées en provenance d’un grand nombre de périphériques.
L’un des plus grands problèmes est le volume d’informations qui doit être transmis pour
décrire l’affichage sur les moniteurs. L’image sur les moniteurs est affichée sous formes de
points nommés pixels. Les moniteurs diffèrent selon le nombre de pixels et les couleurs qu’ils
peuvent adopter. Les premiers moniteurs étaient composés de 200 lignes de 320 pixels noir et
blanc. De nos jours, les résolutions de 800×600, 1024×768 et 1280×960 sont les plus
répondues. L’illumination de chaque pixel est contrôlée par des valeurs stockées en mémoire
vidéo :
− Les affichages monochromes de base n’ont besoin que d’un bit par pixel.
− Les affichages par niveaux de gris (255 niveaux) ont besoin de 8 bits.
Les affichages couleurs réelles ont besoin de 24 bits : chaque pixels est généré par la
combinaison des trois couleurs primaires (rouge, vert et bleu : RVB) ; 8 bits pour chacune de
ces couleurs. Avec un affichage couleurs réelles et pour un moniteur vidéo 1024×768, il nous
faut 2,3 Mo pour stocker une valeur de 24 bits pour chaque pixel. Pour modifier une image à
l’écran, de nouvelles données doivent être écrites en mémoire vidéo.
Compte tenu du grand volume de données multimédia cela peut représenter une charge
importante sur le système. Par exemple, une animation vidéo qui nécessite 25 image/seconde
et 2,3 Mo par image réécrit 25 fois dans la mémoire vidéo par seconde donc un total de 58
Mo/seconde. Cette exigence de transfert a poussé l’évolution des conceptions matérielles.
Le disque peut être considéré comme le seul périphérique d’E/S commun à tous les
ordinateurs. Même les moniteurs et les claviers ne sont pas indispensables sur des systèmes
tels que les serveurs. Il existe de nombreuses tailles et vitesses de disques et l’information
peut être stockée de manière optique ou magnétique. L’unité élémentaire de stockage
d’informations est le secteur.
Page | 43
− Les DVD (Digital Versatile Disc) et CD-ROM : les secteurs forment une longue
spirale qui s’éloigne en tournant du centre du disque.
− Sur les disquettes et disques dans le support tourne à vitesse constante. Les secteurs
sont organisés en pistes. Les pistes sont des cercles concentriques autour du centre.
− Certains disques stockent le même nombre de secteurs pour chaque piste. D’autres
disques placent plus de secteurs sur des pistes externes.
− Les disques contiennent un ou plusieurs plateaux de support. Certain proposent
d’utiliser les deux faces du plateau et propose deux têtes de lecture/écriture par
plateau.
Si un disque est appelé à répondre à plusieurs E/S, il doit ordonnancer ces requêtes suivant
certains algorithmes d’ordonnancement. La performance de ces algorithmes se mesure par le
total des mouvements par tête.
Page | 44
VII. Gestion des fichiers
VII.1. Définition
Un fichier est vu comme une suite d'articles ou d'enregistrements logiques d'un type donné
qui ne peuvent être manipulés qu'à travers des opérations spécifiques. L'utilisateur n'est pas
concerné par l'implantation des enregistrements, ni par la façon dont sont réalisées les
opérations. Généralement, elles sont traduites par système d’exploitation en opérations
élémentaires sur les mémoires.
− fichiers : créer, ouvrir, fermer, détruire, pointer au début, renommer, copier dans un
autre fichier, éditer le contenu,
− articles : lire, écrire, modifier, insérer, détruire, retrouver.
Un système de fichiers (SGF) est l'entité regroupant les fichiers mémorisés sur disque. Il
contient les données des fichiers et un ensemble d'informations techniques.
A l'écriture, la tête magnétise le support. C'est le défilement des points magnétisés qui permet
de lire. Le courant d'air créé par le plateau en mouvement fait flotter la tête.
Le disque tourne dans arrêt à vitesse constante. Un grain de poussière entre le disque et
la tête les détruit tous les deux. (Ex : un fragment de cendre de cigarette).
On empile plusieurs plateaux les uns au-dessus des autres. Les plateaux tournent à la même
vitesse. Les têtes sont solidaires (une tête par face).
Sur chaque face, on écrit sur des pistes concentriques. Les pistes au-dessus les unes des autres
sont accessibles sans bouger les têtes de lecture. Elles forment un cylindre.
Page | 45
Figure 29. Le disque après formatage.
Les pistes sont divisées en secteurs. Le secteur est l'unité de lecture-écriture. Le formatage
physique marque les positions des pistes et des secteurs.
Il suffit de connaître :
− La taille du secteur.
− Le nombre de secteurs par piste.
− Le nombre de pistes par cylindre.
− Le nombre de cylindres.
Taille d'une piste = taille d'un secteur x nombre de secteurs (clusters, blocs) par piste
Taille d'un cylindre = taille d'une piste x nombre de faces par cylindre
Taille du disque = taille d'1 cyl. x nbre de cyl = taille d'1 plat. x nbre de plat.
Chaque secteur est repéré par ses coordonnées : (n° de cylindre, n° de face, n° de secteur).
La carte d'interface reçoit de l'ordinateur une commande (lire, ou écrire + données) et une
adresse de secteur, et exécute l'opération sur un secteur entier.
Page | 46
Figure 30. Les numéros de secteurs.
Alors physiquement, un fichier est une suite de secteurs dont l'ordre est essentiel !
Page | 47
VII.2.4. Les temps d'accès
Quand on demande à lire un secteur, la carte d'interface va
Si on lisait sans arrêt = le nombre d'octets qui passent sous la tête en 1 seconde.
Exemple:
Au pire : un tour
Ex : 4 ms
Ex : 9,5 ms
Page | 48
Alors, pour lire un fichier dans l'ordre et si les secteurs sont n'importe comment sur le disque,
à chaque secteur il faut :
1. allouer des secteurs contigus totalisant une capacité d'au-moins n octets. Avec deux
inconvénients:
o le dernier secteur a toutes chances d'être sous-utilisé et ainsi, on gaspille de la
place. Le pourcentage de place perdue est d'autant plus grand que la taille
moyenne des fichiers est faible, ce qui est la réalité
o si le fichier est agrandi, il faudra déplacer le fichier pour trouver un nouvel
ensemble de secteurs consécutifs de taille suffisante
2. diviser le fichier en blocs de taille fixe, insécables, que système d’exploitation alloue
de façon non nécessairement contigüe à des secteurs.
Un bloc est défini comme une zone de mémoire secondaire contenant la quantité
d'information qui peut être lue ou écrite par un périphérique en une seule opération. La taille
d'un bloc est donc attachée à un périphérique d'E/S et fixée par le matériel. Cependant, si
système d’exploitation n'a pas le choix de la taille d'un bloc, il peut grouper plusieurs article
dans un même bloc (packing).
Pour des blocs de taille 1 Ko, le taux de remplissage du disque est excellent, mais la vitesse
de transfert des données est modeste (délai de rotation du disque et de recherche importants
par rapport au temps de transfert lui-même). Au-delà de 1 Ko, le taux de remplissage se
dégrade, mais la vitesse de transfert s'améliore.
Dès qu'on a choisi une taille de blocs (souvent 1/2 Ko à 2 Ko), on doit trouver un moyen de
mémoriser les blocs libres. Les deux techniques les plus répandues sont les suivantes :
− table de bits : on gère une table comportant autant de bits que de blocs sur le disque.
A chaque bloc du disque, correspond un bit dans la table, positionné à 1 si le bloc est
occupé, à 0 si le bloc est libre (ou vice versa). Par exemple, un disque de 300 Mo,
Page | 49
organisé en blocs de 1 Ko, sera géré par une table de 300 Kbits qui occupera 38 des
307.200 blocs
− liste chaînée de n° des blocs : par exemple, un disque de 300 Mo, organisé en blocs de
1 Ko : supposons que chaque bloc soit adressé par 4 octets. Chaque bloc de la liste
pourra contenir 255 adresses de blocs libres. La liste comprendra donc au plus
307.200/255 = 1205 blocs. Cette solution mobilise beaucoup plus de place que la
précédente.
− une liste chaînée de blocs : chaque bloc libre pointe sur le bloc libre suivant,
− une liste chaînée de zones libres : chaque bloc de début d'une série de blocs libres
(zone libre) contient la taille de la zone et pointe sur le premier bloc de la zone libre
suivante.
Page | 50
VIII. Conclusion
Dans ce polycopié, la première partie de matière "Systèmes d'Exploitation" est
présentée au profit des étudiants en deuxième année en licence Informatique.
Les concepts fondamentaux sont bien présentés ; comme la gestion des fichiers, gestion
de la mémoire, gestion du processeur et gestion des entrées-sorties.
Comme il est mentionné dans l’introduction de ce polycopié, une deuxième partie sera
préparée et organisée sous forme d’un tutoriel contenant des fiches de travaux dirigés
(exercices avec solutions) ainsi que des fiches de travaux pratiques.
En fin, j’espère que le contenu de ce polycopié a bien aidé et assisté le lecteur dans cette
formation en licence Informatique.
Page | 51
IX. Bibliographie
Challal Y., Bettahar H. et Vayssade M. Systèmes d’exploitation: des concepts a la programmation -
Gestion des entrées / sorties [En ligne] // ESI Ecole nationale Supérieure d'Informatique. - 04 Mai
2016. - 05 Mars 2018. - http://y_challal.esi.dz/wp-content/uploads/2016/05/CH3-ES.pdf.
Epelboin Yves Systèmes d'exploitation des ordinateurs [En ligne]. - Université Pierre et Marie Curie -
UPMC, 25 Février 2007. - 05 Mars 2018.
Heudin J.C. et Panetto C. Les architectures RISC [Ouvrage]. - [s.l.] : Dunod, 1990.
Moreau ené Ainsi naquit l'informatique: Histoire des hommes et des techniques [Ouvrage]. - [s.l.] :
Dunod, 1987.
Rossi Serge l'Histoire de l'Informatique [En ligne]. - 20 Novembre 2004. - 05 Mars 2018.
Sghaier Imene Systèmes d’exploitation – Gestion des périphériques [En ligne] // Technologue pro,
cours électricité électronique informatique. - 28 Octobre 2012. - 05 Mars 2018. -
http://www.technologuepro.com/Systemes-Exploitation/Gestion-des-peripheriques.html.
Zanella P. et Ligier Y. Architecture et technologie des ordinateurs [Ouvrage]. - [s.l.] : Dunod, 1989.
Page | 52