Syst' Emes D'exploitation Cours 2/10: Processus I: Nicolas Sabouret
Syst' Emes D'exploitation Cours 2/10: Processus I: Nicolas Sabouret
Syst' Emes D'exploitation Cours 2/10: Processus I: Nicolas Sabouret
Systèmes d’Exploitation
Cours 2/10 : Processus I
Nicolas Sabouret
Université Paris-Sud
Licence 3 - semestre S5
Plan
1 Processus : définition
2 Rôle de l’OS
3 Création de processus
4 Notion de thread
Plan
1 Processus : définition
2 Rôle de l’OS
3 Création de processus
4 Notion de thread
5 Synthèse
Définition
Programme
Définition
Programme
Un programme est une séquence d’instructions
Définition
Programme
Un programme est une séquence d’instructions
Processeur
Définition
Programme
Un programme est une séquence d’instructions
Processeur
Un processeur est un automate (électronique) de traitement.
Il peut exécuter un programme
Il modifie sont état en fonction des instructions
Définition
Programme
Un programme est une séquence d’instructions
Processeur
Un processeur est un automate (électronique) de traitement.
Il peut exécuter un programme
Il modifie sont état en fonction des instructions
Processus
Un processus est un programme exécuté par un processeur.
Programme et processus
Processus
Un processus est un programme exécuté par un processeur
Programme et processus
Processus
Un processus est un programme exécuté par un processeur
→ Un même programme peut donner naissance à plusieurs
processus.
Exemples de processus
Programme et processus
Processus
Un processus est un programme exécuté par un processeur
→ Un même programme peut donner naissance à plusieurs
processus.
Exemples de processus
Logiciel de traitement de texte en cours d’exécution
Compilation de code source
Tâche système (ex : envoi de données vers l’imprimante)
Programme et processus
Processus
Un processus est un programme exécuté par un processeur
→ Un même programme peut donner naissance à plusieurs
processus.
Exemples de processus
Logiciel de traitement de texte en cours d’exécution
Compilation de code source
Tâche système (ex : envoi de données vers l’imprimante)
Création
Un processus est forcément créé par un autre processus
(ex : par l’OS)
Remarque
Concurrence
Dans un système moderne, plusieurs processus s’exécutent en
parallèle
Exemples :
Le shell (tout l’interface graphique → plusieurs processus)
L’éditeur TexStudio avec lequel je tape ce cours
Le compilateur LaTeX
Le visualisateur PDF
Les processus de l’OS (gestion du réseau, gestion des utilisateurs, . . . )
Remarque
Concurrence
Dans un système moderne, plusieurs processus s’exécutent en
parallèle
Exemples :
Le shell (tout l’interface graphique → plusieurs processus)
L’éditeur TexStudio avec lequel je tape ce cours
Le compilateur LaTeX
Le visualisateur PDF
Les processus de l’OS (gestion du réseau, gestion des utilisateurs, . . . )
Mode superviseur
On distingue les processus de l’OS des processus utilisateur
. . . mais tous sont en concurrence pour l’accès aux ressources
Environnement
Variables héritées du processus parent
Ex : PATH=/usr/bin:/usr/local/bin:...
Tas
Constantes (ex : public static final int BIDULE=47;)
Variables globales
Pile
Variables temporaires + contexte (ex : compteur d’instruction)
Code
Recopie du programme machine
→ segment exécutable du processus
Info32b Systèmes d’Exploitation Nicolas Sabouret 7/34
Processus : définition Rôle de l’OS Création de processus Notion de thread Synthèse
Structure d’un processus Cycle de vie Consistance
Plan
1 Processus : définition
2 Rôle de l’OS
Structure d’un processus
Cycle de vie
Consistance
3 Création de processus
4 Notion de thread
5 Synthèse
Rôle de l’OS
Suspension et reprise
Multiprogrammation et temps partagé → interrompre et reprendre
les processus
Gestion de la mémoire où sont stockées les processus interrompus
Communication et synchronisation
Partage de données en plusieurs processus
Consistance de l’état de la mémoire
Rôle de l’OS
Suspension et reprise
Multiprogrammation et temps partagé → interrompre et reprendre
les processus
Gestion de la mémoire où sont stockées les processus interrompus
Communication et synchronisation
Partage de données en plusieurs processus
Consistance de l’état de la mémoire
Structure de données
Contenu
Définir l’ensemble des éléments utiles
(Exercice)
Mémoire
Mémoire
Voir cours 6
Processeur
Processeur
Valeur de priorité
Pointeur vers la file de priorité
Données d’utilisation passée du processeur (fréquence,
durée. . . )
Voir cours 3
Processeur
Valeur de priorité
Pointeur vers la file de priorité
Données d’utilisation passée du processeur (fréquence,
durée. . . )
Voir cours 3
Usage du processeur
Informations sur l’utilisateur du processeur
Périphériques
Périphériques
Dans le PCB
Chaque processus se voit attribué un ensemble de périphériques
→ liste d’identifiants de périphériques
Temps partagé
Problème
Lorsqu’on interrompt un processus, il faut être capable de le
reprendre plus tard. . .
Temps partagé
Problème
Lorsqu’on interrompt un processus, il faut être capable de le
reprendre plus tard. . .
Temps partagé
Problème
Lorsqu’on interrompt un processus, il faut être capable de le
reprendre plus tard. . .
État du processus
Actif ou non (voir cycle de vie. . . )
Contenu
Information mémoire (voir cours 6)
Données d’ordonnancement (voir cours 3)
Périphériques alloués
Informations d’usage
État du processus (voir cycle de vie) + sauvegarde de l’état
du processeur
Rôle de l’OS
Suspension et reprise
Multiprogrammation et temps partagé → interrompre et reprendre
les processus
Gestion de la mémoire où sont stockées les processus interrompus
Communication et synchronisation
Partage de données en plusieurs processus
Consistance de l’état de la mémoire
Nouveau
Nouveau
Chargement
du code
Édition
de liens
Le processus prêt est mis
Prêt
Recopie de l’ dans la file d’attente
environnement
Initialisation Initialisation
du tas pointeur pile
Nouveau
Lancement
Exécution
Chargement 1ere instruction
du code
ordonnanceur
Édition
de liens
Le processus est sélectionné
Prêt
Recopie de l’ pour l’accès au processeur
environnement
Initialisation Initialisation
du tas pointeur pile
Allocations
de ressources
sur demande
Nouveau
Lancement
Exécution Terminé
Chargement 1ere instruction
du code
ordonnanceur
Édition
de liens
Prêt
Recopie de l’
environnement
Initialisation Initialisation
du tas pointeur pile
Allocations
de ressources
sur demande
Nouveau
Lancement
Exécution Terminé
Chargement 1ere instruction
du code
ordonnanceur
ion
upt
err
Édition int
de liens Un seul processus en
exécution à la fois
Prêt Mais plusieurs peuvent être
Recopie de l’
environnement prêts (file d’attente)
Initialisation Initialisation
du tas pointeur pile
Allocations
de ressources
sur demande
Nouveau
Lancement
Exécution Terminé
Chargement 1ere instruction
du code
ordonnanceur
requête E/S
ion
upt
err
Édition int En Attente
de liens
Prêt
Recopie de l’
Les processus passent la
environnement
main lorsqu’ils accèdent à
une autre ressource (E/S)
Initialisation Initialisation
du tas pointeur pile
Allocations
de ressources
sur demande
Nouveau
Lancement
Exécution Terminé
Chargement 1ere instruction
du code
ordonnanceur
requête E/S
ion
upt
err
Édition int En Attente
de liens
fin E/S
Prêt
Recopie de l’ (interruption)
environnement
Initialisation Initialisation
du tas pointeur pile
Allocations
de ressources
sur demande
Nouveau
Lancement
Exécution Terminé
Chargement 1ere instruction
du code
ordonnanceur
requête E/S
ion
upt
err
Édition int En Attente
de liens
fin E/S
Prêt
Recopie de l’ (interruption)
environnement 0-1 processus en exécution
0-N processus prêts
Initialisation Initialisation
pointeur pile 0-N processus en attente
du tas
Exécution
r
eu
nc requête E/S
n na tion
do p
or terru
in En Attente
fin E/S
Prêt
(interruption)
0-1 processus en exécution
0-N processus prêts
0-N processus en attente
Exécution
Prêt En Attente
Suspension de l’exécution
Le processus en exécution laisse la
main si :
Exécution
Prêt En Attente
Suspension de l’exécution
Le processus en exécution laisse la
main si :
Il fait une demande d’E/S
Exécution
→ liste EA
Prêt En Attente
Suspension de l’exécution
Le processus en exécution laisse la
main si :
Il fait une demande d’E/S
Exécution
→ liste EA
Sa tranche de temps est expirée
Prêt En Attente → file Prêt
Suspension de l’exécution
Le processus en exécution laisse la
main si :
Il fait une demande d’E/S
Exécution
→ liste EA
Sa tranche de temps est expirée
Prêt En Attente → file Prêt
Il crée un processus fils
→ file Prêt
Suspension de l’exécution
Le processus en exécution laisse la
main si :
Il fait une demande d’E/S
Exécution
→ liste EA
Sa tranche de temps est expirée
Prêt En Attente → file Prêt
Il crée un processus fils
→ file Prêt
Il lance une interruption wait
→ liste EA
Suspension de l’exécution
Le processus en exécution laisse la
main si :
Il fait une demande d’E/S
Exécution
→ liste EA
Sa tranche de temps est expirée
Prêt En Attente → file Prêt
Il crée un processus fils
→ file Prêt
Il lance une interruption wait
→ liste EA
Rôle de l’OS
Suspension et reprise
Multiprogrammation et temps partagé → interrompre et reprendre
les processus
Gestion de la mémoire où sont stockées les processus interrompus
Communication et synchronisation
Partage de données en plusieurs processus
Consistance de l’état de la mémoire
Consistance de la mémoire
Processus 1 Processus 2
Consistance de la mémoire
Processus 1 Processus 2
Processus 1 s’exécute
Consistance de la mémoire
Processus 1 Processus 2
A A
Consistance de la mémoire
Processus 1 Processus 2
A
Mémoire (RAM) UC (registres)
A A
Consistance de la mémoire
Processus 1 Processus 2
A
Mémoire (RAM) UC (registres)
Processus 2 s’exécute
Consistance de la mémoire
Processus 1 Processus 2
A
Mémoire (RAM) UC (registres)
A A
Consistance de la mémoire
Processus 1 Processus 2
A
Mémoire (RAM) UC (registres)
A A1
Consistance de la mémoire
Processus 1 Processus 2
A A1
Mémoire (RAM) UC (registres)
A A1
Consistance de la mémoire
Processus 1 Processus 2
A A1
Mémoire (RAM) UC (registres)
Consistance de la mémoire
Processus 1 Processus 2
A A1
Mémoire (RAM) UC (registres)
A A
Consistance de la mémoire
Processus 1 Processus 2
A A1
Mémoire (RAM) UC (registres)
A A1
Consistance de la mémoire
Processus 1 Processus 2
A A1
Mémoire (RAM) UC (registres)
A A1
Consistance de la mémoire
Processus 1 Processus 2
A A1
Mémoire (RAM) UC (registres)
A A1
Consistance de la mémoire
Actions de l’OS
mémoire : chaque processus a son propre espace mémoire
→ pas de problème de consistance mémoire/processeur
Verrous : un processus peut verrouiller l’accès à un fichier
→ file d’attente pour l’accès à la ressource
Algorithmes de synchronisation
→ cours 4
Plan
1 Processus : définition
2 Rôle de l’OS
3 Création de processus
Création de processus
4 Notion de thread
5 Synthèse
Création
Rappel
Un processus est forcément créé par un autre processus
Création
Rappel
Un processus est forcément créé par un autre processus
Sous Unix
2 appels système :
fork pour créer un processus à partir du processus courant
→ Le processus est dupliqué
exec pour remplacer le processus courant par un autre
processus
Création
Rappel
Un processus est forcément créé par un autre processus
Sous Unix
2 appels système :
fork pour créer un processus à partir du processus courant
→ Le processus est dupliqué
exec pour remplacer le processus courant par un autre
processus
Sous Windows
createprocess pour créer un processus (cf. exec Unix)
→ Le processus courant est conservé
Info32b Systèmes d’Exploitation Nicolas Sabouret 24/34
Processus : définition Rôle de l’OS Création de processus Notion de thread Synthèse
Création de processus
int main () {
return 0;
}
#include ...
int main () {
return 0;
}
#include ...
int main () {
pid_t proc ;
proc = fork ();
return 0;
}
#include ...
int main () {
...
pid t proc = fork();
if ( proc == -1)
fprintf ( stderr , " fork failed " );
return 0;
}
#include ...
int main () {
...
else {
if ( proc ==0) {
/* c ’ est le fils */
printf ( " % d : fils de % d \ n " , getpid () , getppid ());
} else {
/* c ’ est le pere */
printf ( " % d : pere de % d \ n " , getpid () , proc );
}
}
return 0;
}
Info32b Systèmes d’Exploitation Nicolas Sabouret 25/34
Processus : définition Rôle de l’OS Création de processus Notion de thread Synthèse
Création de processus
#include ...
int main () {
...
if ( proc ==0) {
/* c ’ est le fils */
printf ( " % d : fils de % d \ n " , getpid () , getppid ());
sleep (5);
printf ( " % d : termine \ n " , getpid ());
exit (5);
} else {
...
}
}
return 0;
}
Info32b Systèmes d’Exploitation Nicolas Sabouret 25/34
Processus : définition Rôle de l’OS Création de processus Notion de thread Synthèse
Création de processus
#include ...
int main () {
...
} else {
/* c ’ est le pere */
printf ( " % d : pere de % d \ n " , getpid () , proc );
int r ;
waitpid ( proc , &r , 0); /* attente du fils */
printf ( " % d : fils % d sort ( code % d )\ n " ,
getpid () , proc , r );
}
}
return 0;
}
int main () {
pid_t proc ;
proc = fork ();
if ( proc == -1)
fprintf ( stderr , " fork failed " );
else {
if ( proc ==0) {
/* c ’ est le fils */
printf ( " % d : fils de % d \ n " , getpid () , getppid ());
sleep (5);
printf ( " % d : termine \ n " , getpid ());
exit (5);
} else {
/* c ’ est le pere */
printf ( " % d : pere de % d \ n " , getpid () , proc );
int r ;
waitpid ( proc , &r , 0); /* attente du fils */
printf ( " % d : fils % d sort ( code % d )\ n " ,
getpid () , proc , r );
}
}
Info32b Systèmes d’Exploitation Nicolas Sabouret 25/34
Processus : définition Rôle de l’OS Création de processus Notion de thread Synthèse
Création de processus
int main () {
char * argu [3] = { " " , " -a " , NULL };
execv ( " / bin / uname " , argu );
return 0;
}
int main () {
char * argu [3] = { " " , " -a " , NULL };
execv ( " / bin / uname " , argu );
return 0;
}
Résultat de l’exécution :
Linux raxacorico 4.4.0-36-generic #55-Ubuntu SMP Thu Aug
11 18:01:55 UTC 2016 x86 64 x86 64 x86 64 GNU/Linux
int main () {
char * argu [3] = { " " , " -a " , NULL };
execv ( " / bin / uname " , argu );
return 0;
}
Recouvrement
Le nouveau processus recouvre l’ancien.
→ on ne ressort pas d’un recouvrement !
Info32b Systèmes d’Exploitation Nicolas Sabouret 26/34
Processus : définition Rôle de l’OS Création de processus Notion de thread Synthèse
Création de processus
Problème
Comment lancer un processus depuis un autre processus ?
Problème
Comment lancer un processus depuis un autre processus ?
Solution
fork puis recouvrement
...
pid_t fils = fork ();
if ( fils == -1)
fprintf ( stderr , " fork failed " );
else if ( fils ==0)
execlp ( " programme " ," nom " , NULL );
/* suite du programme pere */
...
Branchement et recouvrement
Processus
père
fork
Processus
fils
Processus : définition Rôle de l’OS Création de processus Notion de thread Synthèse
Création de processus
Branchement et recouvrement
Processus
père
fork
Processus
fils
Recopie de l’intégralité
du programme pour le
processus fils
Processus : définition Rôle de l’OS Création de processus Notion de thread Synthèse
Création de processus
Branchement et recouvrement
Processus
père
fork
Processus
fils
Recopie de l’intégralité
du programme pour le
processus fils
Processus : définition Rôle de l’OS Création de processus Notion de thread Synthèse
Création de processus
Branchement et recouvrement
Processus
père
fork
Processus Nouveau
fils exec processus
Recopie de l’intégralité
du programme pour le
processus fils
Processus : définition Rôle de l’OS Création de processus Notion de thread Synthèse
Création de processus
Branchement et recouvrement
Processus
père
fork
Processus Nouveau
fils exec processus
Branchement et recouvrement
Processus
père
fork Exécution
Processus Nouveau
fils exec processus
Plan
1 Processus : définition
2 Rôle de l’OS
3 Création de processus
4 Notion de thread
5 Synthèse
Thread
Définition
La thread est l’unité de base du processus.
Un processus peut avoir plusieurs threads
Les threads partagent le même code et les mêmes données
Chaque thread a sa propre pile
Principe
pile
registres
Processus
(contexte)
exécution
Processus : définition Rôle de l’OS Création de processus Notion de thread Synthèse
Principe
pile pile
registres registres
Processus
(contexte) (contexte)
exécution
exécution
Processus : définition Rôle de l’OS Création de processus Notion de thread Synthèse
Principe
exécution
exécution
Avantages
Avantages
Partage du code → gain de place en mémoire
Réactivité : le processus continue à s’exécuter pendant qu’une
thread est en attente (Ex : navigateur et chargement d’images)
Parallélisation sur les machines multi-processeur
Avantages
Partage du code → gain de place en mémoire
Réactivité : le processus continue à s’exécuter pendant qu’une
thread est en attente (Ex : navigateur et chargement d’images)
Parallélisation sur les machines multi-processeur
Thread et processus
2 questions :
Lors d’un fork, faut-il aussi dupliquer les threads du père ?
Avantages
Partage du code → gain de place en mémoire
Réactivité : le processus continue à s’exécuter pendant qu’une
thread est en attente (Ex : navigateur et chargement d’images)
Parallélisation sur les machines multi-processeur
Thread et processus
2 questions :
Lors d’un fork, faut-il aussi dupliquer les threads du père ?
Oui si on veut cloner le père (cas rare)
Non si c’est pour faire un exec après (cas fréquent)
→ réserver le fork aux ”petits” processus mono-thread
Avantages
Partage du code → gain de place en mémoire
Réactivité : le processus continue à s’exécuter pendant qu’une
thread est en attente (Ex : navigateur et chargement d’images)
Parallélisation sur les machines multi-processeur
Thread et processus
2 questions :
Lors d’une interruption, faut-il prévenir toutes les threads ?
Avantages
Partage du code → gain de place en mémoire
Réactivité : le processus continue à s’exécuter pendant qu’une
thread est en attente (Ex : navigateur et chargement d’images)
Parallélisation sur les machines multi-processeur
Thread et processus
2 questions :
Lors d’une interruption, faut-il prévenir toutes les threads ?
Oui pour un signal global (ex : SIGKILL)
Non pour une E/S
→ À déterminer par l’OS
Plan
1 Processus : définition
2 Rôle de l’OS
3 Création de processus
4 Notion de thread
5 Synthèse
À retenir