0% ont trouvé ce document utile (0 vote)
19 vues37 pages

Cours Processus Thread

Le document aborde les concepts fondamentaux de la gestion des processus et des threads, y compris le cycle de vie des processus et les mécanismes d'appels système comme fork(), exec(), et exit(). Il explique également la notion de multithreading, ses avantages, et les détails de l'API pthread pour la création et la gestion de threads. Enfin, il souligne l'importance de la synchronisation et de la communication inter-processus dans les systèmes d'exploitation.

Transféré par

Mahamat Khalil yakhoub
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)
19 vues37 pages

Cours Processus Thread

Le document aborde les concepts fondamentaux de la gestion des processus et des threads, y compris le cycle de vie des processus et les mécanismes d'appels système comme fork(), exec(), et exit(). Il explique également la notion de multithreading, ses avantages, et les détails de l'API pthread pour la création et la gestion de threads. Enfin, il souligne l'importance de la synchronisation et de la communication inter-processus dans les systèmes d'exploitation.

Transféré par

Mahamat Khalil yakhoub
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

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 Identiants 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écique
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

 

Vous aimerez peut-être aussi