Département dInformatique Système LMD, 3ieme année Déc. 2012 Communication Interprocessus.

Презентация:



Advertisements
Похожие презентации
1 Méthodologie des systèmes dinformation Chapitre 5 MCD.
Advertisements

Réalisé Par : Djekhar Adlane Bougamouza Hamza Les Sockets (Principes et implémentation)
La Précision est la qualité qui caractérise l'aptitude d'un capteur à donner des indications proches de la valeur vraie de la grandeur mesurée. L'erreur.
Séance N°01 Le 12/04/2009 Université de Skikda El-Hadeik.
Marionnette dun oiseau Modélisation Matlab du vol dun oiseau Projet 2 ème année P.O. MIC Modélisation Informatique et Communication Gicu STRATAN Cécile.
FST \ Technologie 2013 / 2014 Licence Filière \ Spécialité Titre Du Poster (police: Arial Gras, taille 80, pas plus de lignes pour le titre) Réalisé par:
But: faire le plan d'analyse d'un tableau. Questions: réviser le lexique lié au thème de la leçon; relever les éléments principaux d'analyse d'un tableau;
La famille française aujourd`hui En un demi-siècle, la famille française a accompli une véritable révolution: Déclin du mariageDéclin du mariage Croissance.
Nathalie Lebedeva 10 il. Le musée dOrsay est un musée national situé à Paris, sur la rive gauche de la Seine. Il a ouvert ses portes en 1986 et maintenant,
Le progrès technologique : Automobile. Qu'est-ce que le progrès technologique ? L'utilisation des progrès les plus récents de la science et de la technique.
Le Continent Européen - Q- Qu'est ce que l'Europe? - Q- Quelles sont ses limites? Le nom du continent européen vient du monde grec et de sa culture. Selon.
NOS AMIS LES ANIMAUX. ILS VOUS ATTENDENT… CHAQUE MINUTE…
Gerassimova Daria 6 «А». L`école 282 Saint-Pétersbourg professeur Krasnova L.M
Урок по теме: «Je vais au cinéma» «Любимые французские герои Астерикс и Обеликс против Цезаря»
Projet du parc d`attractions à Mitino Le sujet de notre projet cest la construction du parc dattractions à Mitino. Pourquoi est-ce que nous lavons choisi.
Comment va la presse française? Dédié aux étudiants de la 3 ème année.
Le conte populaire français qui nous apprend à vivre. 7 класс, ГОУ СОШ 650 ВАО г. Москвы Руководитель проекта Лосева Н.Ю. Le conte populaire français.
Photoartist Leszek Buzhnovski. Leszek Buzhnovski né en Pologne en Crée peintures atmosphériques et légèrement mystérieux dans l'art numérique de.
Презентация ученицы 10 класса Бормотовой Ани.. La perle de l'époque de la Renaissance française. Le berceau du pouvoir royal en France», «la perle de.
MONTMARTRE Montmartre est une ancienne commune française du département de la Seine par Paris. Montmartre est désormais un quartier de Paris situé au nord.
Транксрипт:

Département dInformatique Système LMD, 3ieme année Déc Communication Interprocessus

Introduction Les tubes de UNIX – Tubes anonymes – Tubes nommés Les signaux Mémoire partagée 2 Dr. S. Ghanemi, 2012

Introduction Possibilité de créer plusieurs processus concurrents Possibilité d exécuter sur un même ordinateur ou un réseau Plusieurs mécanismes de communication Données communes, Signaux Messages Les threads partagent des données globales, le tas, le code et les fichiers du processus 3 Dr. S. Ghanemi, 2012

Les tubes de communication Un processus peut envoyer un message à un autre processus + mécanismes permettant l échange de messages : Les tubes de communication Le passage de messages Les sockets Les tubes permettent a des processus d échanger des messages. On distingue 2 types de tube: Les tubes anonymes Les tubes nommes. 4 Dr. S. Ghanemi, 2012

Les tubes anonymes Considérés comme des fichiers temporaires Liaisons unidirectionnelles entre processus Permet de mémoriser des informations et se comporte comme une fichier FIFO 2 descripteurs (lecture et écriture) + taille limitée à 4KO La lecture est destructive : une information ne peut être lue quune seule fois. Le tube est détruit si tous ses descripteurs sont fermés, 2 manières de créer des tubes anonymes: Lopérateur « | » L’appel système pipe( ). 5 Dr. S. Ghanemi, 2012

Communication unidirectionnelle Dr. S. Ghanemi, SE Proc Utilisateur Pipe Proc Utilisateur

Lopérateur « | » Dr. S. Ghanemi, La commande c:>who | wc -–l crée deux processus reliés par un tube: Elle détermine le nombre d'utilisateurs connectés au système – Le premier processus réalise la commande who. – Le second processus exécute la commande wc -l. Les résultats du 1 er proc sont dirigés vers le 2ieme proc via le tube Le processus réalisant who dépose une info / ut dans le tube. Le processus réalisant wc –-l, récupère ces info pour en calculer le nombre total. Le résultat est affiché à l'écran.

Lopérateur « | » Dr. S. Ghanemi, Les deux processus s'exécutent en parallèle, les sorties du premier processus sont stockées dans le tube. Lorsque le tube devient plein, le premier processus est suspendu jusqu'à ce qu'il y ait libération de l'espace nécessaire pour stocker des données. De façon similaire, lorsque le tube devient vide, le second processus est suspendu jusqu'à ce qu'il y ait des places vides sur le tube.

Création dun tube Dr. S. Ghanemi, int pipe(int p[2]). retourne, dans p, les descripteurs des fichiers créés : - p[0] fichier en lecture - p[1] fichier en écriture Seul le proc créateur et ses fils peuvent accéder au tube. Erreur si l'appel a pipe() retourne -1, sinon il retourne la valeur 0. L'accès au tube se fait via les descripteurs

séquence d'événements Dr. S. Ghanemi, En général la communication est entre un père et ses fils: 1. Le père crée le tube de communication en appelant pipe() 2. Il crée ensuite un ou plusieurs fils en appelant fork() 3. L écrivain ferme le descripteur de lecture 4. Le lecteur ferme le descripteur d écriture. 5. La lecture est possible en appellant read(fd[0], buffer, n); 6. L ecriture est possible en appellant write(fd[1], buffer,n); 7. En fin de communication chacun des proc ferme son fd.

Exemple 1 Dr. S. Ghanemi, //programme upipe.c #include //pour les types #include //pour fork, pipe, read, write, close #include // pour printf #include #define R 0 #define W 1 int main ( ) { int fd[2] ; pipe(fd) ; // création d'un tube sans nom char message[100] ; // pour récupérer un message

Exemple 1 (suite) Dr. S. Ghanemi, int nboctets ; char * phrase = " message envoyé au père par le fils"; if (fork() ==0) // création d'un processus fils {close(fd[R]) ; // Le fils ferme le descripteur non utilisé de lecture // dépôt dans le tube du message write(fd[W],phrase, strlen(phrase)+1) ; close (fd[W]) ; // fermeture du descripteur d'écriture }

Exemple 1 (suite) Dr. S. Ghanemi, else { // Le père ferme le descripteur non utilisé d'écriture close(fd[W]) ; // extraction du message du tube nboctets = read (fd[R], message,100) ; printf ("Lecture %d octets : %s\n", nboctets, message) ; // fermeture du descripteur de lecture close (fd[R]) ; } return 0 ; }

Compilation et exécution Dr. S. Ghanemi, c:%>gcc -o upipe upipe.c c:%>./upipe Lecture 36 octets : message envoyé au père par le fils

Remarques Dr. S. Ghanemi, Chaque tube a un Nbre de lecteurs et un Nbre d’écrivains 2. La fonction read() d’un tube retourne 0 (fin de fichier) si le tube est vide et le nombre d’écrivains est 0, 3. L’oubli de la fermeture de descripteurs peut mener à des situations d’inter-blocage 4. La fonction write() dans un tube génère le signal SIGPIPE, si le nombre de lecteurs est 0 5. Par défaut, les lectures et écritures sont bloquantes

Communication bidirectionnelle Dr. S. Ghanemi, Proc Pipe1 Pipe2 fd1(W) fd2(W) fd1(R) fd2(R)

Les tubes nommés Dr. S. Ghanemi, Les tubes nommés sont aussi des fichiers FIFO Plus intéressants que les tubes anonymes: Possède chacun un nom – considérés comme des fichiers spéciaux Peuvent être utilises par des procs. indépendants Doivent être supprimés explicitement Créer soit par commande soit par appel de fonction mkfifo int mkfifo(const char *nomfichier, mode_t mode) mknod

Commande mkfifo Dr. S. Ghanemi, ghanemi% mkfifo mypipe Affichage des attributs du tube créé ghanemi % ls -l tube1 prw usname grname 0 sep 12 11:10 tube1 Modification des permissions d'accès ghanemi % chmod g+rw tube1 ghanemi % ls -l tube1 prw-rw--- 1 usname grname 0 sep 12 11:12 tube1 Remarques: p indique que cest un tube – chacun des 2 procs ouvrent le tube, lun en lecture lautre en ecriture.

Exemple : programme écrivain Dr. S. Ghanemi, // programme writer.c envoie un message sur le tube mypipe #include int main() { int fd; char message[100]; sprintf(message, "bonjour du writer [%d]", getpid()); //Ouverture du tube mypipe en mode écriture fd = open("mypipe", O_WRONLY); printf("ici writer[%d] \n", getpid()); if (fd!= 1) { // Dépot d’un message dans le tube write(fd message strlen(message)+1); fd, message, } else printf( " désolé, le tube n'est pas disponible \n"); close(fd); return 0; }

Exemple: programme lecteur Dr. S. Ghanemi, // programme reader.c lit un message à partir du tube mypipe #include int main() { int fd,n; char message[100]; // ouverture du tube mypipe en mode lecture fd = open("mypipe", O_RDONLY); printf("ici reader[%d] \n",getpid()); if (fd!= 1) { // récupérer un message du tube, taille maximale est 100. while ((n = read(fd,message,100))>0) // n est le nombre de caractères lus printf("%s\n", message); } else printf( "désolé, le tube n'est pas disponible\n"); close(fd); return 0; }

Exemple: exécution des programmes ecrivain et lecteur Dr. S. Ghanemi, Compiler séparément les deux programmes, ghanemi% gcc -o writer writer.c ghanemi% gcc -o reader reader.c Lancer les 2 programmes en arrière plan jupiter% writer& reader& [1] 1156 [2] 1157 ici writer[1156] ici reader[1157] bonjour du writer [1156] [2] Done reader [1] + Done writer

Execution de 2 writers et 1 reader Dr. S. Ghanemi, ghanemi% writer& writer& reader& [1] 1196 [2] 1197 [3] 1198 ici writer[1196] ici writer[1197] ici reader[1198] bonjour du writer [1196] bonjour du writer [1197] [3] Done reader [2] + Done writer [1] + Done writer

Remarques Dr. S. Ghanemi, Par défaut, l’ouverture d’un tube nommé est bloquante (spécifier O_NONBLOCK sinon). Si un processus ouvre un tube nommé en lecture (resp. écriture) alors qu’il n’y a aucun processus qui ait fait une ouverture en écriture (resp. lecture).---> le processus sera bloqué jusqu’à ce qu’un processus effectue une ouverture en écriture (resp. en lecture). Attention aux situations d ’inter-blocage /* processus 1 */ /* processus 2 */ int f1, f2;... …... f1 =open("fifo1", O_WRONLY); f2=open("fifo2", O_WRONLY); f2 =open("fifo2", O_RDONLY); f1=open("fifo1", O_RDONLY);

Les signaux Dr. S. Ghanemi, Un signal est une interruption logicielle asynchrone Son but est d’informer de l’arrivée d’un événement Il ne véhicule pas d’information. Permet à un processus de réagir à un événement Par exemple, une division par 0 ou l’emploi d’une adresse non valide, sont converties en signaux Le SE gère un ensemble de signaux. Chaque signal a un nom, un numéro, un gestionnaire (handler) et est associé à un type d’événement (voir le man 7 signal).

Exemples de signaux Dr. S. Ghanemi, SIGINT 2 SIGQUIT 3 SIGALRM 14 SIGKILL 9 SIGUSR1 30,10,16 SIGPIPE 13 SIGUSR2 31,12,17 SIGCHLD 20,17,18 SIGCONT 19,18,25 SIGSTOP 17,19,23

Gestionnaire par default Dr. S. Ghanemi, Le SE associe a chaque signal un traitement par default – abort (génération d’un fichier core et arrêt du processus); – exit (terminaison du processus sans génération d’u fichier core); – ignore (le signal est ignoré); – stop (suspension du processus); – continue (reprendre l’exécution si le processus est suspendu sinon le signal est ignoré). Par exemple, - SIGUSR1 et SIGUSR2 tuent le processus, - SIGCHLD est ignoré (man 7 signal pour plus de détails). De façon simplifiée, lorsqu’un signal est envoyé, le SE interrompt (dès que possible) l’exécution du processus pour lui permettre de réagir au signal (exécuter le gestionnaire du signal).

Gestionnaire par default Dr. S. Ghanemi, Un processus peut indiquer au SE sa réaction vis-à-vis d’un signal : – ignorer le signal (certains signaux ne peuvent pas être ignorés), – exécuter un traitement spécifique et defini par le processus), – exécuter le traitement par défaut, ou – bloquer le signal. Chaque processus a un masque de signaux qui indique les signaux à bloquer. Un signal bloqué signifie qu'il ne sera pas délivré tant qu'il n'aura pas été débloqué. Entre le moment où il est généré et celui où il est délivré, un signal est dit en attente.

Gestionnaire par default Dr. S. Ghanemi, Si un processus choisit de prendre en compte un signal qui lui est destiné (capture d’un signal), il doit alors spécifier la procédure de gestion de signal. Par exemple, la touche d’interruption Ctrl+C génère le signal SIGINT. Par défaut, ce signal arrête le processus. Le processus peut associer à ce signal un autre gestionnaire de signal. Les signaux SIGKILL et SIGSTOP ne peuvent être ni capturés, ni ignorés, ni bloqués.

Envoi dun signal Dr. S. Ghanemi, #include int kill ( pid_t pid, int sig); Si pid >0, le signal sig est envoyé au proc pid. Si pid = 0, le signal est envoyé à tous les proc du groupe Il retourne 0 en cas de succès et -1 en cas d’erreur.

Réception dun signal Dr. S. Ghanemi,