Diapositives du cours de Systèmes d`Exploitation (partie 1)

publicité
II Chapitre 1 : Présentation générale JJ
I Notion de Système Informatique J
Définition fonctionnelle :
• Machine de traitement de l’information qui assure
• Notion de Système Informatique
. le stockage des données
. l’exécution des programmes
• Les fonctions d’un système d’exploitation
• Structure en couches :
• Historique et évolutions
• Structure interne d’un système d’exploitation
Logiciels d’application
• Composantes d’un système d’exploitation
Outils et Services
Logiciel de base
Système d’Exploitation
Machine physique
3
2
I Les fonctions d’un système d’exploitation J
II Historique des S.E. JJ
Gestion de l’information :
•
•
•
•
Fin 40 : Organisation en porte ouverte.
Structuration (codage, fichiers)
Conservation (fichiers, mémoire)
Transfert (E/S transparentes)
Partage (entre plusieurs tâches)
• Le temps d’accès à la machine est structuré en période de 30 minutes
• Chaque période est allouée à un utilisateur
• A la fin de la période la machine est réinitialisée
• L’utilisateur doit attendre la période suivante
Gestion des ressources :
Avantage : Chaque utilisateur a la machine pour lui tout seul.
• Allocation/Arbitrage
• Partage (diminution des coûts)
• Abstraction (simplification)
Inconvénient : Le travail doit être découpé en tranche de 30 minutes.
Autres services :
• Sécurité (traitement des erreurs)
• Évaluation/Statistique/Facturation
• Outils divers (sauvegarde, recherche)
4
5
I Le moniteur humain de gestion des travaux J
I Le moniteur logiciel d’enchaı̂nement des travaux J
Apparition d’un opérateur de gestion des travaux :
Début 50 : Moniteur logiciel d’enchaı̂nement séquentiel des travaux.
Il assure les fonctions
Utilisateurs
• de compilation des travaux
Travaux
• de chargement en mémoire
• d’enchainement des travaux
Moniteur
|
|
|
|
|
|
|
File des travaux
en attente
chargement du moniteur
compilation en mémoire
exécution du travail 1
chargement du moniteur
compilation en mémoire
exécution du travail 2
...
compilateur
du travail 1
compilateur
du travail 2
Travail courant
Il récupère les travaux, gère la file d’attente et enchaine les exécutions.
6
7
I Le moniteur logiciel résidant J
I Le traitement par lots J
Milieux des années 50 : Moniteur logiciel résidant d’enchaı̂nement
séquentiel des travaux. Il assure les fonctions
Fin des années 50 : Traitement par lots. Apparition du parallélisme des
tâches entre lecture, calcul et impression.
• d’enchaı̂nement automatique des travaux
Machine
de lecture
• de protection de la mémoire
Machine
de calcul
Machine
d’impression
• de limitation de durée
• de supervision des entrées/sorties
Mémoire centrale
Moniteur
RB
Bandes magnétiques
Bandes magnétiques
d’entrée
de sortie
ML
Préparation du lot 1
Préparation du lot 2
Préparation du lot 3
RL
8
MC
MI
Exécution du lot 1
Exécution du lot 2
Impression du lot 1
9
I Cycles de CPU et d’entrée/sortie J
I Multiprogrammation J
Chaque processus enchaı̂ne des cycles de CPU (exécution de code) et des
cycles d’entrée/sortie :
Début 60 : Multiprogrammation. Présence simultanée de plusieurs programmes en mémoire centrale.
Attente
Unité d’E/S
CPU
Périphériques
CPU
Unité d’E/S
E/S
Mémoire centrale (RAM)
CPU
Nouvelles caractéristiques :
E/S
10
• E/S tamponnées : définition d’un canal d’E/S,
• réimplantation du code,
• protection de la mémoire
I Apparition des terminaux J
11
I 60/70 : Le temps partagé J
Le temps d’exécution de la CPU est découpé en tranches :
60/70 : Intégration des terminaux :
P0
• les terminaux sont connectés au serveur
P1
P2
P0
P1
P2
P0
CPU
Temps
• les utilisateurs travaillent devant le terminal
Quanta
• ils partagent leur temps entre réflexion et action
Si
Hypothèse 1 : Le temps de réflexion est de 90% :
Quanta = 50 millisecondes et une requête ≤ 1 quanta
alors
donc, sur 100 utilisateurs, 10 sont actifs.
Temps de réponse = 10 × 50 ms =
Hypothèse 2 : Les utilisateurs actifs réclament des actions simples :
1
s
2
Contraintes :
prise en compte du travail interactif
12
• multiprogrammation,
• temps de commutation faible,
• possibilité d’interruption propre.
13
I Les systèmes répartis J
II Structure interne d’un système JJ
1980 : Systèmes répartis. Répartition d’une activité entre plusieurs machines reliées par réseau (lent ou rapide).
Exemple : Le Cluster. La somme de plusieurs machines est vue comme
une seule machine (simplicité, évolutivité, robustesse).
1950
Gros
ordinateurs
pas de
logiciels
1960
1970
traitement
par lots
moniteurs
compilateurs
multiutilisateurs
systèmes
répartis
temps
partagé
pas de
logiciels
Mini
ordinateurs
1980
temps
partagé
multiutilisateurs
moniteurs
compilateurs
pas de
compilateurs
compilateurs
Les Micros
moniteurs
multiutilisateurs
et
temps
partagé
14
15
I Organisation en machines J
I Utilité des machines J
Une machine c’est
Ancienne machine M0 et son système S0 :
• des objets,
• des actions possibles,
• des règles de composition des actions.
M0
On souhaite développer un système S1 sur une nouvelle machine M1 :
Dans une structure en couches, le système est concu comme un empilement de machines.
M0
M0
M1
M1
M2
M2
M3
M3
(a)
(b)
S0
M0
M1
S1 ?
Un simulateur de M1 sur M0 est utilisé :
M0
M2
M3
M1 ?
S0
Simulateur M1
S1 (dev)
M1
S1
M4
M5
(c)
Avantages : Sécurité et modularité.
16
17
I Notion de couches dans les architectures logicielles J
I Organisation objet J
Les applications modernes utilisent les architecture en couches.
Un objet c’est
Un exemple : l’architecture applicative 3-tiers :
SGBDR
• une représentation interne / externe,
• des fonctions d’accès,
Couche métier
Couche présentation
Chaque couche
Mémoire
Spécialisation
Abstraction
Mémoire
centrale
• a une spécification (interface d’entrée),
• masque les couches inférieures.
Mémoire
Virtuelle
Mémoire
physique
Mémoire
secondaire
Disques
Disquettes
Avantages : Sécurité, modularité, abstraction et spécialisation.
19
18
I Un premier exemple J
I Architectures virtualisées applicatives J
La virtualisation est très utilisée dans le déploiement des applications.
Les machines virtuelles d’IBM (VM)/CMS :
Noyau
Utilisateurs
Utilisateurs
Utilisateurs
Utilisateurs
Utilisateurs
Utilisateurs
App. 1
VM 1
Unix v3
JVM 6
App. 2
Serveur
OS natif
VM 2
Unix v4
JVM 7
VM 3
Windows X
SGBDR
App. 3
Noyau Noyau Noyau Noyau Noyau
Avantages :
Machine virtuelle
• définir des environnements d’exécution adaptés
Matériel
• assurer l’évolutivité de son parc applicatifs
• améliorer la sécurité
20
• exploiter des architectures matérielles sophistiquées
21
I Un deuxième exemple J
I Composantes d’un S.E. J
L’architecture Micro-noyau par opposition aux structures monolithiques
des systèmes
processus utilisateur
interpréteur de commandes
Gestion des processus
Gestion des fichiers
Gestion de la mémoire centrale
Gestion du système d'E/S
SGBDR
MacOS X
OS/2
OSF/1
DOS
BSD 4.3
interface d'appel au système (SVC)
Micro Noyau MACH du M.I.T.
Gestion des interruptions
(Tache, ES, Mem Virt)
« Drivers » de périphériques
interface vers le matériel
Matériel
Machine physique
Avantages : Portabilité, Qualité.
22
23
II Présentation des processus JJ
I Notion de programme J
Un programme est une suite d’instructions rangées en mémoire :
• Notion de programmes
void main() {
...
}
• Notion de machine
• Exécution d’un programme
⇒
2048
LOAD R1,
2052
$ 10
2056
INC R1
2060
ADD R1, R2
⇒
01001001011101101
10011111001010100
11101010001100101
• Processus





 Lancement des E/S




privilégiées
=
Contrôle des interruptions







Contrôle du matériel




Instructions =


mouvement de données







structure de contrôle


 ordinaires
=



calcul







appel du système d’exploitation
1
I Notion de machine J
2
I Description du processeur J




Processeur (CPU)






Registres spécialisés








=
Un
 Entier

=
processeur (MEP)
Registres



=
processeur
Flottant







 Adresse
 généraux














 Mot d’état
Une
= Mémoire
(

machine


Contrôleurs



 Organes d’E/S =
Canaux
Unité de calcul (UAL)
L’état d’une machine c’est l’état de ses composants.


compteur ordinal (CO)





mode d’exécution (MODE)


 pointeur de pile (SP)
Registres
=

masque d’interruptions
spécialisés





 codes de conditions

 ...
• en mode esclave les instructions privilégiées sont interdites
• en mode maı̂tre les restrictions disparaissent
3
4
I Exécution d’un programme J
I Notion de processus J
Une exécution c’est une évolution discrète de l’état de la machine.
Un processus est un programme en cours d’exécution. Il est défini par :
Evolution des registres de la C.P.U.
Code en cours
d'exécution
CO
R1
R2
123
-
34
• des zones mémoire (code, pile et données),
Mémoire d’un processus
CODE
123
LOAD R1,
124
#10
125
INC R1
126
ADD R1, R2
125
10
34
INC R1
126
11
Exécution
LOAD R1, #10
45
DATA
PILE
PILE
SYSTEME
• la valeur des registres de la CPU (un MEP),
34
• un ensemble de ressources allouées,
ADD R1, R2
127
CST
Le tout forme le contexte d’exécution du processus.
34
Notion de points observables.
5
6
II Les interruptions JJ
I Rendez-vous asynchrone J
Problème : Prise en compte rapide d’un événement tout en effectuant un
travail.
• Rendez-vous asynchrone,
Exemple :
• Interruption d’un processus,
• Le travail :
• Interruption matérielle,
. exécuter un processus consommateur de CPU (pas d’entrée/sortie)
• Les appels système,
• Les évènements à gérer :
• Les déroutements.
.
.
.
.
un paquet arrive sur la carte réseau
déplacement de la souris
activation du clavier
apparition d’une alarme
1
2
I Attente active J
I Attente active (suite) J
Solution : l’attente active. Soit F un indicateur qui signale l’événement
• pas de réaction immédiate
Evt
Test
------|-------------------|-----|
|
|<--- latence --->|
|
|
...
si (F = 1) alors
F := 0
< traiter l’événement >
fin si
...
• risque de collision
Evt
Evt
Test
------|-----------|-------------------|-----|
|
|
|<- écart ->|<--- latence --->|
|
|
|
Remarques :
• le test explicite est pénible et peu sécurisé
• perte de temps C.P.U.
écart minimum > latence
3
4
I Interruption d’un processus : Principe J
Interruption : opération indivisible effectuée par la C.P.U. qui change le
CO et le MODE .
• Les interruptions sont déclenchées uniquement sur les points observables (points interruptibles).
• Chaque interruption a une cause identifiée par un entier.
• Le vecteur d’interruptions ( VI ) est une table logée dans les adresses
basses de la mémoire.
I Interruption d’un processus : Exemple J

 PUSH CO, MODE;
interruption
MODE := ma^
ıtre;
=
de cause k
 CO := vi[k];
• reprise après interruption :
instruction RTI =
POP MODE;
POP CO
5
Code
utilisateur
Vecteur
d'interruptions
Code du
système
−
0
123
LOAD R1,
100
124
#10
101
125
INC R1
102
.
.
.
.
126
ADD R1, R2
103
RTI
1
−
2
100
3
−
6
I Structure générale d’un traitant J
Le code exécuté après une interruption est appelé le traitant de cette
interruption.
Les traitants ont la structure suivante :
Evolution des registres de la C.P.U.
CO
MODE
SP
R1
R2
123
esclave
200
-
34
10
34
LOAD R1, #10
125
esclave
200
Evolution de la pile
-
-
maître
.
.
.
103
201
10
.
.
.
maître
201
2. traitement de la cause
3. restauration du contexte
SP
4. retour au processus interrompu (instruction RTI )
< interruption de cause n° 2 >
100
1. sauvegarde du contexte
34
<125,e>
.
.
.
-
SP
10
34
10
34
11
34
RTI
125
esclave
126
esclave
200
INC R1
200
<125,e>
-
SP
7
I Utilisation des interruptions J
I Interruption matérielle : principe J
Il existe trois types d’interruptions :
Un signal électrique est émis vers le processeur qui provoque une interruption.
• Interruption matérielle : réaction aux événements extérieurs.
Clavier
• Appel au superviseur : appel explicite d’une routine système.
• Déroutement : traitement des erreurs et des situations anormales.
C.P.U.
Souris
C. vidéo
Controleur
disk0
disk1
disk2
Il y a donc un branchement vers le code de traitement des interruptions (le
traitant) avec un changement de mode.
9
8
I Interruption matérielle : caractéristiques J
I Les appels systèmes : principe J
Le numéro associé à chaque interruption matérielle indique une priorité :
int.
niv 5
int.
niv 4
int.
niv 1
int.
niv 3
Si les processus s’exécutent en mode utilisateur, les entrées/sorties directes
leurs sont interdits.
int.
niv 0
• Pour réaliser des E/S, les processus doivent envoyer des requêtes au
système d’exploitation.
0
1
2
• L’appel de fonction classique pose des problèmes :
3
4
. le nombre de points d’entrée est important
5
. le mode d’exécution reste esclave
6
7
. le code du système d’exploitation est accessible en lecture
prise en compte
de l'int. niv 3
Des instructions privilégiées permettent de
• masquer des niveaux,
• armer ou désarmer des niveaux,
• déclencher des niveaux.
10
11
I Les appels systèmes : moyens J
I Les appels systèmes : Avantages J
Les trappes ( Trap ) : Appel explicite du système par le biais d’une instruction qui déclenche une interruption.
Code utilisateur
en mode esclave
...
x=open("ficA",WRITE);
...
Librairie standard
en mode esclave
...
...
LOAD R0, SVC_OPEN
LOAD R1, "mon_fic"
LOAD R2, WRITE
SVC
CMP R0, 0
...
...
RTS
Avantages des appels par interruption :
• Changement de mode
Processus
en mode maitre
• Le nombre de points d’entrée est limité
• On obtient un sas qui isole le système d’exploitation
switch (R0)
{
• Définition d’une nouvelle machine (ajout d’instructions)
...
...
case SVC_OPEN:
< ouverture >
break;
• Une librairie standard offre
. une interface système agréable et simplifiée
...
...
. une interface indépendante du système d’exploitation
}
RTI
. l’implantation réelle des appels systèmes en assembleur
Code du système d’exploitation
12
13
I Les appels systèmes : Structure du traitant J
I Déroutements : Principe J
L’objectif des déroutements est double :
Les opérations à réaliser :
• traitement systématique des erreurs ou des situations anormales
(défaut de page),
• sauvegarder le contexte
• vérifier la conformité de la requête
• protection et bonne utilisation de la machine (les processus s’exécutent
sous surveillance).
. vérifier la nature de la requête
. vérifier la nature des arguments
. vérifier les droits du processus demandeur
Si l’exécution d’une instruction produit une erreur, alors
→ il y a interruption et
→ branchement vers le code de traitement des erreurs du système.
• exécuter la requête
• choisir le prochain processus P à exécuter
Les causes possibles sont :
• restaurer le contexte de P
• relancer le processus P
14
•
•
•
•
•
données incorrectes (division par zéro)
opération interdite (instruction privilégiée)
instruction inconnue
accès à une zone mémoire interdite
erreur de bus mémoire
15
I Déroutements : Exemples J
• Implantation d’une gestion utilisateur des erreurs (fonction signal )
• Gestion de la mémoire virtuelle.
• Ajout de nouvelles instructions par simulation logicielle.
• Le mode TRACE sur le processeur 68000 :
. à chaque point interruptible, la C.P.U. génère un déroutement,
. le système récupère donc le contrôle entre chaque instructions,
. il peut visualiser l’évolution des registres.
16
II Gestion des processus JJ
I État d’un processus J
• État d’un processus,
Chaque processus est dans l’un des états opérationnels suivants :
• Représentation d’un processus,
prêt
6
• Rôle du PCB,
1
• Représentation des processus,
• Les «threads» (processus de poids léger),
connu
en attente
• Utilité des «threads»,
2
4
terminé
• Implantation des «threads»,
5
actif
1. initialisation
2. exécution
3. achèvement
4. préemption
5. attente
6. signal
3
2
1
I Représentation d’un processus J
I Rôle du PCB J
Pour chaque processus le système maintient :
Le rôle du PCB dans la commutation entre deux processus :
P0
• un contexte d’exécution
prêt
actif
• un état opérationnel
P1
sauvegarde
• des informations diverses :
prêt
. priorités
. filiations
. propriétaire
PCB0
restauration
PCB1
actif
• un identifiant ( pid )
. temps CPU
. nombre d’E/S
. nombre de défauts de page
actif
restauration
sauvegarde
prêt
• des statistiques :
Ces informations sont rangées dans un PCB (Process Control Block).
3
4
I Représentation des processus J
I Gestion des processus J
Les PCB sont rangés dans des files :
Création de processus :
• chaque processus peut créer des processus (ses fils),
réquisition
file des processus prêts
allocation
de la CPU
• il est possible de figer, et de reprendre des processus.
processus
actifs
• il est possible de tuer des processus ou demander leur arret.
fin de
l'E/S
Communication entre processus :
file des processus en
attente de fin d'E/S
demande
d'E/S
• prévoir des outils de communication (fichier, tube, socket, mémoire
partagée, envoi de messages)
appel de exit()
file des processus morts
Synchronisation de processus :
• prévoir des outils de synchronisation (verrou, sémaphore, moniteur)
5
6
I Les «threads» (processus de poids léger) J
I Programmation des threads J
Un thread (fil) est un programme en cours d’exécution qui partage son
code et ses données.
Processus
Thread 1
Exécution
CODE
MEP
PILE
Thread 2
DATA
Exécution
MEP
Fichiers
ouverts
et Ressources
begin
Instruction 1
co-begin
Instruction 2
Instruction 3
co-end
Instruction 4
end
PILE
Thread 3
Exécution
MEP
PILE
void travail() {
int t;
instruction1();
if ((t = thread()) == 0) {
instruction3();
thread exit();
}
instruction2();
thread join(t);
instruction4();
}
Trace de l’exécution :
Chaque thread a une pile d’exécution autonome.
CPU0 :
|<--- Ins. 1 --->|<-- Ins. 2 -->|.....|<--- Ins. 4 --->
CPU1 :
|<----- Ins. 3 ----->|
Un processus est composé de threads.
7
8
I Utilité des «threads» J
I Utilité des «threads» pour les serveurs J
Étude des dépendances et découpage :
Application serveur
C5 dépend de C2 et C4
C1
C2
C3
Processus fils
C4
C5
Processus
Processus fils
principal
Processus fils
Processus fils
C4 dépend de C3
C2 dépend de C1
Processus serveur
Thread fils
C1
C3
C2
C5
C4
Thread 1
Thread 2
Thread
Thread fils
principal
Thread fils
Thread fils
Avantages :
Données globales
• récupération des temps d’E/S,
• exploitation des machines multi-processeurs,
• coopération entre threads.
La commutation et la communication entre threads est une opération
plus simple
9
10
I Les processus monolithiques J
I Les processus multi-threads J
Il existe un conflit entre entrées/sorties synchrones (bloquantes) et interface homme/machine (IHM).
Solution d’attente active : E/S asynchrones (non-bloquantes) et structure avec boucle d’événements.
réseau
disque
Boucle des événements
Gestionnaire
de la file
des événements
GUI
Il existe un autre solution basée sur
• le découpage en plusieurs threads,
• une utilisation des E/S synchrones,
• un module de communication.
réseau
Thread "Gestion réseau"
disque
Thread "Gestion disque"
GUI
récupérer un
événement
Thread "Gestion de la mémoire"
Evénements
asynchrones
Evénements
asynchrones
Thread "Gestion de l’IHM"
Communication
et
synchronisation
Processus multi−threads
Traiter
Avantages :
Processus monolithique
11
• plus grande simplicité du code,
• indépendance entre les modules.
12
I Implantation des «threads» J
II Allocation du processeur JJ
Implantation au niveau du S.E. :
• Allocation de la CPU
+ le S.E. connaı̂t et ordonnance les threads,
• Stratégies d’allocation
+ la répartition de la CPU est bonne,
• Les algorithmes d’allocation :
.
.
.
.
.
.
− les structures du S.E. sont alourdies.
Implantation au niveau utilisateur (Java) :
+ une librairie se charge de la gestion des threads (création, ...),
FIFO
SJF
SRT
HRN
Le tourniquet
Le tourniquet multi-niveaux
+ la commutation entre threads d’un même processus est plus rapide,
− la répartition de la CPU n’est pas équitable,
− la mise «en attente» d’un processus entraı̂ne le blocage de tous ses
threads.
13
14
I Allocation de la CPU J
I Stratégies d’allocation J
Il y a perte de la CPU dans trois cas :
Objectifs :
• interruption extérieur,
• déroutements,
• appels système.
•
•
•
•
•
•
Quel type d’allocation ?
• le long terme : variation du degré de multi-programmation par :
. swapping out : les processus sont copiés en mémoire secondaire
. swapping in : les processus sont rapatriés en mémoire centrale
• le moyen terme (détermine et classe les processus prêts),
• le court terme (répartition de la CPU)
15
équité,
débit maximum
maximum de processus interactifs,
rationaliser la gestion des ressources,
favoriser les «bons» processus,
améliorer les temps de réponse moyen,
Critères :
•
•
•
•
•
•
le taux d’E/S
le taux d’utilisation de la CPU
le type et la priorité du processus,
temps CPU cumulé,
temps CPU restant,
taux de réquisition
16
I Algorithme d’allocation FIFO J
I Algorithme d’allocation SJF J
FIFO (First In First Out) : absence de réquisition et croissance rapide du
temps de réponse.
arrivée
SJF (Short Job First) : absence de réquisition et risque de privation.
Temps
de
réponse
sortie
SJF
FIFO
temps de réponse = (temps d’attente + temps d’exécution)
temps d’attente = (taille de la file FIFO × durée moyenne d’exécution)
Temps de service demandé
Il faut estimer le temps d’exécution des processus.
17
18
I Algorithmes d’allocation SRT J
I Algorithmes d’allocation HRN J
SRT (Shortest Remaining Time) : c’est SJF + un mécanisme de
réquisition.
HRN (Highest Response Ratio Next) : Le choix est basé sur le ratio
p(t) =
• Mêmes contraintes que SJF
avec
• On choisit le processus qui a le temps restant d’exécution le plus petit
• L’arrivée d’un nouveau processus peut interrompre le processus courant
Conséquences :
•
•
•
w(t) + ts
ts
w(t) = t − ta : temps d’attente,
ta : date d’arrivée,
ts : temps d’exécution estimé.
Si w(t) = 0, les travaux les plus courts (ts) sont privilégiés.
• On favorise les travaux courts.
• Coûts d’exploitation importants.
19
20
I Algorithmes d’allocation du tourniquet J
Comment fixer la durée du quanta :
Tourniquet (round robin) : c’est FIFO plus un mécanisme de réquisition.
arrivée
CPU
Temps de
réponse moyen
sortie
réquisition (préemption)
quantum
21
22
I Tourniquet Multi-niveaux J
I Tourniquet Multi-niveaux avec priorités J
Il existe des classes de processus :
réquisition (préemption)
niveau 0
•
•
•
•
•
niveau 1
niveau 2
systèmes,
temps réel,
interactifs,
d’édition interactive,
«batch».
Chaque classe et absolument prioritaire sur celles de niveau inférieur.
.
.
.
.
.
.
processus
processus
processus
processus
processus
A l’intérieur de chaque classe, les processus sont rangés dans un système
de files multi-niveaux.
niveau n-1
niveau n
arrivée
CPU
sortie
23
24
I Le cas des processus temps réel J
I Mélange Temps Réel et temps machine J
Prise en compte d’un évènement :
évènement
Le temps C.P.U. peut être divisé en une partie fixe réservée au processus
Temps Réel, et une partie reservée aux autres processus.
Prise en compte
évènement
attente
temps
attente
T.R.
Autres
T.R.
Autres
si
Les algorithmes précédents s’appliquent dans la partie T.R.,
n est le nombre de processus temps réel,
s le temps pris par l’ordonnanceur,
t le temps moyen pris par les processus T.R.
Les algorithmes classiques sont utilisés par la partie «Autres».
alors
(n − 1) × (s + t) < attente.
25
I Allocation multi-processus J
Hypothèse : on dispose de N processeurs identiques.
Objectifs :
• équilibrage de la charge (homogénéité des taux d’utilisation de la
C.P.U.),
• évitez les effets de «pompage»,
Système simple : le S.E. s’exécute toujours sur la même C.P.U.
Système plus sophistiqué : le S.E. est capable de s’exécuter en parallèle
sur plusieurs processeurs.
→ Il faut gérer les problèmes de synchronisation.
27
26
II Présentation générale JJ
I Accès à des ressources partagées J
Soit une pile partagée par plusieurs threads :
Le problème :
pile = structure
sommet : entier ;
data : tableau [ 1 .. Max ] de entier ;
• Accès à des ressources partagées
• Les sections critiques
• Le problème de l’exclusion mutuelle
procédure empiler( var p : pile ; d : entier )
p.sommet := p.sommet + 1 ;
p.data[ p.sommet ] := d ;
Solutions d’attente active :
•
•
•
•
Une solution d’attente active
blocage des interruptions
Algorithme de Peterson (2 processus)
Solution matérielle
Il est possible que nous ayons :
thread1
thread1
:
:
—
thread2 :
thread2 :
thread2 :
...
— —
thread1 :
Solutions de manipulation des processus :
•
•
•
•
•
Les verrous
Les sémaphores
Le producteur et le consommateur
Les sémaphores à messages
Les régions critiques
empiler( p, 10 )
p.sommet := p.sommet + 1 ;
— interruption — —
empiler( p, 20 )
p.sommet := p.sommet + 1 ;
p.data[ p.sommet ] := 20 ;
...
...
retour au thread 1 — —
p.data[ p.sommet ] := 10 ;
1
2
I Les sections critiques J
I Le problème de l’exclusion mutuelle J
Les ressources logicielles ou matérielles qui posent des problèmes sont dites
critiques.
Forme des programmes :
hinitialisationi
Les portions de code qui manipulent ces ressources critiques sont appelées
des sections critiques.
exécuté une seule fois
...
hprologuei
hsection critiquei
hépiloguei
Les notions de ressource critique et section critique sont utiles
• pour les threads d’un processus utilisateur,
Contraintes :
• pour les données du système d’exploitation partagées par les processus.
• Il existe au plus un processus en section critique
• Les processus ne sont pas bloqués sans raison (absence de privation).
• Les sections hprologuei et hépiloguei sont les mêmes pour tous les processus (uniformité).
3
4
I Nouvelle formulation J
Conflit avec deux threads. Le prologue et l’épilogue encadrent la section
critique :
La procédure empiler devient :
prologue
procédure empiler( var p : pile ; d : entier )
hprologuei
p.sommet := p.sommet + 1 ;
p.data[ p.sommet ] := d ;
hépiloguei
épilogue
prologue
épilogue
Le problème est réglé en augmentant la durée d’exécution du prologue :
prologue
Nouvelle exécution :
thread1
thread1
thread1
: empiler( p, 10 )
: hprologuei
: p.sommet := p.sommet + 1 ;
— — interruption — —
thread2
: empiler( p, 20 )
thread2
: hprologuei
— — blocage du thread 2 — —
...
...
...
— — retour au thread 1 — —
thread1
: p.data[ p.sommet ] := 10 ;
thread1
: hépiloguei
...
...
...
— — reprise du thread 2 — —
thread2
: p.sommet := p.sommet + 1 ;
thread2
: p.data[ p.sommet ] := 20 ;
thread2
: hépiloguei
épilogue
prologue
épilogue
5
6
I Une solution d’attente active J
I blocage des interruptions J
Soit libre une variable partagée de type booléenne pour coder l’exclusion
mutuelle :
hiniti
(1)
libre := vrai ;
hiniti
(1)
libre := vrai ;
hprologuei
(2)
(3)
(4)
(5)
(6)
(7)
(8)
hépiloguei
(9)
soit p une variable privée
répéter
hmasquer les interruptionsi
p := libre ;
libre := faux ;
hrétablir les interruptionsi
jusqu’à (p = vrai)
...
hsection critiquei
...
libre := vrai
...
hprologuei
hépiloguei
(2)
(3)
si (libre = faux) aller en (2)
libre := faux
(4)
hsection critiquei
(5)
libre := vrai
Critiques :
Critiques :
• Consommation de temps processeur
• L’exclusion mutuelle n’est pas toujours respectée :
2 hinterruptioni 2’ 3’ 4’ . . . hretour au rougei
3 4 ...
7
•
•
•
•
L’ordre d’arrivée n’est pas respecté.
Risque de privation.
C’est une solution mono-processeur.
Utilisable uniquement en mode maı̂tre.
8
I Solution pour deux processus J
I Algorithme de Peterson pour deux processus J
Soit tour une variable entière partagée :
var
tour :
On ajoute une variable demande pour représenter l’état des processus :
var
entier ;
Voila le codage pour le processus Pi :
hinitialisationi
(1)
tour := 0 ;
hprologuei
(2)
(3)
répéter
jusqu’à (tour = i)
(4)
tour := (1 − i) ;
hépiloguei
tour :
demande :
entier ;
tableau [ 0 .. 1 ] de booléen ;
Voila le codage pour le processus Pi :
hinitialisationi
(1)
(2)
tour := 0 ;
demande := (faux, faux) ;
hprologuei
(3)
(4)
(5)
(6)
demande[i] := vrai ;
tour := 1 − i ;
répéter
jusqu’à (tour = i) ou (demande[1 − i] = faux)
hépiloguei
(7)
demande[i] := faux ;
Critiques :
• L’ordre est fixé à priori avec alternance
• Risque de privation (blocage inutile)
• Il n’y a pas de mémoire de l’état des processus
C’est une solution correcte pour le problème de l’exclusion mutuelle à deux
processus.
9
10
I Solution matérielle J
I Utilisation de Test and Set J
Codage de l’exclusion mutuelle avec une variable partagée mutex et une
variable privée p .
On introduit une nouvelle instruction Test and Set pour
• garantir l’atomicité d’une modification,
• construire une solution basée sur l’attente active valable en multi-processeurs :
hinitialisationi
(1)
mutex := 1 ;
hprologuei
(2)
(3)
(4)
répéter
TAS(p, mutex) ;
jusqu’à (p = 1)
(5)
hsection critiquei
(6)
mutex := 1 ;
Définition de Test and Set :
instruction TAS(var m : entier , var verrou : entier )
hbloquer la case mémoire verroui
m := verrou
verrou := 0
hdébloquer la case mémoire verroui
CO := CO + htaille de l’instruction TASi
hépiloguei
Critiques :
• Consommation de temps processeur.
• Risque de privation (cela peut s’arranger).
• Le processeur doit garantir l’exclusion mutuelle.
C’est une solution utilisable uniquement sur des séquences brèves.
11
12
I Les verrous J
I Les verrous (2) J
Objectifs :
Pour un verrou donné, les procédures s’exécutent en exclusion mutuelle.
procédure prendre(Verrou v)
si (v.libre = faux ) alors
hsoit P le processus appelanti
hentrer P dans la file v.processusi
hsuspendre le processus P i
sinon
v.libre := faux ;
fin si
• ne plus perdre de temps CPU,
• simplicité de la solution.
Définition des verrous :
Verrou : structure
booléen libre := vrai
file fifo processus := {}
Un verrou est une structure de donnée partagée du système d’exploitation.
procédure libérer(Verrou v)
si hla file v.processus est videi alors
v.libre := vrai ;
sinon
v.libre := faux ;
hsortir un processus Q de la file v.processusi
hréveiller le processus Qi
fin si
13
14
I L’exclusion mutuelle avec les verrous J
I Difficultés des verrous J
Le code de l’exclusion mutuelle s’écrit
hinitialisationi
(1)
mutex := nouveau Verrou ;
hprologuei
(2)
hépiloguei
(3)
prendre(mutex) ;
...
hsection critiquei
...
libérer(mutex) ;
Soit deux processus qui partagent deux ressources :
hinitialisationi
(1)
(2)
mutex1 := nouveau Verrou ;
mutex2 := nouveau Verrou ;
hrougei
(10)
(11)
(12)
(13)
(14)
prendre(mutex1 ) ;
prendre(mutex2 ) ;
hsection critiquei
libérer(mutex2 ) ;
libérer(mutex1 ) ;
hbleui
(20)
(21)
(22)
(23)
(24)
prendre(mutex2 ) ;
prendre(mutex1 ) ;
hsection critiquei
libérer(mutex1 ) ;
libérer(mutex2 ) ;
Il y a blocage pour
15
10 hinterruptioni 20 21 hblocagei
11 hblocagei
16
I Les sémaphores J
I Agir sur les sémaphores J
Un verrou ne sait pas compter. . . donc, il faut remplacer le drapeau par un
compteur (Dijkstra).
Pour un sémaphore donné, les deux procédures ci-dessous s’exécutent en
exclusion mutuelle.
Un sémaphore est une structure de donnée partagée du système d’exploitation.
Sémaphore : structure
compteur : entier ;
processus : file FIFO ;
procédure P(var s : sémaphore)
s.compteur := s.compteur − 1
si (s.compteur < 0) alors
hsoit P le processus appelanti
hentrer le processus P dans la file s.processusi
hsuspendre le processus P i
fin si
procédure V(var s : sémaphore)
s.compteur := s.compteur + 1
si (s.compteur ≤ 0) alors
hsortir un processus Q de la file s.processusi
hreprendre le processus Qi
fin si
procédure init(var s : Sémaphore ; compteur initial : entier)
vérifier que compteur initial ≥ 0 ;
s.compteur := compteur initial ;
s.processus := {} ;
P pour proberen (tester) ou wait
V pour verhogen (incrémenter) ou signal
17
I Utilisation des sémaphores J
I Le problème du producteur et du consommateur J
Soient trois processus qui exploitent la même ressource :
(1)
(2)
(3)
(4)
(5)
(6)
P1
P(s)
...
...
V(s)
...
...
P2
...
P(s)
...
...
V(s)
...
Il existe un tampon de taille limité entre le producteur et le consommateur.
P3
...
...
P(s)
...
...
V(s)
Algorithme du producteur :
répéter
hproduire un messagei
hle déposer dans le tamponi
jusqu’à ...
Algorithme du consommateur :
La trace de l’exécution donne :
(1)
(2)
(3)
(4)
(5)
(6)
action
P(s)
P(s)
P(s)
V(s)
V(s)
V(s)
18
(2,{})
(1,{})
(0,{})
(-1,{P3})
(0,{})
(1,{})
(2,{})
P1
SC
SC
SC
A
A
A
P2
A
SC
SC
SC
A
A
répéter
hprélever un message depuis le tamponi
hle consommeri
jusqu’à ...
P3
A
A
S
SC
SC
A
19
20
I Codage du producteur/consommateur J
I Codage du producteur/consommateur (2) J
Définition des sémaphores :
Le consommateur consomme si le tampon n’est pas vide :
NPlein
:
sémaphore
=
NPlein
NVide
(0, {})
:
:
sémaphore
sémaphore
=
=
(0, {})
(n, {})
Le producteur produit si le tampon n’est pas plein :
producteur :
répéter
P(NVide) ;
hproduire un messagei
hle déposer dans le tamponi
V(NPlein) ;
jusqu’à ...
répéter
hproduire un messagei
hle déposer dans le tamponi
V(NPlein) ;
jusqu’à ...
Consommateur :
Le consommateur consomme si le tampon n’est pas vide :
répéter
P(NPlein) ;
hconsommeri
V(NVide) ;
jusqu’à ...
répéter
P(NPlein) ;
hconsommeri
jusqu’à ...
21
I Les sémaphores à messages J
22
Procédures :
procédure Pm( var s : séma-mesg ; var m : données )
s.compteur := s.compteur − 1
si (s.compteur < 0) alors
hsoit P le processus appelanti
hentrer le processus P dans la file s.demandeursi
hsuspendre le processus P i
fin si
hsortir m de la file s.messagesi
Définition :
séma-mesg : structure
compteur : entier ;
demandeurs : file FIFO de processus ;
messages : file FIFO de messages ;
procédure Vm( var s : séma-mesg ; m : données )
hentrer m dans la file s.messagesi
s.compteur := s.compteur + 1
si (s.compteur ≤ 0) alors
hsortir un processus Q de la file s.demandeursi
hreprendre le processus Qi
fin si
23
24
I Les régions critiques J
I Une version en Java J
Soit une pile partagée par plusieurs threads :
public class Stack {
final int values[];
int counter = 0;
pile = structure partagée
sommet : entier ;
data : tableau [ 1 .. Max ] de entier ;
public Stack(int size) { this.values = new int[size]; }
synchronized public void push(int value) throws InterruptedException {
// attendre que la pile ne soit pas pleine
while (counter == values.length) { wait(); }
values[counter] = value;
counter++;
notifyAll();
}
procédure empiler( var p : pile ; d : entier )
région p quand (sommet < Max)
sommet := sommet + 1 ;
data[ sommet ] := d ;
fin de région
synchronized public int pop() throws InterruptedException {
// attendre que la pile ne soit pas vide
while (counter == 0) { wait(); }
counter--;
notifyAll();
return values[counter];
}
procédure dépiler( var p : pile ; var d : entier )
région p quand (sommet > 0)
d := data[ sommet ] ;
sommet := sommet - 1 ;
fin de région
}
25
I Les régions critiques simulées par sémaphores J
L’instruction
région p quand (condition)
hrégion critiquei
fin de région
peut se coder par
var
mutex
blocage
nbEnAttente
: sémaphore = (1, {}) ;
: sémaphore = (0, {}) ;
: entier = (0) ;
P(mutex) ;
tant que non (condition)
nbEnAttente := nbEnAttente + 1 ;
V(mutex) ;
P(blocage) ;
P(mutex) ;
fin tant que
hrégion critiquei
répéter nbEnAttente fois V(blocage) ;
nbEnAttente := 0 ;
V(mutex) ;
27
26
II Gestion des ressources JJ
Allocation de ressources :
• Définition d’une ressource
• Objectif de l’allocation de ressources
• Le graphe de l’allocation de ressources
Gestion des ressources
Les interblocages :
•
•
•
•
•
•
•
Définition
Comment traiter les interblocages ?
Prévention des interblocages
Évitement des interblocages
L’algorithme des Banquiers
Détection des interblocages
Guérison des interblocages
2
I Définition d’une ressource J
3
I Objectifs de l’allocation de ressources J
Une ressource est un objet utilisable par une tâche. Elle est caractérisée
par :
Les allocateurs de ressources doivent :
• être équitables (en respectant les priorités),
• un état (libre ou allouée),
• éviter la privation (attente sans fin d’une ressource),
• l’existence d’un mode d’emploi,
• éviter l’apparition d’un interblocage,
• l’existence d’un allocateur qui répond aux requêtes,
• éviter une congestion en veillant à :
. identifier une demande excessive de ressources,
On distingue les ressources :
• banalisées qui ont des occurences multiples (imprimantes, canaux d’E/S),
. ne pas accepter de demandes quand le système est en surcharge
• réquisitionnables (CPU, mémoire),
• physiques ou logicielles,
• partageables ou réentrantes (pour le code d’un programme).
4
5
I Le graphe de l’allocation de ressources J
I Les interblocages J
L’état des ressources allouées est décrit au moyen d’un graphe de l’allocation de ressources.
Définition : attente sans fin pour plusieurs processus d’une ou plusieurs
ressources détenues par d’autres processus.
Un processus Pi et une ressource Rj ayant 3 occurrences sont décrits par :
Conditions d’apparition :
Pi
• les ressources ne sont pas partageables
Rj
• les ressources ne sont pas réquisitionnables
Les demandes d’allocations et les ressources allouées sont décrits par :
R1
(a)
P1
R2
(b)
P1
• chaque processus utilise simultanément plusieurs ressources
• il existe un ensemble de processus (P1, . . . , Pn) tel que
. Pi attend Pi+1 pour 1 ≤ i ≤ n − 1
P1 réclame
une ressource
de type R1
. Pn attend P1
Une ressource
de type R2 a été
allouée à P1
6
I Un exemple d’interblocage J
I Comment traiter les interblocages ? J
Un interblocage représenté par un graphe d’allocation des ressources :
La ressource 1
est détenue par
le processus A
ressource
1
Le processus B
réclame la
ressource 1
(1)
(3)
• L’évitement : On surveille l’apparition d’un interblocage en imposant
des contraintes moins strictes.
processus
B
ressource
2
Pb
prendre R1
...
prendre R2
...
...
prendre R2
...
prendre R1
(4)
• La détection : Un algorithme à la charge de détecter les interblocages.
La ressource 2
est détenue par
le processus B
Pa
(2)
• La politique de l’autruche.
• La prévention : On impose des règles strictes qui évitent l’apparition
d’un interblocage.
processus
A
Le processus A
réclame la
ressource 2
7
• La guérison : Suppression éventuelle de l’un des processus.
8
9
I Prévention des interblocages J
I Prévention des interblocages J
Diminuer le nombre de ressources qui ne peuvent être réquisitionnées.
• interdire l’accès direct à la ressource,
+ La condition d’attente circulaire est impossible donc pas d’interblocage
possible.
• remplacer la ressource réelle par une ressource virtuelle.
− Cet ordre doit respecter une certaine logique, . . .mais laquelle ?
Exemple
•
•
•
•
•
Contrainte 1 : Classer les ressources suivant un ordre, et respecter cet
ordre lors des demandes de ressources.
− La contrainte est très lourde. . .
− La portabilité des applications est médiocre.
processeur → processus,
mémoire → mémoire virtuelle,
imprimante → queue d’impression,
écran → double-buffer, display,
machine → machine virtuelle.
− Que faire quand on ajoute une nouvelle ressource ?
Preuve de non-blocage :
•
•
•
•
P1
P2
P3
P4
attend
attend
attend
attend
P2
P3
P4
P1
sur
sur
sur
sur
R1 ,
R2, donc R2 > R1
R3, donc R3 > R2 > R1
R4, donc R4 > R3 > R2 > R1 donc R4 > R1,
mais nous avons aussi R4 < R1 car P1 détient R4.
11
10
I Prévention des interblocages (suite) J
I Évitement des interblocages J
Contrainte 2 : Annoncer les demandes de ressources avant de démarrer
un processus.
On évite les interblocages en adoptant un comportement prudent. C’est
l’algorithme des banquiers.
Contrainte 3 : À chaque demande d’allocation d’une ressource supplémentaire,
il faut libérer toutes les ressources détenues et les redemander en y ajoutant
la ressource supplémentaire.
• le S.E. connaı̂t les demandes maximales,
• les allocations/libérations sont libres.
Structures de données :
Conséquences :
•
•
•
•
•
+ solution parfaite,
− très mauvaise utilisation des ressources,
− programmes difficile à écrire.
12
M : nombre de classes de ressources,
N : nombre de processus,
dispoj pour i ∈ {1, . . . , M },
maxi,j pour i ∈ {1, . . . , N }, j ∈ {1, . . . , M },
alloci,j pour i ∈ {1, . . . , N }, j ∈ {1, . . . , M },
13
I L’algorithme des Banquiers J
Principe : garder une distance de sécurité pour ne pas tomber sur un
interblocage.
• Un processus Pi peut s’exécuter ssi
∀j ∈ {1, . . . , M }, (maxi,j − alloci,j ) ≤ dispoj
• Les indices k1, . . . , kn forment un ordre d’exécution si et seulement si
les processus Pki (avec i ∈ {1, .., n}) peuvent s’exécuter dans cet ordre
les uns après les autres.
Non sains
Interblocages
Sains
• Un système d’allocation de ressources est dit sain si il existe un ordre
d’exécution. Il n’y aura pas d’interblocage dans un système sain.
• Algorithme d’allocation de Rj à Pi :
1.
2.
3.
4.
dispoj > 0 ?
les annonces sont-elles respectées (alloci,j < maxi,j ) ?
si Rj est allouée à Pi, l’état est-il sain ?
si la réponse est négative, suspendre le processus Pi
Conséquence : diminution du taux d’utilisation des ressources.
15
14
I Trop de prudence ? J
I Détection des interblocages J
Ces deux processus sont jugés équivalents :
P8
P7
allocation(R1)
...
libération(R1)
...
...
allocation(R2)
...
libération(R2)
...
allocation(R1)
...
allocation(R2)
...
...
libération(R1)
...
libération(R2)
...
P8
P7
R6
R6
P9
Réduction
par P9
P9
R7
R7
Réduction par P7
P8
P7
P8
P7
R6
R6
P9
R7
16
Réduction
par P8
P9
R7
17
I Détection des interblocages (suite) J
R1
R2
R1
Solution :
R2
R5
P1
P2
P3
P4
I Guérison des interblocages J
R5
P5
P1
P2
P3
• Tuer un processus pour libérer des ressources. . . mais lequel ?
P4
Introduction des transactions :
R4
R3
R4
• Possibilité de stopper un processus en supprimant les modifications
déjà effectuées.
R3
R1
R2
R1
R2
R5
P1
P2
P3
• Donc, possibilité de relancer un processus.
P1
P2
P3
R4
R3
R3
18
19
Téléchargement