0% ont trouvé ce document utile (0 vote)
35 vues55 pages

Ci Processus

Transféré par

Emma Djomo
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
35 vues55 pages

Ci Processus

Transféré par

Emma Djomo
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi