Vous êtes sur la page 1sur 39

El hadji Mor Diaw diawfara9@gmail.

com Esmt -Ecole Superieure Multinationale des Telecoms -Master I

Chapitre II : La gestion
des processus et threads
El hadji Mor Diaw diawfara9@gmail.com Esmt -Ecole Superieure Multinationale des Telecoms -2018/2019
El hadji Mor Diaw diawfara9@gmail.com Esmt -Ecole Superieure Multinationale des Telecoms
-2018/2019

Chaîne de production d’un


programme exécutable

La chaîne de production est l'ensemble des opérations


de fabrication nécessaires, à la réalisation d'un produit
manufacturé, des matières premières jusqu'à la mise
sur le marché
Chaîne de production d’un
programme exécutable

Programme écrit dans Programme dit


un langage de haut exécutable, écrit en
niveau langage machine
Chaîne de production
Chaîne de production d’un
programme exécutable

(1) Éditeur de texte


Bibliothèque
Source : monprog.c

(2) Compilateur : (3) Éditeur de lien


$gcc -c monprog.c objet: monprog.o $gcc monprog.o -o monprog

Ficher exécutable
sur le disque :
monprog

monprog : Exécutable en mémoire


processus (4) Chargeur
Chaîne de production d’un programme
exécutable
● (1) Le programme est saisie à l'aide de l'éditeur de texte → création un fichier
sur le disque que l'on appelle le fichier source (monprog.c).

● (2) le fichier source (monprog.c) est ensuite compilé à l'aide d'un


compilateur (gcc) dépendant du langage de programmation utilisé .
– Le compilateur vérifie que la syntaxe du langage est respectée
– Le compilateur génère ensuite l'équivalent du programme source en langage machine
– On obtient le fichier objet (monprog.o)

● (3) le fichier objet est ensuite soumis à l'éditeur de liens (ld invoqué via gcc -o) dont le
rôle est de résoudre les références externes, c'est-à-dire par exemple, d'associer les
appels système inclus dans le programme à leur adresse dans le système.
– L'éditeur de liens produit sur disque le fichier exécutable (monprog)

● (4) Lorsque l'utilisateur demande l'exécution de son programme, le fichier


exécutable est alors monté en mémoire centrale : c'est l'étape de
chargement. Le système alloue de la place mémoire pour placer le code et les
données du programme.
Du monotâche vers le multitâche
● Les premiers OS autorisaient un seul programme
à être exécuter à la fois.
– Un tel programme avait un contrôle complet du système
et un accès à toutes les ressources du système

● Les OS actuels permettent à plusieurs


programmes d'être charger en mémoire et exécuter
en même temps.
– Cette évolution a nécessité un contrôle plus strict et un
cloisonnement plus rigoureux des différents programmes.
Du monotâche vers le multitâche
● Ces besoins ont conduit à la création de la notion de
processus, qui est « un programme en exécution ».
– Un processus est l'unité fondamental dans le cadre d’un OS
moderne temps partagé.

● Un système se compose d'un ensemble de processus:


– les processus du OS exécutent le code du OS
– et des processus utilisateurs exécutent le code de l'utilisateur.

● Tous ces processus s'exécutent en même temps.


→ En commutant le processeur entre les processus, le
système d‘exploitation peut rendre l'ordinateur plus productif.
Définition d’un processus
● Un processus est souvent définit comme étant un programme
en exécution.
– Un processus est plus que le code du programme

● Un processus inclus une représentation de l'activité en cours


du programme :
– Le contenu des registres du processeur tel que le programme counter
(PC) (un registre qui contient l’adresse mémoire de l’instruction en
cours/prochaine selon les architectures des CPUs)
– une pile d’exécution qui contient des données provisoires (tels que la
fonction, les paramètres, des adresses de retour, et les variables locales),
– une section de données (data section), qui contient les variables globales.

– un tas (heap) qui est une mémoire allouée dynamiquement lors de


l'exécution processus.
Définition d’un processus
● Un processus est un programme en
d'exécution auquel est associé : (i) un
environnement processeur (les registres,
compteurs,...)) et (ii) un environnement
mémoire appelés contexte du processus.

● Un processus est l'instance dynamique d'un


programme et incarne le fil d'exécution de
celui-ci dans un espace d'adressage protégé
Définition d’un processus

(1) Programme en cours


d’exécution

(2) Environnement
CPU PROCESSUS

(3) Environnem
ent Mémoire
Programme vs. Processus
● Le programme n'est pas en soi un processus !
– un programme est une entité passive, comme un fichier
contenant une liste d’instructions (haut niveau, binaire)
– alors qu'un processus est une entité active avec un ensemble de
ressources associées (binaire).
→ Un programme devient un processus lorsqu'un
fichier exécutable est chargé en mémoire.

● Même si deux processus peuvent être associés à un même


programme, ils sont néanmoins considérés comme deux
séquences d'exécution séparées.
– Chacune d'elles est un processus distinct, et bien que les sections de
texte sont équivalentes, les data section, la pile, le tas sont différents.
Les états d’un processus
Mort
● Lors de son exécution, Naissance

un processus est
caractérisé par un état
Élection
PRÊT ÉLU

● Lorsque le processus En attente du


En exécution
obtient le processeur processeur

et s'exécute, il est dans


l'état élu. Déblocage Blocage
– L'état
élu est l'état
d'exécution du processus. BLOQUÉ

En attente
des
ressources
Les états d’un processus
● lors de cette exécution, le Naissance
Mort
processus peut demander à
accéder à une ressource
qui n'est pas
immédiatement disponible Élection
– le processus ne peut pas PRÊT ÉLU
poursuivre son exécution tant
qu'il n'a pas obtenu la ressource En attente du
En exécution
processeur
● le processus quitte alors le
processeur et passe dans
l'état bloqué. Déblocage Blocage
– L'état bloqué est
l'état d'attente
d'une ressource autre que le
processeur. BLOQUÉ

En attente
des
ressources
Les états d’un processus
Mort
● Lorsque le processus a enfin Naissance obtenu la ressource qu'il
attendait,
celui-ci peut potentiellement
reprendre son exécution.
Élection
PRÊT ÉLU
● Or, lorsque le processus est passé
dans l'état bloqué, le processeur a
En attente du
été alloué à un autre processus. En exécution
– Le processeur n'est donc processeur
pas forcément libre.

Blocage
● Le processus passe alors dans Déblocage
l'état Prêt.
– L'état
Prêt est l'état d'attente du BLOQUÉ
processeur.
En attente
des
ressources
Process Control Block (PCB)
● Chaque processus est
représenté dans le système
d'exploitation par un bloc de
contrôle de processus (Process
Control Block - PCB) appelé
aussi un task-control block

● Le système d’exploitation
maintient dans une table
appelée «table des processus»
– lesinformations sur tous les
processus créés (une entrée par
processus : PCB).
Process Control Block (PCB)
● Le bloc de contrôle d'un processus (PCB) contient
les informations suivantes :
– un identificateur unique du processus (un ‘entier’) : le PID (process identifier)
– l'état courant du processus (élu, prêt, bloqué)
– le contexte processeur du processus : la valeur du CO, la valeur des
autres registres du processeur
– le contexte mémoire : ce sont des informations mémoire qui permettent
de trouver le code et les données du processus en mémoire centrale
– des informations diverses de comptabilisation pour les statistiques sur les
performances système
– des informations liées à l' ordonnancement du processus. Le PCB permet
la sauvegarde et la restauration du contexte mémoire et du contexte
processeur lors des opérations de commutations de contexte .

05/02/18 OSI 21
Process Control Block (PCB)
Ordonnancement de processus
Files d’attentes de scheduling :
Pour gérer les processus durant leur séjour, le SE maintient plusieurs files d’attente. On peut
citer entre autres :

• File d’attente des processus prêts: Cette file contient tous les processus en attente du
processeur.
• File d’attente de périphérique: Pour réguler les demandes d’allocation des différents
périphériques, on peut imaginer une file d’attente pour chaque périphérique. Quand un processus
demande une opération d’E/S, il est mis dans la file d’attente concernée.

Concrètement une file d’attente est représentée par une liste chaînée de PCB, comme le montre le
schéma suivant.
File d’attente des processus prêts :

PCB PCB PCB PCB

Tête

Queue

File d’attente d’un périphérique :


PCB PCB PCB PCB

Tête

Queue

Fig. 2.3 Files d’attente de scheduling.

Un nouveau processus est initialement placé dans la file d’attente des processus prêts. Il attend
dans cette file jusqu’à ce qu’il soit sélectionné pour son exécution et qu’on lui accorde le
processeur. Une fois qu’on a alloué le processeur au processus et que celui-ci est en cours
d’exécution, il pourrait se produire l’un des événements suivants :
• Le processus pourrait émettre une requête d’E/S et ensuite placé dans une file d’attente d’E/S.
• Le processus pourrait créer un nouveau processus et attendre la fin de celui-ci.
• Le processus pourrait être enlevé du processeur ; on dit aussi que le processeur a été
réquisitionné. Dans ce cas, le processus est remis dans la file d’attente des processus prêts.
• Le processus pourrait se terminer.

Les différents états de transition du processus entre les files d’attente sont résumés par la
figure suivante.

File d’attente des


Processeur
processus prêts

E/S File d’attente d’E/S Requête d’E/S

Tranche de temps expiré

Le fils termine Le fils s’exécute Création d’un fils

En attente d’un signal


Le signal arrive

Fig. 2.4 Files d’attente de scheduling des processus.


Rmq : Chaque fois, que le processeur devient inactif, le système d’exploitation doit sélectionner un
processus de la file d’attente des processus prêts, et lui passe le contrôle. D’une manière plus
concrète, cette tâche est prise en charge par deux routines système en l’occurrence le
Dispatcheur et le Scheduleur (Ordonnanceur).

Le Dispatcheur
Il s’occupe de l’allocation du processeur à un processus sélectionné par l’Ordonnanceur du
processeur. Une fois alloué, le processeur doit réaliser les tâches suivantes :

• Commutation de contexte : sauvegarder le contexte du processus qui doit relâcher


le processeur et charger le contexte de celui qui aura le prochain cycle processeur
• Commutation du mode d’exécution : basculer du mode Maître (mode d’exécution
du dispatcheur) en mode utilisateur (mode d’exécution du processus utilisateur)

• Branchement : se brancher au bon emplacement dans le processus utilisateur pour le


faire démarrer.
L’Ordonnanceur
Certains systèmes d’exploitation utilisent une technique d’ordonnancement à deux niveaux qui
intègre deux types d’Ordonnanceurs :

Ordonnanceur du processeur : c’est un Ordonnanceur court terme opère sur une ensemble du
processus présents en mémoire. Il s’occupe de la sélection du processus qui aura le prochain cycle
processeur, à partir de la file d’attente des processus prêts.

Ordonnanceur de travail : ou Ordonnanceur long terme, utilisé en cas d’insuffisance de mémoire,


son rôle est de sélectionné le sous ensemble de processus stockés sur un disque et qui vont être
chargés en mémoire. Ensuite, il retire périodiquement de la mémoire les processus qui sont restés
assez longtemps et les remplace par des processus qui sont sur le disque depuis trop de temps.
Les critères de scheduling

Les divers algorithmes de scheduling du processeur possèdent des propriétés différentes et peuvent
favoriser une classe de processus plutôt qu’une autre. Pour choisir quel algorithme utiliser dans une
situation particulière, nous devons tenir compte des propriétés des divers algorithmes.

Plusieurs critères ont été proposés pour comparer et évaluer les performances des algorithmes
de scheduling du processeur. Les critères les plus souvent utilisés sont :

• Utilisation du processeur : Un bon algorithme de scheduling sera celui qui maintiendra


le processeur aussi occupé que possible.

• Capacité de traitement : C’est la quantité de processus terminés par unité de temps.

• Temps de restitution : C’est le temps s’écoulant entre la soumission du travail et sa terminaison.


• Temps d’attente : C’est le temps passé à attendre dans la file d’attente des processus prêts.

• Temps de réponse : C’est le temps passé dans la file d’attente des processus prêts avant
la première exécution.
LES ALGORITHMES DE SCHEDULING
Les algorithmes d’ordonnancement peuvent être classés en deux catégories:
Non préemptif
Sélectionne un processus, puis le laisse s’exécuter jusqu’à ce qu’il bloque (soit sur une E/S, soit en attente d’un
autre processus) où qu’il libère volontairement le processeur.
Même s’il s’exécute pendant des heures, il ne sera pas suspendu de force.
Aucune décision d’ordonnancement n’intervient pendant les interruptions de l’horloge.
Préemptif:
Sélectionne un processus et le laisse s’exécuter pendant un délai déterminé.
Si le processus est toujours en cours à l’issue de ce délai, il est suspendu et le scheduleur sélectionne un autre
processus à exécuter

1 L’algorithme du Premier Arrivé Premier Servi (FCFS) :


L’algorithme d’ordonnancement du processeur le plus simple est l’algorithme du Premier Arrivé Premier Servi
(First Come First Served : FCFS). Avec cet algorithme, on alloue le processeur au premier processus qui le
demande. L’implémentation de la politique FCFS est facilement gérée avec une file d’attente FIFO. Quand un
processus entre dans la file d’attente des processus prêts, son PCB est enchaîné à la queue de la file d’attente.
Quand le processeur devient libre, il est alloué au processeur en tête de la file d’attente.
Exemple : Trois processus P1, P2 et P3 arrivent dans cet ordre au système. Leurs durées d’exécution sont
respectivement : 24, 3, 3 unités de temps. Pour représenter l’historique d’occupation du processeur, on utilise le
diagramme suivant, appelé diagramme de Gantt :

P1 P2 P3
0 24 27 30

Ce diagramme montre que le processus P1 occupe le processeur de l’instant 0 jusqu’à l’instant 24. A l’instant 24,
le processeur devient occupé par le processus P2, puis à l’instant 27 il sera suivi du processus P3

Le temps d’attente est égal à 0 pour le processus P, 24 pour le processus P2 et 27 pour le processus P3.le
temps d’attente moyen est egal à (0+24+27)/3, soit 17 unités de temps. Si les processus étaient arrivés dans
l’ordre P2, P3 et P1, les résultats seraient différents :

Diagramme de Gantt :
P2 P3 P1
0 3 6 30

Le temps moyen d’attente serait : (0+3+6)/3=3 unités.

Ainsi le temps moyen d’attente avec une politique FCFS n’est généralement pas minimal et peut varier
substantiellement si les durées d’exécution des processus varient beaucoup.
Critique de la méthode :
La méthode FCFS tend à pénaliser les travaux courts : L’algorithme du FCFS n’effectue pas de réquisition. C’est à
dire qu’une fois que le processeur a été alloué à un processus, celui-ci le garder jusqu’à ce qu’il le libère, soit en
terminant, soit après avoir demandé une E/S.

L’algorithme FCFS est particulièrement incommode pour les systèmes à temps partagé, où il est important que
l’utilisateur obtienne le processeur à des intervalles réguliers. Il peut paraître désastreux de permettre qu’un
processus garde le processeur pendant une période étendue.

2 L’algorithme du Plus Court d’abord (SJF) :


Cet algorithme (en anglais Shortest Job First : SJF) affecte le processeur au processus possédant le temps
d’exécution le plus court. Si plusieurs processus ont la même durée, une politique FIFO sera alors utilisée pour les
départager.

Exemple : On soumet au système quatre processus P1, P2, P3 et P4 dont les durées d’exécution sont
données par le tableau suivant :

Processus Durée d’exécution


P1 6
P2 8
P3 7
P4 3

L’algorithme du travail le plus court donnera alors le résultat suivant :


Diagramme de Gantt :
P4 P1 P3 P2
0 3 9 16 24
Le temps moyen d’attente est = (0+3+9+16)/4=7. Alors que si on avait choisi une politique FCFS, le temps
moyen serait de : 10.25 unités de temps.
Critique de la méthode : Il a été prouvé que l’algorithme SJF est optimal dans le temps dans le sens qu’il
obtient le temps d’attente le plus court pour un ensemble de processus donné.

Toutefois, cet algorithme est difficile à implémenter pour une raison simple : Comment peut-on connaître le temps
d’exécution d’un processus à l’avance ?

3 Scheduling avec priorité


Cet algorithme associe à chaque processus une priorité, et le processeur sera affecté au processus de plus haute
priorité. Cette priorité varie selon les systèmes et peut aller de 0 à 127.
Les priorités peuvent être définies en fonction de plusieurs paramètres : le type de processus, les limites
de temps, les limites mémoires, …etc.
Exemple : On dispose de 5 processus ayant des priorités différentes, comme le montre ce tableau :

Processus Durée d’exécution Priorité


P1 10 2
P2 1 4
P3 2 2
P4 1 1
P5 5 3

Diagramme de Gantt :

P2 P5 P1 P3 P4

0 1 6 16 18 19
Le temps moyen d’attente est = (0+1+6+16+18)/5=8.2 unités de temps.

Critique de la méthode :

Une situation de blocage peut survenir si les processus de basse priorité attendent indéfiniment le
processeur, alors que des processus de haute priorité continuent à affluer.

Pour éviter une telle situation, on peut utiliser la technique dite du vieillissement. Elle consiste à incrémenter
graduellement la priorité des processus attendant dans le système pendant longtemps. Par exemple, nous
pourrions incrémenter de 1 la priorité d’un processus en attente toutes les 15 minutes. En fin de compte, même un
processus ayant une priorité initiale égale à 0 aurait la plus haute priorité dans le système et serait exécuté.

4 L’algorithme de Round Robin (Tourniquet) :


L’algorithme de scheduling du tourniquet, appelé aussi Round Robin, a été conçu pour des systèmes à temps
partagé. Il alloue le processeur aux processus à tour de rôle, pendant une tranche de temps appelée quantum.
Dans la pratique le quantum s’étale entre 10 et 100 ms.
Exemple : On dispose de 3 processus P1, P2 et P3 ayant comme durée d’exécution, respectivement 24, 3 et
3 ms. En utilisant un algorithme Round Robin, avec un quantum de 4 ms, on obtient le diagramme de Gantt suivant
:
Diagramme de Gantt :

P1 P2 P3 P1 P1 P1 P1 P1
0 4 7 10 17 18 22 26 30

Le temps moyen d’attente est de : (6+4+7)/3 = 17/3 = 5.66 ms


La performance de l’algorithme de Round Robin dépend largement de la taille du quantum. Si le quantum est très
grand, la politique Round Robin serait similaire à celle du FCFS. Si le quantum est très petit, la méthode Round
Robin permettrait un partage du processeur : Chacun des utilisateurs aurait l’impression de disposer de son
propre processeur.
Cependant le quantum doit être choisi de sorte à ne pas surcharger le système par de fréquentes commutations
de contexte.
Exemple : On dispose d’un processus P dont le temps d’exécution est de 10 ms. Calculons le nombre de
commutations de contexte nécessaires pour un quantum égal respectivement à : 12, 6 et 1.

Quantum=12

Nombre de commutations de contexte = 1


Quantum=6

Nombre de commutations de contexte = 2

Quantum=1

Nombre de commutations de contexte = 9


5 Scheduling avec files d’attente multiniveaux :

Une autre classe d’algorithmes de scheduling a été développée pour des situations où on peut
facilement classer les processus dans des groupes différents. Par exemple, il serait intéressant de faire
une distinction entre les processus de premier plan (interactifs) et les processus d’arrière-plan
(traitement par lot). En effet, ces deux types de processus possèdent des besoins différents en ce qui
concerne le temps de réponse et ils pourraient donc devoir être schedulés différemment. De plus les
processus de premier plan peuvent être prioritaires par rapport aux processus d’arrière-plan.

Les threads
Une thread (appelée aussi processus léger ou activité) est un fil d'instructions (un chemin d’exécution) à

l'intérieur d'un processus. L’exécution des threads est concurrente.

Contrairement aux processus, les threads d’un même processus partagent le même espace d’adressage, le

même environnement (par exemple les mêmes variables d’environnement, des mêmes données, etc.). Ainsi 2

threads d’un même processus communiquent beaucoup plus facilement que 2 processus.

Par contre les threads ont leur propre compteur ordinal, leur propre pile.

Les programmes qui utilisent plusieurs threads sont dits multithread


Applications
Exercice #1

1) Répondre par OUI ou NON en justifiant vos réponses.


1) Un processus est une entité produite
après compilation
2) Un processus est une entité produite après
chargement d’un binaire en mémoire
3) Le pseudo-parallélisme impose aux
processus de se connaître mutuellement
Exercice #2
● Préciser le nombre de processus créer
par les programmes ci-dessous :
Code1 Code 2 Code 3
int main() int main() { int main() {
{ fork(); if (fork() > 0) int cpt=0;
fork(); fork(); while (cpt < 3) {
fork(); } if (fork() > 0)
} cpt++;
else
cpt=3;
}
Exercice #3
● Soit le code ci-dessous :
Exercice #4

● 1- Lancer le programme ci-dessous avec


les arguments 10 20. Que constatez-
vous ? Donnez une explication.

● 2- Lancer le programme ci-dessous avec


les arguments 10 0. Que constatez-vous ?
Donnez une explication.
Exercice #5 – Question de cours
1. Qu’est-ce qu’un système d’exploitation ?donner ses rôles ?

2. Qu’est-ce que la multiprogrammation et qu’est-ce que le temps partagé ?

3. Dessinez les principales étapes du cycle de vie d’un processus

Exercice #6 – Ordonnancement
On considère les processus suivants, définis par leur durée (réelle ou estimée), leur

date d’arrivée, et leur priorité (les processus de priorité 0 étant les moins prioritaires) :

P1 durée : 8, date 0, priorité 1

P2 durée : 4, date 1, priorité 0

P3 durée : 3, date 2, priorité 1

P4 durée : 1, date 8, priorité 0

P5 durée : 2, date 12, priorité 1


1. Dessinez un diagramme de Gantt correspondant au résultat d’un ordonnancement

par priorité et indiquez le temps d’attente moyen.

2. Dessinez un diagramme de Gantt correspondant au résultat d’un ordonnancement «

round robin » avec un quantum de temps fixé à 2 et indiquez le temps d’attente moyen.

3. On définit ainsi un algorithme d’ordonnancement à plusieurs niveaux :

— Le niveau N correspond à exactement tous les processus de priorité N.

— Le niveau 1 obéit à un ordonnancement « round robin », quantum 2 : entre eux,

les processus de priorité 1 suivent cet ordonnancement.

— Le niveau 0 obéit à un ordonnancement « plus court d’abord » non préemptif.

— Le niveau 1 a priorité sur le niveau 0 : tous les processus de priorité 1 sont


toujours prioritaires sur ceux de priorité 0, et ce de manière préemptive.
Dessinez un diagramme de Gantt correspondant au résultat de cet ordonnancement
et indiquez le temps d’attente moyen.
4. Quel est le meilleur algorithme suivant le critère du temps d’attente moyen ? Du temps
d’attente min-max ?
1

Vous aimerez peut-être aussi