Chapitre 1
Chapitre 1
Chapitre 1
Bessouf Hakim
SYSTÈMES D'EXPLOITATION II
Objectifs de l’enseignement
Introduire la problématique du parallélisme dans les systèmes d’exploitation et
étudier la mise en œuvre des mécanismes de synchronisation, de communication
dans l’environnement centralisé
Contenu de la matière
1. Notions de parallélisme, de coopération et de compétition
2. Synchronisation
3. Communication
4. Interblocage
5. Étude de cas : système Unix
CHAPITRE 1:
La commutation de contexte
La commutation de contexte
• Dans les systèmes multiprogrammes plusieurs processus sont
exécutés en parallèle (pseudo-parallélisme).
• Le passage d'un processus a un autre nécessite une opération de
sauvegarde du contexte du processus arrêté et de chargement du
contexte du nouveau processus. Cette opération est appelé
commutation de contexte.
• Le petit contexte comprend le conteur ordinale (CO) et le mot d’état
(PSW),
• Le grand contexte comprend les registres généraux et la pile.
• L’espace mémoire alloué à un processus est
appelé image mémoire (Memory Map) du
processus , Il est divisé en plusieurs parties :
Le Code : C'est le code des instructions du
programme à exécuter. L’accès à cette zone
mémoire se fait en lecture seulement (ReadOnly).
Les Données (Data) : Il contient l’ensemble des
constantes et variables déclarées.
La Pile (Stack) : Elle permet de stocker: les valeurs
des registres, Variables locales, paramètres de
fonctions et les adresses de retour des fonctions.
Le Tas (Heap) : C'est une zone à partir de laquelle
l’espace peut être alloué dynamiquement en cours
d’exécution du processus, en utilisant par exemple
les fonctions new et malloc
• Pour gérer les processus le système d'exploitation utilise une table en mémoire
centrale appelé table des processus ou bloc de contrôle des processus (PCB).
Cette table contient plusieurs informations concernant chaque processus (
conteurs ordinal, mots d'état, pointeur de pile, ressources utilisés ..etc)
• Manipulation des processus
Le système d'exploitation utilise plusieurs primitives (procédures) pour
manipuler les processus :
Création : utilisé par un processus pour créer un autre processus, Le premier
processus est appelé processus père, le deuxième processus est appelé
processus fils. Un processus père peut avoir plusieurs processus fils.
Activation : Elle permet de mettre un processus prêt dans l'état actif,
Suspension : Elle permet de suspendre un processus,
Destruction : Elle permet de terminer un processus et de libérer toutes les
ressources qu'il utilise ( mémoires, fichiers ..etc).
l'ordonnanceur des processus (scheduler)
• L'ordonnanceur est un module du système d'exploitation qui partage
le processeur central (CPU) entre plusieurs processus en attente
d'exécution (dans l'état prêt), suivant une politique définit a l'avance
par les concepteurs du système d'exploitation.
• L'ordonnanceur donc est un programme qui choisit le prochain
processus a exécuter.
• Le choix du processus a exécuter est appelé ordonnancement
(scheduling).
Objectifs de l'ordonnanceur (scheduler)
• Les principaux objectifs de l'ordonnanceur sont :
• L'équité : l'ordonnanceur doit allouer le processeur central aux
processus de même priorité de manière juste et équitable.
• Utilisation maximal des ressources :
l'ordonnanceur doit assurer une utilisation maximal des ressources de
la machine (E/S, mémoire, ..etc)
Objectifs de l'ordonnanceur (scheduler)
• Dans les systèmes par lots :
➢ L'ordonnanceur doit exécuter un maximum de travaux par heur,
➢ L'ordonnanceur doit réduire le délais entre la soumission du travail et la
sortie des résultats,
➢ L'ordonnanceur doit utiliser au maximum le processeur central,
• Dans les systèmes interactifs (il y a interaction entre l'utilisateur et la
machine) :
➢ L'ordonnanceur doit minimisé le temps de réponse, il doit donc
répondre rapidement aux requêtes des utilisateurs,
• Dans les systèmes temps réel (il y a des contraintes temporelles comme
dans centrales nucléaire, usines ..etc) :
➢ L'ordonnanceur doit respecter les délais.
Les critères d'ordonnancement (scheduling)
• Disponibilité des ressources: les programmes sont ordonnancés suivant les
ressources qu'il demandes, et suivant les ressource disponible dans la machine.
• Classe des programmes: les programmes sont ordonnancés suivant leurs type
(interactif, temps réel, orienté calcul, orienté E/S ..etc).
• Ordonnancement avec ou sans préemption: Dans les politique
d'ordonnancement sans préemption un programme s'exécute jusqu'à ce qu'il se
bloque (pour attendre une E/S), ou il se termine. Par contre dans les politiques
d'ordonnancement avec préemption l'ordonnanceur peut suspendre un
programme en exécution et exécuter un autre programme.
• Ordonnancement avec ou sans priorité: Les programmes peuvent ou non avoir
des priorités d'exécution. Par exemple un programme système peut être
prioritaire qu'un programme utilisateur.
Niveaux d'ordonnancement
Il existe deux nivaux
d'ordonnancement :
• L'ordonnancement des travaux
permet de choisir le travail a
admettre dans le système et
créer le processus correspondant.
• L'ordonnancement des
processus permet de
choisit le processus a exécuter.
1. Politiques d'ordonnancement des travaux
1.1 Politique d'ordonnancement sans préemption
La politique du premier arrivé, premier servie (FCFC : First Come First
Served, FIFO : First In First Out) : Dans cette politique le travail qui arrive le
premier est servie le premier. Cette politique désavantage les processus
courts.
La politique du travail le plus court d'abord (SJF : short job first): Dans cette
politique le travail le plus court est servie le premier. Cette politiques favorise
les travaux cours mais elle nécessite de connaître a l'avance le temps
d'exécution des travaux.
La politique d'ordonnancement par priorités: Dans cette politique
l'ordonnanceur exécute le travail qui a la plus grade priorité. La priorité des
programme dans ce cas est fixé a l'avance. l'ordonnancement par priorité
peur être préemptif ou non préemptif.
1. Politiques d'ordonnancement des travaux
1.2 Politique d'ordonnancement avec préemption
La politique du travail avec le plus court temps restant (SRTF : Shortest
Remained Time First) : l'ordonnanceur choisit le travail dont le temps
restant d'exécution est le plus court. C'est une version préemptive de
SJF. Si par exemple un premier travail est en exécution et un nouveau
travail arrive, si le temps d'exécution du deuxième travail est inférieur
au temps restant au premier travail, le premier travail est arrêté et le
deuxième travail est exécuté.
Cette politiques favorise les travaux cours mais elle nécessite de
connaître a l'avance le temps d'exécution des travaux
Politiques d'ordonnancement des processus
• La politique du tourniquet (Round Robbin)
Elle est utilisé dans les systèmes a temps
partagé, elle est similaire a la politique FCFS
mais on rajoute la réquisition. Dans cette
politique chaque processus prêt est exécuté
pendant une tranche de temps appelé
quantum, a la fin de ce temps
l'ordonnanceur exécute un autre processus.
• Si le quantum est très grand cette politique
ressemblera a la politique FCFS, par contre si
le quantum est très petit chaque processus
aura l'impression de posséder son propre
processeur mais on aura une surcharge due
a la commutation de contexte des
processus.
Politiques d'ordonnancement des processus
• La politique à plusieurs niveaux de queues
Dans cette politique les processus sont regroupés en plusieurs fils selon
leurs type (interactif, temps réel, ..etc) . Chaque file est ensuite géré par
une politique d'ordonnancement qui s'adapte le mieux a cette file. Une
autre politique est utilisé pour ordonnancer les files entre eux. Un exemple
de cette politique est donné dans la figure suivante :
Politiques d'ordonnancement des processus
• La politique à plusieurs niveaux de queues dépendantes
Dans cette politique un processus peut changer de file selon son
comportement durant son exécution.
Les Threads (les flots ou les processus légers)
• plusieurs petits processus dans un même
processus qui manipulent les données et
calcules les résultats. Ces petits processus
sont appelés threads.
• Ces petits processus partagent le même
espace d'adressage et s'exécutent en
parallèle (ou en pseudo-parallélisme)
• Par exemple un premier thread peut lire les
données, en même temps un deuxième
thread calcule les résultats et en même temps
un troisième thread affiche ces résultats. Ces
trois threads partagent le même espace
d'adressage
Les Threads (les flots ou les processus légers)
• Par exemple dans une application de vidéo
conférence comme skype, un premier
thread peut recevoir le flue vidéo
d'internet et l'afficher, un deuxième thread
peut lire le microphone, un troisième
thread peut lire la caméra, et un quatrième
thread peut transmettre les messages
tapés par l'utilisateur, tous ces threads
s'exécutent en parallèle et sont contenu
dans un seul processus.
Les Threads (les flots ou les processus légers)
Les Threads (les flots ou les processus légers)
• Les threads peuvent partager le même espace d'adressage et
manipuler les mêmes données,
• La création et destruction des threads est très rapide par rapport a la
création et a la destruction des processus,
• L'utilisation des threads permet a une application d'exécuter plusieurs
tâches en même temps ce qui accélère l'exécution de l'application.
• L'utilisation des threads est très intéressante quand la machine est
équipé de plusieurs processeurs chaque thread peut s'exécuter sur un
processeur différent..
Modèles de Représentation des Processus
1. Le système de tâches
Un processus est décomposé en plusieurs
unités de traitement élémentaires appelés
tâches. Chaque tâche est composé d'une ou
plusieurs instruction machine.
- Quelles sont les tâches qui peuvent être
exécutées en parallèle ?
Si par exemple une tâche Tj doit être exécuté
après la fin d'une tache Ti on écrit « Ti < Tj ».
La relation « < » est appelé relation de
précédence.
exemple: T1 < T2
Modèles de Représentation des Processus
• les relations de précédence : • Si Ti < Tj et Tj < Tk alors Ti < Tk.
T1<T3, T1<T4, T1<T5, T1<T6 (relation transitive).
T2<T5, T2<T6, • Si on supprime les relations qui
peuvent être déduites par
T3<T4, T3<T5, T3<T6, transitivité on aura les relations
T4<T5, T4<T6, de précédence suivantes :
T5<T6. T1 < T3, T2<T5, T3<T4, T4<T5,
T5<T6.
• Si les tâches T1 à Tn d'un programme P doivent être exécutés
séquentiellement, on écrit: P =T1T2 T3...Tn.
Modèles de Représentation des Processus
2. Conditions de Bernstein:
Les conditions de Bernstein permettent de déterminer si deux
instructions (ou tâches) sont exécutable en parallèle ou pas.
Soit une instruction inst ;
- On note par R(inst) : l'ensemble des variable contenu dans
l'instruction Inst qui ne changent pas par l'exécution de cette
Instruction. Cet ensemble est appelé domaine de lecture,
- On note par W(inst) : l'ensemble des variable contenu dans
l'instruction inst qui sont modifié par l'exécution de cette Instruction
inst. Cet ensemble est appelé domaine d'écriture
Modèles de Représentation des Processus
• Les deux instructions inst1 et inst2
sont exécutable en parallèle si les
conditions suivantes sont satisfaites :
R(inst1) ∩ W(inst2) = ᴓ
W(inst1) ∩ R(inst2) = ᴓ
W(inst1) ∩ W(inst2) = ᴓ
• Dans ce cas on dit que les instructions
(ou d'une manière plus générale : les
tâches ) inst1 et inst2 son non
interférentes.
Modèles de Représentation des Processus
• R(Lire(a)) = { } W(Lire(a)) = {a}
• R(Lire(b)) = { } W(Lire(b)) = {b}
• R(c=a+b) = {a,b } W(c=a+b) = {c}
• R(Écrire(c)) = {c} W(Écrire(c)) = {}