1. Systèmes d’Exploitation I
Chapitre II :
La gestion des processus
Préparé par Amine DHRAIEF
Révisé par Chiheb-Eddine Ben N’Cir
Université de Manouba
2. Plan du cours
● Processus Vs Programme
● États des processus
● Structure d’un processus
● Mémoire allouée aux processus
● Structures de données pour la gestion des
Processus
● Les processus sous Unix
3. 26/02/17 OS I 3
Contexte
● Les premiers OS autorisaient un seul programme à
être exécuté à 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.
4. 26/02/17 OS I 4
Contexte
● 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.
5. 26/02/17 OS I 5
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
– alors qu'un processus est une entité active avec un ensemble de
ressources associées.
→ 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.
8. 26/02/17 OS I 8
Transitions des états d’un processus
1) en exécution → enattente : a lieu quand le
processus ne peut plus poursuivre son exécution car
il a besoin d'une ressource non disponible.
2) en exécution → prêt : a lieu quand le processus a
terminé le temps imparti par le système
d'exploitation pour son exécution.
Remarque:
Un processus ne s'exécute pas forcément jusqu'à la fin car le système
d'exploitation a d'autres processus à exécuter. Cette transition a
également lieu si un processus plus urgent doit prendre la main (par
exemple processus du système d'exploitation)
9. 26/02/17 OS I 9
3) prêt → en exécution : signale que le système d'exploitation a
sélectionné un processus pour l'exécuter.
4) en exécution → Terminé : indique que le processus a fini
son exécution.
5) En attente → prêt: a lieu sitôt que le processus n'a plus de
raison d'être bloqué; par exemple les données deviennent
disponibles. Le processus passe à l'état prêt.
6) prêt → en exécution a lieu quand l'événement attendu par
le processus ne peut se réaliser. Il est donc inutile de faire
patienter davantage ce processus, autant le terminer
(interblocage).
Transitions des états d’un processus
10. 26/02/17 OS I 10
Structure d’un processus et
allocation de la mémoire
11. 26/02/17 OS I 11
Structure 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 (text section)
● Un processus inclus une représentation de l'activité en cours du
programme :
– Le contenu des registres du processeur tel que le program 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 (stack) 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.
12. 26/02/17 OS I 12
Structure d’un processus
Representation d'un
processus en mémoire
13. 26/02/17 OS I 13
La mémoire associée à un
processus
Allocation de la mémoire
● Au cours de son exécution, un processus
alloue de la mémoire. Il existe trois types
d’allocations :
1)allocation statique
2)allocation sur la pile (« stack allocation »)
3)allocation sur le tas (« heap allocation »)
14. 26/02/17 OS I 14
La mémoire associée à un processus
Allocation de la mémoire
● Allocation statique :
– Exemple : static int exemple=1 ;
– Espace mémoire nécessaire précisé dans le code avant
l’exécution
– Espace réservé au moment de la compilation dans le
fichier binaire résultant
– Espace accessible lors du chargement du binaire avant
l’exécution
→ Pas d’allocation lors de l’exécution
15. 26/02/17 OS I 15
La mémoire associée à un processus
Allocation de la mémoire
● Allocation statique :
– La mémoire allouée statiquement placée dans le segment de données ou
le segment bss
– Segment de données:
● variables globales
● variables statiques initialisées
– Segment BSS :
● zone de données non initialisées
● les variables globales et statiques qui sont initialisées à zéro ou non initialisées
16. 26/02/17 OS I 16
La mémoire associée à un processus
Allocation de la mémoire
● Allocation dynamique de mémoire du processus
– Se fait pendant l’exécution du programme
– Espace non prévue dans le binaire du programme
– Demande d’allocation se fait durant l’exécution
● Deux segments de processus concernés :
– Segment de pile
– Segment de tas
17. 26/02/17 OS I 17
La mémoire associée à un processus
Allocation de la mémoire
● Allocation sur la pile (stack allocation)
– Programme : routines (fonctions/procédures) + variables
locales (lexicales)
– Variables locales (lexicales) : sa portée est définie par le texte
du programme
● Mémoire allouée à l’entrée de la routine
● Mémoire libérée au retour de la routine
● → Le segment de pile est utilisé pour ces
allocations/dés-allocations
18. 26/02/17 OS I 18
La mémoire associée à un processus
Allocation de la mémoire
● Allocation sur le tas (heap allocation)
– Selon l’execution, un programme peut allouer de la
mémoire (malloc) et la libérer par la suite
– l’allocation se fait alors dans le segment de tas.
– Un tas : est une structure de données de type
arbre qui permet de retrouver rapidement un
élément.
19. 26/02/17 OS I 19
Exemple : Anatomie d’un
processus sous Linux
20. 26/02/17 OS I 20
Exemple : Anatomie d’un
processus sous Linux
21. 26/02/17 OS I 21
Exemple : Anatomie d’un
processus sous Linux
22. 26/02/17 OS I 22
Structures de données pour la
gestion des processus
23. 26/02/17 OS I 23
● Chaque processus est représenté dans le SE par un PCB
(process control block) qui représente le contexte d’un
processus
PCB: le Contexte d’un processus est
une structure de données qui décrit
un processus en cours d'exécution. Ce
bloc est créé au même moment que le
processus et il est mis à jour en grande
partie lors de l'interruption du
processus afin de pouvoir reprendre
l'exécution du processus
ultérieurement.
Structure de gestion des processus
Process Control Block (PCB)
24. 26/02/17 OS I 24
Structure d’un PCB
Le contexte d'un processus comporte principalement
les informations suivantes :
● Le compteur ordinal : adresse de la prochaine instruction à
exécuter par le processeur
● Les contenus des registres généraux : ils contiennent les
résultats calculés par le processus
● Les registres qui décrivent l'espace qu'il occupe en mémoire
centrale (l'adresse de début et de fin par exemple)
● Le registre variable d'état qui indique l'état du processus
D'autres informations telles que la valeur de l'horloge, la
priorité du processus
● Etc …..
30. 26/02/17 OS I 30
Contexte : UNIX est multitâche
● La qualité du fonctionnement multitâche
d’Unix représente l’un des points les plus
attractifs de ce système d’exploitation.
● On peut faire exécuter simultanément
plusieurs programmes sans qu’aucun d’eux
ne ressente la présence des autres, ou à
l’inverse en leur permettant de dialoguer
entre eux.
31. 26/02/17 OS I 31
Appel systéme fork()
● Le parallélisme Unix bas niveau est fourni
par le noyau qui duplique un processus
lorsqu’on invoque l’appel-système fork() .
● Les deux processus sont alors strictement
identiques, et seule la valeur de retour de
fork() permet de les distinguer.
32. 26/02/17 OS I 32
Comment faire un processus ?
● Un nouveau processus est créé par fork() du système appelant.
● Le nouveau processus comprend une copie de l'espace
d'adressage de l'original processus.
– Ce mécanisme permet au processus parent de communiquer facilement avec
son processus enfant.
● Les deux processus (le parent et l'enfant) poursuivre l'exécution à
l'instruction après le fork(), avec une différence:
– le code retour du fork() est égal à zéro pour le nouveau (enfant)
processus,
– alors que le PID (non nulle) de l'enfant est retourné au processus père.
33. 26/02/17 OS I 33
Comment faire un processus ?
● L'appel-système fork() est déclaré dans <unistd.h> : pid_t
fork(void);
●
DEUX valeurs de retour en cas de succès:
– Dans le processus père : valeur de retour = le PID du fils,
– Dans le processus fils : valeur de retour = zéro.
●
Sinon
– Dans le processus père : valeur de retour = -1.
● Afin d'obtenir le numéro du processus, il suffit de faire l'appel système
getpid(), ou getppid() pour obtenir le numéro du père.
– PID (Process IDentifier)
– PPID : numéro du processus père (Parent Process Identifier)
35. 26/02/17 OS I 35
Mort naturelle et Zombie
● Un processus peut se terminer normalement ou
anormalement.
● Dans le premier cas, l'application est abandonnée à la
demande de l'utilisateur, ou la tâche à accomplir est finie.
● Dans le second cas, un dysfonctionnement est
découvert, qui est si sérieux qu'il ne permet pas au
programme de continuer son travail
36. 26/02/17 OS I 36
Orphelin et Zombie
● Processus orphelins
– si un processus père meurt avant son fils ce dernier
devient orphelin.
● Processus zombie
– Si un fils se termine tout en disposant toujours d'un PID
celui-ci devient un processus zombie
– Le cas le plus fréquent : le processus s’est terminé mais
son père n’a pas (encore) lu son code de retour.
37. 26/02/17 OS I 37
Orphelin et Zombie
● Un processus fils peut devenir orphelin si son
père termine avant lui, auquel cas le noyau
s'arrange pour le « faire adopter » par un
processus système (INIT), le processus fils peut
donc lui transmettre son statut de terminaison.
● Un processus est dit zombie s’il s'est achevé,
mais qui dispose toujours d'un identifiant de
processus (PID) et reste donc encore visible
dans la table des processus. On parle aussi de
processus défunt.