Les Processus
CSC3102 – Introduction aux systèmes d’exploitation
François Trahay & Gaël Thomas
1 CSC 3102
Présentation du cours
◼ Contexte :
• Des dizaines de processus s’exécutent simultanément sur une
machine
◼ Objectifs :
• Savoir observer les processus s’exécutant sur une machine
• Manipuler un processus en cours d’exécution
• Comprendre comment sont ordonnancés les processus
◼ Notions clés :
• Arborescence de processus, états d’un processus,
ordonnancement
2 CSC 3102 CI5 - Processus
Notion de processus
◼ Processus = programme en cours d'exécution
• Un espace mémoire + contexte d'exécution (fichiers ouverts, etc.)
◼ Caractéristiques statiques
• PID : Process Identifier (identifie le processus)
• PPID : Parent Processus Identifier (identifie le parent)
• Utilisateur propriétaire
• Droits d'accès aux ressources (fichiers, etc.)
◼ Caractéristiques dynamiques
• Priorité, environnement d’exécution, etc.
• Quantité de ressources consommées (temps CPU, etc.)
3 CSC 3102 CI5 - Processus
1. Observer un processus
2. Processus en avant et arrière plan
3. Cycle de vie d’un processus
4. Variables et processus
5. Gestion des processus dans le système d’exploitation
4 CSC 3102 CI5 - Processus
Arborescence de processus
◼ Chaque processus possède un processus parent
• Sauf le premier processus (systemd ou init, PID=1)
⇒ arborescence de processus
◼ Deux types de processus :
• Processus utilisateurs (attachés à un terminal)
• Daemons : processus qui assurent un service (détachés de tout
terminal)
systemd
gnome sshd cron
terminal chrome updatedb
bash
emacs pstree
5 CSC 3102 CI5 - Processus
Observer les processus
◼ ps : affiche les processus s’exécutant à un instant donné
$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 22995 1403 0 80 0 - 6285 - pts/1 00:00:00 bash
0 S 1000 29526 22995 0 80 0 - 128631 - pts/1 00:00:05 emacs
0 S 1000 29826 22995 0 80 0 - 51571 - pts/1 00:00:00
oosplash
0 S 1000 29843 29826 1 80 0 - 275029 - pts/1 00:00:48
soffice.bin
0 R 1000 30323 22995 0 80 0 - 2790 - pts/1 00:00:00 ps
ps PID : affiche les informations du processus avec ce PID
6 CSC 3102 CI5 - Processus
Observer les processus (suite)
◼ pstree : affiche l'arborescence des processus
$ pstree -pA
systemd(1)-+-ModemManager(535)-+-{gdbus}(675)
| `-{gmain}(580)
|-NetworkManager(552)-+-dhclient(27331)
| |-{NetworkManager}(673)
| |-{gdbus}(756)
| `-{gmain}(733)
|-acpid(692)
|-konsole(1403)-+-bash(22995)-+-emacs(29526)-+-{dconf worker}(29529)
| | |-{gdbus}(29528)
| | `-{gmain}(29527)
| `-pstree(30412)
`-{QProcessManager}(1411)
7 CSC 3102 CI5 - Processus
Observer les processus (suite)
◼ top : affiche dynamiquement des processus
$ top
top - 15:52:18 up 5 days, 2:04, 3 users, load average: 0,19, 0,12, 0,13
Tasks: 176 total, 1 running, 175 sleeping, 0 stopped, 0 zombie
%Cpu(s): 6,0 us, 1,3 sy, 0,1 ni, 92,5 id, 0,1 wa, 0,0 hi, 0,0 si, 0,0 st
KiB Mem: 8099392 total, 5840956 used, 2258436 free, 494524 buffers
KiB Swap: 10157052 total, 0 used, 10157052 free. 3114404 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
866 root 20 0 731892 377196 346672 S 6,4 4,7 21:01.97 Xorg
1375 trahay 9 -11 651480 11108 8052 S 6,4 0,1 23:23.48 pulseaudio
1 root 20 0 176840 5420 3144 S 0,0 0,1 0:02.57 systemd
2 root 20 0 0 0 0 S 0,0 0,0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0,0 0,0 0:04.34 ksoftirqd/0
5 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 kworker/0:0H
7 root 20 0 0 0 0 S 0,0 0,0 0:30.37 rcu_sched
8 CSC 3102 CI5 - Processus
Variables relatives aux processus
◼ Chaque processus bash, y compris les scripts, définissent :
• $$ : PID du bash courant
• $PPID : PID du parent du bash courant
$ echo $$
20690
$ echo $PPID
20689
$
9 CSC 3102 CI5 - Processus
Variables relatives aux processus
◼ Chaque processus bash, y compris les scripts, définissent :
• $$ : PID du bash courant
• $PPID : PID du parent du bash courant
$ echo $$
20690
$ echo $PPID
20689
$ ps -p 20689,20690
PID TTY TIME CMD
20689 ?? 0:11.69 xterm -r
20690 ttys004 0:01.32 bash
$
10 CSC 3102 CI5 - Processus
Détail d'un processus
◼ /proc/<un PID>/ contient :
• cmdline : texte de la ligne de commande ayant lancé le processus
• exe : lien vers le fichier exécutable du programme
• environ : contenu de l'environnement
• fd : liens vers les fichiers ouverts
• …
$ ls /proc/29526
attr coredump_filter gid_map mountinfo oom_score sessionid task
autogroup cpuset io mounts oom_score_adj smaps timers
auxv cwd limits mountstats pagemap stack uid_map
cgroup environ loginuid net personality stat wchan
clear_refs exe map_files ns projid_map statm
cmdline fd maps numa_maps root status
comm fdinfo mem oom_adj sched syscall
11 CSC 3102 CI5 - Processus
1. Observer un processus
2. Processus en avant et arrière plan
3. Cycle de vie d’un processus
4. Variables et processus
5. Gestion des processus dans le système d’exploitation
12 CSC 3102 CI5 - Processus
Processus en avant-plan
◼ Par défaut, une commande s'exécute en avant-plan (en
anglais, foreground)
• bash crée un processus enfant et attend qu'il termine
• Le processus enfant exécute le programme
$
terminal
bash
13 CSC 3102 CI5 - Processus
Processus en avant-plan
◼ Par défaut, une commande s'exécute en avant-plan (en
anglais, foreground)
• bash est bloqué tant que le processus fils s'exécute
$ xeyes
terminal
bash (bloqué)
xeyes
14 CSC 3102 CI5 - Processus
Processus en avant-plan
◼ Par défaut, une commande s'exécute en avant-plan (en
anglais, foreground)
• Quand le processus fils se termine, bash reprend son exécution
$ xeyes
$ terminal
bash
15 CSC 3102 CI5 - Processus
Processus en arrière-plan
◼ Pour exécuter une commande arrière-plan (en anglais,
background)
• Terminer la commande par « & »
$
terminal
bash
16 CSC 3102 CI5 - Processus
Processus en arrière-plan
◼ Commande en arrière-plan (en anglais, background)
• bash crée un enfant et n'attend pas qu'il se termine
• bash affiche le numéro de job (JobID) et le PID du fils
• Le processus enfant exécute le programme
$ xeyes &
[1] 35794 terminal
$
bash
xeyes
17 CSC 3102 CI5 - Processus
Processus en arrière-plan
◼ Commande en arrière-plan (en anglais, background) :
• bash et le processus fils s'exécutent en parallèle
• bash peut donc exécuter d'autres commandes
$ xeyes &
[1] 35794 terminal
$ grep c bjr.txt
coucou bash
xeyes grep
18 CSC 3102 CI5 - Processus
Processus en arrière-plan
◼ Commande en arrière-plan (en anglais, background) :
• bash et le processus fils s'exécutent en parallèle
• bash peut donc exécuter d'autres commandes
$ xeyes &
[1] 35794 terminal
$ grep c bjr.txt
coucou bash
$
xeyes
19 CSC 3102 CI5 - Processus
Processus en arrière-plan
◼ Commande en arrière-plan (background) :
• Quand le fils se termine, le système d’exploitation informe bash
$ xeyes &
[1] 35794 terminal
$ grep c bjr.txt JobID
coucou bash
$
[1]+ Done xeyes
$
20 CSC 3102 CI5 - Processus
PID du dernier processus lancé
◼ Le PID du dernier processus lancé en arrière-plan est dans la
variable $!
$ xeyes &
[1] 35794
$ xeyes &
[2] 35795
$ echo $!
35795
$ echo $!
35795
21 CSC 3102 CI5 - Processus
1. Observer un processus
2. Processus en avant et arrière plan
3. Cycle de vie d’un processus
4. Variables et processus
5. Gestion des processus dans le système d’exploitation
22 CSC 3102 CI5 - Processus
Commandes et processus
◼ Chaque commande crée un processus
Sauf pour les commandes internes qui sont directement
interprétées par bash (exit, source…)
bash vacances.sh (8281) #! /bin/bash
head –n 30 itineraire > debut_iti
head grep cut rm grep plage debut_iti> baignade
(8282) (8287) (8293) (8297) cut –d’ ’ –f3 baignade > tresor
rm baignade
vacances.sh
23 CSC 3102 CI5 - Processus
Scripts et processus
◼ Par défaut, un script est lancé dans un processus enfant
bash (8281)
./fibo 3 (16837) #! /bin/bash
expr 3 – 1 (16838)
if [ $1 –eq 0 ] || [ $1 –eq 1 ]
./fibo 2 (16839)
then
expr 2 – 1 (16840) echo 1
./fibo 1 (16841) else
n=$1
expr 2 – 2 (16842) fib1=$($0 $(expr $n – 1))
./fibo 0 (16843) fib2=$($0 $(expr $n - 2))
echo $(expr $fib1 + $fib2)
expr 1 + 1 (16844)
fi
expr 3 – 2 (16845)
fibo
./fibo 1 (16846)
expr 2 + 1 (16847)
24 CSC 3102 CI5 - Processus
Suspendre un processus
◼ Suspendre un processus en avant-plan : control+z
• Le processus est placé « en attente »
◼ Reprendre un processus en attente
• Pour le mettre en avant-plan : fg (foreground)
fg %N : mettre en avant-plan le job N
• Pour le mettre en arrière-plan : bg (background)
bg %N : mettre en arrière-plan le job N
25 CSC 3102 CI5 - Processus
Suppression d'un processus
◼ Un processus se termine s’il atteint sa dernière instruction
◼ Ou s’il appelle exit
◼ Ou s’il reçoit un signal (voir CI6)
• control-c : tue le processus en avant plan (avec SIGINT)
• kill ou killall : tue un processus (avec SIGTERM)
– kill %JobID : tue le processus de numéro de job JobID
– kill PID : tue le processus d’identifiant PID
– killall prog : tue tous les processus dont le chemin du
programme est prog
• Remarque : vous verrez en CI6 que les processus peuvent résister
à control-c, kill ou killall. Si c’est le cas, ajoutez -9
(SIGKILL) après kill/killall pour forcer leur mort
26 CSC 3102 CI5 - Processus
États d'un processus
création destruction
Terminaison,
exit, kill,
control-C
En exécution Terminé
bg, fg, kill -CONT
control+z,
kill -TSTP
En attente
27 CSC 3102 CI5 - Processus
Attendre la fin d’un processus
◼ La commande wait permet d’attendre la fin d’un fils
• wait sans argument : attend la fin de tous les fils
• wait %jobid1 %jobid2… ou wait pid1 pid2… : attend la
fin des processus passés en argument
28 CSC 3102 Le shell bash
Attendre la fin d’un processus
bash
temps
Processus en exécution
29 CSC 3102 Le shell bash
Attendre la fin d’un processus
$ xeyes &
$
xeyes
bash
temps
Processus en exécution Création de processus
30 CSC 3102 Le shell bash
Attendre la fin d’un processus
$ xeyes &
$ grep gthomas /etc/passwd
xeyes
grep
bash
temps
Processus en exécution Création de processus
Processus en attente
31 CSC 3102 Le shell bash
Attendre la fin d’un processus
$ xeyes &
$ grep gthomas /etc/passwd
gthomas:x:501:20::/home/gthomas:/bin/bash
$
xeyes
grep
bash
temps
Processus en exécution Création de processus
Processus en attente Notification de fin de processus
32 CSC 3102 Le shell bash
Attendre la fin d’un processus
$ xeyes &
$ grep gthomas /etc/passwd
gthomas:x:501:20::/home/gthomas:/bin/bash
$ wait
xeyes
grep
bash
temps
Processus en exécution Création de processus
Processus en attente Notification de fin de processus
33 CSC 3102 Le shell bash
Attendre la fin d’un processus
$ xeyes &
$ grep gthomas /etc/passwd
gthomas:x:501:20::/home/gthomas:/bin/bash
$ wait
[1]+ Done xeyes
$
xeyes
grep
bash
temps
Processus en exécution Création de processus
Processus en attente Notification de fin de processus
34 CSC 3102 Le shell bash
1. Observer un processus
2. Processus en avant et arrière plan
3. Cycle de vie d’un processus
4. Variables et processus
5. Gestion des processus dans le système d’exploitation
35 CSC 3102 CI5 - Processus
Variables bash et processus
◼ Une variable est toujours locale à un processus
⇒ les modifications sont toujours locales
◼ Une variable peut être exportée chez un enfant
• La variable et sa valeur sont recopiées chez l’enfant à la création
• Les variables du père et du fils sont ensuite indépendantes
• Par défaut une variable n’est pas exportée
• Marquer une variable comme exportée : export var
• Arrêter d’exporter une variable : unset var
(détruit aussi la variable)
36 2015-2016 CSC 3102 Complément sur bash
Portée des variables
$ a="existe" #! /bin/bash
$
b="existe"
echo "a: $a"
echo "b: $b"
a="autre chose"
variable.sh
#! /bin/bash
export b
b="existe"
echo "a: $a"
echo "b: $b"
variable_exportee.sh
37 CSC 3102 Le shell bash
Portée des variables
$ a="existe" #! /bin/bash
$ ./variable.sh
a: b="existe"
b: existe echo "a: $a"
$ echo "b: $b"
a="autre chose"
variable.sh
#! /bin/bash
export b
b="existe"
echo "a: $a"
echo "b: $b"
variable_exportee.sh
38 CSC 3102 Le shell bash
Portée des variables
$ a="existe" #! /bin/bash
$ ./variable.sh
a: b="existe"
b: existe echo "a: $a"
$ export a echo "b: $b"
$ a="autre chose"
variable.sh
#! /bin/bash
export b
b="existe"
echo "a: $a"
echo "b: $b"
variable_exportee.sh
39 CSC 3102 Le shell bash
Portée des variables
$ a="existe" #! /bin/bash
$ ./variable.sh
a: b="existe"
b: existe echo "a: $a"
$ export a echo "b: $b"
$ ./variable.sh a="autre chose"
a: existe variable.sh
b: existe
$ #! /bin/bash
export b
b="existe"
echo "a: $a"
echo "b: $b"
variable_exportee.sh
40 CSC 3102 Le shell bash
Portée des variables
$ a="existe" #! /bin/bash
$ ./variable.sh
a: b="existe"
b: existe echo "a: $a"
$ export a echo "b: $b"
$ ./variable.sh a="autre chose"
a: existe variable.sh
b: existe
$ echo "a: $a - b: $b" #! /bin/bash
a: existe - b:
$ export b
b="existe"
echo "a: $a"
echo "b: $b"
variable_exportee.sh
41 CSC 3102 Le shell bash
Portée des variables
$ a="existe" #! /bin/bash
$ ./variable.sh
a: b="existe"
b: existe echo "a: $a"
$ export a echo "b: $b"
$ ./variable.sh a="autre chose"
a: existe variable.sh
b: existe
$ echo "a: $a - b: $b" #! /bin/bash
a: existe - b:
$ ./variable_exportee.sh export b
a: existe b="existe"
b: existe echo "a: $a"
$ echo "b: $b"
variable_exportee.sh
42 CSC 3102 Le shell bash
Portée des variables
$ a="existe" #! /bin/bash
$ ./variable.sh
a: b="existe"
b: existe echo "a: $a"
$ export a echo "b: $b"
$ ./variable.sh a="autre chose"
a: existe variable.sh
b: existe
$ echo "a: $a - b: $b" #! /bin/bash
a: existe - b:
$ ./variable_exportee.sh export b
a: existe b="existe"
b: existe echo "a: $a"
$ echo "b: $b" echo "b: $b"
b:
$ variable_exportee.sh
43 CSC 3102 Le shell bash
Variables d’environnement
◼ Une variable exportée s’appelle une variable d’environnement
Par convention, son nom est en majuscules
◼ Certaines variables sont souvent dans l’environnement :
• HOME : chemin absolu du répertoire de connexion
– cd , cd ~ et cd $HOME sont des commandes équivalentes
• PS1 : prompt (par défaut $)
• PATH : liste des répertoires de recherche des commandes
– Rappel : entre chaque chemin, séparateur « : »
◼ La commande env liste toutes les variables de l’environnement courant
◼ La commande source charge un script (et ses variables !) dans le
processus bash courant
• Exemple pour recharger la configuration Bash : source ~/.bashrc
44 2015-2016 CSC 3102 Complément sur bash
1. Observer un processus
2. Processus en avant et arrière plan
3. Cycle de vie d’un processus
4. Variables et processus
5. Gestion des processus dans le système d’exploitation
45 CSC 3102 CI5 - Processus
Rappel : partage de ressources
◼ Ressources partagées par les processus
• CPU (cœur d’un processeur)
Proc Proc Proc Proc
• Mémoire 1 2 3 4
• Entrées-sorties
Système d’exploitation
◼ Gestion par le Système d'Exploitation
• Exclusion mutuelle
• Contrôle de l'accès au matériel
• Droits d'accès
processeur
• Non-dépassement des limites disque mémoire
dur
46 CSC 3102 CI5 - Processus
Partage du CPU
◼ À un instant donné, le CPU n'exécute qu'un processus
• Les autres processus attendent
◼ L'ordonnanceur partage le CPU par « quantum de temps » (en
anglais, timeslice)
• À la fin du timeslice, l’ordonnanceur préempte le processus
s’exécutant et choisit un autre processus
Processus P2 P1 P1 P2 P1 P1
prêt P3 P3 P2 P3 P3 P2
Processus
P1 P2 P3 P1 P2 P3
exécuté
t
47 CSC 3102 CI5 - Processus
Partage du CPU et entrées/sorties
◼ Entrées/sorties ⇒ attente d'une ressource (disque, carte
réseau, écran, etc.)
◼ Libération du CPU en attendant la ressource
Processus
P2 P2 P2
en attente
Processus P2 P1 P1 P2 P1
P1 P3 P1
prêt P3 P3 P2 P3 P3
Processus
P1 P2 P3 P1 P3 P1 P2
exécuté
t
48 CSC 3102 CI5 - Processus
États d'un processus
Le point de vue du système d’exploitation
destruction
Terminé
création terminaison
(kill, exit, fin)
élection
Prêt Actif
préemption
attente d'une ressource
acquisition de la ressource
(ou kill pour certaines
(ou kill pour certaines
attentes)
attentes)
En attente
49 CSC 3102 CI5 - Processus
Commutation de processus
La commutation a lieu lors de l'élection d'un processus :
• Sauvegarde du contexte du processus évincé
• Chargement du contexte du processus élu
Contexte : ensemble des informations associées au processus
• Valeur des registres
• Informations mémoire (emplacement, etc.)
Sauvegarde du Restauration du
contexte contexte
Processus P1 P2 P1
exécuté
t
Mem
50 CSC 3102 CI5 - Processus
Ordonnancement de processus
Exemple d’algorithme d’ordonnancement à priorité
Exemple d'algorithme d'ordonnancement
Une file d’attente des processus prêts
par niveau de priorité • Choisir un processus de la file d’attente
L’ordonnanceur choisit plus souvent les non vide de plus haute priorité
processus de forte priorité • Si un processus consomme tout son
Ajustement de la priorité d’un processus timeslice : priorité--
au court de son exécution
• Régulièrement : priorité++ pour les
processus non élus
priorité
file d'attente n
croissante Terminaison du
processus
file d'attente 1
entrée des
processus
file d'attente 0
51 CSC 3102 CI5 - Processus
Changer la priorité d’un processus
◼ Possibilité de changer manuellement la priorité d’un processus
• Exemple: baisser la priorité d’un programme qui indexe le contenu
d’un disque dur
◼ Lancer un programme avec une certaine priorité
• $ nice –n priorité commande
◼ Changer la priorité d’un processus déjà lancé
• $ renice –n priorité PID
52 CSC 3102 CI5 - Processus
Introduction à la concurrence
◼ Accès concurrent à une ressource gérée par l'OS
• Disque dur, imprimante, sortie du terminal, …
◼ L'OS assure l'exclusion mutuelle de ses ressources
• À tout moment, seul un processus manipule la ressource
$ ./do_ping.sh & ./do_pong.sh
ping
#!/bin/bash #!/bin/bash
pong while true; do while true; do
ping
pong
echo ping echo pong
ping done done
pong
ping do_ping.sh do_pong.sh
pong
pong
pong
ping
ping P1 P2 P1 P1 P1 P2 P2 P1
ping
ping ping pong ping ping ping pong pong ping
pong
t
53 CSC 3102 CI5 - Processus
Conclusion
◼ Concepts clés
• Processus
– Caractéristiques statiques et dynamiques
– Processus parent, processus enfant
– Exécution en avant-plan, arrière-plan, suspension/reprise de
processus
• Ordonnancement de processus
– Quantum de temps, préemption
– changement de contexte
◼ Commandes clés
• ps, pstree, top
• CTRL+Z, fg, bg
• CTRL+C, kill, killall
54 2015-2016 CSC 3102 CI5
CI5--Processus
Processus
En route pour le TP !!
55 2015-2016 CSC 3102 CI5et- Script
CI1 - Shell Processus
Shell