Revision sheet: Communication inter-processus sous Unix

Plan du Cours

  1. Principes fondamentaux de la communication inter-processus sous Unix
  2. Mécanismes de synchronisation et communication entre processus
  3. Communication par signaux : fonctionnement et gestion en C
  4. Liste et utilisation des signaux standards sous Unix
  5. Fonctions systùme pour l’envoi et la gestion des signaux en C : signal(), kill(), alarm()
  6. Fonctionnement et utilisation des tubes anonymes (pipes) pour la communication entre processus
  7. Exemples pratiques d’utilisation des tubes nommĂ©s avec programmes writer et reader

1. Principes fondamentaux de la communication inter-processus sous Unix

Notions clés & Définitions

  • Synchronisation par signaux : MĂ©canisme de synchronisation utilisant des signaux, qui sont assimilĂ©s Ă  des interruptions logicielles, interdisant le traitement en cours pour exĂ©cuter une fonction associĂ©e au signal, avec attention aux risques d’interblocage.
  • SĂ©maphores : Outils de synchronisation, comprenant des sĂ©maphores binaires ou Ă  compte, et des mutex, permettant de gĂ©rer l’accĂšs concurrentiel aux ressources dans un environnement multitĂąche.
  • Processus Utilisateur Processus Utilisateur Noyau : Processus exĂ©cutĂ©s en espace utilisateur, dont la communication et la synchronisation avec d’autres processus nĂ©cessitent des mĂ©canismes fournis par le noyau du systĂšme d’exploitation.

Points essentiels

  • Les processus Unix ont des espaces mĂ©moire isolĂ©s, sans accĂšs direct aux variables des autres processus.
  • La communication inter-processus nĂ©cessite des mĂ©canismes spĂ©cifiques fournis par le systĂšme d’exploitation.
  • Les mĂ©canismes de communication incluent signaux, sĂ©maphores, fichiers, tubes, files de messages et mĂ©moire partagĂ©e.
  • La synchronisation entre processus peut ĂȘtre rĂ©alisĂ©e via signaux ou sĂ©maphores (binaires, Ă  compte, mutex).

À retenir

La communication entre processus sous Unix repose sur des mécanismes dédiés pour compenser l'isolement des espaces mémoire.

2. Mécanismes de synchronisation et communication entre processus

Notions clés & Définitions

  • Signaux : Signaux sont des interruptions logicielles qui notifient ou synchronisent un processus en interrompant son exĂ©cution normale, gĂ©nĂ©ralement envoyĂ©s par un autre processus et reçus par le noyau pour dĂ©clencher une rĂ©action spĂ©cifique.

Points essentiels

  • Les signaux sont des interruptions logicielles utilisĂ©es pour synchroniser ou notifier les processus. Lorsqu’un processus reçoit un signal, il peut rĂ©agir en exĂ©cutant une routine spĂ©cifique ou en adoptant un comportement prĂ©dĂ©fini, comme l’attente passive avec une boucle infinie et une pause. La communication entre processus peut Ă©galement s’effectuer via des files de messages ou des tubes, qui permettent l’échange de donnĂ©es structurĂ©es. La mĂ©moire partagĂ©e offre un espace commun accessible directement par plusieurs processus, facilitant un Ă©change rapide de donnĂ©es. Enfin, les sĂ©maphores sont des outils de synchronisation qui contrĂŽlent l’accĂšs aux ressources partagĂ©es, Ă©vitant ainsi les conflits ou incohĂ©rences lors de leur utilisation simultanĂ©e.

À retenir

Les signaux, files de messages, mémoire partagée et sémaphores constituent des outils essentiels pour assurer la synchronisation et la communication efficaces entre processus.

3. Communication par signaux : fonctionnement et gestion en C

Notions clés & Définitions

  • Signum : Un entier reprĂ©sentant le numĂ©ro d'un signal spĂ©cifique envoyĂ© Ă  un processus en langage C.

Points essentiels

  • Un signal interrompt le traitement en cours pour exĂ©cuter une fonction associĂ©e, puis reprend le traitement interrompu.
  • La fonction signal() associe un numĂ©ro de signal Ă  un gestionnaire en C, ou peut utiliser sigaction() comme alternative.
  • AprĂšs rĂ©ception d'un signal, le processus exĂ©cute le gestionnaire, puis reprend son traitement, sauf si le processus Ă©tait endormi.
  • Un signal peut ĂȘtre ignorĂ©, traitĂ© par une fonction spĂ©cifique, ou provoquer la terminaison du processus selon son comportement par dĂ©faut.
  • ● Comportement associĂ©e Ă  la rĂ©ception d'un signal : ● En gĂ©nĂ©ral un comportement par dĂ©faut est dĂ©fini : Terminaison anormale du processus (ex: violation de mĂ©moire, division par zĂ©ro) ● Le processus peut (parfois) ignorer le signal ● Le processus peut redĂ©finir, par une fonction spĂ©cifique, son comportement Ă  la rĂ©ception d'un signal 7 Origine des signaux ● Frappe de caractĂšres ● ● Erreurs de programme - Violation de mĂ©moire, SIGSEGV - Division par zĂ©ro, SIGFPE - ...● ● Commande kill Primitive systĂšme : kill(), alarm().
  • ● Il interrompt le traitement en cours ● il exĂ©cute la fonction de traitement du signal ● il reprend l'exĂ©cution du traitement interrompu ● Si le processus Ă©tait endormi, il est rĂ©veillĂ© par le signal.

À retenir

Maßtriser le principe d'interruption logicielle et la gestion des signaux en C permet de contrÎler le comportement des processus en réponse à des événements asynchrones.

4. Liste et utilisation des signaux standards sous Unix

Notions clés & Définitions

  • Signal ne peut ĂȘtre redĂ©finie : Un signal dont le comportement ne peut pas ĂȘtre modifiĂ©, capturĂ© ou ignorĂ© par un processus, comme SIGKILL et SIGSTOP.

Points essentiels

  • Les signaux standards incluent SIGHUP, SIGINT, SIGQUIT, SIGKILL, SIGSTOP, SIGTERM, entre autres.
  • SIGKILL et SIGSTOP sont des signaux non masquables, leur comportement ne peut ĂȘtre redĂ©fini.
  • SIGINT correspond Ă  l'interruption clavier (CTRL-C) et peut ĂȘtre capturĂ© ou ignorĂ©.

À retenir

ConnaĂźtre les signaux standards Unix, notamment ceux non modifiables comme SIGKILL et SIGSTOP, est essentiel pour contrĂŽler les processus.

5. Fonctions systùme pour l’envoi et la gestion des signaux en C : signal(), kill(), alarm()

Notions clés & Définitions

  • Signal() : Be used to check the validity of pid.
  • Alarm() : Type de la valeur de retour de la fonction alarm(), indiquant le nombre de secondes restantes avant la prĂ©cĂ©dente alarme si elle n'a pas encore Ă©tĂ© dĂ©clenchĂ©e.

Points essentiels

  • L'utilisation combinĂ©e de alarm() et sleep() doit ĂȘtre Ă©vitĂ©e car ils partagent le mĂȘme timer, ce qui peut provoquer des interfĂ©rences.
  • L'utilisation combinĂ©e de alarm() et sleep() doit ĂȘtre Ă©vitĂ©e car ils partagent le mĂȘme timer.

À retenir

Savoir utiliser les fonctions systÚme clés pour envoyer et gérer les signaux dans les programmes C.

6. Fonctionnement et utilisation des tubes anonymes (pipes) pour la communication entre processus

Notions clés & Définitions

  • I++) { ret : Pour plus d'options : sigaction 17 Pipes (tubes) 18 ─ Un tube (anonyme) est traitĂ© comme un fichier ouvert ─ Il est transmis aux processus enfants de la mĂȘme maniĂšre que les fichiers ouverts ─ Un tube anonyme est cependant un fichier particulier : − Il n’a pas de nom dans l’arborescence des fichiers − Il est connu par deux descripteurs (lecture, Ă©criture) ─ On lit/Ă©crit dans un tube comme on lit/Ă©crit dans un fichier sĂ©quentiel − Utilisation des fonctions read et write (Ă©ventuellement fscanf, fprintf etc
) − Les donnĂ©es ne sont pas structurĂ©es: le pipe ne contient qu’une suite d’octets ─ Un tube est comme un "tuyau" avec une entrĂ©e et une sortie : − Plusieurs processus peuvent y Ă©crire des donnĂ©es − Plusieurs processus peuvent y lire des donnĂ©es Tubes : principe 19 ● Le fonctionnement est de type FIFO : ● On lit toujours les octets dans l'ordre oĂč ils ont Ă©tĂ© dĂ©posĂ©s dans le tube ● Il n’est pas possible de lire un octet sans voir lu tous ceux qui le prĂ©cĂšdent ● Une donnĂ©e lue par un processus ne pourra jamais ĂȘtre relue par un autre processus ● Les droits d’accĂšs sont ceux des droits d’accĂšs Unix sur les fichiers (rwx, rwx, rwx) ● La lecture est bloquante ● Lecteur bloquĂ© si tube vide mais ouvert en Ă©criture par un autre processus ● Si un tube est vide et si tous les descripteurs susceptibles d’y Ă©crire sont fermĂ©s, la primitive read() renvoie la valeur 0 (fin de fichier atteinte).

Points essentiels

  • La crĂ©ation d'un tube se fait via la fonction pipe(), qui fournit deux descripteurs pour la lecture et l'Ă©criture.
  • Un processus Ă©crit dans un tube sans lecteur reçoit le signal SIGPIPE.

À retenir

Comprendre le rÎle des tubes anonymes comme canal FIFO bloquant pour la communication entre processus liés.

7. Exemples pratiques d’utilisation des tubes nommĂ©s avec programmes writer et reader

Notions clés & Définitions

  • TUBES : MĂ©canismes de communication inter-processus permettant l'Ă©change de donnĂ©es en mĂ©moire sans stockage sur disque, souvent utilisĂ©s pour la synchronisation et le transfert d'informations entre processus liĂ©s.
  • Writer& reader : Programmes illustrant respectivement l'Ă©criture et la lecture via un tube nommĂ©, oĂč writer envoie un message dans le tube et reader le rĂ©cupĂšre, dĂ©montrant la communication inter-processus.
  • Bonjour du writer : sprintf(message, "bonjour du writer [%d]\n", getpid());

Points essentiels

  • Les tubes nommĂ©s sont des fichiers spĂ©ciaux visibles dans l'arborescence, accessibles entre processus sans lien de parentĂ©.
  • Plusieurs Ă©crivains et lecteurs peuvent communiquer via un mĂȘme tube nommĂ©.
  • ● Ouverture de tube par les processus connaissant le nom du tube : ● En lecture/Ă©criture par open() ● Par dĂ©faut, ouverture bloquante : lecteurs et Ă©crivains s’attendent = synchronisation 25 Les tubes nommĂ©s: commande mkfifo mkfifomypipeAffichagedesattributsdutubecreˊeˊmkfifo mypipe Affichage des attributs du tube créé ls -l mypipe prw------- 1 usname grname 0 sep 12 11:10 mypipe Modification des permissions d'accĂšs (comme un fichier ordinaire) chmodg+rwmypipechmod g+rw mypipe ls -l mypipe prw-rw---- 1 usname grname 0 sep 12 11:12 mypipe Remarque : p indique que c’est un tube.
  • } TUBES : interblocages, Ă©treintes fatales IndĂ©blocable (tube anonyme!) 24 TUBES NommĂ©s Les tubes ordinaires, sont non visibles dans l’arborescence des fichiers, et accessibles uniquement aux processus d’une mĂȘme affiliation ● Tubes nommĂ©s : visibles dans l’arborescence de fichiers, utilisables entre processus n’ayant pas de parents communs ● Aucune information n’est enregistrĂ©e sur disque, le transfert d’information s’effectue toujours en mĂ©moire.

À retenir

Les tubes nommés sont des fichiers spéciaux visibles dans l'arborescence, accessibles entre processus sans lien de parenté.

Tableaux de SynthĂšse

Comparaison des mécanismes de communication inter-processus

MécanismeDescriptionUtilisation
SignauxInterruptions logicielles pour notifier ou synchroniserEnvoyés par un processus, reçus par le noyau, gestion par signal() ou sigaction()
Tubes (pipes)Flux de données séquentielles entre processusUtilisation de read() et write(), communication unidirectionnelle
Signaux nommés (fifos)Fichiers spéciaux pour communication entre processus non liésCréés avec mkfifo(), ouverts avec open()

PiÚges & Confusions Fréquentes

  1. Confusion entre signaux et sémaphores, ne pas confondre leur rÎle.
  2. Ignorer les signaux critiques comme SIGKILL ou SIGSTOP, qui ne peuvent ĂȘtre capturĂ©s ou ignorĂ©s.
  3. Utiliser alarm() et sleep() simultanément peut provoquer des interférences.
  4. Ne pas gérer correctement la synchronisation lors de l'utilisation de tubes, risque de blocage.
  5. Oublier de fermer les descripteurs de fichiers aprĂšs utilisation, risque de fuites.
  6. Ne pas vérifier le retour des fonctions systÚme, risque d'erreurs non détectées.
  7. Confondre processus parent et enfant lors de l'ouverture ou de l'écriture dans un tube.

Checklist Examen

  1. Vérifier la création et la suppression des tubes nommés.
  2. Gérer correctement les signaux pour éviter les interblocages.
  3. Utiliser sigaction() pour une gestion avancée des signaux.
  4. Fermer tous les descripteurs de fichiers aprĂšs leur utilisation.
  5. Vérifier le retour des appels systÚme comme open(), read(), write().
  6. Ne pas bloquer indéfiniment lors de la lecture ou écriture dans un tube.
  7. Utiliser des mécanismes de synchronisation pour éviter les conflits.
  8. Tester la communication avec des programmes simples avant d'intégrer.
  9. Documenter le comportement attendu pour chaque mécanisme.
  10. Respecter les droits d'accÚs lors de la création de tubes nommés.

Test your knowledge

Test your knowledge on Communication inter-processus sous Unix with 7 multiple-choice questions with detailed corrections.

1. Quel est le rÎle principal des mécanismes de communication inter-processus sous Unix ?

2. Quel est le rĂŽle principal des signaux dans la communication entre processus ?

Take the quiz →

Review with flashcards

Memorize the key concepts of Communication inter-processus sous Unix with 9 interactive flashcards.

Communication inter-processus — principes ?

Utilise signaux, sémaphores, tubes, mémoire partagée.

Communication inter-processus — principe?

Échange d'informations entre processus isolĂ©s.

Signaux — rîle ?

Notifier ou synchroniser un processus de façon asynchrone.

See flashcards →

Similar courses

Create your own revision sheets

Import your course and AI generates sheets, quizzes and flashcards in 30 seconds.

Sheet generator