Académique Documents
Professionnel Documents
Culture Documents
Systéme
d’exploitation 1
TI11-16
http://www.academiepro.com/enseignants-104-Chaabani.Nizar.html
I. Chapitre 1: Introduction
II. Chapitre 2: Gestion de Processus
III. Chapitre 3: Gestion de la mémoire physique
IV. Chapitre 4: Gestion de la mémoire virtuelle
V. Chapitre 5: Gestion des entrées-sorties
VI. Chapitre 6: Gestion des fichiers
http://www.academiepro.com/enseignants-104-Chaabani.Nizar.html
http://www.academiepro.com/enseignants-104-Chaabani.Nizar.html
DOS X X
WIN9X X X
WIN NT\2000 X X
Unix X X
Mac \ OS X X X
Repertoire1 R2 R3 R4 ..
fichier1 fichier2 R5 R6 R7 R8 .
fichier3
Sous MS-DOS chaque fichier peut être aussi volumineux que possible,
cependant le nom que vous lui donnez est soumis à des restrictions, on ne peut
en effet lui donner un nom d'une longueur maximale de 8 caractères plus 3 pour
l'extension.
De plus, les fichiers ne doivent contenir que les caractères suivants:
•lettres de A à Z
•chiffres de 0 à 9
•caractères spéciaux suivants: _ ^ $ ~ ! # % & - { } ( ) @ '
Enfin, les noms de fichiers ne doivent pas contenir:
•de blanc (espace).
•de virgule.
•de barre oblique inverse.
•de point (hormis le point qui sépare le nom de l'extension).
Repertoire1 R2 R3 R4
fichier1 fichier2 R5 R6 R7 R8
fichier3
• Exemple :
C:\ren fichier1.txt surnom.txt
cd change de répertoire
cd .. répertoire parent
Unité centrale
de traitement
Unité de contrôle Mémoire
ou Cache Mémoire centrale
Unité de commande
ou principale
Unité arithmétique Instructions
et logique
ou
Unité de traitement Données
ou
Unité de calcul
Unités d’entrée/sortie
ou d’I/O
Contrôleur de Carte
périphériques réseau
Bus de données
Périphériques
Mémoire Unité
CPU Centrale d ’E/S
Bus d ’adresses
Bus de contrôle
État Séquenceur
Unité arithmétique
Unité de et logique
calcul opérandes
Registres
résultat
programmes
Ordonnancement de processus
Processus coopérants
Processus communicants
P1 P2 Exécution séquentielle
(1 processeur)
P1
Exécution parallèle
P2 (2 processeurs)
P2
P1 Exécution concurrente
(1 processeur)
Système
T
Contexte du processeur:
Hypothèses : 1 seul processeur + plusieurs
processus le processeur est réservé à l’usage
d’un seul processus
Contexte = Contenu des registres
adressables/spécialisés -- Mot d'état (PSW -
Program Status Word )
Etat d'exécution: Actif/Attente
Mode de fonctionnement : Superviseur/utilisateur
Masque d’interruption
Contexte accessible en mémoire
Exécuter Changer
processus Etat
Sauvegarder
Etat
processus
Nouveau Commutatio
processus n Terminaison
PRET It -- Tps ACTIF
dépassé
E/S Demande
terminées d’E/S
BLOQUE
Attente
clavier
Disque
noyau
Synchronisation
Un processus doit attendre qu’un autre processus ait franchi un certain point
de son exécution point de synchronisation
Imposer des contraintes de synchronisation aux processus
Précédence des processus
Conditions de franchissement de certains points critiques
1. Introduction
2. Types d’ordonnancement
3. Modèle simple d'ordonnancement
4. Politiques d’ordonnancement
Organisations des files d’attente
Ordonnancement FCFS / SJF/ RR/ priorité/ SRTF/ Multi-
niveaux
5. Hiérarchie d’ordonnancement
Scheduler dispatch
UC
exit
Fils s’exécute Fork un fils
Interruption Attente It
Réquisition
Dispatcher =
Scheduler= Ordi
allocateur
Gère la FA : Arrivée des processus et Gère l’allocation du processeur,
leur placement il peut réquisitionner
P1 24 0
P2 8 1
P3 12 2
P4 3 3
Schématiser l’exécution des processus selon leur ordre d'arrivée. Pour cela, on utilise le DIAGRAMME
DE GANTT
P1 P2 P3 P4
0 24 32 44 47 Temps de vie des processus
Temps de traitement moyen = [(24 - 0) + (32 - 1) + (44 -2) + (47 -3)]/4 = 35,25
P2 P3
(4 unités) (2 unités)
Exécution P1 Q Q P4
CPU (3 unités) (3 unités)
Q Q
P8 Q Q P5
(2 unités) Q Q (3 unités)
P7 P6
(4 unités) (5 unités)
P1 P2 P3 P4 P5 P6 P7 P8 P1 P2 P4 P5 P6 P7 P6
0 2 4 6 8 10 12 14 16 17 19 20 21 23 25 26 Temps de vie
Diagramme de Gantt (Q=2 unités)
+
Priorité Scheduler Dispatcher
FA n-1
(RR)
Réquisition
FA1
(FCFS/SJF) Processus Interactifs
Terminaison
CPU
+ FA
Priorité fixe 0 Processus Système
Réquisition
Arrivée niveau 1
FA1
(FCFS)
Terminaison
Arrivée niveau 0 CPU
FA
(FCFS) 0
Un processus dans FAi ne peut être sélectionné que si toutes les FAj (j<i) sont
toutes vides
Permettre aux processus de se déplacer d’une FA à une autre
Hiérarchie descendante/ascendante/bidirectionnelle
Changement dynamique dans le comportement des processus
Chaque FA a son propre algorithme d’ordonnancement
Descendante FAn-1 est gérée avec FCFS
Ascendante F0 est gérée avec FCFS
IsetSiliana CHaabani Nizar 100
IsetSiliana CHaabani Nizar 101
Plan du chapitre
1. Introduction
2. Fonctions attendues
3. Va-et-vient (swapping)
4. Mémoire Virtuelle
5. Algo. de Replacements de Pages
http://www.academiepro.com/enseignants-104-Chaabani.Nizar.html
Problématique
Gérer les processus associés à des programmes trop volumineux
Gérer le partage de la mémoire physique entre différents processus
File vide
File pleine
v. (g) A revient
OS OS OS OS
Module 7 116
Fragmentation: mémoire non utilisée
(Stallings)
IsetSiliana CHaabani Nizar 118
Algorithme de placement pour (Stallings)
partitions fixes
Partitions de tailles inégales: utilisation
de plusieurs files
assigner chaque processus
à la partition de la plus
petite taille pouvant le
contenir
1 file par taille de partition
tente de minimiser la 8M
fragmentation interne
12M
Problème: certaines files
seront vides s’il n’y a pas de
processus de cette taille (fr.
externe)
IsetSiliana CHaabani Nizar 119
Algorithme de placement pour partitions
fixes
Partitions de tailles inégales:
utilisation d’une seule file
On choisit la plus petite
partition libre pouvant
contenir le prochain
processus
le niveau de
multiprogrammation
8M
augmente au profit de la
fragmentation interne
On pourrait allouer trop 12M
de mémoire à un
programme
(Stallings)
IsetSiliana CHaabani Nizar 120
Partitions dynamiques: exemple
(Stallings)
(e-f) Progr. 4 est chargé. Un trou de 224 – 128 = 96K est créé (fragmentation
externe)
(g-h) P1 se termine ou il est suspendu, P2 est repris à sa place: produisant un autre
trou de 320-224=96K...
Nous avons 3 trous petits et probabl. inutiles. 96+96+64=256K de fragmentation
externe COMPACTAGE pour en faire un seul trou de 256K
Pagination -- Principe :
l’espace d’adressage virtuel est divisé en petites unités -- PAGES
l‘ espace d’adressage physique est aussi divisé en petites unités -- CASES
(frames)
Les pages et les cases sont de même tailles
Lorsqu’une adresse est générée, elle est transcodée, grâce à une table, pour lui
faire correspondre son équivalent en mémoire physique
Nº case
L'adresse d'un octet est donc formé par le couple <n°de page à laquelle appartient
l'octet, déplacement relativement au début de cette page >.
Carte CPU
CPU
@ Virtuelle
Mémoire Centrale
Si l’adresse générée correspond à une adresse mémoire physique, le MMU transmet sur le bus
l’adresse réelle, sinon il se produit un DEFAUT DE PAGE
Chaque table des pages contient les champs nécessaires au transcodage, avec notamment :
1 bit de présence (P 1/0) pour marquer la présence de la page en mémoire physique
1 bit de modification (M 0/1) pour signaler si on écrit dans la page
IsetSiliana CHaabani Nizar 136
136
Mémoire Virtuelle
P1
P0
SE
Déroutement
P M Nº case (Défaut de page)
0
cases\ref. A B C A B D A D B C B
1 A D C
2 B A
3 C B
4 défauts de pages
cases\ref. A B C A B D A D B C B
1 A C 2 défauts de pages
2 B
3 C D
cases\ réf. A B C D A B C D A B C D
LRU :
9 défauts de pages
1 A D C B Optimal : ?
2 B A D C
3 C B A D
Pagination
Les adresses générées par un programme s’appellent des
adresses virtuelles, et forment l’espace d’adressage virtuel.
La MMU (Memory Management Unit, unité de gestion
mémoire) fait la correspondance entre les adresses virtuelles
et les adresses physiques.
Modifié: 1 bit, une page modifiée doit être écrite sur le disque.
Référencé: 1 bit, chaque fois que la page est référencée (lue ou écrite) il
est mis à 1.
Algo. optimal
Question de performances, afin d’éviter le rechargement de
pages, la page à évincer doit être peu utilisée.
Étiqueter chaque page avec le nombre d’instructions qui
seront exécutées avant que cette page ne soit référencée
Evincer la page dont l’étiquette est la + grande (on repousse
ainsi le défaut de page aussi tard que possible)
Cet algo est irréalisable, le SE ne sait pas si la page serait
référencée ou pas ultérieurement. Par contre, pour une 2éme
exécution, il est possible d’implanter cet algo.
IsetSiliana CHaabani Nizar 160
… Algo NRU (Not Recently
Used)
Principe
R 1, chaque fois que la page est lue ou écrite.
M 1, chaque fois que la page est modifiée.
A chaque interruption, R 0, afin de distinguer les pages
récemment référencées.
Classes de pages
Classe 0: non référencée, non modifiée
Classe 1: non référencée, modifiée
Classe 2: référencée, non modifiée
Classe 3: référencée, modifiée
La classe 1 est obtenue par conséq de l’effacement du bit R de
la classe 3.
L’algo NRU vire une page au hasard dans la + basse classe
En cas de défaut
de page et A tel
que R = 1
Algo de l’horloge
C’est l’algo de seconde chance avec une liste circulaire
(horloge) et un pointeur sur la page la + ancienne.
Quand un défaut de page survient, la page pointée est
examinée:
Si R = 0, la page est évincée
Sinon, R 0, le pointeur avance vers la page suivante,
Le processus se répète jusqu’à trouver une page avec R = 0
IsetSiliana CHaabani Nizar 163
… Algo LRU (Least Recently Used
Principe
Cet algo est fondé sur l’observation les pages les + référencées
lors des dernières instructions seront probablement utilisées.
Un défaut de page évince la page qui n’a pas été utilisée
pendant le plus de temps.
Implantations
Compteur de 64 bits / cadre de page
Un défaut de page examen de tous les compteurs de la table
des pages à la recherche du plus petit compteur
Matrice (n n), n cadres
Cellules initialisées à 0
Quand une page k est référencée, tous les bits de la rangée k
1, tous les bits de la colonne k 0
Un défaut de page évince la page dont la rangée est la + petite
Allocation
Défaut
plus de page Limite supérieure
de pages
Limite inférieure
Retrait de page
Nombre de pages
Si un processus provoque trop de défauts de pages :
au dessus d ’une limite supérieure : on lui allouera plus de pages
en dessous d’une limite inférieure : on lui en retirera
S’il y a plus de pages disponibles et trop de défauts de pages, on devra suspendre un des processus
1.Exemple introductif
Int i;
P1 P2
i=0; i=0;
while (i<10) while (i>-10)
i++; i--;
printf(‘’P1 GAGNE! \n’’); printf(‘’P2 GAGNE !\n’’);
177
178
179
Do
…
// ’’Entrer en SC’’ ] Prologue
SC
181
Opérations
atomiques de Verrous Sémaphores Moniteurs
haut niveau Send/Receive
- +
(API)
Opérations
atomiques de
bas niveau Load/Store Masquage Interruption
(matériel) TAS 182
183
184
185
186
Preuve de correction?
Cet algorithme satisfait les 3 conditions de SC, à
démontrer?
Généralisation à n processus: voire algorithme de Bakery
187
188
189
P --passer : P(S)/Wait(S)/Down(S)
Décrémenter la variable S (à moins qu’elle ne soit déjà à 0)
Utilisée (lorsque déjà 0) pour bloquer (suspendre) le processus
appelant jusqu'à ce qu’un événement survienne.
V --relâcher : V(S)/Signal(S)/Up(S)
Incrémenter le sémaphore de 1
Utilisée pour signaler un événement, et si possible, réactiver un
processus en attente.
Initialisation de S : interprétée comme un nombre d’autorisations
(disponibles quand l’entier est positif, attendues quand le le nombre est
négatif).
Déclaration de sémaphores -- Notation d’Andrews
Sem S1, S2; Sem ingred[3]=([3] 1); S1 = 0; S2 = 1;
Apres initialisation, les seules opérations permises sont P et V
P(S) : < attendre(S>0); S--; >
V(S) : < S++; >
Sémaphores général vs. sémaphore binaire :
Sémaphore général : peut prendre n ’importe quelle valeur non-
négative
Sémaphore binaire : la valeur peut être uniquement 0 ou 1
190
191
Les sémaphores peuvent être utilisés tant pour la réalisation des sections critiques
que pour diverses formes de synchronisation conditionnelle
Compétition entre 2 processus Coopération -- sémaphore
privé
Variables partagées Variables partagées
Semaphore Mutex=1; Semaphore Sync = 0;
Processus Pi Processus P0 Processus P1
Repeat ....... .......
P(Mutex); P(Sync);
V(Sync);
SECTION CRITIQUE ....... .......
V(Mutex);
until flase; Il existe une relation de
précédence P1 < P0
Conséquence :
Un sémaphore est toujours initialisé à une valeur non-négative mais peut
devenir négative après un certain nombre d'opérations P(S) -- nombre des
processus en attente.
192
Remarques :
La plupart des mises en œuvre des sémaphores assurent que les processus en
attente sont réactivés dans l’ordre dans lequel ils ont été suspendus sur le
sémaphore.
Equité dans l’ordonnancement des processus
Les sémaphores sont les principales primitives de synchronisation dans Unix
Un sémaphore est un mécanisme qui permet le blocage et le réveil explicite.
Servir à traiter tous les paradigmes de la programmation concurrente
Aucune garantie qu’une synchronisation est exempte de problèmes!! :
Interblocage (Deadlock) -- attente circulaire
Un processus est bloqué indéfiniment s’il est en attente d’un
événement qui ne peut être produit que par le processus déjà en
attente
Considérons 2 processus utilisant 2 sémaphores d’exclusion mutuelle
P1 P2
P(S1) P(S2)
P(S2) P(S1)
... ...
Famine (starvation) : des processus qui s'exécutent indéfiniment sans aucun
changement; certains processus peuvent ne jamais obtenir les ressources!
193
194
Point de Point de
rendez-vous synchronisation
Vide
N cases
Producteur Consommateur
Plein
Contraintes de synchronisation :
Relation de précédence : Producteur <
Consommateur
Section critique (tampon)
tampon plein Producteur se bloque
tampon vide Consommateur se bloque
Exclusion mutuelle au tampon
196
Variables partagées
#define N 100
Semaphore mutex=1; /* protège l'accès au tampon */
Semaphore plein=0; /* compte le nombre d ’informations produites dans le
tampon */
Semaphore vide = N; /* Nb d ’emplacements libres dans le tampon */
Processus Producteur Processus Consommateur
Repeat Repeat
...... ......
Produire_objet();
décrémenter nb info. */ P(plein); /*
...... P(mutex); /* entrée en SC */
P(vide) /* dec. Cases libres */ retirer_objet();
P(mutex); /* entrée en SC */ V(mutex); /* sortie de
SC */
deposer_objet(); V(vide); /* Incr. nb
cases vides */
V(mutex); /* sortie de SC */ Consommer_objet()
V(plein); /* Incr. nb info. */ until false;
until false;
197
198
199
Procédures
Externe Interne
Points s s
d'entrée
2
0
IsetSiliana CHaabani Nizar 201
1
5.1. Syntaxe et Sémantique d’un Moniteur (suite)
Syntaxe : la forme générale d’une déclaration de moniteur :
Monitor nom_moniteur {
/* --- Déclarations des variables --- */
.....; /* variables d'états */
Condition ... ; /* variables conditions */
/* ------------ Déclarations des procédures ------------ */
Public nom_fonction (...)
{ .... }
Public void nom_procedure (..)
{ .... }
Private .... (...)
{ ..... }
{ /* -- Initialisation des variables ---*/
}
2
0
IsetSiliana CHaabani Nizar 202
2
5.1.1. Exclusion Mutuelle
2
0
IsetSiliana CHaabani Nizar 203
3
5.1.2. Variables de Condition
Une variable condition est utilisée pour suspendre un processus jusqu'à ce
qu’une certaine condition devienne vraie.
Déclarée comme une variable, mais on ne peut ni lui attribuer de
valeur ni la tester) -- Condition C;
Servir de FA des processus qui attendent sur cette condition
3 opérations possibles sur une variable condition C :
Empty(C) // La FA associée est-elle vides ?
Mise en attente d’un processus : Wait(C) // le processus appelant
se bloque et doit libérer le moniteur.
Réactivation de processus en attente : Signal(C) // reprend
exactement un processus (en tête de la FA associée à C). Si aucun
processus n ’est suspendu alors cette opération est sans effet.
Problème de signalisation : un processus P fait un signal et réveille un
processus Q, alors qui aura le contrôle exclusif du moniteur? 2 approches :
Signaler et continuer : le processus qui exécute signal continue son
exécution, donc conserve l'accès exclusif au moniteur. Le processus
ayant été signalé sera exécuté plus tard Approche non-préemptive -- la
plus couramment utilisée (Unix, Java, Pthreads).
Signaler et Attendre : le processus qui signale attend pendant que celui
qui vient d'être signale acquiert l accès exclusif au moniteur
2
0
IsetSiliana CHaabani Nizar 204
4
2
0
IsetSiliana CHaabani Nizar 205
5
5.2. Similitudes/Différence entre P/Wait et V/Signal
2
0
IsetSiliana CHaabani Nizar 206
6
Exemple: Producer-consumer
Monitor ProducerConsumer
procedure producer;
condition full, empty; begin
integer count; while true do
item = produce_item();
procedure insert(item:integer); ProducerConsumer.insert(item)
begin end;
if count = N then wait(full);
insert_item(item);
count := count + 1;
if count = 1 then signal(empty)
end; procedure consumer;
begin
function remove: integer; while true do
begin ProducerConsumer.remove();
if count = 0 then wait(empty); consume_item(item);
remove = remove_item; end
count := count - 1;
if count = N-1 then signal(full)
end;
count := 0;
end monitor;
2
0
IsetSiliana CHaabani Nizar 207
7
Lecteurs/Rédacteurs
1.Un objet (par ex. un fichier, un enregistrement dans un fichier ou une base de
2
1
IsetSiliana CHaabani Nizar 210
0
2
1
IsetSiliana CHaabani Nizar 211
1
Exemple: Lecteurs/Rédacteurs
type lecture_écriture = moniteur
private écriture: booléen;
private lecteurs: entier;
private accord_lecture,accord_écriture: condition;
procédure début_lecture;
début ?
si écriture ou accord_écriture.non_vide
alors accord_lecture.wait
findesi;
lecteurs:= lecteurs + 1;
accord_lecture.signal
fin;
procédure fin_lecture;
début
lecteurs:= lecteurs − 1;
si lecteurs = 0 alors accord_écriture.signal
findesi
fin;
2
1
IsetSiliana CHaabani Nizar 212
2
procédure début_écriture;
début
si lecteurs > 0 ou écriture
alors accord_écriture.wait
findesi;
écriture:= vrai
fin;
procédure fin_écriture;
début
écriture:= faux;
si accord_lecture.non_vide
alors accord_lecture.signal
sinon accord_écriture.signal
findesi
fin;
2
1
IsetSiliana CHaabani Nizar 213
3
import lecture_écriture
processus lecteur
{
lecture_écriture.début_lecture ;
< lecture >
lecture_écriture.fin_lecture ;
}
processus écrivain
{
lecture_écriture.début_écriture ;
< écriture >
lecture_écriture.fin_écriture ;
}
2
1
IsetSiliana CHaabani Nizar 214
4
Structure des Systèmes Informatiques