Chapitre 4 Gestion des processus - Institut Superieur d`Informatique

Transcription

Chapitre 4 Gestion des processus - Institut Superieur d`Informatique
Chapitre 4
Gestion des processus
4.1 Introduction
Dans un système multitâche, la ressource la plus importante d’une machine est le processeur. Cette
ressource est allouée à un et un processus sélectionné parmi un ensemble des processus éligibles. Par
conséquent, il convient à bien gérer ce dernier afin de le rendre plus productif. En effet, un système
d’exploitation dispose d’un module qui s’occupe de l’allocation du processeur en l’occurrence le
Dispatcheur. Ce module est exécuté chaque fois qu’un processus se termine ou se bloque dans le but
de réquisitionner le processeur pour un autre processus. En plus de ce Dispatcheur, un système
d’exploitation dispose d’un autre module permettant ainsi la mise en ordre des processus qui
demandent le processeur.
4.2 Notion de processus
Un processus est une entité dynamique qui matérialise un programme en cours d'exécution avec ses
propres ressources physiques (mémoire, processeur, entrée/sortie, …) et logiques (données, variables,
…). Contrairement à un programme (texte exécutable) qui a une existence statique.
Le système d’exploitation manipule deux types de processus :
- Processus système : processus lancé par le système (init processus père des tous les
processus du système)
- Processus utilisateur : processus lancée par l’utilisateur (commande utilisateur)
Dès sa création, un processus reçoit les paramètres suivants :
PID : identificateur du processus (numéro unique)
PPID : identificateur du processus père
UID : identificateur de l’utilisateur qui a lancé le processus
GID : identificateur du groupe de l’utilisateur qui a lancé le processus
P1
N1
P2
N2
N3
P4
P7
1
Processus père
P3
P5
P6
- Il existe des appels système permettant de créer un processus,
charger son contexte et lancer son exécution (fork, exec sous Unix).
- Un processus peut (père) créer d’autres processus (fils) qui hérite
les descripteurs de son père. Ce dernier à son tour crée d’autres
processus. Un processus a un seul père mais peut avoir plusieurs
fils
- Les processus peuvent se terminer ou ils peuvent être éliminés par
d’autres processus (la primitive kill). A la destruction d’un
processus, on libère toutes les ressources qu’il avait.
- Dans certains cas, la destruction d’un processus entraîne
l’élimination de ces descendants ; cette opération n’affecte pas les
processus qui peuvent continuer indépendamment de leur père
(processus orphelins).
Adnen . A – Institut Supérieur d’Informatique et des Technologies de Communication
AU : 2009-2010
Chapitre 4
Gestion des processus
4.2.1 Etats d’un processus
Dans les systèmes mono programmés, un programme ne quitte pas l’unité centrale avant de terminer
son exécution. Pendant cette période, il dispose de toutes les ressources de la machine. Par contre, ce
n’est pas le cas dans les systèmes multiprogrammés et temps-partagé, un processus peut se trouver
dans l’un des états suivants :
1‐ Elu : (en cours d’exécution) : si le processus est en cours d'exécution 2- Bloqué : attente qu’un événement se produit ou bien ressource pour pouvoir continuer
3- Prêt : si le processus dispose de toutes les ressources nécessaires à son exécution à l'exception
du processeur.
Fin d’exécution
ELU
3
1
2
BLOQUE
Destruction
PRET
4
Création
Figure 4.1 : Diagramme de transition d’un processus
¾ Sémantique des Transitions
(1) : Allocation du processeur au processus sélectionné
(2) : Réquisition du processeur après expiration de la tranche du temps par exemple
(3) : Blocage du processus élu dans l’attente d’un événement (E/S ou autres)
(4) : Réveil du processus bloqué après disponibilité de l’événement bloquant (Fin E/S, etc…)
Notons que nous avons omis les états Création et Terminaison de processus puisqu’ils
n’interviennent pas dans cette étude.
4.2.2 Cycle d’exécution d’un processus
L’exécution d’un processus peut être vue comme une séquence de phases. Chaque phase
comprend deux cycles : un cycle d’exécution (ou calcul) réalisé par le processeur et un cycle
d’entrée sortie assuré par le canal. La dernière phase de tout processus doit comprendre
obligatoirement un seul cycle dans lequel sera exécuté la requête informant le système
d’exploitation sur la terminaison du processus. Cet appel permet au système de restituer les
ressources utilisées par le processus qui vient de terminer.
Chargement de P1
Chargement
Changement du contexte
Sauvegarde
P1
P2
P3
Figure 4.2 : Cycle d’exécution d’un processus
4.2.3 Bloc de contrôle d’un processus (PCB)
Lorsqu’un processus est temporairement suspendu, il faut qu’il puisse retrouver l’état où il se trouvait
au moment de suspension, il faut que toutes les informations dont il a besoin soient sauvegardées
pendant sa mise en attente.
2
Adnen . A – Institut Supérieur d’Informatique et des Technologies de Communication
AU : 2009-2010
Chapitre 4
Gestion des processus
Notons que le contexte d’un processus dépend du système, mais dans tous les cas c’est un
bloc de contrôle de processus (BCP) qui contient toute information nécessaire à la reprise
d’un processus interrompu : Etat du processus (prêt, suspendu, ..), quantité de mémoire, temps
CPU (utilisé, restant), priorité, etc.
Les BCP sont rangés dans une table (table des processus) qui se trouve dans l’espace mémoire
du système (figure 4.5)
Figure 4.3 : Bloc de contrôle de processus (PCB)
4.3 Ordonnancement des processus
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).
4.3.1 Le Dispatcheur
Il s’occupe de l’allocation du processeur à un processus sélectionné par l’Ordonnanceur du
processeur. Une fois allouer, 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 processeur utilisateur)
• Branchement : se brancher au bon emplacement dans le processus utilisateur pour le
faire démarrer.
4.3.2 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. En suite, il retire périodiquement de la mémoire les
3
Adnen . A – Institut Supérieur d’Informatique et des Technologies de Communication
AU : 2009-2010
Chapitre 4
Gestion des processus
processus qui sont restés assez longtemps et les remplace par des processus qui sont sur le
disque depuis trop de temps.
Nous distinguons plusieurs algorithmes d’ordonnancement, les plus répandus sont :
• Ordonnancement Premier Arrivé Premier Servi
• Ordonnancement du plus court d’abord
• Ordonnancement circulaire : Tourniquet
• Ordonnancement circulaire à plusieurs niveaux
• Ordonnancement avec priorité
4.3.3 Algorithmes d’ordonnancement
L'ordonnancement est la partie du système d'exploitation qui détermine dans quel ordre les
processus prêts à s'exécuter (présents dans la file des prêts) seront élus.
Ses objectifs sont :
- Assurer le plein usage du CPU (agir en sorte qu’il soit le moins souvent possible inactifs);
- Réduire le temps d'attente des utilisateurs.
- Assurer l'équité entre les utilisateurs.
Un algorithme d’ordonnancement permet d’optimiser une des grandeurs temporelles
suivantes :
- Le temps de réponse moyen décrit la moyenne des dates de fin d’exécution :
n
TRM= ∑ TRi
i =1
n
, avec TRi=date fin –date arrivée.
- Le temps d’attente moyen est la moyenne des délais d’attente pour commencer une
exécution :
n
TAM=
∑ TAi
i =1
n
, avec TAi =TRi - temps d’exécution
Les algorithmes d’ordonnancement se distinguent les uns des autres du fait que certains
autorisent la réquisition de l’unité centrale alors que d’autres l’interdisent. La réquisition est
la possibilité de retirer à n’importe quel instant le processeur à un processus même si ce
dernier est en cours d’exécution.
¾ Remarque :
Pour représenter schématiquement l’évolution dans le temps des processus, on recourt
habituellement à des diagrammes de Gantt.
4.3.3.1
Ordonnancement FCFS (first come first Served)
Dans cet algorithme ; connu sous le nom FIFO (First In, First Out) ; les processus sont rangés
dans la file d’attente des processus prêts selon leur ordre d’arriver. Les règles régissant cet
ordonnancement sont :
2. Quand un processus est prêt à s’exécuter, il est mis en queue de la file d’attente des
processus prêts.
3. Quand le processeur devient libre, il est alloué au processus se trouvant en tête de file
d’attente des processus prêts.
4. Le processus élu relâche le processeur s’il se termine ou s’il demande une entrée sortie
4
Adnen . A – Institut Supérieur d’Informatique et des Technologies de Communication
AU : 2009-2010
Chapitre 4
Gestion des processus
¾ Caractéristiques de l’Ordonnanceur
•
•
Ordonnanceur sans réquisition
Ordonnanceur non adapté à un système temps partagé car dans un système pareil,
chaque utilisateur obtienne le processeur à des intervalles réguliers.
¾ Exemple d’algorithme FCFS :
processus
P1
P2
P3
P4
Durée Estimé
8
4
5
9
Date Arrivée
0
1
2
3
Diagramme de Gantt :
TRM
TAM
4.3.3.2 Ordonnancement SJF (Shortest Job First) (Plus Cours temps d'Exécution en
Premier)
SJF choisit de façon prioritaire les processus ayant le plus court temps d’exécution sans
réellement tenir compte de leur date d’arrivée.
Dans cet algorithme les différents processus sont rangés dans la file d'attente des processus
prêts selon un ordre croissant de leur temps d'exécution (cycle de calcul). Les règles régissant
cet ordonnancement sont :
1. Quand un processus est prêt à s’exécuter, il est inséré dans la file d’attente des
processus prêts à sa position approprie.
2. Quand le processeur devient libre, il est assigné au processus se trouvant en tête de la
file d’attente des processus prêts (ce processus possède le plus petit cycle processeur.).
Si deux processus ont la même longueur de cycle, on applique dans ce cas
l’algorithme FCFS.
3. Si le système ne met pas en oeuvre la réquisition, le processus élu relâche le
processeur s’il se termine ou s’il demande une entrée sortie. Dans le cas contraire, le
processus élu perd le processeur également. Quand un processus ayant un cycle
d’exécution inférieur au temps processeur restant du processus élu, vient d’entrer dans
la file d’attente des prêts. Le processus élu dans ce cas sera mis dans la file d’attente
des éligibles, et le processeur est alloué au processus qui vient d’entrer.
¾ Caractéristiques de l’Ordonnanceur
•
5
Cet Ordonnanceur peut être avec ou sans réquisition
Adnen . A – Institut Supérieur d’Informatique et des Technologies de Communication
AU : 2009-2010
Chapitre 4
•
Gestion des processus
Implémentation difficile, car il n’existe aucune manière pour connaître le cycle
suivant du processeur.
¾ Exemple d’algorithme SJF :
processus
P1
P2
P3
P4
Durée Estimé
10
05
15
03
Date Arrivée
0
2
3
4
Diagramme de Gantt (à t = 5) :
TRM
TAM
4.3.3.3
Ordonnancement RR (round robin)
Dans cet algorithme les processus sont rangés dans une file d'attente des éligibles, le
processeur est alloué successivement aux différents processus pour une tranche de temps fixe
Q appelé Quantum.
Cet Ordonnancement est régit par les règles suivantes :
1. Un processus qui rentre dans l’état éligible est mis en queue de la file d'attente des
prêts.
2. Si un processus élu se termine ou se bloque avant de consommer son quantum de
temps, le processeur est immédiatement alloué au prochain processus se trouvant en
tête de la file d'attente des prêts.
3. Si le processus élu continue de s'exécuter au bout de son quantum, dans ce cas le
processus sera interrompu et mis en queue de la file d'attente des prêts et le processeur
est réquisitionné pour être réalloué au prochain processus en tête de cette même file
d’attente.
¾ Caractéristiques de l’Ordonnanceur
•
•
•
•
Avec réquisition
Adapté aux systèmes temps partagé.
La stratégie du tourniquet garantit que tous processus est servis au bout d’un temps
fini. Son avantage est d’éviter la famine. On dit qu'un processus est en famine
lorsqu'il est prêt à être exécuté et se voit refuser l'accès à une ressource (ici le
processeur) pendant un temps indéterminé
L’efficacité de cet ordonnanceur dépend principalement de la valeur du quantum Q:
o Le choix d'un Q assez petit augmente le nombre de commutation.
o Le choix d'un Q assez grand augmente le temps de réponse du système
¾ Exemple d’algorithme RR :
processus
P1
P2
P3
6
Durée Estimé
30
05
02
Diagramme de Gantt (quantum = 1) :
Date Arrivée
0
1
2
Adnen . A – Institut Supérieur d’Informatique et des Technologies de Communication
AU : 2009-2010
Chapitre 4
Gestion des processus
Quantum = 1
Quantum = 10
Diagramme de Gantt (quantum = 10) :
TRM
TAM
4.3.3.4 Ordonnacement SRTF (Shortest Remaining Time first) (plus court temps
d’exécution restant PCTER)
SRTF choisit le processus dont le temps d’exécution restant est le plus court. C’est une
variante de l’algorithme SJF
Cet algorithme est non implantable parce qu’il suppose, entre autres, connu le temps
d’exécution réel de chaque processus pour pouvoir calculer le temps restant
¾ Exemple SRTF :
processus
P1
P2
P3
P4
Durée Estimé
8
5
5
2
Date Arrivée
0
2
3
4
Diagramme de Gantt :
TRM
TAM
4.3.3.5
Ordonnancement basé sur les priorités
Dans cet algorithme, les processus sont rangés dans la file d’attente des processus prêt par
ordre décroissant de priorité. L’ordonnancement dans ce cas est régit par les règles suivantes :
1. Quand un processus est admis par le système, il est inséré dans la file d’attente des
processus prêts à sa position approprie (dépend de la valeur de priorité).
2. Quand le processeur devient libre, il est alloué au processus se trouvant en tête de file
d’attente des processus prêts (le plus prioritaire).
3. Un processus élu relâche le processeur s’il se termine ou se bloque (E/S ou autre).
¾ Remarque :
Si le système met en oeuvre la réquisition, quand un processus de priorité supérieure à celle
du processus élu entre dans l’état prêt ; le processus élu sera mis dans la file d’attente des
éligibles à la position approprie, et le processeur est alloué au processus qui vient d’entrer.
¾ Caractéristiques de l’Ordonnanceur
Les principales caractéristiques sont :
• Peut être avec ou sans réquisition
• Un processus de priorité basse risque de ne pas être servi (problème de famine) d’où
la nécessité d’ajuster périodiquement les priorités des processus prêts. L’ajustement
consiste à incrémenter graduellement la priorité des processus de la file d’attente des
7
Adnen . A – Institut Supérieur d’Informatique et des Technologies de Communication
AU : 2009-2010
Chapitre 4
Gestion des processus
éligibles (par exemple à chaque 15 mn on incrémente d’une unité la priorité des
processus prêts)
¾ Exemple d’algorithme de PRIO :
Diagramme de Gantt :
processus
P1
P2
P3
Durée Estimé
5
8
4
Priorité
1
5
3
TRM
TAM
Remarque : la priorité adoptée est celle la plus élevée.
4.4 Etude de cas: Gestion des processus UNIX
4.4.1
Les caractéristiques d'un processus
On a vu auparavant, qu'on pouvait à un moment donné avoir plusieurs processus en cours, à
un temps donné. Le système doit être capable de les identifier. Pour cela il attribue à chacun
d'entre eux, un numéro appelé PID (Process Identification).
Un processus peut lui même créer un autre processus, il devient donc un processus parent ou
père, et le nouveau processus, un processus enfant. Ce dernier est identifié par son PID, et le
processus père par son numéro de processus appelé PPID (Parent Process Identification).
Tous les processus sont ainsi identifiés par leur PID, mais aussi par le PPID du processus qui
la créé, car tous les processus ont été créés par un autre processus. Oui mais dans tout ça, c'est
qui a créé le premier processus ? Le seul qui ne suit pas cette règle est le premier processus
lancé sur le système le processus init qui n'a pas de père et qui a pour PID 1.
4.4.2
Visualiser les processus
On peut visualiser les processus qui tournent sur une machine avec la commande : ps
(options), les options les plus intéressantes sous HP-UX sont -e (affichage de tous les
processus) et -f (affichage détaillée). La commande ps -ef donne un truc du genre :
UID
•
•
•
•
•
•
•
•
PID
PPID
C STIME
TTY
TIME
COMMAND
UID nom de l'utilisateur qui a lancé le process
PID correspond au numéro du process
PPID correspond au numéro du process parent
C au facteur de priorité : plus la valeur est grande, plus
le processus est prioritaire
STIME correspond à l'heure de lancement du processus
TTY correspond au nom du terminal
TIME correspond à la durée de traitement du processus
COMMAND correspond au nom du processus.
8
Adnen . A – Institut Supérieur d’Informatique et des Technologies de Communication
AU : 2009-2010
Chapitre 4
Gestion des processus
Pour l'exemple donné, à partir d'un shell vous avez lancé la commande ps -ef, le premier
processus à pour PID 321, le deuxième 324. Vous noterez que le PPID du process " ps -ef "
est 321 qui correspond au shell, par conséquent le shell est le process parent, de la commande
qu'on vient de taper.
Certains processus sont permanents, c'est à dire qu'ils sont lancés au démarrage du système et
arrêtés uniquement à l'arrêt du système. On appelle ces process des daemons, le terme démon
est une francisation, daemon sont des abréviations.
Pour voir les process d'un seul utilisateur, vous pouvez taper :
$ ps -u olivier
D'un UNIX à l'autre la sortie peut changer. Sous LINUX par exemple ps -Al permet une
sortie assez riche, en faisant un man ps, vous aurez l'éventail de tous les paramètres possibles.
4.4.3
Commandes de gestion des processus
4.4.3.1 Changer la priorité d'un processus
Les processus tournent avec un certain degré de priorité, un processus plus prioritaire aura
tendance à s'accaparer (monopoliser) plus souvent les ressources du système pour arriver le
plus vite possible au terme de son exécution. C'est le rôle du système d'exploitation de gérer
ces priorités.
Vous disposez de la commande nice pour modifier la priorité d'un processus. La syntaxe est la
suivante :
$ nice -valeur commande
Plus le nombre est grand, plus la priorité est faible. Par exemple une valeur de 0 donne, la
priorité la plus haute 20 donne la priorité la plus faible.
La fourchette de valeur dépend de l'UNIX qu'on utilise.
Par exemple :
$ nice -5 ps -ef
4.4.3.2 Arrêter un processus
Vous disposez de la commande kill pour arrêter un processus, on doit aussi tuer un
processus. Si vous voulez arrêter un processus, vous devez connaître son PID (commande ps),
puis vous tapez :
$ kill -9 PID
4.4.3.3 Lancer un processus en arrière plan
Pour lancer une commande quelconque, vous en saisissez le nom après le prompt du shell,
tant que la commande n'est pas terminée, vous n'avez plus la main au niveau du shell, vous ne
disposez plus du prompt. Si la commande prend un certain temps, votre shell ne vous donnera
pas la main tant que la commande n'est pas terminée, vous êtes obligé de lancer un autre shell,
pour taper une autre commande.
Vous disposez d'une technique simple qui permet de lancer une commande à partir d'un shell,
et de reprendre aussitôt la main. Il vous suffit de rajouter un & à la fin de commande. Celle-ci
se lancera en " tâche de fond ", et vous reviendrez directement au prompt du shell.
En tapant une commande en tâche de fond, vous aurez à l'affichage :
$ ps ef &
6677
9
(PID du processus ramené en arrière plan)
Adnen . A – Institut Supérieur d’Informatique et des Technologies de Communication
AU : 2009-2010
Chapitre 4
Gestion des processus
En lançant une commande à partir du shell sans le & à la fin, et si celle-ci prend du temps à
vous rendre la main, vous pouvez faire en sorte qu'elle bascule en tâche de fond, pour que
vous repreniez la main.
$ netscape
Æ cette commande lance un processus qui prend du temps et ne rend pas la
main. On peut lancer ce processus en arrière plan avec
$ nestcape &
Pour visualiser l’état d’exécution d’une commande lancée en arrière plan, on utilise la
commande
$ jobs
Æ cette commande donne le [ numéro de tâche] (job), son
[PID,son état
d’exécution (stopped, running, …) et le nom de la commande
4.4.3.4 Ramener un processus en arrière/avant plan :
$ fg [N°tâche] Æ fg (foreground) permet de reprendre l’exécution de la tâche en
premier plan
$ bg [N°tâche] Æ bg (background) permet de ramener l’exécution de la tâche en arrière
plan
10
Adnen . A – Institut Supérieur d’Informatique et des Technologies de Communication
AU : 2009-2010

Documents pareils