Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
P / T
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
P
Cycle de vie des processus
I new: Création de processus (pid, table et entrées de contrôle); à
cette étape, il n’est pas prêt à être exécuté
I ready: Le processus est prêt à s’exécuter sous réserve d’avoir accès
au CPU
I running: Le processus a accès au CPU et est entrain de s"exécuter
I blocked: Le processus attend un événement pour continuer son
exécution (opération E/S) ; il n’est pas prêt à s’exécuter
I exit: Fin du processus, libération des ressources et suppression des
informations et tables inhérentes au processus.
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
P
Cycle de vie des processus
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
P
Contexte: plusieurs processus dans RAM au même moment ⇒ impacte
négativement la performance
Solution: Déplacement de certains processus dans l’organe de stockage
secondaire (les faire revenir dans RAM si les conditions le permettent)
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
P
Gestion des processus (selon les règles fo)
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
P
Mécanisme de l’appel système fork()
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
P • API
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
P • API
system call Descrtion
fork() Create a child process
exec() Execute a programme in current process
exit() Terminate the process
wait() Wait for child process termination
getpid() Return the process id of the current process
getppid () Return the process id of the father of current process
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
P
Appel système: fork()
• Syntaxe:
i n c l u d e u n i s t d . h
p i d _ t f o r k ( void ) ;
• Retourne process ID du ls en cas de succès, ou - en cas d’erreur
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
P
Appel système: fork()
• Syntaxe:
i n c l u d e u n i s t d . h
p i d _ t f o r k ( void ) ;
• Retourne process ID du ls en cas de succès, ou - en cas d’erreur
• Exemple:
// . . .
switch ( childPid fork ( ) ) {
case −:
f p r i n t f ( s t d e r r , " f o r k \n " ) ;
case :
i d a t a * ;
i s t a c k * ;
break ;
default :
sleep ( ) ; /* Give c h i l d a chance to execute */
break ;
}
// . . .
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
P
Mécanisme des appels système fork(), wait(), exec() et exit()
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
P
Le couple d’appels système fork() - exec()
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
P • OFT
• Descripteurs de chiers et entrées OFT • Descripteurs de chiers après fork()
avant fork()
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
P • OFT
Processus ls
• Après fermeture des descripteurs inutilisés dans parent (y) et ls (x)
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
P
Exemple:
• prodcons.h :
include s t d i o . h ...
include s t d l i b . h case :
include u n i s t d . h execvp ( argv [ ] , params ) ;
include w a i t . h e x i t ( EXIT_FAILURE ) ; // exec
never r e t u r n s
d e f i n e n default :
f o r ( i n t i ; i n ; i )
i n t main ( i n t argc , char * argv [ ] ) {
{ f o r ( i n t j ; j n ; j )
p i d _ t pid ; {
int status ; p r i n t f ( " Parent : \ t d d \ t
char * const params [ ] { argv [ ] , argv d\n " , i , j , i j ) ;
[ ] , ( char * ) NULL } ; sleep ( ) ;
}
s w i t c h ( pid f o r k ( ) ) i f ( i n)
{ p r i n t f ( "−−−−−−−−−−−−−\n\n " ) ;
case −: }
f p r i n t f ( s t d e r r , " c r e a t i o n of w a i t p i d ( pid , &s t a t u s , ) ;
process c h i l d f a i l e d \n " ) ; }
e x i t ( EXIT_FAILURE ) ;
... r e t u r n EXIT_SUCCESS ;
}
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T
Dénition
Un thread ou l d’exécution ou encore processus léger est une unité
basique d’utilisation de CPU. Il permet à plusieurs instances d’un même
programme de s’exécuter simultanément dans un même processeur.
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T
Propriétés
Eléments partagés Eléments individuels
Espace mémoire pointeur d’instruction
Variables globales Registres
Fichiers ouverts Pile
Processus ls Thread ID
Alarmes
Signaux et gestionnaire de signaux
Information de comptage
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T
Multithreading - exemple
I Exécution des tâches sur un processur single-core
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T
Multithreading - exemple
I Exécution des tâches sur un processur single-core
I Exécution des tâches sur un processur multi-core
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T
Multithreading - Caractéristiques
• Exemple:
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T
processus mono-thread et multithreads
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T
Multithreading avec diérentes piles
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T
Multithreading web server
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T
Space d’adressage de thread
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T . P
Avantages
I La création de thread est plus rapide (les coûts inhérents à son exécution
sont moindres);
I La permutation entre threads prend requiert moins de temps et de
ressources
I La terminaision de threads prend moins de temps
I Tous les threads d’un processus partagent le même espace d’adresses
I La terminaison d’un processus entraîne celle de tous ses threads
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T
Mise en oeuvre - Bibliothèque pthread
I Création et terminaison de threads
I Echange de messages et données entre threads
I Ordonnancement de threads
I Sauvegarde et restauration de contexte de threads
I ...
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T
Détails de pthread API
I Type de données pthread
Type de données Description
pthread_t Identiants de threads
pthread_mutex_t Mutex
pthread_mutexattr_t Attributs objet de mutex
pthread_cond_t Variable condition
pthread_condattr_t Attributs objet de variables condition
pthread_key_t Clé pour de données thread spécique
pthread_once_t Contexte de contrôle d’initialisation unique
pthread_attr_t Attributs objet de thread
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T
Détails de pthread API
I pthread_create()
• Syntaxe:
i n c l u d e pthread . h
i n t pthread_create ( pthread_t * thread , const
p t h r e a d _ a t t r _ t * a t t r , void * ( * s t a r t ) ( void * ) ,
void * arg ) ;
• Retourne , ou un nombre positif en cas d’erreur
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T
Détails de pthread API
I pthread_create()
• Syntaxe:
i n c l u d e pthread . h
i n t pthread_create ( pthread_t * thread , const
p t h r e a d _ a t t r _ t * a t t r , void * ( * s t a r t ) ( void * ) ,
void * arg ) ;
• Retourne , ou un nombre positif en cas d’erreur
I pthread_exit()
• Syntaxe:
i n c l u d e pthread . h
void p t h r e a d _ e x i t ( void * r e t v a l ) ;
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T
Détails de pthread API
I pthread_self()
• Syntaxe:
i n c l u d e pthread . h
pthread_t p t h r e a d _ s e l f ( void ) ;
• Retourne ID du thread appelant
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T
Détails de pthread API
I pthread_self()
• Syntaxe:
i n c l u d e pthread . h
pthread_t p t h r e a d _ s e l f ( void ) ;
• Retourne ID du thread appelant
I pthread_equal()
• Syntaxe:
i n c l u d e pthread . h
i n t pthread_equal ( pthread_t t , pthread_t t ) ;
• Retourne une valeur diérente de si t et t sont égaux, sinon
retourne
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T
Détails de pthread API
I pthread_join()
• Syntaxe:
i n c l u d e pthread . h
i n t p t h r e a d _ j o i n ( pthread_t thread , void * * r e t v a l ) ;
• Retourne en cas de succès, sinon une valeur négative
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T
Détails de pthread API
I pthread_join()
• Syntaxe:
i n c l u d e pthread . h
i n t p t h r e a d _ j o i n ( pthread_t thread , void * * r e t v a l ) ;
• Retourne en cas de succès, sinon une valeur négative
I pthread_detach()
• Syntaxe:
i n c l u d e pthread . h
i n t pthread_detach ( pthread_t thread ) ;
• Retourne en cas de succès, une valeur positive en cas
d’erreur
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T
Exemple:
• prodcons.c :
i n c l u d e " prodcons . h " p t h r e a d _ a t t r _ i n i t (& p r o d _ a t t r ) ;
p t h r e a d _ a t t r _ i n i t (& c o n s _ a t t r ) ;
i n t main ( i n t argc , char * argv [ ] ) {
p t h r e a d _ a t t r _ s e t d e t a c h s t a t e (&
t h _ d a t a _ t th_data { prod_attr ,
. buff_len , PTHREAD_CREATE_DETACHED ) ;
. prod_index , p t h r e a d _ a t t r _ s e t d e t a c h s t a t e (&
. cons_index , cons_attr ,
. mutex PTHREAD_MUTEX_INITIALIZER , PTHREAD_CREATE_JOINABLE ) ;
. can_produce
PTHREAD_COND_INITIALIZER , pthread_create (& th_prod , &prod_attr ,
. can_consume producer , ( void * )&th_data ) ;
PTHREAD_COND_INITIALIZER pthread_create (& th_cons , &c o n s _ a t t r ,
}; consumer , ( void * )&th_data ) ;
pthread_t th_prod , th_cons ; p t h r e a d _ j o i n ( th_prod , NULL ) ;
p t h r e a d _ a t t r _ t prod_attr , c o n s _ a t t r ; p t h r e a d _ j o i n ( th_cons , NULL ) ;
return ;
}
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T
Exemple:
• prodconsImp.c :
i n c l u d e " prodcons . h " ...
i n t t rand ( ) ;
void * producer ( void * arg ) { p r i n t f ( " Produced : h i \ t , \ t d
t h _ d a t a _ t * th_data ( t h _ d a t a _ t * ) arg ; \n " , th_data−prod_index ,
t);
for ( ; ; ) { th_data−b u f f [ th_data−
sleep ( ) ; prod_index ] t ;
th_data−prod_index ( th_data−
pthread_mutex_lock (& th_data− prod_index ) BUFF_SIZE ;
mutex ) ;
th_data−b u f f _ l e n ;
i f ( th_data−b u f f _ l e n BUFF_SIZE
) { pthread_cond_signal (& th_data−
pthread_cond_wait (& th_data− can_consume ) ;
can_produce , &th_data− pthread_mutex_unlock (& th_data−
mutex ) ; mutex ) ;
} }
r e t u r n NULL ;
. . . }
. . .
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T
Exemple:
• prodconsImp.c - suite :
... ...
void * consumer ( void * arg ) { p r i n t f ( " Consumed : h i \ t , \ t d\n "
t h _ d a t a _ t * th_data ( t h _ d a t a _ t * ) arg ; , th_data−cons_index ,
th_data−b u f f [ th_data−
cons_index ] ) ;
for ( ; ; ) { th_data−cons_index ( th_data−
cons_index ) BUFF_SIZE ;
pthread_mutex_lock (& th_data−
mutex ) ; −−th_data−b u f f _ l e n ;
pthread_cond_signal (& th_data−
i f ( th_data−b u f f _ l e n ) { can_produce ) ;
pthread_cond_wait (& th_data− pthread_mutex_unlock (& th_data−
can_consume , &th_data− mutex ) ;
mutex ) ; }
}
r e t u r n NULL ;
sleep ( ) ; }
. . .
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
T
Exemple:
• prodcons.h :
i f n d e f PROD_CONS_H
d e f i n e PROD_CONS_H
include pthread . h
include s t d i o . h
include s t d l i b . h
include u n i s t d . h
d e f i n e BUFF_SIZE
typedef s t r u c t {
i n t b u f f [ BUFF_SIZE ] ;
size_t buff_len ;
s h o r t prod_index ;
s h o r t cons_index ;
pthread_mutex_t mutex ;
pthread_cond_t can_produce ;
pthread_cond_t can_consume ;
} th_data_t ;
void * consumer ( void * arg ) ;
void * producer ( void * arg ) ;
e n d i f // PROD_CONS_H