Académique Documents
Professionnel Documents
Culture Documents
Support de Cours
SYSTÈMES D’EXPLOITATION
Pour 2ème Année Licence - informatique
Présenté Par Mme Bouainah Madiha
mbouainah@yahoo.fr
Chapitre I
Introduction aux systèmes d’exploitation
I. Introduction :
2
offrent un service à l'utilisateur. Un utilisateur souhaitant réaliser une opération
d'entrées sorties fait appel à une primitive unique ECRIRE sans se soucier du type
de gestion associée au périphérique. C'est la primitive qui prendra en charge la
spécificité du périphérique. L'ensemble des primitives offertes par le système
d'exploitation crée une machine virtuelle au-dessus de la machine physique plus
simple d'emploi et plus conviviale. On distingue deux types de primitives : les
appels systèmes et les commandes.
b) La gestion des ressources : Le second rôle du système d'exploitation est la
gestion des ressources.Un ordinateur se compose de ressources (périphériques,
mémoires , terminaux, disques ...).Le système d'exploitation permet
l'ordonnancement et le contrôle de l'allocation des processeurs, des mémoires et
des périphériques d'E/S entre les différents programmes qui y font appel. Le
système d'exploitation peut être découpé en plusieurs grandes fonctions, ces
fonctions qui seront étudiées plus en détails dans les chapitres suivants du cours
Pour comprendre ce que sont les SE, nous devons tout d’abord comprendre comment ils
sesont développés. Cela permettra de voir comment les composants des SE ont évolué comme
des solutions naturelles aux problèmes des premiers SE.
3
Figure 1. 1 : Utilisation de la machine en Porte Ouverte
Chaque utilisateur, assurant le rôle d’opérateur, devait lancer un ensemble d’opérations qui
sont :
✓ Placer les cartes du programme dans le lecteur de cartes.
✓ Initialiser un programme de lecteur des cartes.
✓ Lancer la compilation du programme utilisateur.
✓ Placer les cartes données s’il y en a, dans le lecteur de cartes.
✓ Initialiser l’exécution du programme compilé.
✓ Détecter les erreurs au pupitre et imprimer les résultats.
Inconvénients
✓ Temps perdu dans l’attente pour lancer l’exécution d’un programme.
✓ Vitesse d’exécution de la machine limitée par la rapidité de l’opérateur quiappuie sur
les boutons et alimente les périphériques.
✓ Pas de différences entre : concepteurs ; constructeurs ; programmeurs ;utilisateurs ;
mainteneurs.
B. Traitement par lots (Batch Processing, 1955-1965) : Ce sont des systèmes réalisant
le séquencement des jobs ou travaux selon l’ordre des cartes de contrôle à l’aide d’un
moniteur d’enchaînement. L’objectif était de réduire les pertes de temps occasionnées
par l’oisiveté du processeur entre l’exécution de deux jobs ou programmes (durant
cette période,il y a eu apparition des machines à transistor avec unités de bandes
magnétiques, donc évolution des ordinateurs).L’idée directrice était de collecter un
ensemble de travaux puis de les transférer sur une bande magnétique en utilisant un
ordinateur auxiliaire (Ex.IBM 1401). Cette bande sera remontée par la suite sur le
lecteur de bandes de l’ordinateur principal (Ex. IBM 7094) afin d’exécuter les travaux
transcrits en utilisant un programme spécial (l’ancêtre des S.E. d’aujourd’hui. Ex.
FMS :Fortran Monitor System, IBSYS). Les résultats seront récupérés sur une autre
bande pour qu’ils soient imprimés par un ordinateur auxiliaire. Cette situation est
illustrée à la Figure 1.2.
4
Figure 1.2 : Un système de traitement par lots
Inconvénients
✓ Perte de temps dû à l’occupation du processeur durant les opérations d’E/S. (En effet,
le processeur restait trop inactif, car la vitesse des périphériques mécaniques était plus
lente que celle des dispositifs électroniques).
✓ Les tâches inachevées sont abandonnées.
5
C. Multiprogrammation (Multiprogramming, 1965-1970) :
• Le principe de Spooling : L’arrivée sur le marché des unités de disques (et des
tambours magnétiques à des prix abordables) Possibilité de transférer les travaux
vers les disques dès leur arrivée dans la salle machine.
- Les jobs sont lus et stockés sur disque au fur et à mesure de leur soumission
aux opérateurs : C’est la notion de SPOOLING
(SimulatneousPeripheralOperation On-Line). Le SPOOL consiste à créer des
fichiers-disque qui correspondent aux jobs soumis et qui sont utilisés par le
moniteur au moment de l’exécution, à la place des supports d’informations
lents.
6
• Exemple de multiprogrammation :
Pour les deux jobs Aet B :
• Système mono-programmé :
• Système multiprogrammé :
C’est une variante du mode multiprogrammé où le temps CPU est distribué en petites tranches
appelées quantum de temps.L’objectif est d’offrir aux usagers une interaction directe avec la
machine par l’intermédiaire de terminaux de conversation, et de leur allouer le processeur
successivement durant un quantum de temps, chaque utilisateur aura l’impression de disposer
7
de la machine à lui tout seul. Il peut aussi contrôler le job qu’il a soumis directement à partir
du terminal (corriger les erreurs,recompiler, resoumettre le job, …).
Pour créer un système aussi grand et complexe qu’un système d’exploitation, il est nécessaire
de le découper en pièces plus petites. Chacune d’entre elles devrait être une portion bien
délimitée du système, avec des entrées, des sorties et des fonctions soigneusement définies.
Bien entendu les systèmes d’exploitation ne possèdent pas tous la même structure. Cependant,
plusieurs systèmes modernes possèdent les composants suivants :
- Gestion de processeurs.
- Gestion mémoire principale.
- Gestion mémoire auxiliaire.
- Gestion du système d’entrée/sortie.
- Gestion des fichiers.
- Système de protection.
- Gestion de réseaux.
- Système interpréteur de commande.
V. Classification des SE :
a) Selon les services rendus :
▪ Système monotâche : A tout instant, un seul programme est exécuté. Un autre
programme ne démarrera –sauf conditions exceptionnelles- que lorsque le premier
sera terminé.
8
▪ Multitâche : Capacité du système à pouvoir exécuter plusieurs processus (i.e
programmes en cours d’exécution) simultanément (système multiprocesseurs) ou en
pseudo-parallélisme (système en time sharing).
▪ Multi-utilisateurs : Capacité du système à pouvoir gérer un ensemble d’utilisateurs
utilisant simultanément les mêmes ressources matérielles. Un SE ne possédant pas
cette fonctionnalité est dit mono-utilisateur.
▪ Systèmes temps réel :Les systèmes à temps réel sont une autre forme de SE
spécialisés. Un système à temps réel est utilisé quand il existe des exigences
impérieuses de temps de réponse pour le fonctionnement d’un processeur ou pour le
jeu de données. Il est souvent employé comme dispositif de contrôle dans une
application dédiée. Les capteurs amènent des données à l’ordinateur. Celui-ci doit
analyser les données et éventuellement régler le contrôle pour modifier les entrées
des capteurs.
Exemple de système à temps réel : systèmes contrôlant les expérimentations
scientifiques, les systèmes d’imagerie médicale, les systèmes de contrôle industriel.
b) Selon leur architecture
▪ Systèmes centralisés (traditionnels) : L’ensemble du système est entièrement
présent sur la machine considérée. Les machines éventuellement reliées sont
vues comme des entités étrangères disposant elles aussi d’un système centralisé.
Le système ne gère que les ressources de la machine sur laquelle il est présent.
▪ Systèmes distribués (répartis) (DistributedSystems) : Une tendance récente dans
les systèmes informatiques consiste à répartir le calcul entre plusieurs
processeurs. A l’opposé des systèmes centralisés, dans les systèmes répartis on ne
partage pas de mémoire ou d’horloge. Au lieu de cela, chaque processeur possède
sa propre mémoire locale. Les processeurs communiquent entre eux à travers des
lignes de communication, comme des bus rapides ou des lignes téléphoniques.
Les systèmes sont habituellement appelés répartis (ou faiblement couplés).
c) Selon leur capacité à évoluer :
▪ Systèmes fermés (ou prioritaires) : Extensibilité réduite : Quand on veut rajouter
des fonctionnalités à un système fermé, il faut remettre en cause sa conception et
refaire une archive (système complet). C'est le cas d'UNIX, MSDOS.
▪ Systèmes ouverts :Extensibilité accrue : Il est possible de rajouter des
fonctionnalités et des abstractions sans avoir à repenser le système et même sans
avoir à l'arrêter sur une machine. Cela implique souvent une conception
9
modulaire basée sur le modèle«client/serveur». Cela implique aussi une
communication entre systèmes, nécessitant des modules spécialisés.
Ainsi une couche i peut utiliser tous les objets (variables et routines) des couches inférieure
j Le principal avantage de l’approche en couches est la modularité. Les couches sont
sélectionnées de telle sorte que chacune utilise seulement les fonctions (opérations) et services
des couches de niveau inférieur. Cette approche simplifie le débogage et la vérification du
système.
10
Chapitre II
Mécanismes de base d’exécution des
programmes
I. Introduction :
Dans cette partie du cours , nous étudierons les mécanismes de base utilisés par les
systèmes d’exploitation pour réaliser leurs fonctions fondamentales .
II. Architecture matérielle d’une machine Von Neumann
John Von Neumann est à l'origine (1946) d'un modèle de machine universelle (non
spécialisée) qui caractérise les machines possédant les éléments suivants :
• une mémoire contenant programme (instructions) et données,
• une unité arithmétique et logique (UAL ou ALU),
• une unité permettant l'échange d'information avec les périphériques : l'unité
d'entrée/sortie (E/S ou I/O),
• une unité de commande (UC).
Ces dispositifs permettent la mise en œuvres des fonctions de base d'un ordinateur : le
stockage de données, le traitement des données, le mouvement des données et le
contrôle.
11
importante sur la programmation et les performances de la machine. Le processeur central
dispose d’un certain nombre de registres physiques :
12
réserver aux seuls programmes du S.E. l’exécution de certaines instructions. Deux modes
d’exécution existent généralement :
− Mode privilégié ou maître (ou superviseur). Il permet : L’exécution de tout type
d’instruction. Les instructions réservées au mode maître sont dites privilégiées (Ex.
instructions d’E/S, protection, …etc.).L’accès illimité aux données.
− Mode non privilégié ou esclave (ou usager). Il permet : Exécution d’un répertoire limité des
instructions. C’est un sous ensemble du répertoire correspondant au mode maître. Accès
limité aux données d’usager.
3. masque d’interruptions (seront détaillés dans la suite).
IV. Cycle principal du CPU :Un processeur ne peut exécuter qu'une seule instruction à la
fois, Le cycle de processeur est le suivant :
➢ récupérer l'adresse de la prochaine instruction à exécuter (dans un registre
spécifique)
➢ récupérer l'instruction elle-même (par le bus)
➢ exécuter l'instruction
➢ incrémenter le compteur ordinal pour pointer vers la prochaine instruction.
Pratiquement, toutes les instructions se déroulent en quatre étapes principales , Exécute les
instructions selon un cycle : Fetch ->Decode ->Execute->suivante
13
Figure 2.2: Cheminement d’un programme dans un système
Les processus correspondent à l’exécution de tâches : les programmes des utilisateurs, les
entrées-sorties, … par le système. Un système d’exploitation doit en général traiter plusieurs
tâches en même temps. Comme il n’a, la plupart du temps, qu’un processeur, il résout ce
14
problème grâce à un pseudo-parallélisme. Il traite une tâche à la fois, s’interrompt et passe à
la suivante. La commutation des tâches étant très rapide, l’ordinateur donne l’illusion
d’effectuer un traitement simultané.
Attention : ne pas confondre un processus (aspect dynamique, exécution qui peut être
suspendue, puis reprise), avec le texte d'un programme exécutable (aspect statique).
15
• Cycle de vie d'un processus :
Un processus peut être dans l’´état actif si il est effectivement en cours,
d’exécution bloqué en attente d’un évènement (fin d’E/S, d´elai,...) prêt si ni
bloqué, ni actif.
a) L’état actif : lorsque le processus obtient le processeur et s'exécute, il est dans l'état
actif. L'état élu(actif) est l'état d'exécution du processus. lors de cette exécution, le
processus peut demander à accéder à une ressource (réalisation d'une entrée/sortie,
accès à une variable protégée) qui n'est pas immédiatement disponible : le processus
ne peut pas poursuivre son exécution tant qu'il n'a pas obtenu la ressource (par
exemple, le processus doit attendre la fin de l'entrée/sortie qui lui délivre les
données sur lesquelles il réalise les calculs suivants dans son code) : le processus
quitte alors le processeur et passe dans l'état bloqué.
b) L'état bloqué : est l'état d'attente d'une ressource autre que le processeur. lorsque le
processus a enfin obtenu la ressource qu'il attendait, celui-ci peut potentiellement
reprendre son exécution. Cependant, nous nous sommes placés dans le cadre de
systèmes multiprogrammés, c'est-à-dire qu'il y a plusieurs programmes en mémoire
centrale et donc plusieurs processus.. Lorsque le processus est passé dans l'état
bloqué, le processeur a été alloué à un autre processus. Le processeur n'est donc pas
forcément libre. Le processus passe alors dans l'état prêt.
c) L'état Prêt :est l'état d'attente du processeur. Le passage de l'état prêt vers l'état élu
constitue l'opération d'élection. Le passage de l'état élu vers l'état bloqué est
16
l'opération de blocage. Le passage de l'état bloqué vers l'état prêt est l'opération de
déblocage.
• Le contexte d’un processus (PCB) :
Le contexte est formé des données nécessaires à la gestion des processus. Une table
contient la liste de tous les processus et chaque entrée conserve leur contexte. C’est
L’ensemble des informations nécessaire et suffisante pour la reprise d’un processus
au cas où il aurait été interrompu, Le contexte est utilisé :
✓ En lecture lors de la restauration.
✓ En écriture lors de la sauvegarde
A cet effet, à tout processus, on associe un bloc de contrôle de processus (BCP). Il
comprend généralement :
a. une copie du PSW au moment de la dernière interruption du processus
b. l'état du processus : prêt à être exécuté, en attente, suspendu, ...
c. des informations sur les ressources utilisées
d. mémoire principale
e. temps d'exécution
f. périphériques d'E/S en attente
g. files d'attente dans lesquelles le processus est inclus, etc...
h. toutes les informations nécessaires pour assurer la reprise du processus en cas
d'interruption
Les BCP sont rangés dans une table en mémoire centrale à cause de leur
manipulation fréquente.
Le passage d'un processus à l'autre s'effectue par un changement de contexte
17
Figure 2.5: Bloc de contrôle de processus (PCB)
A tout moment, un processus est caractérisé par ces deux contextes: le contexte d'unité
centrale qui est composé des mêmes données pour tous les processus et le contexte qui dépend
du code du programme exécuté. Pour pouvoir exécuter un nouveau processus, il faut pouvoir
sauvegarder le contexte d'unité centrale du processus courant (mot d'état), puis charger le
nouveau mot d'état du processus à exécuter. Cette opération délicate réalisée de façon
matérielle est appelée commutation de mot d'état. Elle doit se faire de façon non
interruptibleCette "Super instruction" utilise 2 adresses qui sont respectivement:
18
Figure 2.6: Le 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.
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 :
Remarque : déroutements et les appels au superviseur sont déclenchés par une cause interne
au programme en cours, à la différence des interruptions qui sont d'origine externe, autre
processus ou par le matériel
20
a) Sauvegarde du contexte dans une pile : - adresse de la prochaine instruction à exécuter
dans le programme interrompu, - contenu des registres qui seront modifiés par le
programme d'interruption, - contenu du mot d'état (registre de drapeaux) rassemblant
les indicateurs (tout cela forme le contexte sauvegardé)
b) Chargement du contexte du programme d'interruption (contexte actif) et passage en
mode système (ou superviseur)
c) Exécution du programme d'interruption
d) Retour au programme interrompu en restaurant le contexte et en repassant en mode
utilisateur ou le choix d’un autre .
• Les priorités des interruptions :
Une fois que le signal est détecté dans un point observable, il faut déterminer la cause de
l’interruption. Pour cela on utilise un indicateur, pour les différentes causes, On parle alors du
vecteur d’interruptions.Pour cela on peut envisager diverses méthodes :
a) si l'indicateur d'interruption est unique, le code de l'interruption est stocké quelque part
dans la mémoire et doit être lu par le programme de traitement.
b) s'il existe des indicateurs multiples, chacun est appelé niveau d'interruption. On
attache un programme différent de traitement à chacun de ces niveaux.
c) on peut utiliser simultanément ces deux méthodes. Chaque niveau d'interruption est
accompagné d'un code qui est lu par le programme de traitement de ce niveau.
A chaque interruption, est associée une priorité (système d'interruptions hiérarchisées) qui
permet de regrouper les interruptions en classes. Chaque classe est caractérisée par un degré
d'urgence d'exécution de son programme d'interruption.
Règle : Une interruption de priorité j est plus prioritaire qu'une interruption de niveau i si j > i.
On peut schématiser les différents niveaux d'interruptions comme dans le schéma suivant. La
priorité va en décroissant du haut vers le bas.
21
L'intérêt de ce système est la solution de problèmes tels que :
On peut utiliser un contrôleur d'interruptions pour regrouper les fils d'interruptions, gérer les
priorités entre les interruptions et donner les éléments de calcul d'adresse au processeur.
22
Chapitre III
Gestion des processus
I. Introduction :
Le S.E choisit un processus qui deviendra actif parmi ceux qui sont prêts. Tout processus
qui se bloque en attente d'un événement (par exemple l'attente de la frappe d'un caractère au
clavier lors d'un scanf) passe dans l'état bloqué tant que l'événement attendu n'est pas arrivé.
Lors de l'occurrence de cet événement, le processus passe dans l'état prêt. Il sera alors
Susceptible de se voir attribuer le processeur pour continuer ses activités. Les processus en
attente sont marqués comme bloqués dans la table des processus. Ils se trouvent généralement
dans la file d'attente liée à une ressource (imprimante, disque, ...).
Le changement d'état d'un processus peut être provoqué par :
• un autre processus (qui lui a envoyé un signal, par exemple)
• le processus lui-même (appel à une fonction d'entrée-sortie bloquante,...)
• une interruption (fin de quantum, terminaison d'entrée-sortie, ...)
D’une manière générale :
• le passage de l’état actif à l’état prêt est provoqué par le système en fonction de sa
politique d’ordonnancement (fin de quantum, préemption du processus actif si un
processus plus prioritaire devient prêt dans le cas des politiques préemptives, …),
• le passage de l’état actif à l’état bloqué est provoqué par le Programme : exécuté par
le processus.
II. Qu'est-ce que l'ordonnancement de processus ?:
La figure 1 schématise le fonctionnement d'une machine multiprocessus. Plusieurs processus
sont présents en mémoire centrale. P1 est élu et s'exécute sur le processeur. P2 et P4 sont dans
l'état bloqué car ils attentent tous les deux une fin d'entrée/sortie avec le disque. Les processus
P3, P5 et P6 quant à eux sont dans l'état prêt : ils pourraient s'exécuter (ils ont à leur
disposition toutes les ressources nécessaires) mais ils ne le peuvent pas car le processeur est
occupé par P1. Lorsque P1 quittera le processeur parce qu'il a terminé son exécution, les trois
processus P3, P5 et P6 auront tous les trois le droit d'obtenir le processeur. Mais le processeur
ne peut être alloué qu'à un seul processus à la fois : il faudra donc choisir entre P3, P5 et P6 :
c'est le rôle de l’ordonnancement qui élira un des trois processus.
23
Figure 3.1: le rôle de l’ordonnanceur des processus
Chaque fois, que le processeur devient inactif, le système d’exploitation doit sélectionner
un processus de la file d’attente des processus prêts, et lui passe le contrôle. D’une
manière plus concrète, cette tâche est prise en charge par deux routines système en
l’occurrence le Dispatcheur et le Scheduleur (Ordonnanceur).
24
du processus qui aura le prochain cycle processeur, à partir de la file
d’attente des processus prêts.
• Ordonnanceur de travail : ou Ordonnanceur long terme, utilisé en cas
d’insuffisance de mémoire, son rôle est de sélectionné le sous ensemble de
processus stockés sur un disque et qui vont être chargés en mémoire. En
suite, il retire périodiquement de la mémoire les processus qui sont restés
assez longtemps et les remplace par des processus qui sont sur le disque
depuis trop de temps.
25
processus, lorsque le processus a immédiatement été élu et s'est exécuté sans être
préempté.
• Systèmes temps réel. Le but principal est d'assurer le respect des contraintes de
temps liées aux processus.
V. Critères d'évaluation de performances :
c) Le temps d’attente :est le temps passé dans la file des processus éligibles. On utilise
en général un temps moyen d'attente calculé pour tous les processus mis en jeu
pendant une période d'observation donnée.
Le temps d’attente moyen est la moyenne des délais d’attente pour commencer une
exécution :
26
→ Le processus élu relâche le processeur s’il se termine ou s’il demande une entrée
sortie.
Exemple : On a trois processus 1, 2, 3 à exécuter de durées d'exécution respectives 12 , 2
et 2 unités de temps.
→ Si l'ordre d'arrivée est 1, 2, 3, les temps de réponse respectifs sont 12, 14, et 16
unités de temps, et le temps de réponse moyen est de 14 unités de temps.
→ Mais si l'ordre d'arrivée est 2,3,1, le temps de réponse moyen est 7,6 (2+4+16 / 3).
b) L’algorithme du Plus Court d’abord (SJF) : Cet algorithme (en anglais Shortest Job
First : SJF) affecte le processeur au processus possédant le temps d’exécution le plus
court. Si plusieurs processus ont la même durée, une politique FIFO sera alors utilisée
pour les départager.
→ Problème : comment prédire la durée d'exécution des processus a priori ?
→ Solutions :
✓ faire de la prédiction sur la durée d'exécution des processus.
✓ faire accompagner la demande d'exécution de chaque programme d'une durée
maximum d'exécution autorisée qui est utilisée comme durée d'exécution.
→ Autre problème : risque de famine (les processus de longue durée peuvent n'avoir
jamais accès au processeur si des processus de courte durée arrivent en permanence)
Exemple :On soumet au système quatre processus P1, P2, P3 et P4 dont les durées d’exécution sont
données par le tableau suivant :
L’algorithme du travail le plus court donnera alors le résultat suivant : (Diagramme de Gantt )
Le temps moyen d’attente est = (0+3+9+16)/4=7. Alors que si on avait choisi une politique FCFS, le
temps moyen serait de : 10.25 unités de temps.
27
c) Ordonnancement basé sur les priorités :
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 se trouvant en tête de file
d’attente des processus prêts (le plus prioritaire).
Exemple : On dispose de 5 processus ayant des priorités différentes, comme le montre cetableau :
Diagramme de Gantt :
P2 P5 P1 P3 P4
Le temps moyen d’attente est = (0+1+6+16+18)/5=8.2 unités de temps.
28
choisie pour le quantum : celle-ci doit être grande par rapport au temps nécessaire pour
le changement de contexte des processus.
29
e) Les files multi niveaux :
Les processus sont regroupés par classe, et à chacune est associée une priorité et politique
d’allocation.
Caractéristiques :
• En général préemptif : priorité préemptive
• Nombre de files utilisées
• Ordonnancement utilisé pour chaque file
• Dans quelle file est passé un processus tout neuf
Exemple:
- file 1 (ou politique 1): round-robin
- file 2 (ou politique 2): premier arrivé-premier servi (allocation du CPU uniquement si la
queue 1 est vide)
30
Chapitre IV
Gestion de la mémoire
I. Introduction :
La mémoire principale est le lieu où se trouvent les programmes et les données quand le
processeur les exécute. On l'oppose au concept de mémoire secondaire, représentée par les
disques, de plus grande capacité, où les processus peuvent séjourner avant d'être exécutés. La
nécessité de gérer la mémoire de manière optimale est toujours fondamentale, car en dépit de
sa grande disponibilité, elle n'est, en général, jamais suffisante. Ceci en raison de la taille
continuellement grandissante des programmes. Nous verrons qu'il y a plusieurs schémas pour
la gestion de la mémoire,avec leurs avantages et inconvénients.
31
On définit le degré de multiprogrammation comme étant le nombre de processus présents
en mémoire centrale. Dans un système multiprogrammé, trois problèmes sont à résoudre
vis-à-vis de la mémoire centrale :
→ Il faut définir un espace d'adressage indépendant pour chaque processus.
→ Il faut protéger les espaces d'adressage des processus les uns vis-à-vis des autres
→ Il faut allouer de la mémoire physique à chaque espace d'adressage.
IV. Différentes méthodes d'allocation mémoire :
Les méthodes d'allocation mémoire peuvent être divisées en deux grandes familles :
A. Allocation contiguë (Contiguous Allocation) : pour la première famille, un
programme est un ensemble de mots contigus insécable. L'espace d'adressage du
processus est linéaire. On trouve ici les méthodes d'allocations en partitions variables
que nous allons étudier en premier.
B. Allocation non contiguë (Non Contiguous Allocation) : pour la seconde famille, un
programme est un ensemble de mots contigus sécable, c'est-à-dire que le programme
peut être divisé en plus petits morceaux, chaque morceau étant lui-même un ensemble
de mots contigus. Chaque morceau peut alors être alloué de manière indépendante.
On trouve ici les mécanismes de segmentation et de pagination..
V. Caractéristiques liées au chargement d’un programme :
La production d'un programme passe par plusieurs phases, comme illustré à la figure
suivante :
32
Le programme réside sur disque comme Fichier exécutable. Il est ensuite chargé en mémoire
pour être exécuté. Il peut résider, le plus souvent, dans une partie quelconque de la mémoire.
On les appelle Programmes translatables.
→ Type d’adresse :
a) adresses symboliques : au niveau de Code source Par exemple : int compteur
b) adresses traduites : pour le Module objet : Par exemple le 50ème mot depuis
le début d'espace mémoire.
c) adresses absolues : Module exécutable, chargement : Par exemple
l'emplacement mémoire situé à l'adresse 7777
→ Espace d'adressage logique ou physique :
1) L'espace d'adressage logique : L'unité centrale manipule des adresses logiques
(emplacement relatif).Les programmes ne connaissent que des adresses
logiques, ou virtuelles. L'espace d'adressage logique (virtuel) est donc un
ensemble d'adresses pouvant être générées par un programme.
2) L'espace d'adressage physique : L’unité mémoire manipule des adresses
physiques (emplacement mémoire). Elles ne sont jamais vues par les
programmes utilisateurs. L'espace d'adressage physique est un ensemble
d'adresses physiques correspondant à un espace d'adresses logiques.
→ Le passage d’une adresse logique vers une adresse physique :
A. Pendant la compilation : Si l'emplacement du processus en mémoire est
connu, le compilateur génère des adresses absolues.
B. Pendant le chargement : après la compilation un Code translatable si
l'emplacement du processus en mémoire n'est pas connu.
C. Pendant l'exécution : déplacement dynamique du processus
possible.Utilise des fonctions du matériel.
VI. La gestion de la mémoire :La gestion de la mémoire a deux objectifs principaux :
d'abord le partage de mémoire physique entre les programmes et les données des
processus prêts, et ensuite la mise en place des paramètres de calcul d'adresses, permettant
de transformer une adresse virtuelle en adresse physique. Pour ce faire le gestionnaire de
la mémoire doit remplir plusieurs tâches :
✓ Connaître l'état de la mémoire (les parties libres et occupées de la mémoire).
✓ Allouer de la mémoire à un processus avant son exécution.
✓ Récupérer l'espace alloué à un processus lorsque celui-ci se termine.
33
✓ Traiter le va-et-vient (swapping) entre le disque et la mémoire principale lorsque cette
dernière ne peut pas contenir tous les processus.
✓ Posséder un mécanisme de calcul de l'adresse physique (absolue) car,en général, les
adresses générées par les compilateurs et les éditeurs de liens sont des adresses
relatives ou virtuelles.
VII. Allocation contiguë (Contiguous Allocation) :
A. Monobloc (Single Contiguous Store Allocation) : Dans ce cas, la mémoire est
subdivisée en deux partitions contiguës, une pour le système d’exploitation résident
souvent placer en mémoire basse avec le vecteur d’interruptions et l’autre pour le
processus utilisateur. Elle n'autorise qu'un seul processus actif en mémoire à un instant
donné dont tout l’espace mémoire usager lui est alloué.
34
La décision sur le nombre et la taille des partitions dépend du niveau de multiprogrammation voulu.
En tout cas, le programme avec le plus grand besoin de mémoire doit avoir au moins, une partition
pour y mettre ses données et instructions.MFT doit implanter des mécanismes de protection pour
permettre à plusieurs programmes de s'exécuter sans envahir l'espace d'adresses d'autre programme.
Pour cela il existe deux registres qui indiquent la plage des adresses disponibles pour chaque
programme. Les deux interprétations courantes sont les registres limite et les registres base-limite.
Dans ce cas, les valeurs des registres indiquent la valeur de l'adresse de mémoire la plus petite
et la plus grande qu'un programme puisse atteindre. Il y a une paire de valeurs de ces registres
limite pour chaque programme en exécution. Chaque accès en mémoire entraîne deux
vérifications : la première pour ne pas aller en dessous de la limite inférieure, et la seconde
pour ne pas aller au-dessus de la limite supérieure de mémoire.
35
autre programme complètement ou partiellement selon la demande. On n'est plus limité par des
partitions trop grandes ou trop petites comme avec les partitions fixes. Cette amélioration de l'usage de
la MC nécessite un mécanisme plus complexe d'allocation et de libération ; par exemple, il faut
maintenir une liste des espaces mémoires disponibles.
36
b) Next-fit (le prochain trouvé) : Cet algorithme est une variante du précédent où le
programme est mis dans le premier bloc de mémoire suffisamment grand à partir du
dernier bloc alloué.
c) Best-fit (le meilleur choix) : Le programme est mis dans le bloc de mémoire le plus
petit dont la taille est suffisamment grande pour l’espace requis.
d) Worst-fit (le plus mauvais choix) : Le programme est mis dans le bloc de mémoire
le plus grand pour que la zone libre restante soit la plus grande possible.
e) Quick-fit (placement rapide) : On utilise des listes de trous de même taille. On
peut, par exemple, utiliser une table de n entrées, où la première entrée pointe sur la
tête d’une liste chaînée des zones de4K, la deuxième sur la tête d’une liste chaînée
des zones de 8K, …etc.
→ La fragmentation mémoire:
37
− La fragmentation interne : la partie d'une partition non utilisée par un processus est
nommée fragmentation interne. Ceci est dû au fait qu'il est très difficile que tous les
processus rentrent exactement dans la taille de la partition.
− La fragmentation externe : Les partitions qui ne sont pas utilisées, engendrent la
fragmentation externe.
38
→ Va-et-vient (Swapping) : Puisque la mémoire ne peut pas contenir les processus de
tous les utilisateurs, il faut placer quelques uns sur le disque, en utilisant le système de
va-et-vient. Il consiste en le transfert de blocs mémoire de la mémoire secondaire à
la mémoire principale ou vice-versa (Swapping).Le va-et-vient est mis en oeuvre
lorsque tous les processus ne peuvent pastenir simultanément en mémoire. Un
processus qui est inactif (soit bloqué, soit préempté) peut donc être déplacé
temporairement sur une partie réservée du disque, appelée mémoire de réserve
(Swap Area ou BackingStore), pour permettre le chargement et donc l'exécution
d'autres processus.Cette opération est connue sous le nom de Swap-Out. Le processus
déplacé sur le disque sera ultérieurement rechargé en mémoire pour lui permettre de
poursuivre son exécution ; on parle dans ce cas d’une opération Swap-In.
39
pages de longueur fixe). Ces deux techniques peuvent être combinées, on parle dans ce cas de
la technique de segmentation paginée.
A. La pagination :
Les pgms sont découpés en parties que l’on nomme pages. La mémoire physique est,
elle aussi, Découpée en parties appelés cadres ou cases, de même taille.Pour exécuter un pgm
, le SE charge en mémoire centrale, uniquement, une ou plusieurs pages. Cette partie est dite
résidente. Les pages sont chargées en MC à la demande, donc elles ne sont pas Forcément
contiguës. Lorsqu’un pgm fait référence à une partie qui ne réside pas en MC, son exécution
est suspendue (bloqué)¸ le SE effectue une demande d’E/S pour ramener la partie référencée.
40
A chaque pgm est associé une table de pages, l’adresse de celle-ci fait partie du PCB du pgm.
Laquelle doit être en totalité ou en partie en MC lors de l’exécution du pgm.
→ Structure de la table des pages :Chaque entrée de la table des pages est composée
de plusieurs champs :- P : bit de présence de la page en MC ;- R : bit de référence de
la page ;- Pr : bits de protection (L/E, exécution, droits d’accès) ;- M : bit de
modification de la page (nécessité de la réécrire sur le disque) ;- N° de la case
correspondant à la page.
Si la page virtuelle n’est pas présente en MC, alors il se produit ce que l’on appelle un défaut
de page.
W= [7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1]
41
On constate 15 défauts de page. L’algorithme est rarement utilisé car il génère beaucoup de
défauts de page.
B. La segmentation :
La pagination constitue un découpage de l'espace d'adressage du processus qui ne
correspond pas à l'image que le programmeur a de son programme. Pour le programmeur,
un programme est généralement constitué des données manipulées par ce programme,
d'un programme principal, de procédures séparées et d'une pile d'exécution. La
segmentation est un découpage de l'espace d'adressage qui cherche à conserver cette vue
du programmeur. Ainsi, lors de la compilation, le compilateur associe un segment à
chaque morceau du programme compilé. Un segment est un ensemble d'emplacements
mémoire consécutifs non sécable. A la différence des pages, les segments d'un même
espace d'adressage peuvent être de taille différente. D''une manière générale, on trouvera
un segment de code, un segment de données et un segment de pile.
42
→ Traduction de l'adresse segmentée vers l'adresse physique :
Plus précisément la conversion d'une adresse segmentée <s,d> avec s, numéro de segment et d
déplacement dans le segment suit les étapes suivantes, en mettant en jeu un registre
processeur qui contient en partie haute, le nombre maximal de segments de l'espace
d'adressage couramment actif (LT) et en partie basse l'adresse de la table des segments de
l'espace d'adressage couramment actif.
✓ s est comparé à LT. Si s >= à LT alors il y a erreur : le segment adressé n'existe pas.
✓ sinon s est additionné à l'adresse de la table des segments de manière à indexer
l'entrée de la table concernant le segment s. On récupère alors l'adresse d'implantation
du segment s en mémoire centrale (adr début)
✓ Une information sur la taille du segment peut être conservée dans la table : d est alors
comparé à cette information. Si d est supérieure à l'information taille, alors une erreur
est générée car le déplacement est en dehors du segment. Sinon , le déplacement d est
ajouté à l'adresse d'implantation du segment pour générer l'adresse physique.
43
Le processus est découpé en segment, chaque segment est ensuite paginé
C. Segmentation et Pagination :
Dans la cas où pagination et segmentation sont simultanément employées, une table des
segments est définie pour chaque segment de l'espace d'adressage du processus. Chaque
segment est à son tour paginé, il existe donc une table des pages pour chaque segment. Ainsi
une entrée de la table des segments ne contient plus l'adresse du segment correspondant en
mémoire physique mais contient l'adresse de la table des pages en mémoire physique pour ce
segment. L'adresse d'un octet dans l'espace d'adressage du processus est un couple <s,d>, le
déplacement d étant à son tour interprété comme un couple numéro de page p, déplacement d'
dans cette page. Les mécanismes de traduction d'adresses vus dans les paragraphes précédents
se superposent l'un à l'autre.
44
Ce qui nous amène à utiliser la mémoire secondaire comme mémoire RAM.
Idée générale : Conserver une partie des pgms en cours d’exécution en MC.La taille d'un
processus doit pouvoir dépasser la taille de la mémoire physique disponible, même si l'on
enlève tous les autres processus. le principe de la mémoire virtuelle : le SE conserve en
mémoire centrale les parties utilisées des processus et stocke, si nécessaire, le reste sur disque.
45