Partie 2 : Communication interprocessus Exercice 1 :

Documents pareils
Cours 6 : Tubes anonymes et nommés

Cours Programmation Système

Programmation système en C/C++

3IS - Système d'exploitation linux - Programmation système

Introduction aux Systèmes et aux Réseaux

LEs processus coopèrent souvent pour traiter un même problème. Ces

TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Programmation système de commandes en C

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.

Programmation système

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Le prototype de la fonction main()

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Les processus. Système L3, /39

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Les structures. Chapitre 3

Qu'est-ce qu'un processus: Définitions

Introduction au langage C

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

Communication Interprocessus

Les processus légers : threads. Système L3, /31

Les structures de données. Rajae El Ouazzani


Programmation Système (en C sous linux) Rémy Malgouyres LIMOS UMR 6158, IUT département info Université Clermont 1, B.P.

Simulation d un système de paiement par carte bancaire

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

GESTION DES FICHIERS C/UNIX

Java Licence Professionnelle CISII,

Algorithmique et Programmation, IMA

Le système de gestion des fichiers, les entrées/sorties.

Le traitement du temps

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

OS Réseaux et Programmation Système - C5

Derrière toi Une machine virtuelle!

Cours de Système : Gestion de Fichiers

Architecture d un système d exploitation

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Programmation système I Les entrées/sorties

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

TD2/TME2 : Ordonnanceur et Threads (POSIX et fair)

Outils pour la pratique

TD3: tableaux avancées, première classe et chaînes

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Arguments d un programme

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

EPREUVE PRATIQUE DES TECHNIQUES INFORMATIQUES ACTIVITE N 1. Thème de l activité : Configuration d un firewall

ENSP Strasbourg (Edition ) Les Systèmes Temps Réels - Ch. DOIGNON. Chapitre 3. Mise en œuvre : signaux, gestion du temps et multi-activités

Plan du cours. Historique du langage Nouveautés de Java 7

Gestion des processus

Programmation impérative

Programme Compte bancaire (code)

Le langage C. Séance n 4

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

TP2 : tableaux dynamiques et listes chaînées

Les chaînes de caractères

Programmation C++ (débutant)/instructions for, while et do...while

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Unix : Programmation Système

Testez votre installation. Créer un répertoire vide

Introduction à la Programmation Parallèle: MPI

Package Java.util Classe générique

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Programmer en JAVA. par Tama

Utilisation d objets : String et ArrayList

IRL : Simulation distribuée pour les systèmes embarqués

Les processus 2/54. Qu est-ce qu un processus? 3(6)/54. Se souvenir 1(1)/54. Le système de fichiers (exemple du disque dur)

Programmation C. J.-F. Lalande. 15 novembre 2012

Playing with ptrace() for fun and profit

Les arbres binaires de recherche

SRS DAY: Problématique liée à la virtualisation

Projet de programmation (IK3) : TP n 1 Correction

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Choisir le mode d envoi souhaité. Option 1 : Envoyer un SMS à un nombre réduit de numéros (0 10 )

Compression de Données - Algorithme de Huffman Document de Conception

Bases de programmation. Cours 5. Structurer les données

Examen d informatique première session 2004

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Environnements de développement (intégrés)

Corrigé des exercices sur les références

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Corrigés des premiers exercices sur les classes

as Architecture des Systèmes d Information

Exercices INF5171 : série #3 (Automne 2012)

Cours 1: Java et les objets

ACTIVITÉ DE PROGRAMMATION

Programmation Classique en langage C

Les débordements de tampons et les vulnérabilités de chaîne de format 1

1.6- Génération de nombres aléatoires

Initiation. àl algorithmique et à la programmation. en C

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Premiers Pas en Programmation Objet : les Classes et les Objets

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Transcription:

INF3600+INF2610 Automne 2006 Partie 2 : Communication interprocessus Exercice 1 : Considérez N processus qui communiquent au moyen de tubes de communication non nommés (unnamed pipe). Chaque processus partage deux tubes (un avec le processus de droite et un autre avec le processus de gauche). Par exemple pour N=4, les processus communiquent selon le schéma suivant : P0 tub0 P1 tub3 tub1 P3 tub2 P2 1) Complétez le code ci-après de manière à implémenter cette architecture de communication des N processus créés. L entrée standard et la sortie standard de chaque processus Pi sont redirigées vers les tubes appropriés. Par exemple, pour le processus P0, l entrée et la sortie standards deviennent respectivement les tubes tub3 et tub0. #include EntetesNecessaires.h #define N 4 void proc( int ) ; int main ( ) int i ; for( i=0 ; i <N; i++) if ( fork() ==0) proc(i); exit(0); exit(0) ; #include codedeproc Attention : Vous ne devez pas écrire le code de la fonction proc. 1

Exercice 2 : On veut établir, en utilisant les tubes anonymes (pipes), une communication de type anneau unidirectionnel entre trois processus fils. Pour ce faire, la sortie standard de l un doit être redirigée vers l entrée standard d un autre, selon le schéma suivant : P3 P1 P2 Complétez le programme suivant en y ajoutant le code permettant de réaliser les redirections nécessaires à la création d un tel anneau. /*0*/ int main () /*1*/ if (fork()) // création du premier processus if(fork()) /*2*/ if(fork()) /*3*/ while (wait(null)>0); /*4*/ else // processus P3 /*5*/ execlp( program3, program3,null); /*6*/ 2

else // processus P2 /*7*/ execlp( program2, program2,null); /*8*/ else //processus P1 /*9*/ execlp( program1, program1, NULL); /*10*/ /*11*/ Exercice 3 : Écrivez le «main» d un processus qui permet de simuler un pipe ( ). Ce code doit utiliser un tube nommé et doit avoir exactement le même comportement qu un pipe ( ) dans un shell. Exemples : bash$> my_pipe who wc l ( equivaut à bash$> who wc l) bash$> my_pipe ls grep my_pipe ( équivaut à bash$> ls grep my_pipe ) Exercice 4 : Considérez le programme suivant : #include <unistd.h> #include <signal.h> #include <stdio.h> void sigintp() /*1*/ void sigalrm() /*2*/ 3

void sigintf() /*3*/ void sigchld() int status; wait(&status); exit(0); int main(void) signal(sigchld, sigchld); if (fork() == 0) signal(sigint, sigintf); while(1) printf ( ici fils \n ); sleep(1); while(1) signal(sigint, sigintp); printf( ici pere \n ); sleep(1); return 0; Complétez le code précédent de manière à réaliser ces traitements : 1. Si l utilisateur presse les touches Ctrl-C lorsque le programme s exécute, les processus père et fils ne se terminent pas immédiatement, mais après un délai de 5 secondes. Lorsque l utilisateur presse les touches Ctrl-C, le père affiche son identificateur (sans se terminer). Indication: Ctrl-C doit déclencher un appel système alarm(5), qui envoie automatiquement le signal SIGALRM après 5 secondes. 2. Dans quel ordre les processus père et fils se terminent? Expliquez. Exercice 5 : 4

Considérez le programme suivant : #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #define N 5 void gestion() /* traitement */ ; /*0*/ int main( ) pid_t pid[n]; int i; /*1*/ for ( i=0; i<n;i++) if ((pid[i]=fork())==0) /* 2*/ execlp("traitement", "traitement", NULL); exit(1); /*3*/ gestion( ); return 0; 1- On veut faire communiquer le processus père avec ses fils au moyen de deux tubes anonymes (pipes sans nom) selon le schéma suivant : 5

La sortie standard du père est redirigée vers le pipe1 qui devient l entrée standard des fils. Les sorties standards et erreurs des fils sont redirigées vers le pipe2. Complétez le code de manière à établir ces canaux de communication (supposez que le fork n échoue jamais). Exercice 6 : On dispose d'une fonction F() d une bibliothèque qui écrit une certaine quantité de données sur la sortie standard (descripteur de fichier 1). On aimerait récupérer, en utilisant un pipe anonyme, ces données pour les traiter. #define Taille 1024 int main char Data[Taille]; /*1*/ F ( ); /*2*/ utiliser_resultat (Data); 1. Insérez du code en amont et en aval de F( ) afin que tous les caractères émis par F( ) sur la sortie standard soient récupérés dans Data. Vous pouvez utiliser des variables et appels système supplémentaires, mais vous ne pouvez pas utiliser de fichiers ni de processus supplémentaires. 2. Que se passe-t-il, si la taille des données émises par F dépasse celle de Data? 3. Que se passe-t-il, si la taille des données émises par f dépasse celle du pipe? 4. Proposez une deuxième version corrigeant ces problèmes. Pour ce faire, vous pouvez utiliser un processus supplémentaire. 6