Scheda di revisione: 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.

Metti alla prova le tue conoscenze

Metti alla prova le tue conoscenze su Communication inter-processus sous Unix con 7 domande a scelta multipla con correzioni dettagliate.

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 ?

Fai il quiz →

Ripassa con le flashcard

Memorizza i concetti chiave di Communication inter-processus sous Unix con 9 flashcard interattive.

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.

Vedi le flashcard →

Similar courses

Crea le tue schede di revisione

Importa il tuo corso e l'AI genera schede, quiz e flashcard in 30 secondi.

Generatore di schede