M3101 Principes des systèmes d exploitation. Les tubes

Documents pareils
GESTION DES FICHIERS C/UNIX

Programmation système de commandes en C

Cours 6 : Tubes anonymes et nommés

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

Programmation système en C/C++

Les processus. Système L3, /39

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

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

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

Programmation système I Les entrées/sorties

Flux de données Lecture/Ecriture Fichiers

Introduction aux Systèmes et aux Réseaux

Cours Programmation Système

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Analyse de sécurité de logiciels système par typage statique

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

Cours d initiation à la programmation en C++ Johann Cuenin

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

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

Cours de Système : Gestion de Fichiers

Programmation impérative

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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

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

Programme Compte bancaire (code)

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

Cours 1: Java et les objets

TP : Gestion d une image au format PGM

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

Communication Interprocessus

Java Licence Professionnelle CISII,

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

Projet gestion d'objets dupliqué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)

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

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

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

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

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

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

Les fichiers. Chapitre 4

Synchro et Threads Java TM

Package Java.util Classe générique

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Architecture des ordinateurs

Introduction à la programmation concurrente

Cours de Systèmes d Exploitation

Le langage C. Séance n 4

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

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

Le prototype de la fonction main()

Introduction à l héritage en C++

Conventions d écriture et outils de mise au point

Simulation d un système de paiement par carte bancaire

Utilisation d objets : String et ArrayList

Programmation client-serveur sockets - RPC

ACTIVITÉ DE PROGRAMMATION

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

1 Lecture de fichiers

Corrigé des exercices sur les références

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Programmation système

Les structures de données. Rajae El Ouazzani

ETUDE DE CAS en UML : GESTION DES COMMANDES DE PIECES FABRIQUEES PAR LA SOCIETE C

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Arguments d un programme

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

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

Les chaînes de caractères

Techniques de stockage. Techniques de stockage, P. Rigaux p.1/43

Communication par sockets

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

Certificat Big Data - Master MAthématiques

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

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Premiers Pas en Programmation Objet : les Classes et les Objets

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

Développement Logiciel

OS Réseaux et Programmation Système - C5

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

Langage Java. Classe de première SI

Les arbres binaires de recherche

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

ASR3. Partie 4 Le système de fichier. Arnaud Clérentin, IUT d Amiens, département Informatique

SYSTÈME DE GESTION DE FICHIERS

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

TD/TP PAC - Programmation n 3

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

PROJET 1 : BASE DE DONNÉES REPARTIES

Architecture d un système d exploitation

Chapitre 10. Les interfaces Comparable et Comparator 1

Serveur d'archivage 2007 Installation et utilisation de la BD exist

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

Playing with ptrace() for fun and profit

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Java Licence Professionnelle CISII,

Transcription:

M Principes des systèmes d exploitation Les tubes IUT d Orsay DUT Informatique / 6

Les tubes Tube (pipe) un canal de communication entre les processus un flux d octets entre l entrée et la sortie accessible via deux descripteurs de fichier un tampon système de capacité limitée une donnée lue disparaît du tube anonyme passe du père au fils extrémité d écriture extrémité de lecture / 7

Créer un tube int pipe(int pd[]); Crée un nouveau tube et place les descripteurs dans pd pd[] pd[] l extrémité de lecture l extrémité d écriture Renvoie en cas de succès et en cas d erreur pd[] pd[] / 7

Créer un tube pd[] pd[] attributs d état position inœud int pd[]; pipe(pd); O_RDONLY O_WRONLY tube 6 ko descripteurs de fichiers descriptions de fichiers ouverts inœuds lecteurs: écrivains: / 7

Créer un tube pd[] pd[] attributs d état position inœud int pd[]; pipe(pd); fork(); pd[] pd[] O_RDONLY O_WRONLY tube descripteurs de fichiers descriptions de fichiers ouverts inœuds lecteurs: écrivains: / 7

Lecteurs et écrivains Les descripteurs d un tube sont hérités par les processus fils. lecteur tout processus qui possède un descripteur de lecture écrivain tout processus qui possède un descripteur d écriture Quand il n y a plus de lecteurs ni écrivains, le tube est détruit. 6 / 7

Lecteurs et écrivains pd[] attributs d état position inœud int pd[]; pipe(pd); fork(); : close(pd[]); pd[] pd[] O_RDONLY O_WRONLY tube : descripteurs de fichiers descriptions de fichiers ouverts inœuds lecteurs: écrivains: 7 / 7

Lecteurs et écrivains pd[] attributs d état position inœud int pd[]; pipe(pd); fork(); : close(pd[]); pd[] O_RDONLY O_WRONLY tube : close(pd[]); descripteurs de fichiers descriptions de fichiers ouverts inœuds lecteurs: écrivains: 8 / 7

Lire depuis un tube int read(pd[], const void *tampon, size_t nboct); Renvoie le nombre d octets lus ( nboct) ou en cas d erreur Si le tampon système du tube est vide read() se bloque jusqu à ce qu un écrivain y mette des données Si le tube est vide et il n y a plus de processus écrivains read() renvoie (end-of-file) 9 / 7

Écrire dans un tube int write(pd[], const void *tampon, size_t nboct); Renvoie le nombre d octets écrits ou en cas d erreur Si le tampon système du tube est plein ( nboct octets disponibles) write() se bloque jusqu à ce qu un lecteur décharge le tube S il n y a plus de processus lecteurs le processus est tué par SIGPIPE S il n y a plus de lecteurs et SIGPIPE est bloqué, ignoré ou capté write() renvoie / 7

Lecture et écriture pd[] attributs d état position inœud int pd[]; pipe(pd); fork(); : close(pd[]); write(pd[], buf,len); pd[] O_RDONLY O_WRONLY tube : close(pd[]); len descripteurs de fichiers descriptions de fichiers ouverts inœuds lecteurs: écrivains: / 7

Lecture et écriture pd[] attributs d état position inœud int pd[]; pipe(pd); fork(); : close(pd[]); write(pd[], buf,len); pd[] O_RDONLY O_WRONLY tube : close(pd[]); read(pd[], &c,); len- descripteurs de fichiers descriptions de fichiers ouverts inœuds lecteurs: écrivains: / 7

Dupliquer un descripteur de fichier int dup(int ancien_fd); trouve le plus petit descripteur nouveau_fd disponible fait nouveau_fd une copie de ancien_fd int dup(int ancien_fd, int nouveau_fd); ferme nouveau_fd s il est ouvert fait nouveau_fd une copie de ancien_fd Renvoient nouveau_fd ou en cas d erreur nouveau_fd et ancien_fd pointent sur la même description de fichier ouvert / 7

Dupliquer un descripteur de fichier sortie std. pd[] attributs d état position inœud int pd[]; pipe(pd); fork(); : close(pd[]); dup(pd[],); pd[] O_RDONLY O_WRONLY tube : close(pd[]); descripteurs de fichiers descriptions de fichiers ouverts inœuds lecteurs: écrivains: / 7

Dupliquer un descripteur de fichier sortie std. pd[] attributs d état position inœud int pd[]; pipe(pd); fork(); : close(pd[]); dup(pd[],); entrée std. pd[] O_RDONLY O_WRONLY tube : close(pd[]); dup(pd[],); descripteurs de fichiers descriptions de fichiers ouverts inœuds lecteurs: écrivains: / 7

Exécuter un programme int execl(const char *path, const char *arg,..., NULL); int execlp(const char *path, const char *arg,..., NULL); Exécute un fichier dans le processus courant path chemin vers l exécutable ou le nom de commande arg arg,... NULL paramètre (le nom de commande) autres paramètres fin de la liste des paramètres Ne retourne pas en cas du succès, renvoie en cas d échec Le code et les données sont remplacés par le nouveau programme Préserve les fichiers ouverts (dont les fichiers standards, les tubes, etc.) 6 / 7

Exemple : ls - wc -l int main() { int pd[]; pipe(pd); if (fork() == ) { // PRTIE GUCHE close(pd[]); // fermer l extrémité de lecture non-utilisée 6 dup(pd[], ); // dupliquer l extrémité d écriture en stdout 7 close(pd[]); // fermer la première extrémité d écriture 8 execl("/bin/ls", "ls", "-", NULL); // exécuter "ls -" 9 return ; // exec() ne retourne qu en cas d échec } if (fork() == ) { // PRTIE DROITE close(pd[]); // fermer l extrémité d écriture non-utilisée dup(pd[], ); // dupliquer l extrémité de lecture en stdin close(pd[]); // fermer la première extrémité de lecture execl("/usr/bin/wc", "wc", "-l", NULL); // exécuter "wc -l" 6 return ; // exec() ne retourne qu en cas d échec 7 } 8 close(pd[]); close(pd[]); // fermer les deux extrémités 9 wait(null); wait(null); // attendre la fin des fils return ; } 7 / 7