Gestion du process
Les Threads
Operating system II
Cours 2: Process & Threads
[Link]
Université des sciences et de technologie Med Boudiaf Oran
20 février 2025
1 / 57
Belarbi SI2 V1.0 2024-2025
Gestion du process
Les Threads
1 Gestion du process
Concept du process
Dénitions
État du process
Linux/UNIX : Lister des informations sur les process
Hiérarchie des process
UNIX, Linux
L'ordonnancement
Communication entre process
2 Les Threads
Dénition
Utilisation
Threads POSIX
2 / 57
Belarbi SI2 V1.0 2024-2025
Concept du process
Dénitions
1. The process
un program en cours d'exécu-
Un process est une entité dynamique (
tion).
3 / 57
Concept du process
Dénitions
1. The process
Un process est une entité dynamique ( un program en cours d'exécu-
tion).
Il s'agit d'une entité active créée à un instant donné, qui disparaît en
général au bout d'un temps ni.
3 / 57
Concept du process
Dénitions
1. The process
Un process est une entité dynamique ( un program en cours d'exécu-
tion).
Il s'agit d'une entité active créée à un instant donné, qui disparaît en
général au bout d'un temps ni.
But : A faire plusieurs activités "
en même temps ".
3 / 57
Concept du process
Dénitions
1. The process
Un process est une entité dynamique ( un program en cours d'exécu-
tion).
Il s'agit d'une entité active créée à un instant donné, qui disparaît en
général au bout d'un temps ni.
But : A faire plusieurs activités "
en même temps ".
Problème : L'exécution d'un process est séquentiel, une seule instruc-
tion au plus est exécuté au nom du process.
3 / 57
Concept du process
Dénitions
1. The process
Un process est une entité dynamique ( un program en cours d'exécu-
tion).
Il s'agit d'une entité active créée à un instant donné, qui disparaît en
général au bout d'un temps ni.
But : A faire plusieurs activités "
en même temps ".
Problème : L'exécution d'un process est séquentiel, une seule instruc-
tion au plus est exécuté au nom du process.
Solution : Partager un (ou plusieurs) processor entre diérents process.
3 / 57
Concept du process
Dénitions
1. The process
Un process est une entité dynamique ( un program en cours d'exécu-
tion).
Il s'agit d'une entité active créée à un instant donné, qui disparaît en
général au bout d'un temps ni.
But : A faire plusieurs activités "
en même temps ".
Problème : L'exécution d'un process est séquentiel, une seule instruc-
tion au plus est exécuté au nom du process.
Solution : Partager un (ou plusieurs) processor entre diérents process.
Deux process associés au même program, sont deux séquences d'exé-
cution process séparées.
3 / 57
Concept du process
Dénitions
1. The process
Un process est une entité dynamique ( un program en cours d'exécu-
tion).
Il s'agit d'une entité active créée à un instant donné, qui disparaît en
général au bout d'un temps ni.
But : A faire plusieurs activités "
en même temps ".
Problème : L'exécution d'un process est séquentiel, une seule instruc-
tion au plus est exécuté au nom du process.
Solution : Partager un (ou plusieurs) processor entre diérents process.
Deux process associés au même program, sont deux séquences d'exé-
cution process séparées.
Attention ! ! ! Ne pas confondre process et processor.
3 / 57
Concept du process
Gestion du process Hiérarchie des process
Les Threads L'ordonnancement
Communication entre process
Concept du process
The process
Un process est pourvu de :
PID P rocess entier : un numéro d'identication unique
ID
un espace d'adressage : un ensemble d'adresses mémoire allant de
0 à une limite donnée, dans lesquelles le processus peut lire et écrire.
(i)
Il contient : program exécutable ; (ii)
ses données sa pile (iii)
Ensemble de registres , parmi lesquels le compteur ordinal, le poin-
teur de pile, d'autres registres matériels
les chiers ouverts, les espaces mémoire alloués, les périphériques,
les signaux à capter, à masquer, à ignorer, en attente et les actions
associées,
le process père, les process ls, le groupe, les variables d'environne-
ment, les statistiques, les limites d'utilisation des ressources,
4 / 57
Belarbi SI2 V1.0 2024-2025
Concept du process
Gestion du process Hiérarchie des process
Les Threads L'ordonnancement
Communication entre process
Concept du process
Le process
Exemple 1
- Faire travailler plusieurs users sur la même machine. Chaque utilisateur
a l'impression d'avoir la machine à lui tout seul.
- Compiler tout en lisant son mail
5 / 57
Belarbi SI2 V1.0 2024-2025
Concept du process
Gestion du process Hiérarchie des process
Les Threads L'ordonnancement
Communication entre process
Concept du process
Le process
Exemple 1
- Faire travailler plusieurs users sur la même machine. Chaque utilisateur
a l'impression d'avoir la machine à lui tout seul.
- Compiler tout en lisant son mail
Exemple 2
Sur le même ordinateur
gcc prog1.c # compilation 1
gcc prog2.c # compilation 2
refox # navigateur web
eclipse # IDE java
5 / 57
Belarbi SI2 V1.0 2024-2025
Concept du process
Gestion du process Hiérarchie des process
Les Threads L'ordonnancement
Communication entre process
Concept du process
Le process
Diérence entre process et program
Un program n'est pas un process : un program est une entité passive,
comme les contenus d'un chier stocké sur un disc. Un program peut
engendrer lors de son exécution plusieurs process, alors que le process est
une entité active avec un compteur d'instructions spéciant l'instruction
suivante à exécuter et un ensembles de ressources associées.
Process = instruction + ressources
6 / 57
Belarbi SI2 V1.0 2024-2025
Concept du process
Dénitions
1. MultiProgrammation
<1->La multi-programmation donne l'illusion du parallélisme. À l'in-
verse, le temps partagé donne à chaque utilisateur L'impression d'être le
seul utilisateur de la machine.
La séparation du traitement pour simuler l'exécution en parallèle est ap-
pelée multiprogrammation.
<2-> Si le modèle consiste à séparer le traitement entre diérents proces-
sus, on parle de multiprocessus ou de multitâche.
Si le partage se fait à l'intérieur d'un même processus, on parle de multi-
thread.
<3->Le processeur n'en exécute qu'un seul. L'idée est de conserver plu-
sieurs tâches dans la mémoire principale. Si une tâche est occupée par
des opérations d'entrée/sortie, le processeur peut être aecté à une autre
tâche.
Concept du process
Dénitions
2. multi-processeur
- Les machines multi-processeurs sont appelées machines parallèles et pré-
sentent la véritable notion de processus exécutés en parallèle.
- Organiser l'exécution des programmes sur diérents processeurs (qui
peuvent être identiques ou non). Ces systèmes peuvent être soit architec-
turés autour d'un processeur central qui coordonne les autres processeurs,
soit avec des processeurs indépendants qui possèdent chacun leur système
d'exploitation, ce qui leur vaut de communiquer entre eux par l'intermé-
diaire de protocoles.
8 / 57
Concept du process
Dénitions
3. Multi-Core Multi-Core : plusieurs coeurs physiques(unité de calcul) côte-
à-côte sur la même puce (processeur)fonctionnant simultanément.
Le support (la connectique qui relie le processeur à la carte électronique)
lui ne change pas. Certains éléments, comme par la RAM, peuvent être
mis en commun.
9 / 57
Concept du process
Gestion du process Hiérarchie des process
Les Threads L'ordonnancement
Communication entre process
Concept de processus
État du process
Quand un process s'exécute, il change d'état :
New : le process est en cour de création ;
Ready :le process attend d'être aecté à un processor ;
Running : les instructions sont en cours d'exécution ;
Waiting : le process attend qu'un événement se produise (comme
l'achèvement d'un input output où la réception d'un signal) ;
Terminated :le process a ni l'exécution.
Un seul process peut être en exécution sur n'importe quel processor à tout
moment. Toutefois, plusieurs process peuvent être prêts et en attente
10 / 57
Belarbi SI2 V1.0 2024-2025
Concept du process
Gestion du process Hiérarchie des process
Les Threads L'ordonnancement
Communication entre process
Concept du process
État du process
Figure Diagramme d'état du process
11 / 57
Belarbi SI2 V1.0 2024-2025
Concept du process
Gestion du process Hiérarchie des process
Les Threads L'ordonnancement
Communication entre process
Concept du process
État du process
Point de vue conceptuel : chaque process possède son virtual
processor.
Réalité : le processor bascule constamment d'un process à l'autre.
Ce basculement rapide est appelé multiprogrammation.
Lorsque le processor passe d'un process à un autre, la vitesse de
traitement d'un process donné n'est pas uniforme et probablement
non reproductible si le même process s'exécute une nouvelle fois.
12 / 57
Belarbi SI2 V1.0 2024-2025
Concept du process
Gestion du process Hiérarchie des process
Les Threads L'ordonnancement
Communication entre process
Concept du process
État du process
Figure (a) Multiprogrammation de quatre programs ; (b) Modèle conceptuel
de quatre process séquentiels indépendants ; (c) un seul program est actif à un
instant donné.
13 / 57
Belarbi SI2 V1.0 2024-2025
Concept du process
Gestion du process Hiérarchie des process
Les Threads L'ordonnancement
Communication entre process
Concept du process
État du process
Exemple 2
Un informaticien porté sur la gastronomie, veut confectionner un gâteau
d'anniversaire pour sa s÷ur. Il dispose d'une cuisine équipée, il dispose
d'une recette et tous les ingrédients nécessaires : ÷ufs, farine, sucre,
extrait de vanille, etc.
La recette représente the program (c'est à dire un algorithme
exprimé en notation appropriée.)
L'informaticien représente le processor (l'unité centrale)
Les ingrédients sont les données d'entrée.
Le process est l'activité qui consiste à confectionner le gâteau :
lecture de la recette, mélange des ingrédients et la cuisson.
14 / 57
Belarbi SI2 V1.0 2024-2025
Concept du process
État du process
Maintenant notre informaticien se met à hurler, il vient d'être piqué par
une guêpe.
(l'état
Son cerveau enregistre le point de la recette ou il en est arrivé
du process en cours est enregistré).
Il cherche une brochure sur les premiers secours et commence à
suivre les instructions.
Ici, on voit le basculement du processor d'un process( confection du
gâteau) vers un autre process de priorité supérieure (administrer les
premiers soins, un antidote)
chaque process déroule un program diérent
une fois le problème de la piqûre résolue, l'informaticien retourne à
son gâteau au point ou il l'avait laissé.
15 / 57
Concept du process
État du process
Chaque process est représenté par une structure de données au niveau du
OS PCB (process control block)
le PCB contient plusieurs informations concernant un process spécique :
Figure PCB
16 / 57
Concept du process
État du process
Pointeur - Il s'agit d'un pointeur de pile qui doit être sauvegardé
lorsque le process passe d'un état à un autre pour conserver la
position actuelle du process.
process state - Il stocke l'état respectif du process.
Process IDentier (PID) - Chaque process se voit attribuer un
identiant unique connu sous le nom Processus ID ou PID qui
stocke l'identiant du processus.
Program counter - Il stocke le compteur qui contient l'adresse de
l'instruction suivante qui doit être exécutée pour le processus.
Registers - Il s'agit des registers du CPU qui comprennent :
l'accumulateur, la base, les registres et les registres d'usage général.
Compteur d'instructions : indique l'adresse de l'instruction suivante
devant être exécutée par ce process.
Process scheduling information : information concernant la priorité
du process.
Memory information : valeurs des registres base et limite, des tables
de pages ou des tables de segments.
Informations sur l'état des E/S : liste des périphériques E/S allouées
à ce processus, une liste des chiers ouverts, etc. 17 / 57
Concept du process
Linux/UNIX : Lister des informations sur les process
The process ID or PID : a unique identication number used to refer
to the process.
The parent process ID or PPID : the number of the process (PID)
that started this process.
Terminal or TTY terminal to which the process is connected. 18 / 57
Concept du process
État d'un process
Dans le cas de Linux, le PCB est une structure task_struct et la table
des processus est une liste doublement chainée.
19 / 57
Concept du process
État d'un process sous Windows
20 / 57
Concept du process
État d'un process sous Linux
21 / 57
Concept du process
État d'un process sous Linux
R à Task_Running,
S (sleeping) à Task_Interruptible : peuvent être interrompus par des signaux et des
processus d'attente ,
D à Task_Uninterruptible : attendent directement dans des conditions matérielles et ne
peuvent être interrompus par aucun événement / signal.,
T (being traced or stopped) à Task_Stopped,
Z à Task_Zombie : un processus est mort, il a été arrêté, mais il a toujours une entrée
dans la table de processus.
Executer la commande top ps Linux (utile en SSH)
- Lire les informations et comprendre les détails des colonnes
- Utiliser la touche v(top) pour voir la hiérarchie des process (process parents et enfants)
22 / 57
Concept du process
État d'un process -sous Linux-
les états peuvent avoir des sous-états identiés par des drapeaux (ags).
Nom Flag Nom d'état et description dénis par le noyau
Running R
TASK_RUNNING : Le process est soit en cours d'exécution
sur une CPU, soit en attente d'exécution dans la le d'attente.
Le process peut exécuter des routines utilisateur ou des rou-
tines du kernel (appels système).
Sleeping S
TASK_INTERRUPTIBLE : Le process attend une condition :
une demande matérielle, un accès des ressources système ou un
signal. Lorsqu'un événement ou un signal satisfait à la condi-
tion, le process passe a TASK_RUNNING.
Sleeping D
TASK_UNINTERRUPTIBLE : Ce process dort également,
mais contrairement à S State, ne répond pas aux signaux.
Utilisé uniquement lorsque l'interruption du process peut pro-
voquer un état de périphérique imprévisible.
Sleeping K
TASK_KILLABLE : Cet état est similaire à state D
(TASK_UNINTERRUPTIBLE) , mais il réveille le process si
un signal fatal (c'est-à-dire un signal qui tuerait le process) est
reçu.
Sleeping I
TASK_REPORT_IDLE : Un sous-ensemble state D. Ker-
nel ne compte pas ces process lors du calcul de la charge
moyenne . Utilisé pour les threads du Kernel. Le ag
Task_UnInterruptible et Task_NoLoad sont dénis. Sem-
blable à Task_Killable, également un sous-ensemble state D.
Il accepte des signaux fatals.
23 / 57
Concept du process
État d'un process -sous Linux-
Nom Flag Nom d'état et description dénis par le noyau
Stoped T
TASK_STOPPED : Le process a été arrêté (suspendu), géné-
ralement en étant signalé par un utilisateur ou un autre pro-
cess. Le process peut être poursuivi (repris) par un autre signal
pour revenir Running.
Stoped T
TASK_TRACED : Un process en cours de débogage est éga-
lement temporairement arrêté et partage le même ag state
T.
Zombie Z
EXIT_ZOMBIE : A child process signale à son parent qu'il se
termine. Toutes les ressources, à l'exception de l'identité du
process (PID), sont libérées.
Zombie X
EXIT_DEAD : Lorsque le parent nettoie la structure du child
process restante, le process est maintenant libéré complète-
ment. Pour eacer le process enfant terminé de la table des
process, le process parent doit lire la valeur de sortie du child
process à l'aide des appels système wait() ou waitpid().
24 / 57
Concept du process
État d'un process -sous Linux-
25 / 57
Concept du process
État d'un process -sous Linux-
Si la machine possède plusieurs avec un processeur à plusieurs cores alors
ces derniers s'achent en liste.
*site [Link]
26 / 57
Concept du process
Création d'un process fork()
Il existe quatre événements provoquant la création d'un process
Initialisation du system
Exécution d'un appel system de création d'un process par un
processus en cours d'exécution par fork()
Demande d'un utilisateur sollicitant la création d'un nouveau process
Lancement d'un travail de traitement par lot (mainframes)
Les diérentes valeurs renvoyées par fork() :
Valeur négative : La création d'un processus enfant a échoué.
Zéro : Renvoyé au processus ls nouvellement créé.
Valeur positive : Renvoyé au parent ou à l'appelant. La valeur
contient l'identiant du processus enfant nouvellement créé.
27 / 57
Concept du process
Création d'un process (Linux)
Au démarrage un seul processus créé : init qui a pour descendants tous
les processus qui s'exécuteront sur le système.
Sous UNIX un seul appel système pour créer de nouveau processus
int fork () ; #include <unistd.h>
int waitpid (int pid, int *status, int option) ; #include <sys/wait.h>
pid numéro a attendre (-1 n'importe quel descendant)
status valeur de sortie ou signal
option en général 0 (voir man)
Fournit le PID du process qui a changé,-1 en cas d'erreur
Plus généralement il se crée une hiérarchie entre les processus avec des
connexions entre chaque processus et ses descendants
28 / 57
Concept du process
Fin d'un process
Un process s'arrête pour divers raison
Arrêt normal (volontaire)
Arrêt pour raison (volontaire)
Arrêt pour erreur fatale(involontaire)
le process est arrêté par un autre process(involontaire)
arrêt volontaire : La commande exit()
arrêt involontaire :Une commande spéciale est utilisée à cette n :
KILL name_process
La terminaison d'un processus entraîne :
la destruction de sa descendance
La libération de l'entrée correspondante dans la table des processus
La libération des ressources occupées par le processus.
29 / 57
Concept du process
Exécution de programmes
int execve(const char *pathname, char *const argv [], char *const
envp []) ;
#include <unistd.h>
execve() exécute le programme désigné par pathname. Cette méthode le
programme actuellement exécuté par le processus appelant est remplacé
par un nouveau programme, avec une nouvelle initialisation de la fonction
la pile, le tas et les segments de données (initialisés et non initialisés)
nouvellement initialisés.
pathname : chemin de l'exécutable : doit être soit un exécutable binaire,
soit un script commençant par une ligne de la forme :
# !interpreter [optional-arg]
argv : tableau de paramètres transmis a main
envp : tableau de variables d'environnement
30 / 57
Concept du process
La Hiérarchie des process
Un proces peut créer un ou plusieurs process qui, à leur tour, peuvent
en créer d'autres.
Les process parents et enfants continuent d'être associés (d'une cer-
taines manière)
Un processus n'a qu'un seul parent et peut avoir zéro, un, deux en-
fants, ou plus.
Windows ne gère pas de relation hiérarchique entre processus
Tous les process sont égaux
Si ce parent se termine, il n'y a pas d'actualisation de cette
information. Un processus peut pointer vers un parent inexistant.
Cela ne cause aucun problème puisque rien ne dépend de cette
information de parenté.
UNIX , un process et l'ensemble de ses enfants et de ces descendants
forment un groupe de process.
il existe une arborescence des processus que l'on peut acher avec la
commande pstree (Linux).
31 / 57
Concept du process
La Hiérarchie des process
32 / 57
Concept du process
La Hiérarchie des process
BIOS (Basic Input/Output System dans la carte mère) exécute des
opérations de vérication de l'intégrité du système, charge et lance
l'exécution du programme d'amorçage MBR (Master Boot Record).
MBR charge une partie du système d'exploitation puis lance son
exécution : le process 0 est créé
Le process 0 réalise d'autres initialisations (ex. le système de chier)
puis crée deux processus : init ( PID 1) et démon des pages ( PID
2). Ensuite, d'autres processus sont crées à partir du processus init.
le noyau Linux (kernel) exécute le processus init et donc ce dernier
n'a pas de processus parent.
Le processus initial fonctionne comme un parent adoptif pour tous
les processus orphelins
33 / 57
Concept du process
La Hiérarchie des process
getpid() permet de récupérer le PID du processus.
getppid() permet de récupérer le PID de son processus père.
fork() La création de processus est réalisée par duplication de
l'espace d'adressage et de certaines tables du processus créateur .
La duplication facilite la création et le partage de ressources. Le ls
hérite les résultats des traitements déjà réalisés par le père.
exec permet de remplacer son code exécutable par un autre .
kill permet de stopper/repartir/détruire (appel système kill)
wait permet d'attendre la terminaison de ses ls mais ne peut pas
les renier.
Les appels système wait(& status) et waitpid(pid, & status,
option) permettent au processus père de récupérer, dans status, cet
état de terminaison.
34 / 57
Concept du process
Exemple1
Exemple 1 : Création d'un processus ls (chaque processus a son espace
d'adressage (privé))
Concept du process
Exemple2
Exemple 2 : Création de plusieurs processus
- strace permet de construire l'arbre des processus créés.
- Orphelins adoptés par le processus init de pid 1.
$strace -f -e trace=clone -o [Link] ./tree
$cat [Link]
36 / 57
Concept du process
Attente et terminaison de process
Un process peut attendre ou vérier la terminaison d'un de ses ls
pid_t wait (int * pstatus) ; // attendre un ls
pid_t waitpid(int pid, int*pstatus, int options) ; //attendre le ls
spécié.
wait(&status) et waitpid(pid, &status, options) retournent :
le PID du ls qui s'est terminé,
-1 en cas d'erreur (le processus n'a pas de ls), et
dans status des informations sur l'état de terminaison. Ces informations
peuvent être récupérées au moyen de macros telles que :
WIFEXITED(status) : n normale avec exit,
WIFSIGNALED(status) : tué par un signal,
WIFSTOPPED(status) : stoppé temporairement,
WEXITSTATUS(status) : valeur de retour du processus ls (
exit(valeur)).
waitpid(pid, &status, WNOHANG) vérie seulement la terminaison pas
d'attente. Il retourne 0 si l'exécution du processus n'est pas terminée.
37 / 57
Concept du process
Exemple3
Exemple 3 : État de terminaison d'un processus (rôles de wait et exit)
38 / 57
Process
Sheduling
Le passage de l'exécution d'un processus à un autre est appelé
commutation de contexte.
Ces commutations peuvent être initiées par les programmes eux-mêmes
(multitâche coopératif ) ou par le système d'exploitation (multitâche
préemptif ).
Le multitâche préemptif est assuré par l'ordonnanceur (scheduler).
L'ordonnancement est le mécanisme par lequel un ordonnanceur, ou un
kernel OS, choisit le process auquel on doit attribuer un processor.
Parmi les techniques d'ordonnancement les plus courantes :
1
Ordonnancement circulaire (tourniquet, round-robin) ;
2
Ordonnancement par priorité ;
3
Ordonnancement par priorité avec les multiples.
Les critères d'attribution d'un processor sont très diérents selon qu'il
s'agit de gérer un grand nombre de terminaux connectés à un ordinateur
de temps partagé (time sharing) ou qu'il s'agit de gérer un process
industriel en temps réel.
39 / 57
Concept du process
Passage de l'unité centrale d'un processus à un autre
Attendre le blocage ou la terminaison du processus qui s'exécute
Provoquer le changement
Ranger les registres physiques dans la table des processus
Choisir un nouveau processus à exécuter
Charger les registres physiques à partir de la table des processus
Comment forcer l'exécution de ces trois étapes ?
Utilisation d'une horloge externe et du mécanisme des interruptions
40 / 57
Process
Communication entre process ( signaux & tubes nommés)
Un signal est un moyen de communication indiquant une action à
entreprendre à partir de conventions préétablies.
Chaque signal a une signication particulière qui détermine le
comportement du processus.
Il n'y a pas de communication de données.
Un processus ne peut connaître l'identité du processus qui lui a
envoyé le signal.
Les signaux sont identiés par un numéro entier et un nom
symbolique décrit dans signal.h.
La commande killl donne la liste des signaux (Linux).
41 / 57
Process
Communication entre process ( signaux & tubes nommés)
Un signal peut être envoyé
1
lors d'une anomalie matérielle (les signaux matériels) ;
2
suite à la frappe d'une combinaison de touches (par ex. CTRL-C
pour envoyer le signal SIGINT) ;
3
par un autre processus utilisant la commande kill ou l'appel système
kill.
A la réception du signal, trois actions par défaut suivent :
1
ignorer le signal,
2
terminer le programme ou
3
terminer en créant un chier core.
Un processus peut changer son comportement par défaut lors de la
réception d'un signal en déroutant le signal, (indique la fonction à
exécuter lors de la réception du signal)
42 / 57
Process
Communication entre process ( signaux & tubes nommés)
- L'appel système int kill (pid_t pid sig
, int ) envoie le signal sigau
process . pid
- La réception d'un signal entraîne un comportement par défaut du
process.
Celui-ci peut être modié en indiquant une autre action à eectuer (voir
.
signal () ci-après)
- Un process ne peut envoyer un signal à un autre que si le propriétaire
(réel ou eectif) est le même pour les deux process.
Process
Communication entre process ( signaux & tubes nommés)
Les signaux SIGKILL et SIGSTOP ne peuvent pas être redénis.
Un signal n'est pas reçu lors de son envoie (asynchronisme) ; il existe un
délai entre l'envoi et la réception. SIGINT 2 signal d'interruption
(exemple CTRL-C ) ; Exemples signal ().
signal (SIGINT,SIG_IGN) ; :la réception du signal SIGINT devient
inopérante ; le signal est ignoré ;
signal (SIGINT,SIG_DFL) ; :le signal SIGINT retrouve son action
par défaut ;
signal (SIGINT,queFaire) ; :la fonction queFaire() est exécutée à la
réception du signal SIGINT. On doit avoir une déclaration de la
forme void queFaire(int sig) ;.
44 / 57
1 Gestion du process
Concept du process
Dénitions
État du process
Linux/UNIX : Lister des informations sur les process
Hiérarchie des process
UNIX, Linux
L'ordonnancement
Communication entre process
2 Les Threads
Dénition
Utilisation
Threads POSIX
45 / 57
Les Threads - Les process légers
Dénition
fork : appel système lourd
chaque process a son espace mémoire (perte de mémoire)
chaque process a ses structures systèmes (table des pages, chiers
ouverts...)
la commutation (passage d'un processus à un autre) lente et lourde
à gérer
communication inter-processus (échange d'informations)
généralement lente
Question : Peut-on avoir un sous-process qui permettrait de lancer une
partie du code d'une application sans qu'il soit onéreux ?
Solution : Les processus légers "threads"
46 / 57
Les Threads - Les process légers
Dénition
Un thread appelé process de poid léger , est un ux séquentiel de
contrôle à l'intérieur d'un programme. Il partage avec les autres threads
d'un même process les ressources (mémoire, chiers, objets, connexion,
etc.).
La programmation par thread permet d'intégrer dans la programma-
tion des applications les bénéces de la programmation parallèle tout
en conservant une partie de la légèreté de la programmation classique
(en particulier vis-à-vis de la mémoire).
Exemple
Un premier thread peut lire les données, en même temps un deuxième
thread calcule les résultats et en même temps un troisième thread ache
ces résultats. Ces trois threads partagent le même espace d'adressage.
47 / 57
Les Threads - Les process légers
Dénition
La création et la destruction des threads sont très rapides par rapport
à la création et à la destruction des process,
L'utilisation des threads permet à une application d'exécuter plusieurs
tâches en même temps ce qui accélère son exécution.
L'utilisation des threads est très intéressante quand la machine est
équipé de plusieurs processors, chaque thread peut s'exécuter sur un
processor diérent..
Les fonctions de gestion des threads se lancent en même temps que
le process principal main (programmation multitâche) ;
48 / 57
Les Threads - Les process légers
Utilisation
Un thread contient :
1
compteur d'instructions (priorité d'exécution)
2
ensemble de registres
3
sa propre pile (pour gérer les instructions à exécuter par le thread=
Un thread partage (avec des threads ressemblants)
1
La section de code
2
La section de données
3
Les ressources du OS
Process traditionnels (lourds) : task + thread Threads :
1
Niveau système (kernel) : chaque thread est représenté par un
processus indépendant, partageant son espace d'adressage avec les
autres threads de la même application.
2
Niveau utilisateur : l'application n'est constituée que d'un seul
processus, et la répartition en diérents threads est assurée par une
bibliothèque indépendante du noyau.
49 / 57
Les Threads - Les process légers
Utilisation
50 / 57
Les Threads - Les process légers
Avantages & Inconvénients
Le modèle de programmation est plus simple pour des situations
complexes.
La création de threads est plus rapide que celle de processus (facteur
100 sur certains systèmes).
Il y a une meilleure utilisation des ressources de traitements des
machines multiprocesseurs.
La communication est plus facile entre threads qu'entre processus.
Un programme multithread répond mieux aux entrée/sortie en leur
dédiant des threads.
Inconvénients :
La commutation de contexte entre threads prend des ressources.
La programmation multithreads est plus complexe que celle simple
thread (synchronisation, débogage).
51 / 57
Les Threads - Les process légers
Création des Threads
La création de Thread se fait à l'aide de plusieurs system calls auquel
faut passer en paramètre le pointeur de la fonction à exécuter en // La
fonction pthread_create() (man 3 pthread_create)
Au moment de l'appel du thread, le process courant est cloné partiellement
L'exécution reprend d'un côté à partir de l'endroit où le thread a été appelé
et de l'autre dans la fonction.
Vous devez compiler avec une directive particulière avec gcc.
pthread_create()
En cas d'erreur, la valeur EAGAIN est retournée par la fonction :
- Pas assez de ressources système pour créer un nouveau thread
- Le nombre maximum de threads dénit par la constante PTHREAD_THREADS_MAX
est atteint !
52 / 57
Les Threads - Les process légers
Création des Threads
les paramètres de la fonction pthread_create :
1
Le paramètre *thread est un pointeur de type pthread_t
2
Le type pthread est un type opaque, sa valeur réelle dépend de l'im-
plémentation ; sous Linux il s'agit en générale du type unsigned long.
Ce type correspond à l'identiant du thread créé ;
3
Chaque thread a son propre identiant (comme les process Unix)
4
Le paramètre *attr_t est un pointeur pthread_attr_t
de type
5
Le type pthread_attr_t est aussi un type opaque permettant de dé-
nir des attributs spéciques pour chaque thread. Il faut savoir qu'on
peut changer le comportement de la gestion des threads ; exemple,
on peut les régler pour qu'ils tournent sur un système temps réel ; en
générale on se contente des attributs par défaut et cet argument vaut
NULL (valeur par défaut).
6
La fonction pthread_creat est un pointeur de fonction. Chaque
thread dispose d'une fonction à exécuter, c'est en même temps sa
raison d'être ; Il permet de transmettre un pointeur sur la fonction
que le thread devra exécuter.
7
Le dernier argument représente un argument que l'on peut passer à
la fonction que le thread doit exécuter. 53 / 57
Les Threads - Les process légers
Création des Threads
54 / 57
Les Threads - Les process légers
Création des Threads
55 / 57
Les Threads - Les process légers
Terminaison d'un thread
pthread_exit
void pthread_exit (void * retval) ;
La fonction pthread_exit() (man 3 pthread_exit)
Utiliser cette fonction à la place de "exit" an d'éviter d'arrêter tout le
process.
L'appel à une telle fonction à la n de la fonction main est utile pour
éviter que le programme arrête les autres threads en cours.
pthread_cancel
int pthread_cancel (pthread_t thread) ;
La fonction pour envoyer une demande d'annulation à un thread
spécique
pthread_setcancelstate
int pthread_setcancelstate (int state, int * oldstate) ;
La fonction pthread_setcancelstate() dénit l'état d'annulation du
thread appelant à la valeur indiquée par state. L'ancien état d'annulation
du thread est renvoyé dans le tampon pointé par oldstate. 56 / 57
Les Threads - Les process légers
Threads POSIX
IEEE a déni une norme de threads portables (IEEE 1003.1c), Portable
Operating System Interface et le X exprime l'héritage UNIX
La norme POSIX dénit l'API Pthreads #include pthread.h
< >
POSIX dénit également des mécanismes de synchronisation qui sont,
l'exclusion mutuelle (mutex), les sémaphores, et les conditions d'exécution.
Appel Description
pthread_create Créer un nouveau thread
pthread_exit Termine le thread appelant
pthread_join Attend la n d'un thread
pthread_yield Libère l'UC pour laisser un autre thread s'exécuter
pthread_attr_init Crée et initialise une structure attribut de thread
pthread_attr_destroy Supprime une structure attribut de thread
le package Pthread contient plus de 60 appels de fonctions.
57 / 57