UNIX / Synchronisation et Communication



Documents pareils
Cours 6 : Tubes anonymes et nommés

Programmation système en C/C++

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

Introduction aux Systèmes et aux Réseaux

Cours de S.E. les Signaux

GESTION DES FICHIERS C/UNIX

Communication Interprocessus

SYSTÈME DE GESTION DE FICHIERS

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

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Le service FTP. M.BOUABID, Page 1 sur 5

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Chapitre 2. Classes et objets

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

Utiliser Freemind à l'école

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

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

POUR ALLER UN PEU PLUS LOIN SUR UN TABLEUR. Version EXCEL

Programmation système de commandes en C

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

Exonet : sauvegarde automatisée d une base de données

Cours Programmation Système

Cours de Système : Gestion de Fichiers

KL5121. Pour activer des sorties en fonction de la position d'un codeur

Projet gestion d'objets dupliqués

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

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)

Exécutif temps réel Pierre-Yves Duval (cppm)

Série TD 3. Exercice 4.1. Exercice 4.2 Cet algorithme est destiné à prédire l'avenir, et il doit être infaillible! Exercice 4.3. Exercice 4.

Cours Informatique Master STEP

SOMMAIRE. Travailler avec les requêtes... 3

ENDNOTE X2 SOMMAIRE. 1. La bibliothèque EndNote 1.1. Créer une nouvelle bibliothèque 1.2. Ouvrir une bibliothèque EndNote 1.3. Fermer une bibliothèque

1 Lecture de fichiers

Guide de démarrage rapide Centre de copies et d'impression Bureau en Gros en ligne

TP3 : Manipulation et implantation de systèmes de fichiers 1

Les bases de données Page 1 / 8

Plan global. Programmation système II. Socket du domaine UNIX. Plan. Socket UNIX, Terminaux, Async IO, Mémoire, ELF.

Cours 14 Les fichiers

Programmation système I Les entrées/sorties

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

GE Security. KILSEN série KSA700 Centrale de détection et d alarme Incendie analogique adressable. Manuel d utilisation

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Le chiffre est le signe, le nombre est la valeur.

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

TP, première séquence d exercices.

Cours 1 : Qu est-ce que la programmation?

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Le Network File System de Sun (NFS)

COPIER, COUPER, COLLER, SELECTIONNER, ENREGISTRER.

PAGE 1. L écran du logiciel d Open Office Draw. Barre de menu: Les commandes du logiciel

Le courrier électronique

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Utilisation du client de messagerie Thunderbird

Traitement de texte : Quelques rappels de quelques notions de base

Programmation par les Objets en Java

Système de Gestion de Fichiers

Programmation C. Apprendre à développer des programmes simples dans le langage C

Service client LSC 1

Travail collaboratif avec OpenOffice Texte (Writer)

Le générateur d'activités

TPS 4 Objectifs du programme aide à la lecture et à l'écriture Les fonctions principales lecture à haute voix

STI 2 Édition 5 / Mars 2004

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

LES ACCES ODBC AVEC LE SYSTEME SAS

Les fichiers. Chapitre 4

Manuel d utilisation NETexcom

Chapitre 1 : La gestion dynamique de la mémoire

Chaque ordinateur est constitué de différentes unités de stockage de données (Disque dur, Graveur ) que l on peut imaginer comme de grandes armoires.

Dans l'article précédent, vous avez appris

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Vers l'ordinateur quantique

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

ORDINATEUR DOSSIERS FICHIERS

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

Tutoriel - flux de facturation

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

Cours Informatique 1. Monsieur SADOUNI Salheddine

TP : Gestion d une image au format PGM

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

Guide de prise en main de la solution NetExplorer

MODULE «Plateforme INSCRIPTIONS en ligne» MyOutDoorBox Mode opératoire

MODULE «Plateforme INSCRIPTIONS en ligne» MyOutDoorBox Mode opératoire

Structure fonctionnelle d un SGBD

FIDÉICOMMIS. Être en mesure de :

Utiliser le service de messagerie électronique de Google : gmail (1)

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Cours de Systèmes d Exploitation

Programmation système

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

Le traitement du temps

Conventions d écriture et outils de mise au point

1 TD 2 : Construction d'une chier Acrobat et envoi par

Introduction à l'informatique

B2i. LE B2i Brevet Informatique et Internet. Niveau : tous. 1 S'approprier un environnement informatique de travail. b2ico1.odt.

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

Fiche animateur : module écriture collaborative

Transcription:

UNIX / Synchronisation et Communication Le but de ce TP est d'étudier les mécanismes de base pour la synchronisation et communication entre processus sous UNIX. Toutefois, la complexité et la richesse des mécanismes mis en jeu, alliées aux différences importantes existant entre les grandes familles UNIX (BSD, ATT), font qu'il est difficile de traiter complètement ce domaine en quelques séances de travaux pratiques. Les signaux Un signal est une interruption logicielle informant un processus qu'un événement extérieur particulier ou anormal s'est produit dans son environnement. Par exemple, lors d'une division par zéro le signal floatting point exception est émis à l'adresse du processus ne sachant pas calculer, lorsque vous interrompez un processus en tapant au clavier Ctrl-C le signal SIGINT est envoyé à destination de celui-ci, lorsqu'un processus viole la mémoire le signal SIGSEGV lui est adressé, etc. Il existe de nombreux signaux (NSIG exactement) et tous sont identifiés par une constante symbolique. La liste de ces constantes ainsi que toutes les fonctions permettant de manipuler les signaux sont définies dans le fichier standard signal.h. A chaque signal est associé un événement extérieur, et un comportement prédéfini du processus recevant le signal. Toutefois, un signal peut être envoyé sans que l'événement correspondant ne se soit produit - la seule information véhiculée est alors le type du signal-, et de plus le comportement standard d'un processus face à un signal peut être modifié. Le tableau suivant présente quelques signaux, leur type, le comportement associé et le caractère modifiable ou non de ce comportement : Jean-Luc Damoiseaux / I.S.I.T.V.

Nom du signal Evénement associé Comportement associé Modifiable SIGINT frappe de CTRL-C terminaison du processus oui SIGQUIT frappe de CTRL \ terminaison du processus avec image mémoire (core) oui SIGFPE erreur arithmétique terminaison du processus oui SIGKILL signal de terminaison terminaison du processus oui SIGSEGV violation mémoire terminaison du processus avec image mémoire (core) oui SIGPIPE écriture dans un tube terminaison du processus oui sans lecteur SIGUSR terminaison du processus oui SIGUSR terminaison du processus oui SIGCHLD terminaison d'un fils signal ignoré oui SIGSTOP signal de suspension suspension du processus non SIGTSTP frappe de CTRL-Z suspension du processus oui SIGCONT signal de continuation reprise du processus non Envoi d'un signal L'envoi d'un signal d'un processus à un autre se fait au travers de la fonction kill dont le prototype est le suivant : int kill(int pid, int sig) Jean-Luc Damoiseaux / I.S.I.T.V.

où pid représente le numéro du processus destinataire, et sig le signal émis ; cette fonction renvoie 0 si elle s'est correctement déroulée et - sinon. Le processus émetteur et le processus receveur doivent en principe appartenir au même utilisateur. Réception d'un signal La prise en compte d'un signal par un processus se traduit par un comportement par défaut désigné symboliquement par la constante SIG_DFL, et définissant l'action à réaliser lors de la réception du signal. Ainsi, un processus recevant un signal pourra : - se terminer, - se terminer en engendrant une image mémoire (fichier core) qui plus tard sera analysée, - ignorer le signal, - s'interrompre, - reprendre son exécution. Toutefois, il est possible pour certains signaux (voir tableau précédent) de changer ce comportement par défaut. Ainsi, à la réception d'un signal, un processus pourra ignorer celuici (constante symbolique SIG_IGN), ou adopter un autre comportement. Dans ce cas, une fonction définie par l'utilisateur sera associée au signal, et lors de la réception du dit signal, le processus récepteur effectuera un appel à cette fonction, puis reprendra le cours de son exécution à l'endroit même où il l'avait quitté ; un signal permet donc de réaliser un appel de fonction alors qu'il n'a pas été explicitement programmer. La mise en place de ce mécanisme dynamique de déroutement est obtenue par la fonction signal dont le prototype est le suivant : void (*signal(int sig, void (*p_traitement)(int))) (int) où p_traitement sera initialisé soit avec l'une des constantes symboliques SIG_DFL et SIG_IGN, soit avec l'adresse de la fonction associée au traitement du signal sig. Le prototype de cette fonction est le suivant : void traitement(int sig) Une fois le signal capté et traité, le traitement associé au signal reste toujours en place (sauf sur les versions ATT d'unix où le comportement par défaut est réactivé). Jean-Luc Damoiseaux / I.S.I.T.V. 3

Attente d'un signal Enfin, la suspension d'un processus dans l'attente d'un signal est réalisé par la fonction pause dont le prototype est le suivant : int pause(void) à la délivrance du signal, le processus exécutera le traitement prévu. Exercice n : a) Ecrire un programme qui s'arrête après avoir capté 5 fois le signal SIGINT. b) Ecrire un programme qui ne tienne pas compte du signal SIGINT. c) Ecrire un programme qui affiche les nombres compris entre 0 et 0 au moyen de deux processus (le processus père affichera par exemple les nombres pairs, le fils les nombres impairs). Les tubes ordinaires Les tubes ordinaires (appelés également pipe ou conduit) sont des mécanismes de communication unidirectionnelle appartenant au système de fichiers d'unix. Un tube possède deux extrémités, l'une permettant d'écrire dedans, et l'autre permettant d'y lire. Un tube est un fichier UNIX sans nom, de taille limitée et fonctionnant en mode fifo. Enfin, seuls des processus parents peuvent utiliser un tube en commun. Creation et fermeture d'un tube La création d'un tube est réalisée par la fonction pipe (fichier standard unistd.h) dont le prototype est le suivant : int pipe(int acces[]) où le tableau acces contient au retour de la fonction les deux descripteurs du tube ; la valeur de retour de la fonction est 0 en cas de succès et - en cas d'échec. La fermeture d'un tube se fait par la fonction close sur l'un ou les descripteurs associés au tube. Afin d'éviter des graves problèmes d'interblocage, il est vivement conseillé de fermer tous les descripteurs de tube non utilisé par un processus. Jean-Luc Damoiseaux / I.S.I.T.V. 4

Lecture et écriture dans une tube L'écriture et la lecture dans un tube se font selon schéma suivant : acces[] Ecriture acces[0] Lecture Figure n : Principe de fonctionnement d'un tube La lecture dans un tube est possible grâce à la fonction read employée sur le descripteur en lecture (acces[0]) ; lorsque le tube est vide, si le nombre de descripteurs associés à l'écriture est nul, alors aucun caractère n'est lu (fin de fichier atteinte) et la fonction read renvoie 0, sinon la lecture est bloquante et le processus est mis en sommeil jusqu'à ce que le tube ne soit plus vide. L'écriture dans un tube est possible grâce à la fonction write employée sur le descripteur en écriture (acces[]) ; s'il n'existe pas de descripteur en lecture ouvert alors le processus reçoit le signal SIGPIPE, sinon l'écriture est bloquante et le retour de la fonction n'a lieu que lorsque tous les caractères ont été écrits. Exercice n : a) Ecrire, avec un tube, un programme qui évalue une expression arithmétique postfixée. b) Ecrire un programme créant deux processus communicant par un tube, le père lisant le contenu d'un fichier, le fils l'affichant. Redirection des entrées-sorties La redirection des entrées-sorties pour un processus ne peut se comprendre sans une étude préalable sur la gestion des fichiers sous Unix. Celle-ci est principalement réalisée par l'intermédiaire de trois tables (Figure n ) : - les tables de descripteurs ; chaque processus en possède une table de descripteur, et la manipulation d'un fichier se fera par un indice (un descripteur) dans cette table. A un descripteur correspond dans la table les attributs dynamiques du fichier (fermeture en cas de recouvrement, etc.), plus un pointeur sur la table des fichiers ouverts. Il est important de se rappeler que les trois premiers indices de cette table sont réservés pour l'entrée Jean-Luc Damoiseaux / I.S.I.T.V. 5

standard, la sortie standard et la sortie d'erreur standard. Enfin, un processus acquiert un descripteur soit par héritage (une recopie de la table des descripteurs de son père est réalisée à sa naissance), soit par l'utilisation des primitives open, pipe et dup, - la table des fichiers ouverts ; pour chaque fichier ouvert, on y trouve en autres choses le nombre de descripteurs associés, le mode d'ouverture, la position courante et un pointeur sur le i-noeud correspondant. Une entrée dans cette table est obtenue lors de l'utilisation des primitives open et pipe. Tables des descripteurs fichiers ouverts i-noeuds en mémo 0 compteurs de descripteurs mode pointeur sur offset ouverture i-noeud Figure n : Organisation du système de gestion de fichiers - la table des i-noeuds présents en mémoire ; un i-noeud (Figure n 3) est indice dans une table située sur le disque. Chaque entrée de cette table est un bloc de 64 octets contenant des informations comme le propriétaire du fichier, le nombre de liens, etc. type et protection nb de liens propriétaire groupe longueur date/heure dernièr écriture/lecture adresse adresse adresse adresse adresse3 Jean-Luc Damoiseaux / I.S.I.T.V. 6

Figure n 3 : Une entrée dans la table des i-noeuds Pour chaque i-noeud chargé en mémoire, en plus des informations présentes sur le disque, on trouve également dans cette table des informations comme le nombre d'ouvertures sur le fichier, le disque logique auquel appartient le i-noeud, etc. La primitive dup Un processus peut acquérir un nouveau descripteur synonyme d'un descripteur déjà existant grâce à la primitive dup définie dans le fichier unistd.h, et dont le prototype est le suivant : int dup(int desc) Cette primitive duplique un descripteur déjà existant et renvoie comme copie du descripteur, le plus petit descripteur disponible dans la table des descripteurs du processus demandeur (Figure n 4). fichiers ouverts fichiers ouver dup(d) d valeur de retour Descripteur Descripteur Figure n 4 : Effet de la primitive dup Exercice n 3 : a) Comment utiliser la primitive dup pour rediriger les entrées-sorties d'un processus? b) Ecrire un programme équivalent à la commande ps -e wc -l. Jean-Luc Damoiseaux / I.S.I.T.V. 7