Introduction aux systèmes d'exploitation
Introduction aux systèmes d'exploitation
Benzaid
Unité Centrale
Unité Centrale de
Traitement
Données
Unité de
commande
Mémoire Instructions Unité
Centrale Arithmétique
et Logique
1
[Link] et B. Zebbane et C. Benzaid
2 Organisation d’un Système informatique
2
[Link] et B. Zebbane et C. Benzaid
attente indéfinie), cohérence (entre des accès consécutifs), et protection
(contre des accès interdits).
Exemples
3 programmes essaient d'imprimer simultanément leurs résultats
sur une même imprimante recours à un fichier tampon sur disque.
L'accès concurrent à une donnée ; lecture et écriture concurrentes
(par deux processus) sur un même compteur.
Ce rôle de gestionnaire de ressources est crucial pour les systèmes
d'exploitation manipulant plusieurs tâches en même temps (multi-tâches
(Multitasking)).
On peut trouver un S.E. sur les ordinateurs, les téléphones portables, les
assistants personnels, les cartes à puce, …etc.
6 Historique
Les systèmes d'exploitation ont été historiquement liés à l'architecture des
ordinateurs sur lesquels ils étaient implantés. Nous décrirons les générations
successives des ordinateurs et observons à quoi ressemblait leur système
d'exploitation.
3
[Link] et B. Zebbane et C. Benzaid
Utilisateur Ordinateur
Pupitre
Utilisateurs en attente
Programme sur cartes
Lecteur de cartes
Imprimante
4
[Link] et B. Zebbane et C. Benzaid
6.2 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.5.
Opérateur
Ordinateur principal
(7094)
Ordinateur auxiliaire Ordinateur auxiliaire
Dérouleur
(1401) (1401)
entrées
Lecteur de Dérouleur de
cartes Dérouleur bandes
Dérouleur de système
bandes Imprimante
Dérouleur
sorties
Programmeurs
Carte perforée
$END
Données
$RUN
$LOAD
Programme
$FTN
$JOB, 10, 429754, E1
5
[Link] et B. Zebbane et C. Benzaid
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.
Programmeurs
Ordinateur principal
Lecteur de cartes
Disque entrées
Mémoire principale
Système
Programme 1
Opérateur
Programme 2
Programme N
Disque sorties
Imprimante
Programmeurs
En effet, le processeur est alloué à un job, et dès que celui-ci effectue une
demande d’E/S, le processeur est alloué à un autre job, éliminant ainsi les temps
d’attente de l’unité de traitement chargé des E/S, appelé canal d’E/S.
Exemple
Soient les deux programmes A et B suivants :
6
[Link] et B. Zebbane et C. Benzaid
Job A
Job B
Calcul E/S Calcul E/S
CPU
Job A Job A Job B Job B
Temps de réponse de A
Temps de réponse
de B
Système multiprogrammé
CPU
Job A Job B Job A
Temps de réponse de A
Temps de réponse de B
7
[Link] et B. Zebbane et C. Benzaid
6.4 Temps partagé (Time Sharing, 1970-)
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 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, …).
Utilisateurs Programmeurs
Ordinateur principal
Mémoire principale
Système
Programme 1
Programme 2
Programme N
Ingénieur
8
[Link] et B. Zebbane et C. Benzaid
protocoles réseaux TCP/IP, la gestion de la mémoire avec l’introduction de la
pagination, la modification de certains paramètres du système (taille des blocs,
nombre des signaux...) et l’ajout d’outils (l’éditeur vi, un interpréteur de
commandes csh...).
En 1979, les Bell Labs sortent leur version appelée UNIX V7, avec en
particulier, l’ajout de nouveaux utilitaires et un effort en matière de portabilité.
Cette version est la première à être diffusée dans le monde industriel. On peut
dire qu’elle est à l’origine du développement du marché Unix.
Les nombreuses modifications et améliorations apportées au système UNIX,
par AT&T et Berkeley ont abouti aux versions System V Release 4 d’AT&T et
4.4BSD de Berkeley.
Le support de l’environnement graphique est apparu avec le système
XWindow du MIT en 1984.
La fin des années 80 est marquée par une croissance sans précédent du
nombre de systèmes Unix dans le domaine des systèmes d’exploitation. Les
principales versions actuelles sont System VR4, GNU/Linux, SUN Solaris, FreeBSD,
IBM AIX, Microsoft Xenix…etc. Pour qu’un système d’exploitation puisse être un
Unix, il faut qu’il respecte la norme POSIX (Portable Operating System
Interface). Tout logiciel écrit en respectant la norme Posix devrait fonctionner
sur tous les systèmes Unix conformes à cette norme.
Une version gratuite d'Unix porte le nom de Linux (code source disponible).
Elle a été créée par Linus Torvalds en 1991. Par la suite, un grand nombre de
programmeurs ont contribué à son développement accéléré. Conçu d'abord pour
tourner sur des machines avec le processeur 80x86, Linux a migré à plusieurs
autres plate-formes.
9
[Link] et B. Zebbane et C. Benzaid
L'initialisation du système,
La gestion des processus,
La gestion des systèmes de fichiers,
La gestion de la mémoire et du processeur,
Etc.
Les programmes en espace utilisateur (user-space) appellent les
services du noyau via des appels systèmes (System Calls). En effet, les appels
systèmes font entrer l’exécution en mode noyau. Dans ce mode, le processus
est assuré de garder le processeur jusqu’au retour au mode utilisateur lorsque
l’appel système est terminé.
B. Bibliothèques
L’interface entre le noyau Unix et les applications est définit par une
bibliothèque (Ex. libc.a pour le langage C). Elle contient les modules permettant
d’utiliser les primitives du noyau mais aussi des fonctions plus évoluées
combinant plusieurs primitives. D’autres bibliothèques sont utilisées pour des
services spécialisés (fonctions graphiques,...).
Commandes
ls, cat, cp, rm,
Chown, adduser,
Librairie: stdio.h Grep, find, etc.
Scanf, printf, Shell
fopen, fclose (sh, csh, bash)
Putc, getc, etc. Les appels ystème
(SGF, Processus, etc.)
open fork
Autres librairies read exec
Mathématique
write pipe
Graphique
etc. close
Noyau
X Window
(startx, xterm, etc.)
C. Le Shell
Le shell désigne l’interface utilisateur sous UNIX. C’est un programme qui
permet à l'utilisateur de dialoguer avec le noyau. Il joue un double rôle celui
d’interpréteur de commandes et celui de langage de programmation. Il
existe plusieurs shells différents mais les plus répondus sont:
10
[Link] et B. Zebbane et C. Benzaid
le Bourne Shell : sh
le C-shell : csh
le Korn-Shell : ksh
Bash (Bourne Again Shell) : est un interpréteur (Shell) compatible sh qui
exécute les commandes lues depuis l'entrée standard, ou depuis un fichier.
C'est le shell par défaut sous Gnu/Linux.
D. Utilitaires
UNIX est livré avec un grand nombre de programmes utilitaires, parmi
lesquels :
Compilateurs : cc, gcc
Gestionnaire d’applications : make
Editeurs de texte : vi, emacs
7.3 Caractéristiques
Les principales caractéristiques, auxquelles est dû le succès d’UNIX, sont :
Portabilité : Une des premières caractéristiques d’Unix est son écriture (à
hauteur de 95%) en langage C, permettant ainsi une portabilité sur la
plupart des architectures en allant des micro-ordinateurs jusqu’aux
supercalculateurs.
Multi-utilisateurs et Multitâches : Plusieurs utilisateurs peuvent
accéder simultanément au système ; chaque utilisateur peut effectuer une
ou plusieurs tâches en même temps.
Temps partagé : c’est-à-dire que les ressources du processeur et du
système sont réparties entre les utilisateurs.
Interface utilisateur interactive (shell) : elle est constituée d’un
programme séparé du noyau permettant à l’utilisateur de choisir son
environnement de travail. Elle intègre un langage de commandes très
sophistiqué (scripts).
Système de fichiers hiérarchique : plusieurs systèmes de fichiers
peuvent être rattachés au système de fichiers principal ; chaque système
de fichiers possède ses propres répertoires.
Entrées-Sorties intégrées au système de fichiers : les périphériques
sont représentés par des fichiers, ce qui rend le système indépendant du
matériel et en assure la portabilité ; l’accès aux périphériques est donc
identique à l’accès aux fichiers ordinaires.
Gestion de la mémoire virtuelle : un mécanisme d’échange entre la
mémoire centrale (MC) et le disque dur permet de pallier un manque de
MC et optimise le système.
11
[Link] et B. Zebbane et C. Benzaid
Pour qu’un ordinateur commence à fonctionner (quand il est mis sous tension
ou réinitialisé), il doit avoir un programme initial à exécuter. Ce programme
initial, appelé programme d’amorçage, est simple : il initialise tous les aspects
du système, depuis les registres de l’U.C. jusqu’aux contrôleurs de périphériques
et contenu de la mémoire. Le programme d’amorçage doit savoir après comment
charger le S.E. et comment commencer à l’exécuter.
Pour atteindre cet objectif, le programme d’amorçage cherche le noyau du
S.E. à une adresse spécifiée (en général, au 1 er secteur de l’unité disque, appelé
secteur d’amorçage), puis, le charge en mémoire. Le S.E. démarre alors
l’exécution du premier processus d’initialisation et attend qu’un événement se
produise.
9 Interactions Utilisateur/Système
Pour un utilisateur, le système d'exploitation apparaît comme un ensemble
de procédures, trop complexes pour qu'il les écrive lui-même. Les bibliothèques
des appels système sont alors des procédures mises à la disposition des
programmeurs. Ainsi un programme C/C++ peut utiliser des appels système
d'Unix/Linux comme open(), write() et read() pour effectuer des Entrées/Sorties
de bas niveau.
L'interpréteur de commandes constitue une interface utilisateur/système.
Il est disponible dans tous les systèmes. Il est lancé dès la connexion au système
et invite l'utilisateur à introduire une commande. L'interpréteur de commandes
récupère puis exécute la commande par combinaison d'appels système et
d'outils (compilateurs, éditeurs de lien, etc.). Il affiche les résultats ou les erreurs,
puis se met en attente de la commande suivante. Par exemple, la commande de
l'interpréteur (shell) d'Unix suivante permet d'afficher à l'écran le contenu du
fichier appelé essai : cat [Link]
L'introduction du graphisme dans les interfaces utilisateur a révolutionné le
monde de l'informatique. L'interface graphique a été rendue populaire par le
Macintosh de Apple. Elle est maintenant proposée pour la plupart des
machines.
12
[Link] et B. Zebbane et C. Benzaid
13
[Link] et B. Zebbane et C. Benzaid
Les Registres Arithmétiques (ACC) qui servent aux opérations
arithmétiques.
Les Registres d’Index qui sont utilisés pour l’adressage
indexé. Dans ce cas l'adresse effective d'un opérande est
obtenue en ajoutant le contenu du registre d'index à l'adresse
contenue dans l'instruction.
Les Registres de Base qui permettent le calcul des adresses
effectives. Un registre de base contient une adresse de référence,
par exemple l'adresse physique correspondant à l'adresse
virtuelle 0. L'adresse physique est obtenue en ajoutant au champ
adresse de l'instruction le contenu du registre de base.
Les Registres Banalisés qui sont des registres généraux pouvant
servir à diverses opérations telles que stockage des résultats
intermédiaires, sauvegarde des informations fréquemment utilisées, …
etc. Ils permettent de limiter les accès à la mémoire, ce qui accélère
l'exécution d'un programme.
Le Registre Pile (Stack Pointer, SP) : Il pointe vers la tête de la pile du
processeur. Cette pile est une pile particulière (appelée pile système) est
réservée à l'usage de l'unité centrale, en particulier pour sauvegarder les
registres et l'adresse de retour en cas d'interruption ou lors de l'appel
d'une procédure. Le pointeur de pile est accessible au programmeur, ce
qui est souvent source d'erreur.
Exemple : Utilisation dans le cas d’appels imbriqués de procédures
ABCD.
Le Registre Mot d’Etat (PSW, Program Statut Word) : Il indique l’état
du processeur donné par des indicateurs (Flags) qu’on verra ci-après.
2. Cycle d’exécution du processeur
Un programme séquentiel est composé d’une suite d’instructions. L’exécution
du programme fait évoluer l’état de la machine d’un état à un autre. Cette
évolution est discrète : l’état n’est observable qu’en des instants particuliers
appelés "points observables", qui correspondent en général aux débuts et fins
d’instructions.
Le processeur central exécute continuellement le cycle suivant :
14
[Link] et B. Zebbane et C. Benzaid
Début
Point observable
Non Arrêt
Interruption
Suspension
Exemple
Programme suspendu lors d’une demande d’E/S et le périphérique est en
panne et ne répond pas, ou suspendu par le système pour une durée
déterminée.
Un programme est interrompu par l’exécution d’un programme plus
prioritaire que lui.
Remarque
Le cycle de processeur est indivisible et ne peut être interrompu qu’à la fin
de la phase Execute (i.e. on exécute au moins une instruction élémentaire d’un
programme pour pouvoir interrompre).
3. Etat du processeur
Il est décrit par le contenu de son registre d’état ou mot d’état (PSW). Le PSW
contient plusieurs types d’informations :
Etat d’exécution du programme
Le processeur peut être dans un état actif où il exécute des instructions,
ou dans l’état d’attente où l’exécution est suspendue. L’état d’exécution
en un point observable est donné par :
1. L’adresse de la prochaine instruction à exécuter (CO).
2. Les valeurs courantes des codes conditions qui sont des bits utilisés
dans les opérations arithmétiques et comparaisons des opérandes.
3. Le mode d’exécution. Pour des raisons de protection, l’exécution des
instructions et l’accès aux ressources se fait suivant des modes
d’exécution. Ceci est nécessaire pour pouvoir réserver aux seuls
15
[Link] et B. Zebbane et C. Benzaid
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.
4. masques d’interruption (seront détaillés dans la suite).
Informations sur le contexte accessible en mémoire et les droits d’accès
associés : Tables de segments de données, indicateurs de protection de
mémoire, …etc.
Remarque
L’état d’un processeur n’est observable qu’entre deux cycles du
processeur.
16
[Link] et B. Zebbane et C. Benzaid
Programme P brouillon
Editeur de texte
Chargeur
Erreur de
chargement
P Q
(Code source) (Code Source)
Compilateur
Editeur de liens
320
Programme complet
(P+Q)
Exécutable Chargeable
320
Procédure proc
18
[Link] et B. Zebbane et C. Benzaid
10.4 Le chargeur (Loader)
Après l’édition de liens, le programme exécutable doit être en MC pour être
exécuté. Le chargeur est un programme qui installe ou charge un exécutable en
MC à partir d’une adresse déterminée par le S.E.
Programme exécutable
Chargeur Processus
Adresse de chargement
20
[Link] et B. Zebbane et C. Benzaid
Identificateur processus
Etat du processus
Compteur ordinal
Contexte pour reprise
(Registres, Pointeurs piles, …)
Pointeurs sur file d’attente et priorité
(Ordonnancement)
Informations mémoire
(limites et tables pages/ segments)
MC CPU
Noyau Utilisateur
SP
Etat Pile
RI
Mémoire
Fichiers CO
Statistiques Tas
PSW
Priorité
Données
Utilisateur Registres
Registres Généreaux
Code
21
[Link] et B. Zebbane et C. Benzaid
Prêt (Ready) : le processus attend la libération du processeur pour
s’exécuter.
Actif (Running) : le processus est en exécution.
Bloqué (Waiting) : le processus attend une ressource physique ou
logique autre que le processeur pour s’exécuter (mémoire, fin d’E/S, …
etc.).
Nouveau Terminé
Réquisition CPU
Admis Exit
Prêt Actif
Allocation CPU
Terminaison d’un événement ou d’une E/S En attente d’un événement ou d’une E/S
Bloqué
11.6 Multiprogrammation
Dans un système multiprogrammé, le processeur assure l’exécution de
plusieurs processus en parallèle (pseudo-parallélisme).
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).
A. Mécanisme de commutation de contexte
La commutation de contexte consiste à changer les contenus des registres du
processeur central par les informations de contexte du nouveau processus à
exécuter.
22
[Link] et B. Zebbane et C. Benzaid
Processus P0 Système d’exploitation Processus P1
Exécuter
Petit contexte 1 1ère phase Petit contexte 2 2ème phase Petit contexte 2
Remarque
La commutation du contexte est déclenchée suivant l’état d’un indicateur qui
est consulté par le processeur à chaque point observable.
23
[Link] et B. Zebbane et C. Benzaid
Lorsqu’un programme est en cours d’exécution, plusieurs événements
peuvent arriver :
a. Les événements synchrones qui sont liés à l’exécution des programmes,
comme :
1. Division par zéro.
2. Exécution d’une instruction inexistante ou interdite.
3. Tentative d’accès à une zone protégée.
4. Appel à une fonction du S.E.
b. Les événements asynchrones qui ne sont pas liés à l’exécution du
programme en cours :
1. Fin d’opération d’E/S.
2. Signal d’horloge.
La supervision de ces deux types d’événements se fait par des contrôles
continus sur l’arrivée de ceux-ci.
Question
Par quel mécanisme peut-on réduire le temps de supervision du S.E. ?
Solution
Au lieu que ça soit le processeur qui contrôle continuellement l’état d’une
ressource, c’est plutôt à la ressource d’informer le processeur central sur son état
au moment significatif. C’est le principe des interruptions de programmes.
24
[Link] et B. Zebbane et C. Benzaid
Matériel logique
Processus P
câblé
Nouveau processus
(P ou autre)
Remarque
Le programme repris après le traitement de l’interruption peut être le
programme interrompu ou autre.
La mise en œuvre d’un système d’interruption nécessite la réponse aux
problèmes techniques suivants :
1. Sous quelles conditions une interruption pourra-t-elle arriver ?
2. Comment le PC reconnaîtra-t-il l’arrivée d’une interruption, et par quoi
répondra-t-il ?
3. Comment le PC arrivera-t-il à identifier la cause d’interruption ?
4. Comment le PC traitera-t-il les requêtes simulées d’interruption ?
5. Comment le PC réagira-t-il devant l’interruption d’une interruption ?
B. Conditions d’arrivée d’une interruption
Une interruption ne peut arriver au processeur que dans les conditions
suivantes :
1. Le système d’interruption est actif.
2. Le PC est à un point observable (interruptible).
3. L’interruption est armée.
4. L’interruption est démasquée.
5. L’interruption est plus prioritaire que le programme en cours.
Système d’interruption actif
Dans certains cas, le processeur a besoin d’interdire toute interruption
possible. Pour cela, il dispose d’un mécanisme
d’activation/désactivation globale des interruptions.
25
[Link] et B. Zebbane et C. Benzaid
Dans ces conditions, aucune interruption ne peut interrompre le PC, et
toute it est retardée à la prochaine activation du système d’interruption.
L’interruption est armée
Une interruption désarmée ne peut interrompre le PC. Ceci se passe
comme si la cause de l’it était supprimée. Toute demande d’interruption
faite durant son désarmement est perdue.
On utilise ce procédé quand on désire qu’un élément ne doive plus
interrompre.
L’interruption est démasquée
Parfois, il est utile de protéger, contre certaines interruptions, l’exécution
de certaines instructions (par exemple, les programmes d’it eux-mêmes).
Une interruption masquée ne peut alors interrompre le PC, mais toute
demande d’interruption faite durant le masquage est retardée
(mémorisée) pour être traitée à la levée du masquage.
Les informations concernant l’état masqué des interruptions figurent dans
le mot d’état du processeur.
On utilise le procédé de masquage pour définir des règles de priorité entre
différentes causes d’interruption. Ainsi, les interruptions de même niveau
de priorité ou d’un niveau plus bas peuvent être masquées, alors qu’une
interruption de priorité supérieure est en cours d’exécution.
Remarques
1. Le masquage porte sur un niveau ou une cause d’interruption,
contrairement à l’activation qui porte sur l’ensemble du système
d’interruption.
2. Suivant les systèmes, ces procédés (masquage, aucunement, activation)
peuvent exister totalement ou partiellement.
C. Types d’interruption
Les interruptions sont classées en deux grandes classes :
Les interruptions externes ou matérielles.
Les interruptions internes ou logicielles.
1. Interruptions externes
Ce sont les interruptions causées par des organes externes au processeur
central, comme les horloges de temps, les périphériques d’E/S, …etc.
Ces interruptions asynchrones (c’est-à-dire, peuvent arriver à tout moment
indépendamment de l’exécution du programme en cours) sont dues à :
Périphérique prêt.
Erreur durant l’E/S.
Fin d’E/S.
Ecoulement d’un délai de garde (horloge).
Réinitialisation du système.
…etc.
26
[Link] et B. Zebbane et C. Benzaid
2. Interruptions internes
Ce sont des interruptions causées par l’exécution du programme à l’intérieur
du PC. Ces interruptions sont synchrones et se divisent en deux sous-classes :
Les déroutements (trap ou exception) qui sont dus à des erreurs lors de
l’exécution d’un programme et en empêchent la poursuite de son
exécution. Ces erreurs peuvent avoir diverses causes :
Tentative d’exécution d’une opération interdite ou invalide.
Violation d’accès à une zone mémoire protégée ou inexistante.
Division par zéro.
Débordement arithmétique.
…etc.
Remarque
Un déroutement ne peut être masqué ou retardé, mais il peut être
supprimé (comme pour les déroutements liés aux opérations
arithmétiques).
Les appels au superviseur (SuperVisor Call, SVC) qui est une
instruction permettant, à partir d’un programme utilisateur d’accéder à un
service du S.E. (Ex. demande d’E/S, allocation dynamique de la mémoire,
fin de programme, accès à un fichier, …etc.).
Cette façon de procéder permet au système de :
Se protéger des usagers.
Vérifier les droits d’accès au service demandé.
Exemple
It : appel au superviseur
Rit : superviseur
Contrôle des paramètres
Contrôle des droits d’accès
Services Opération
Output Fin programme …………..
du SE Input (lecture)
27
[Link] et B. Zebbane et C. Benzaid
Toutefois, l’appel au superviseur d’un usager est traité comme interruption
pour permettre une commutation du contexte usager par le contexte
superviseur, car l’utilisation d’un service de superviseur nécessite un
changement d’état (droits d’accès, mode d’exécution, priorité, …etc.).
Remarque
La distinction entre interruption, déroutement et appel au superviseur se base
sur la fonction, mais le mécanisme est commun.
D. Requêtes simultanées d’interruption
Durant un cycle processeur, plusieurs demandes d’interruption peuvent
arriver simultanément :
Pt observable Pt observable
Cycle processeur
it (A)
28
[Link] et B. Zebbane et C. Benzaid
mémoire centrale) et les organes externes (périphériques de stockage et de
communication).
14 Matériel
14.1 Les périphériques
Un périphérique (Device) est un appareil qui interagit avec l’UC et la
mémoire. Certains périphériques sont branchés à l’intérieur de l’ordinateur
(disques durs, …etc.) alors que d’autres sont branchés sur des interfaces
externes de l’ordinateur (clavier, écrans, souris, imprimantes, …etc.).
Il existe deux grandes catégories de périphériques, les périphériques blocs
(Block Devices) et les périphériques caractères (Character Devices).
Périphériques caractères : Ils envoient ou reçoivent les données octets
par octets. Parmi les périphériques caractères, on peut citer : le clavier, la
souris, les imprimantes, les terminaux, …etc. Les données sont transmises
les unes derrière les autres, on parle alors d'accès séquentiel
(Sequential Access).
Périphériques blocs : Ils acceptent les données par blocs de taille fixe,
chaque bloc ayant une adresse propre. Parmi les périphériques blocs, on
peut citer : les disques, la carte vidéo, …etc. Le grand avantage par
rapport aux périphériques caractères est qu'il est possible d'aller lire ou
écrire un bloc à tout moment, on parle alors d'accès aléatoire (Random
Access).
29
[Link] et B. Zebbane et C. Benzaid
Registre de contrôle (Control Register) : qui sert à préciser au
coupleur ce qu’il doit faire, et dans quelles conditions (vitesse, format des
échanges,...).
Le contrôleur ou coupleur a la responsabilité de déplacer les données entre
le(s) unité(s) périphérique(s) qu’il contrôle et sa mémoire tampon ou buffer. La
taille de ce buffer varie d’un contrôleur à un autre, selon le périphérique contrôlé
et son unité de transfert.
30
[Link] et B. Zebbane et C. Benzaid
Disque
Bus SCSI
Moniteur Processeur
Disque
Cache
Bus PCI
Port
Port Série
Paralléle
31
[Link] et B. Zebbane et C. Benzaid
(a) (b)
Synchrone Asynchrone
Matériel Matériel
Temps Temps
Mode synchrone
Dans ce mode, le processeur (pilote) est mobilisé à suivre l’opération d’E/S
pendant toute la durée du transfert (polling). La fin du transfert est
détectée par la consultation d’un indicateur spécifique au coupleur ou au
périphérique.
Pour démarrer une opération d’E/S, le processeur (pilote) charge les
informations nécessaires dans les registres appropriés du contrôleur de
périphérique. Celui-ci examine à son tour le contenu de ces registres pour
déterminer l’action à effectuer (lecture, écriture, …etc.) et lance le
transfert.
La forme générale du pilote est la suivante :
Pilote synchrone d’E/S
Initialise le transfert (sens du transfert : lecture, écriture,
adresse du périphérique, …etc.).
Vérifie la disponibilité du périphérique.
Lance le transfert.
Reste en attente (active) jusqu’à la fin du transfert.
Fin.
Inconvénients
Le CPU exécute une boucle d’attente active (busy loop), à la place de
laquelle il pourrait faire des calculs pour le compte d’autres programmes
Perte de temps CPU.
Mode asynchrone
Dans ce mode de pilotage, le processeur est libéré du contrôle de fin de
transfert. Une interruption est générée par le coupleur du périphérique
avertissant ainsi le processeur (pilote) de la fin du transfert.
32
[Link] et B. Zebbane et C. Benzaid
Durant l’opération du transfert, le processeur peut exécuter un autre
programme.
Programme
-
-
-
Read(A)
33
[Link] et B. Zebbane et C. Benzaid
MC
Gestionnaire de
conflits
Requête
Requête Bus mémoire plus rapide prioritaire
(Accès par DMA)
CPU DMA
P4 Contrôleur de
périphériques
Périphériques Contrôleur de
traités par le CPU P5
périphériques
P6 P1 P2 P3
34
[Link] et B. Zebbane et C. Benzaid
Canal DMA
Registre Adresse
Registre Données
MC
35
[Link] et B. Zebbane et C. Benzaid
- (1) Le pilote de périph. est ordonné
de transférer les données du disque
vers un buffer situé à l’adresse X. Processeur
- (5) Le contrôleur DMA transfert les
- (2) Le pilote de périphérique
bytes au buffer X, en incrémentant
ordonne le contrôleur de disque de
l’adresse mémoire et en
transférer C bytes à partir du
décrémentant le compteur C Cache
disque vers le buffer à l’adresse X.
jusqu’à ce que C devient nul (C =
0). Mémoire
Contrôleur X
- (6) Quand C = 0, le DMA Bus Mémoire CPU Buffer
DMA / bus/ It
interrompt l’UC pour signaler
l’achèvement du transfert.
Bus PCI
Initialisation
Interruption
36
[Link] et B. Zebbane et C. Benzaid
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 S.E 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).
Périphérique :
Lecteur de cartes N°1
Etat :Inactif Requête pour
l’imprimante 3:
@:38546
Périphérique : Longueur:1372
Imprimante N°3
Etat :Occupé
18 E/S Tamponnées
Bien que le rôle final d’une E/S soit l’échange de caractères entre un
périphérique et une zone de mémoire d’un utilisateur, les logiciels d’E/S utilisent
souvent une zone intermédiaire, appelée tampon d’E/S (I/O Buffer), dans la
mémoire du système. L’utilisation des tampons est justifiée par l’amélioration
des performances d’un périphérique.
Exemples
Dans un échange avec un disque magnétique, l’essentiel du temps pris par
l’échange vient du positionnement du bras et du délai rotationnel. Il est
alors classique de ranger dans un tampon le contenu de toute une piste.
La lecture de caractères au clavier peut se faire par anticipation ; c’est à
dire que l’utilisateur peut frapper des caractères avant que le programme
ait envoyé un ordre d’entrée. Les caractères frappés sont stockés dans le
tampon et seront plus tard transférés dans une zone utilisateur.
Dans un système en temps partagé, l’espace mémoire d’un utilisateur
peut être vidé de la mémoire principale. C’est en particulier le cas
lorsqu’un processus est bloqué en attente de la fin d’une E/S lente. Le
recours à un tampon système est alors obligatoire.
37
[Link] et B. Zebbane et C. Benzaid
19 Couches Logicielles d’E/S
Le système d’exploitation s’occupe de gérer les E/S à l’aide de quatre (04)
niveaux de logiciel (Voir Figure 3.10), soit :
Logiciel faisant partie de l’espace utilisateur (User-Space Software).
Il représente les procédures standards (programmes de
bibliothèque), appelées à partir des programmes pour formuler une
requête d’E/S au superviseur et mettant en œuvre des fonctions
supplémentaires (Ex. formatage des E/S, gestion des spools, …etc.).
Logiciel indépendant du matériel (Device-independent Software).
Le rôle principal de cette couche est de donner une interface uniforme
(commune à toutes les E/S) au logiciel des utilisateurs. Les principales
fonctionnalités offertes par cette couche sont :
– Adressage des périphériques par leur nom,
– Protection des périphériques,
– Mise en mémoire tampon de données,
– Signalisation d'erreurs (erreurs de programmation comme écrire sur un
disque inexistant, erreurs qui n'ont pu être résolues par les pilotes, ...),
– Allocation et libération des périphériques dédiés (i.e. non partageables,
en gérant une file d'attente par exemple...),
– Fourniture d'une taille de bloc indépendante du périphérique.
Un programme d’E/S appelé pilote (Driver ou Handler) commandant le
fonctionnement élémentaire de chaque unité périphérique. Le pilote de
périphériques est la seule partie logicielle à connaître toutes les
spécificités du matériel. Le handler gère directement l'interface du
coupleur du périphérique, traite les interruptions émises par celui-ci,
détecte et traite les cas d'erreurs.
Il est généralement invisible aux utilisateurs du système. Le handler
contient donc les primitives permettant de commander le périphérique. Ce
driver est constitué de deux procédures, quasiment indépendantes : une
procédure traitant l'initialisation d'un transfert et une procédure
de traitement de l'interruption associée à une fin de transfert.
Le gestionnaire d’interruptions (Interrupt Handler) dont le rôle est
d’informer le pilote associé au périphérique de la fin de l’E/S.
38
[Link] et B. Zebbane et C. Benzaid
Niveau utilisateur
Bibliothèque d’E/ S
fread fread
fread(ptr,size,n,FILE)
Appels système
Logiciel
Logiciel indépendant de périphériques
Niveau superviseur
read(filedes,buf,size)
(nommage, gestion tampons)
Gestionnaire de périphérique
read_block(periph,src,dst) (device driver)
Gestionnaire d’interruptions
(Interrupt handler)
Matériel
Interface de
contrôle
Périphérique
39
[Link] et B. Zebbane et C. Benzaid
2 Types de Fichiers
On distingue différents types de fichiers :
N om
Date et heure de modification
Taille en octets
Groupe propriétaire
Propriétaire
Nombre de liens physiques
Droits d’accès autres
Droits d’accès groupe
Droits d’accès propriétaire
- Fichier régulier
Type d Répertoire
l Lien symbolique
b Périphérique bloc
c Périphérique caractère
s Socket
p Tube nommé
41
[Link] et B. Zebbane et C. Benzaid
Un lien physique (Hard Link) correspond à l’ajout d’un nouveau nom pour
le même fichier. Les liens physiques ne sont autorisés que pour les fichiers de
données (et donc interdits pour les répertoires ou les fichiers spéciaux) et ne
peuvent exister que dans le même système de fichiers que le fichier lié.
Un lien symbolique (Soft Link) est un fichier spécial contenant le chemin
du fichier ou du répertoire lié. Il peut se trouver n’importe où dans la hiérarchie.
La création des liens physiques ou symboliques se fait à l’aide de la
commande ln. La commande :
$ ln nomfich nomlien
crée un lien physique appelé nomlien sur le fichier nomfich. Par contre la
commande :
$ ln -s nomfich nomlien
crée un lien symbolique appelé nomlien sur le fichier nomfich.
7 Descripteur de Fichier
Les fichiers ouverts par un processus sont manipulés à travers des
descripteurs de fichiers. Un descripteur de fichier (File Descriptor) est un
entier indexant une entrée de la table des descripteurs de fichier (File
Descriptors Table). Il existe une table des descripteurs de fichiers rattachée à
chaque processus. Le nombre d'entrées de cette table, correspondant au nombre
43
[Link] et B. Zebbane et C. Benzaid
maximum de fichiers que peut ouvrir simultanément un processus, est donné par
la pseudo-constante NOFILE définie dans le fichier en-tête <sys/param.h>.
Un descripteur de fichier représente un pointeur vers la table des fichiers
ouverts (Open Files Table) dans le système.
Les trois (03) premières entrées de la table des descripteurs de fichier dans
chaque processus sont automatiquement allouées et réservées dès la création,
pour les fichiers suivants :
0 : Entrée standard (Standard Input) /dev/stdin,
1 : Sortie standard (Standard Output) /dev/stdout,
2 : Sortie standard pour les messages d’erreur (Standard Error)
/dev/stderr.
Chaque entrée correspond à une structure de donnée contenant :
des informations sur le fichier associé,
le mode d’ouverture (lecture, écriture),
la position courante dans le fichier (offset).
Les droits d’accès sont vérifiés lors de la création du descripteur.
10 Fichiers et Permissions
19.5 Principe
Sous UNIX, pour un fichier ou répertoire, on distingue trois (03) catégories
d’utilisateurs : le propriétaire (u : user), les membres du groupe (g : group),
et les autres utilisateurs (o : others). Pour chaque catégorie, il est possible
d’attribuer des droits de lecture (r : read), d’écriture (w : write) ou d’exécution
(x : execute). L’interprétation de ces droits varie selon qu’il s’agisse d’un fichier
ou d’un répertoire.
Pour les fichiers, l’interprétation est la suivante :
r : l’utilisateur peut lire le contenu du fichier.
44
[Link] et B. Zebbane et C. Benzaid
w : l’utilisateur peut modifier le contenu du fichier.
x : l’utilisateur peut exécuter le fichier.
Pour les répertoires, l’interprétation est comme suit :
r : l’utilisateur peut lister le contenu du répertoire.
w : l’utilisateur peut créer, renommer ou supprimer des fichiers dans
le répertoire.
x : l’utilisateur peut accéder au répertoire et travailler avec son
contenu.
4 2 1 4 1 4
rwx r-x r--
4+2+1 4+1 4
Propriétaire Groupe Autres
7 5 4
Figure 4.1 : Représentation des droits d’accès
45
[Link] et B. Zebbane et C. Benzaid
chmod [-R] mode fichier ...
u + r
g - w
o = x
ug rw
uo rx
go wx
ugo rwx
a s
t
X
Exemples
chmod u+x,g+x,o+x monfichier
Ajouter la permission d’exécution au fichier monfichier, pour le
propriétaire, le groupe, et les autres.
chmod ugo+x monfichier
Identique à la précédente.
chmod a+x monfichier
Identique à la précédente.
chmod g-w,o-w monfichier
Enlever le droit d’écriture sur le fichier monfichier, pour le groupe et les
autres.
chmod u=rwx monfichier
Attribuer les droits de lecture, écriture et exécution sur le fichier mon
fichier, pour le propriétaire.
chmod a= monfichier
Enlever tous les droits à tout le monde (propriétaire, groupe et autres).
chmod 711 monfichier
Attribuer les droits de lecture, écriture et exécution sur le fichier
monfichier, pour le propriétaire (7) et le droit d’exécution sur ce fichier
pour le groupe et les autres (1).
46
[Link] et B. Zebbane et C. Benzaid
19.7 Droits par défaut
Le système attribue des droits par défaut aux fichiers et répertoires lors de
leur création. Par défaut, le système positionne les droits de lecture et d’écriture
pour toutes les catégories d’utilisateur (i.e. rw-rw-rw (666)). Les répertoires
reçoivent en plus les droits d’exécution (i.e. rwxrwxrwx (777)).
Ces droits peuvent être modifiés à l’aide de la commande umask. Cette
commande indique les droits qu’ils ne doivent pas être accordés aux fichiers et
répertoires lors de leur création, autrement dit les droits à soustraire à partir des
droits par défaut quand les fichiers et répertoires sont créés.
La valeur par défaut du masque sur un système UNIX est 022, ce qui fait que
les fichiers seront créés avec les permissions 644 (rw-r--r--) et les répertoires
avec les permissions 755 (rwxr-xr-x).
Fichiers Répertoires
666 777
Permissions par
rw rw rw rw rw rw
défaut
- - - x x x
022 022
umask 00 01 01 00 01 01
0 0 0 0 0 0
644 755
Résultat rw r-- r-- rw r-x r-x
- x
47
[Link] et B. Zebbane et C. Benzaid
19.9 Volumes et partitions
Un volume est une quantité fixe d’espace de stockage sur un ou plusieurs
disques. Un disque peut contenir plusieurs volumes et un volume peut s’étendre
sur plusieurs disques.
Un volume peut être créé en subdivisant un disque dur en partitions. Une
partition, dite aussi disque logique (Logical Disk), est une portion de l’espace
de stockage sur un disque physique, qui va contenir un et un seul système de
fichiers. On distingue différents types de partitions :
Une partition primaire (Primary Partition) est une partition physique
qui est prête à recevoir un système de fichier quand elle est créée. Un
disque dur est limité à quatre (04) partitions primaires.
Une partition étendue (Extended Partition) ne peut pas être formatée,
par conséquent elle ne peut pas supportée un système de fichier. Une
partition étendue peut contenir des partitions logiques (Logical
Partitions) qui sont des divisions logiques des secteurs de stockage qui
peuvent être formatées afin de supporter un système de fichier.
La création d’un volume se fait en suivant les étapes suivantes :
1. Partitionner le disque dur,
2. Formater la partition, en sélectionnant un système de fichier approprié,
3. Monter le volume (le rendre disponible à l’utilisateur).
48
[Link] et B. Zebbane et C. Benzaid
Les périphériques IDE sont accessibles via des fichiers spéciaux nommés
avec des noms de la forme hdx, où x est une lettre identifiant le disque
sur le bus IDE.
– Le périphérique IDE maître sur le premier port est accessible via
/dev/hda.
– Le périphérique IDE esclave sur le premier port est accessible via
/dev/hdb.
– Le périphérique IDE maître sur le deuxième port est accessible via
/dev/hdc.
– Le périphérique IDE esclave sur le deuxième port est accessible via
/dev/hdd.
Périphériques SCSI
Les périphériques SCSI sont accessibles via des fichiers spéciaux dont le
nom est de la forme sdx.
– Le premier disque dur SCSI détecté est /dev/sda.
– Le deuxième disque dur SCSI détecté est /dev/sdb.
– …etc.
Lecteurs de disquette
Les lecteurs de disquette sont accessibles via des fichiers spéciaux dont le
nom est de la forme fdn, où n est le numéro du lecteur.
– Le premier lecteur de disquette est /dev/fd0.
– Un deuxième lecteur de disquette s’appellera /dev/fd1.
– …etc.
Disques SATA, USB
Ces périphériques sont nommés de la même façon que les périphériques
SCSI.
La règle de numérotation des partitions d’un disque dur est la suivante :
Les partitions primaires et la partition étendue sont numérotées de
1 à 4.
Les partitions logiques sont numérotées obligatoirement à partir de 5.
Par exemple, /dev/hda5, /dev/hda6, …etc.
19.13Montage de volume
Le mécanisme de montage permet de raccorder une partition à un répertoire
de l'arborescence principale. Ainsi, le fait de monter une partition dans le
répertoire /mnt/rep rendra l'ensemble des fichiers de la partition accessible à
partir de ce répertoire, appelé point de montage (Mount Point).
Pour cela, on utilise la commande mount. Elle a besoin de plusieurs
arguments, dont, le périphérique à monter (i.e. le volume), le point de montage
(l'endroit où vous souhaiter monter le périphérique), le système de fichier (ext3,
vfat, ntfs, ...), et certaines options.
$ mount –options <nomvolume> <pointmontage>
Exemple
La commande
$ mount /dev/hda5 /home/essai
permet de monter la partition /dev/hda5 sur le point de montage /home/essai.
La commande
$ mount
permet d’afficher la liste des volumes actuellement montés. Ceci revient à
afficher le contenu du fichier /etc/mtab.
Inversement, pour démonter un volume, c’est la commande umount qu’il
faut utiliser.
$ umount <pointmontage>
Exemple
La commande
$ mount /home/essai
permet de démonter la partition /dev/hda5 du répertoire /home/essai.
50
[Link] et B. Zebbane et C. Benzaid
Dans certains cas, on ne peut pas démonter une partition :
1. si une commande s’exécute dans la partition,
2. si des fichiers sont ouverts dans la partition,
3. si l’on a un répertoire courant dans un répertoire de la partition.
Exemple
$ cd /mnt
$ umount /mnt
umount: /mnt: Device busy
Les commandes fuser (file user) et lsof (list of open files) permettent
d’identifier les fichiers ouverts et quels processus sont en train d'utiliser la
partition et qui empêchent le démontage.
19.14Montage automatique
Pour pouvoir monter automatiquement un volume au démarrage du système,
il suffit de rajouter une entrée correspondant à ce volume dans le fichier
/etc/fstab. Ce fichier est organisé en six (06) colonnes :
Point de Système de
Nom de partition Options Dump Check
montage fichiers
LABEL=/ / ext3 defaults 1 1
none /proc proc defaults 0 0
/dev/hda1 /win ntfs ro,defaults 0 0
/dev/sda1 /mnt/usb vfat rw,user,noauto 0 0
52
[Link] et B. Zebbane et C. Benzaid
53
[Link] et B. Zebbane et C. Benzaid
Disque Tête
Unité 0 Queue
PCB5
Terminal Tête
Unité 0 Queue
.
.
.
Figure : La file d’attente des proc. Prêts et plusieurs files d’attente des périph. d’E/S
File d’attente
UC
de proc. prêts
Tranche de
temps expirée
Le fils Le fils
Création d’un fils
termine s’exécute
54
[Link] et B. Zebbane et C. Benzaid
3 Concept de Scheduling
19.15Définition
On appelle « Scheduling » du processeur l’organisation qui sous-tend à
l’allocation du processeur central aux programmes.
On appelle «Scheduler » la partie du SE qui s’occupe de cette organisation et
répartit le temps processeur entre ces programmes.
19.18Priorité de scheduling
L’allocation du processeur central aux programmes peut se faire suivant
certaines valeurs de priorité, qui son affectées aux programmes automatiquement
par le système de Scheduling, ou bien de manière externe par les usagers ou le
responsable d’exploitation de la machine (administrateur système de la machine).
Les priorités peuvent être allouées statiquement ou dynamiquement.
55
[Link] et B. Zebbane et C. Benzaid
5 Politiques de Scheduling
19.19Politique « Premier Arrivé Premier Servi » (FCFS, First Come First
Served- FIFO)
Consiste à servir le 1er processus arrivé dans le système.
C’est une politique non préemptive qui désavantage les processus courts.
Exemple
Considérons cinq processus A, B, C, D et E dont les durées et leurs arrivages
respectifs sont donnés dans la table ci-après. Faire un schéma qui illustre son
exécution et calculer le temps de réponse de chaque processus, le temps moyen
de réponse, le temps d'attente et le temps moyen d'attente en utilisant la
politique FCFS.
Le temps de réponse pour chaque processus est obtenu en soustrayant le
temps d'arrivée du processus du temps de terminaison :
Temps de réponse = Date de fin d’Exe. – Temps d’arrivée.
Le temps d’attente est calculé en soustrayant le temps d’exécution du temps
de réponse :
Temps d’attente = Temps de réponse – Durée d’Exe.
Le schéma d’exécution est : AAABBBBBBCCCCDDE
Process Duré Temps Date Date Temps Temps
us e d’arriv Début fin de d’atte
56
[Link] et B. Zebbane et C. Benzaid
Remarque
Temps moyen d’attente élevé si de longs processus sont exécutés en premier.
57
[Link] et B. Zebbane et C. Benzaid
A 3 0 0 3 3 0
B 6 1 3 4 11 16 15 9
C 4 4 4 8 4 0
D 2 6 9 11 5 3
E 1 7 8 9 2 1
Temps de réponse (3+15+4+5+2)/5= 29/5 = 5,8 UT
moyen
Temps d’attente moyen (0+9+0+3+1)/5 = 13/5 = 2,6 UT
Nbr de changements de 6
CTXT
Remarque
58
[Link] et B. Zebbane et C. Benzaid
59
[Link] et B. Zebbane et C. Benzaid
11 13
14 15
C 4 4 5 6 8 15 11 7
9 12
13 14
D 2 6 7 8 11 12 6 4
E 1 7 9 10 3 2
Temps de réponse (5+15+11+6+3)/5= 40/5 = 8 UT
moyen
Temps d’attente moyen (2+9+7+4+2)/5 = 24/5 = 4,8 UT
Nbr de changements de 16
CTXT
Exemple 2
Considérons trois processus A, B, et C dont les durées et leurs arrivages
respectifs sont donnés dans la table ci-après. Faire un schéma qui illustre son
exécution et calculer le temps de réponse de chaque processus, le temps moyen
de réponse, le temps d'attente et le temps moyen d'attente ainsi que le
nombre de changements de contexte effectués en utilisant la politique RR.
On suppose que le Quantum = 3 et la durée de commutation = 1.
Process Duré Temps Date Préem Repr Date Temps Temps
us e d’arriv Début pté is fin de d’atte
d’Ex ée d’Exe. A à d’Exe. réponse nte
e.
A 8 0 1 4 9 22 22 14
12 20
B 5(2)3 3 5 8 17 28 25 15
19 25
C 4 7 13 16 23 24 17 13
Temps de réponse (22+25+17)/3= 64/3 = 21,33 UT
moyen
Temps d’attente moyen (14+15+13)/3 = 42/3 = 14 UT
Nbr de changements de 8
CTXT
60
[Link] et B. Zebbane et C. Benzaid
Exemple
Plus haute priorité
Processus Systèmes
Processus Intéractifs PC
Processus Batchs
61
[Link] et B. Zebbane et C. Benzaid
RR, Quantum =8 ms
FCFS
62
[Link] et B. Zebbane et C. Benzaid
8 Hiérarchie
1 ns Registres
Cache Niveau 2
Mémoires Secondaire
5 ms
(Disque Dur)
Mémoire
Mémoire Tertiaire Permanente
5s
Archivage
(Bandes magnétiques)
Capacité de stockage
63
[Link] et B. Zebbane et C. Benzaid
9 Mémoire Centrale
Le terme mémoire désigne un composant destiné à contenir une certaine
quantité de données, et à en permettre la consultation. La mémoire centrale, dite
aussi la mémoire vive (Random Access Memory, RAM), est un ensemble de
mots mémoires où chaque mot a sa propre adresse. L'octet représente la plus
petite quantité de mémoire adressable. Plusieurs types de mémoires sont utilisés,
différentiables par leur technologie (DRAM, SRAM, ...etc.), et leur forme (SIMM,
DIMM, ...etc.).
Il s'agit d'une mémoire volatile ; ce qui sous−entend que son contenu est perdu
lorsqu'elle n'est plus alimentée électriquement.
La mémoire vive sert à mémoriser des programmes, des données à traiter, les
résultats de ces traitements, ainsi que des données temporaires.
Deux types d’opérations peuvent s’effectuer sur les mots mémoires ; à savoir la
lecture (Read) et l’écriture (Write) :
Pour lire la mémoire: une adresse doit être choisie à partir du bus
d’adresse et le bus de contrôle doit déclencher l’opération. Les données à
l’adresse choisie se retrouvent sur le bus de données.
Pour écrire la mémoire: une adresse doit être choisie à partir du bus
d’adresse et le bus de contrôle doit déclencher l’opération. Les données à
l’adresse choisie sont remplacées par celles sur le bus de données.
10 Objectifs
Le gestionnaire de la mémoire est un module du système d’exploitation dont le
rôle est la gestion de la mémoire principale (RAM). Le but d’une bonne gestion
de la mémoire est d’augmenter le rendement global du système. Pour cela, Le plus
grand nombre possible de processus en exécution doit y être gardé en MC, de façon
à optimiser le fonctionnement du système en multiprogrammation en assurant une
bonne répartition entre les E/S et la demande CPU.
Le gestionnaire de la mémoire doit répondre aux questions suivantes :
Comment organiser la mémoire ? (une ou plusieurs partitions, le nombre et
la taille des partitions fixes ou variables au cours du temps).
Faut-il allouer une zone contiguë à chaque processus à charger en mémoire ?
Faut-il allouer tout l’espace nécessaire à l’exécution du processus entier ?
(politique d’allocation).
Comment mémoriser l’état de la mémoire? Parmi les parties libres en
mémoire, lesquelles allouées au processus? (politique de placement)
S’il n’y a pas assez d’espace en mémoire, doit-on libérer de l’espace en
retirant des parties ou des processus entiers? Si oui lesquels ? (politique de
remplacement).
Les adresses figurant dans les instructions sont-elles relatives? Si oui,
comment les convertir en adresses physiques.
64
[Link] et B. Zebbane et C. Benzaid
0 0 0
P1 P1 P1
50 50 50
P2 P2
100
P2
150 150
Réallocation Chargement P4
200
De P2 De P4
300 300 300
P3 P3 P3
65
[Link] et B. Zebbane et C. Benzaid
19.29Organisation logique
Le gestionnaire de la mémoire divise l’espace mémoire en zones logiques
appelées partitions ou segments ou pages. Cette organisation ne reflète pas
nécessairement l’organisation physique de la mémoire.
Noyau (Sous-
Systèmes)
Kernel
Données N oyau
(PCBs, Pages libres,
...etc.)
Pile
Tas
User
BSS
Données
Code
66
[Link] et B. Zebbane et C. Benzaid
Programme
Source
Compilateur ou Moment de la
Assembleur Compilation
Module Objet
Autres
Modules
Objets
Editeur de Liens
Module de Moment du
Chargement Chargement
Bibliothèque
du Système
Chargeur
Bibliothèque du
Système
Chargée
Dynamiquement
Liaison
Dynamique Image Mémoire Moment de
Binaire en Mémoire l’Execution
67
[Link] et B. Zebbane et C. Benzaid
68
[Link] et B. Zebbane et C. Benzaid
foo: ...
Liaison d’adresse pendant le chargement foo: ...
175 1175
Liaison d’adresse pendant l’exécution
1000 Library
Routines
0
Library
Routines P:
:
P: 1100
push ...
Registre de Base 100 :
jmp 1175
100 push ...
:
0 jmp 175
:
foo: ...
foo: ...
1175
Figure :
175 Liaison d’objets à des adresses mémoire
69
[Link] et B. Zebbane et C. Benzaid
Registre de
Translation
14000
Adresse Adresse
Logique Physique
CPU + Mémoire
346 14346
MMU
12 Stratégie d’allocation
19.35Allocation 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é.
70
[Link] et B. Zebbane et C. Benzaid
0K Adresses basses
Système
d’Exploitation
400K
Espace Utilisateur
2300K
Non
Charger Programme
Exécuter Programme
Libérer Espace
Mémoire
71
[Link] et B. Zebbane et C. Benzaid
8M 8M
8M 8M 2M
10M
8M 4M
14M
16M
6M
8M 20M
24M 8M
8M 28M
32M 8M
8M 36M
40M
12M
8M
48M 48M
Table de description des partitions
8M
56M 16M
8M
64M 64M
Partitions de tailles Partitions de tailles
égales inégales
Algorithme de placement
Les programmes n'ayant pu se loger en mémoire sont placés dans une file
d'attente (une file unique ou une file par partition)
a. Utilisation de files multiples
Chaque nouveau processus est placé dans la file d’attente de la plus
petite partition qui peut le contenir.
72
[Link] et B. Zebbane et C. Benzaid
Système
d’Exploitation
Partition 1
Partition 2
Partition 3
Partition 4
Système
d’Exploitation
Partition 1
Partition 2
Partition 3
Partition 4
73
[Link] et B. Zebbane et C. Benzaid
Etat de la mémoire
Pour gérer l'allocation et la libération de l'espace mémoire, le gestionnaire
doit connaître l'état de la mémoire.
– Tables de bits (Bit Maps)
La mémoire est un ensemble d’unités d’allocation. Un bit est associé à
chaque unité. Lorsqu'on doit ramener un processus de k unités, le
gestionnaire de la mémoire doit alors parcourir la table des bits à la
recherche de k zéros consécutifs.
Cette méthode est rarement utilisée car la méthode de recherche est
lente (k zéros consécutifs), et elle présente aussi l'inconvénient d'être
relativement gourmande en espace mémoire, si on veut contrôler assez
finement l'utilisation de la mémoire.
74
[Link] et B. Zebbane et C. Benzaid
A B C D E
11110011
11111100
11111110
A B C D E
P 0 4 H 4 2 P 6 5 P 11 3
H 14 2 P 16 5 P 21 2 H 23 1
Algorithme de placement
Il existe plusieurs algorithmes afin de déterminer l’emplacement d’un
programme en mémoire. Le but de tous ces algorithmes est de maximiser
l’espace mémoire occupée, autrement dit, diminuer la probabilité de
situations où un processus ne peut pas être servi, même s’il y a assez de
mémoire.
– First-fit (le premier trouvé) : Le programme est mis dans le premier
bloc de mémoire suffisamment grand à partir du début de la mémoire.
– 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é.
– 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.
75
[Link] et B. Zebbane et C. Benzaid
12K 12K
First-fit
Bloc alloué
22K
6K Bloc libre
Best-fit
Dernier
bloc 18K
alloué 2K
6K 6K
14K 14K
Next-fit
Worst-fit
36K
20K
A vant A près
3. Fragmentation mémoire
Les partitions multiples entraînent une fragmentation de la mémoire. Il y
aurait suffisamment de mémoire libre pour charger un processus, mais
76
[Link] et B. Zebbane et C. Benzaid
SE
Partition 2K
Fragmentation
Interne
Partition 4K
Fragmentation
Partition 6K
Externe
Mémoire
4. Compactage (Compaction)
Le compactage est une solution pour la fragmentation externe qui permet de
regrouper les espaces inutilisés (i.e. les blocs libres) dans une partie de la
mémoire (Ex. début, milieu). Le compactage entraîne un changement
d'adresse. Par conséquent, les adresses du programme doivent être mise à
jour. Très coûteuse en temps CPU, cette opération est effectuée le moins
souvent possible.
Le compactage est possible seulement si la translation des adresses est
dynamique et si elle est effectuée au moment de l’exécution.
Les programmes sont déplacés en mémoire de façon à réduire à 1 seul grand
trou plusieurs petits trous disponibles.
L’opération de compactage est effectuée quand un programme qui demande
d’être exécuté ne trouve pas une partition assez grande, mais sa taille est
plus petite que la fragmentation externe existante
77
[Link] et B. Zebbane et C. Benzaid
La compaction n'est effectuée que si l'on utilise les registres base et étendue
et elle nécessite l'arrêt de l'exécution des processus.
0K 0K
SE SE
40K 40K
P5 Compaction
P5
84K 84K
100K
P4
P4
154K
170K P3
184K
200K
230K P3
256K 256K
Figure : Compactage
5. Va-et-vient (Swapping)
SE
Processus
Swap out P1
Processus
Swap in P2
Espace
Utilisateur Disque
MC
Figure : Système de swapping
Les stratégies de choix des processus à écrire sur disque sont sensiblement
identiques à celles mises en œuvre pour l'ordonnancement des processus.
78
[Link] et B. Zebbane et C. Benzaid
79
[Link] et B. Zebbane et C. Benzaid
Adresse Adresse
Logique Physique
Mémoire
UC p d f d
Physique
Table de pages
Figure : Matériel pour la pagination
Donc, si T est la taille d’une page et U une adresse logique, alors l’adresse
paginée (p,d) est déduite à partir des formules suivantes :
p = U Div T (où, Div est la division entière)
d = U Mod T (où, Mod est le reste de la division)
80
[Link] et B. Zebbane et C. Benzaid
1 Page 0
0
Page 0 2
0 1
1000
1 4
Page 1 3 Page 2
2 3
2000
3 7
Page 2 4 Page 1
3000
Table de pages
Page 3 5
Mémoire 6
Logique
7 Page 3
Mémoire
Physique
81
[Link] et B. Zebbane et C. Benzaid
CPU (i.e. MMU) qui contient quelques entrées de la table de pages les plus
récemment accédés.
Lors de la traduction d’une adresse, on essayera d'abord de la traduire par
l'intermédiaire du TLB. Si la page était présente on ne sollicite pas la table de
pages, et on fait la traduction immédiatement : un seul accès mémoire est
alors nécessaire pour accéder à l’octet recherché. Sinon, on fait une
recherche dans la table de pages, et on met à jour le TLB pour d'éventuelles
références futures. Cette mise à jour suppose que l'on éjecte une page qui
était déjà présente dans le cache si ce dernier est plein.
Adresse
Logique
UC p d
Numéro Numéro
de de
Page Frame
Présence
dans TLB
Adresse
Physique Mémoire
f d
TLB Physique
p
Absence dans TLB
Table de pages
Exemple
On suppose disposer des paramètres suivants :
TMC qui représente le temps d’accès à la mémoire centrale
TTLB qui représente le temps d’accès à la mémoire associative
P qui représente la probabilité pour que l’entrée de la page référencée soit
dans la mémoire associative.
Donnez, en fonction de ces trois paramètres, le temps d’accès effectif
(moyen) à la mémoire paginée : Tamp = P*(TMC+TTLB) + (1-P)*(2*TMC+TTLB)
B. Segmentation
1. Principe de la segmentation
82
[Link] et B. Zebbane et C. Benzaid
Pile
Programme
principal
Sous-
programe
Data
Dans une mémoire segmentée, chaque unité logique d’un programme usager
est stockée dans un bloc mémoire, appelé « segment » à l’intérieur duquel
les adresses sont relatives au début du segment. Ces segments sont de
tailles différentes. Un programme sera donc constitué d’un ensemble de
segments de code et de données, pouvant être dispersés en MC.
La segmentation facilite l'édition de liens, ainsi que le partage entre
processus de segments de données ou de codes.
Contrairement au schéma de pagination, la segmentation permet d’éliminer
la fragmentation interne car l’espace mémoire alloué à un segment est de
taille égale exactement à la taille du segment. Cependant, une fragmentation
externe peut se produire due au fait qu’on fait une allocation dynamique de
l’espace mémoire.
2. Schéma de translation d’adresses
Chaque segment est repéré par son numéro S et sa longueur variable L. Un
segment est un ensemble d'adresses logiques contiguës.
83
[Link] et B. Zebbane et C. Benzaid
Une adresse logique est donnée par un couple (S, d), où S est le numéro du
segment et d le déplacement dans le segment.
L’association d’une adresse logique à une adresse physique est décrite dans
une table appelée table de segments (Segment Table).
Chaque entrée de la table de segments possède un segment de base et un
segment limite. Le segment de base contient l’adresse physique de début
où le segment réside en mémoire, tandis que le registre limite spécifie la
longueur du segment.
La translation des adresses logiques en adresses physiques est à la charge de
la MMU. Le support matériel pour la segmentation est montré dans la figure
ci-après :
s
base : adresse de base du segment
limite : longueur du segment
limite base
Table de
CPU s d Segments
oui
< +
non
84
[Link] et B. Zebbane et C. Benzaid
1 250 1000
0
2 200 600
3 400 1200
0
85
[Link] et B. Zebbane et C. Benzaid
La taille d'un segment peut être importante, d'où un temps de chargement long
qui peut en résulter. La pagination des segments peut être une solution. Cette
technique a été inventée pour le système Multics.
Les programmes sont divisés en segments et chaque segment est paginé dans
un espace d'adressage linéaire.
A chaque processus, on associe une table de segments et une table de pages.
Donc chaque adresse de segment n`est pas une adresse de mémoire, mais une
adresse au tableau de pages du segment
Une adresse logique (S, D), avec S numéro de segment et D déplacement dans
le segment, est transformée en (S, p, d), où p est un numéro de page et d un
déplacement dans la page p. chaque adresse devient alors un triplet (S, p, d).
La traduction d’une adresse logique en adresse physique se fait selon le schéma
suivant :
Adresse logique
oui
CPU S D
p d
non
Longueur Base de la
+ du table de
segment pages
Déroutement
+ f f d
Adresse physique
Mémoire physique
Table de pages
pour le segment S
86
[Link] et B. Zebbane et C. Benzaid
13 Mémoire virtuelle
La mémoire virtuelle (Virtual Memory) est une technique qui permet
l’exécution de processus pouvant ne pas être dans sa totalité en MC.
La mémoire virtuelle est la séparation entre la mémoire logique de l’utilisateur
et la mémoire physique. Ceci rend possible l’exécution de processus dont la taille
est beaucoup plus grande que la taille de la mémoire physique.
Un processus est donc constitué de morceaux (pages ou segments) ne
nécessitant pas d’être tous en MC durant l’exécution. À fin qu’un programme soit
exécuté, seulement les morceaux qui sont en exécution ont besoin d’être en MC.
Les autres morceaux peuvent être sur mémoire secondaire (Ex. disque en général),
prêts à être amenés en mémoire centrale sur demande.
La capacité d’exécuter un processus se trouvant partiellement en mémoire
présenterait plusieurs avantages :
La taille d’un programme n’est plus limitée par la taille de la mémoire
physique.
Comme chaque programme utilisateur pourrait occuper moins de mémoire
physique, il serait possible d’exécuter plus de programmes en même temps.
On a besoin de moins d’E/S pour effectuer des chargements ou des
swappings en mémoire d’un programme utilisateur.
Page 0
Page 1
Page 2
..
.
Mémoire
de map
Disque
Page n Mémoire
physique
Mémoire
virtuelle
Figure : Mémoire virtuelle vs mémoire physique
19.37Recouvrement
Le recouvrement (Overlay) est une technique qui permet de remplacer une
partie de la MC par une autre.
À un instant donné, un programme n'utilise qu'une petite partie du code et des
données qui le constituent. Les parties qui ne sont pas utiles en même temps
87
[Link] et B. Zebbane et C. Benzaid
Main()
Code Code
C() B()
Code
A()
19.38Pagination à la demande
Le principe de la mémoire virtuelle est couramment implémenté avec la
pagination à la demande (On-Demand Paging) ; c'est-à-dire que les pages des
processus ne sont chargées en MC que lorsque le processeur demande à y accéder.
88
[Link] et B. Zebbane et C. Benzaid
0 1 2 3
Programme Swap out
A
4 5 6 7
8 9 10 11
Programme 12 13 14 15
Swap in
B
16 17 18 19
Disque
MC
Figure : Pagination avec swapping
89
[Link] et B. Zebbane et C. Benzaid
0
1
Cadre de Bit de 2
page validité
3
0 A 4 A
0 4 v
1 B 5
1 i
2 C 6 C A B
2 6 v
3 D 3 i 7
4 E 4 i 8 C D E
5 9 v
5 F 9 F
6 i
6 G 10 F G H
7 i
7 H Table de pages 11
Mémoire 12
logique
13
14 Disque
15
Mémoire
physique
Mais que se passe-t-il si le processus essaye d’utiliser une page qui n’est pas
chargée en mémoire ?
L’accès à une page marquée invalide provoque un déroutement de défaut de
page (Fault Page) vers le système d’exploitation. La procédure permettant de
manipuler ce défaut de page est la suivante :
1. Déterminer si la référence mémoire est valide. Dans le cas négatif ; c’est-à-
dire l’adresse ne se trouve pas dans l’espace d’adressage, il s’agit d’une
erreur d’adressage.
2. S’il s’agit d’une référence valide mais la page n’est pas encore chargée en
mémoire, on doit la charger.
3. Trouver un frame libre pour charger la page manquante.
4. Lancer une opération d’E/S pour lire la page manquante à partir de l’unité de
swapping.
5. Mise-à-jour de la table de pages.
6. Redémarrer l’instruction interrompue, le processus peut alors accéder à la
page.
90
[Link] et B. Zebbane et C. Benzaid
2
Page
Déroutement
référencée
Charge M i
6
Redémarre
l’instruction
Frame libre
5 4
Mise-à-jour de la
table de pages Charge en mémoire
la page absente
Programme
Mémoire
Physique
19.40Remplacement de page
L’algorithme précédent suppose qu’il existe toujours une case libre en mémoire
centrale. Et s’il n’existe pas de cases (frames) libres?
Exemple
Sur cet exemple, si le système désire charger la page 3 de P1 ou la page 1 de
P2, il va se rendre compte de l’absence d’un frame libre en MC.
91
[Link] et B. Zebbane et C. Benzaid
Cadre de Bit de
page validité
0 H
0 3 v
1 Charge M 0 SE
1 4 v
2 J 1 SE B
2 5 v
3 M 3 i 2 D
Mémoire Table de pages 3 H
logique P1 4 Charge M
P1
5 J M
6 A
0 A 0 6 v 7 E
1 B 1 i Mémoire Disque
2 2 v physique
2 D
3 7 v
3 E
Table de pages
Mémoire P2
logique
P2
S'il n'y a pas de cadres libres en mémoire, on doit retirer une page de la
mémoire pour la remplacer par celle demandée. On dit qu’il y a remplacement de
page (Page Replacement). La page retirer de la mémoire est dite page victime.
La procédure de traitement de défaut de page, avec prise en compte de
remplacement de page, se présente maintenant comme suit :
1. Trouver l’emplacement de la page désirée sur le disque (unité de swapping).
2. Trouver un frame libre :
i. S’il existe, l’utiliser.
ii. Sinon, utiliser un algorithme de remplacement de pages pour
sélectionner un frame victime.
iii. Recopier la page victime sur le disque et mettre à jour la table de
pages.
3. Charger la page désirée dans le frame récemment libéré et mettre à jour la
table de pages.
4. Redémarrer le processus interrompu.
92
[Link] et B. Zebbane et C. Benzaid
Cadre de Bit de
page validité
Swap out
La page
victime
1
Change à
2 invalide
0 i
f Victime
f v
4
3
Restaure la table
de pages pour la Swap in
Table de pages nouvelle page La page
désirée
Mémoire Disque
physique
93
[Link] et B. Zebbane et C. Benzaid
94
[Link] et B. Zebbane et C. Benzaid
1 2 3 4 1 2 5 1 2 3 4 5
2èm Frame 1 1 1 1 4 4 4 5 5 5 5 5 5
e
cas : Quatre
Frame 2 2 2 2 1 1 1 1 1 3 3 3 (04) frames
Frame 3 3 3 3 2 2 2 2 2 4 4 disponibles.
Défaut D D D D D D D D D
1 2 3 4 1 2 5 1 2 3 4 5
de page
Frame 1 1 1 1 1 1 1 5 5 5 5 4 4
Taux de défaut de page (9/12) * 100 =
Frame 2 2 2 2 2 2 2 1 1 1 1 5
75%
Frame 3 3 3 3 3 3 3 2 2 2 2
Frame 4 4 4 4 4 4 4 3 3 3
Défaut D D D D D D D D D D
de page
Taux de défaut de page (10/12) * 100 =
83,33%
2. Algorithme de remplacement optimal (Belady ou Optimal
Algorithm)
L'algorithme optimal de Belady consiste à retirer la page qui sera
référencée le plus tard possible dans le futur ; c’est-à-dire, la page pour
laquelle la prochaine référence est la plus éloignée dans le temps.
Cette stratégie est impossible à mettre en œuvre car il est difficile de
prévoir les références futures d'un programme.
Le remplacement de page optimal a été cependant utilisé comme base de
référence pour les autres stratégies, car il minimise le nombre de défauts
de page.
Exemple
Appliquer l’algorithme de Belady sur la chaîne de références ci-après,
avec trois (03) blocs disponibles.
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
95
[Link] et B. Zebbane et C. Benzaid
Frame 1 7 7 7 2 2 2 2 2 2 2 2 2 2 2 2 2 2 7 7 7
Frame 2 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0
Frame 3 1 1 1 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1
Défaut D D D D D D D D D
de page
Taux de défaut de page (9/20) * 100 = 45%
BIBLIOGRAPHIE
N. SALMI, "Principes des Systèmes d’Exploitation", Pages Bleues, les
Manuels de l’Etudiant, 2007.
B. LAMIROY, L. NAJMAN, H. TALBOT, "Systèmes d’exploitation", Collection
Synthex, Pearson Education, 2006.
A. BELKHIR, "Système d’Exploitation, Mécanismes de Base", OPU, 2005.
A. Silberschatz, P.B. Galvin, G. Gagne, "Operating System Concepts", 7th
Edition, John Wiley & Sons Editions, 2005, 921 p.
A. TANENBAUM, "Systèmes d’Exploitation : Systèmes Centralisés –
Systèmes Distribués", 3ème édition, Editons DUNOD, Prentice Hall, 2001.
A. Silberschatz, P. B. Galvin, "Principes des Systèmes d’Exploitation",
traduit par M. Gatumel, 4ème édition, Editions Addison-Wesly France, SA,
1994.
M. GRIFFITHS, M. VAYSSADE, "Architecture des Systèmes d’Exploitation",
Edition Hermès, 1990.
S. KRAKOWIAK, "Principes des Systèmes d’Exploitation des Ordinateurs",
Editions DUNOD, 1987.
A. TANENBAUM, "Architecture de l’Ordinateur", Editions Pearson
Education, 2006.
J. M. LERY, "Linux", Collection Synthex, Pearson Education, 2006.
J. Delacroix, "LINUX, Programmation Système et Réseau, Cours et
Exercices Corrigés", Editions DUNOD, 2003.
M. J. BACH, "Conception du système UNIX", Editions Masson, 1989.
96