Les systèmes d'exploitation UNIX permettent de manipuler aisément les communications interprocessus dans les lignes de commandes :
int fork()
fork() est une fonction très utile qui permet, à partir d’un processus (père), de créer un deuxième processus identique (fils).
#include <stdio.h> #include <unistd.h> { int pid ; pid = fork() ; // Création de la copie du processus courant(fils) if (pid < 0) { // Si fork() a échoué return -1 ; } if (pid == 0) { // Si on est dans le processus fils ... } else { // Si on est dans le père } return 0 ; }
Autres exemples de communications interprocessus, l'utilisation du pipe :
$ ps -ef | grep rlogin | awk '{ printf ("%-8s %s\n", $1, $2) }' | sort
$ cat file1 file2 file3 | sort > /dev/lp &
Les fichiers file1, file2, et file3 sont passés en argument à la commande cat. Le résultat de cette concaténation est envoyé via un pipe ( l'opérateur | ) à la commande sort qui trie selon l'ordre alphabétique les lignes du texte concaténé. L'opérateur de redirection renvoit le résultat dans un fichier lp. Sous UNIX, tout est fichier, et lp représente l'imprimante, /dev étan le répertoire par défaut des fichiers spéciaux figurant des périphériques.
Le fait de faire suivre la commande par l'opérateur & permet de signaler au shell qu'il ne doit pas attendre la fin du traitement pour rendre la main au prompt. Le job est alors effectué en arrière plan, permettant à l'utilisateur de continuer son travail.
Les deux processus (cat et grep) utilisent comme moyen de communication le pipe qui simule un fichier dans lequel un process peut écrire et l'autre peut lire. Les processus partagent donc des données d'entrées/sorties (IO pour Input/Output), dont il faudra gérer les accès.
Les situations où plusieurs processus accèdent en lecture/écriture à des données partagées en fonction de l'ordre des processus se nomment les accès concurents, ou race conditions.
La programmation parallèle permet l'exécution simultanée de plusieurs programmes qui coopèrent pour réaliser une tàche commune, ou qui entrent en compétition pour la possession de ressources.
Nous pouvons considérer le parallélisme sous trois aspects :
Pour notre exemple, nous pouvons imaginer la situation suivante :
Sur un chantier, des manœuvres travaillent dans un même but : transporter du sable d'un endroit vers un autre.
Ils collaborent, ou coopèrent pour cette tàche.
Un d'eux se chargera de pelleter le sable dans la brouette, nous l'appellerons le chargeur de brouette.
Un second se chargera de transporter la brouette, nous lui donnons son permis de chauffeur de brouette.
| Chargeur de brouette | Chauffeur de brouette |
|---|---|
| Répéter Attendre brouette; Jusqu'à ce que le tas soit vide;Prendre sable dans le tas; Déposer le sable dans la brouette; Donner le signal "plus de sable"; | Répéter Arriver; Jusqu'au signal "plus de sable";Attendre que la brouette soit chargée; Conduire la brouette; Attendre que le déchargeur décharge la brouette; Ramener la brouette; |
Si nous détachons un autre manœuvre avec sa brouette, ils entreront en concurrence pour la possession d'une ressource : le sable.
Nous pouvons remarquer certaines instructions d'attente qui permettent de synchroniser les processus.
Par exemple, le chargeur de brouette doit attendre que la ressource brouette soit disponible pour effectuer son travail de chargement.
Dans le cadre de la communication interprocessus,
La plupart du temps les processus effectuent des traitements qui ne mènent pas à des situations suceptibles de générer des conflits d'accès. Seules certaines portions de notre code feront appel à des ressources partagées. Une séquence d'instructions qui utilise des ressources en exclusion mutuelle est une section critique. Nous devrons donc traiter les cas pour lesquels plus d'un processus devrait entrer dans la section critique en même temps.
Voyons maintenant comment résoudre les problèmes liés à l'exclusion mutuelle...
Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.
6 mots clés dont 0 définis manuellement (plus d'information...).
Avertissement
Cette page ne possède pas encore de mots clés manuels, ceci est donc un exemple automatique (les niveaux de pertinence sont fictifs, mais les liens sont valables). Pour tester le nuage avec une page qui contient des mots définis manuellement, vous pouvez cliquer ici.Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher le nuage de mots clés.
Recherche (afficher)
Utilisateur (masquer)
Navigation (masquer)
Apparence (afficher)
Stats (afficher)
Citation (masquer)