NFA003 : L appel système fork



Documents pareils
Cours Programmation Système

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

Les processus. Système L3, /39

Introduction aux Systèmes et aux Réseaux

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

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)

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

Chapitre 4 : Outils de communication centralisés entre processus

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

Programmation système en C/C++

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

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

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

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

Système et réseaux (SR1) Gestion des utilisateurs

Playing with ptrace() for fun and profit

OS Réseaux et Programmation Système - C5

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

Gestion des processus

Le prototype de la fonction main()

Architecture d un système d exploitation

Chapitre 2. Les processus. 2.1 Introduction. 2.2 les différents états d un processus

Simulation d un système de paiement par carte bancaire

Programmation système de commandes en C

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)

Java Licence Professionnelle CISII,

Corrigés des premiers exercices sur les classes

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

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

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

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

Les structures de données. Rajae El Ouazzani

Cours de Système : Gestion de Fichiers

Introduction au langage C

Problèmes liés à la concurrence

Projet gestion d'objets dupliqués

Programme Compte bancaire (code)

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

Introduction à la Programmation Parallèle: MPI

Corrigé des exercices sur les références

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

Systèmes d exploitation Gestion de processus

Premiers Pas en Programmation Objet : les Classes et les Objets

Unix : Programmation Système

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Communication Interprocessus

Programmation client-serveur sockets - RPC

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

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.

Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)

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

Algorithmique et Programmation, IMA

Structure d un programme


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

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

La Comptabilité UNIX System V Acctcom

DNS Server RPC Interface buffer overflow. Céline COLLUMEAU Nicolas BODIN

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Conventions d écriture et outils de mise au point

Les arbres binaires de recherche

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

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

Client windows Nagios Event Log

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

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

Temps Réel. Jérôme Pouiller Septembre 2011

Les algorithmes de base du graphisme

Programmation système I Les entrées/sorties

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

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

TP2 : tableaux dynamiques et listes chaînées

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

Les structures. Chapitre 3

Un ordonnanceur stupide

Utilisation d objets : String et ArrayList

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

Package Java.util Classe générique

Les fichiers. Chapitre 4

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Outils pour la pratique

Programmer en JAVA. par Tama

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

Utilitaires méconnus de StrataFrame

Cours de Systèmes d Exploitation

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

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

gestion des processus La gestion des processus

Introduction à la programmation concurrente

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

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

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

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

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

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

IFIPS 5 / Nouvelles Architectures Logicielles Projet : Bus de web services avec «moteur» BPEL

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

Transcription:

NFA003 : L appel système fork Amélie Lambert Sources : cours de NSY103 de Joëlle Delacroix 2013-2014 Amélie Lambert () NFA003 : L appel système fork 2013-2014 1 / 13

Création de processus Amélie Lambert () NFA003 : L appel système fork 2013-2014 2 / 13

Primitive de création de processus (1/6) #include <unistd.h> pid_t fork(void) La primitive fork() permet la création dynamique d un nouveau processus qui s exécute de manière concurrente avec le processus qui l a créé. Tout processus Unix/Linux hormis le processus 0 est crée à l aide de cette primitive. Le processus créateur (le père) par un appel à la primitive fork() crée un processus fils qui est une copie exacte de lui-même (code et données) (Exemple d utilisation : programmation d une application parallèle). Il est également possible de remplacer le code et les données du processus créé par ceux d un autre programme, via les primitives de recouvrement. Amélie Lambert () NFA003 : L appel système fork 2013-2014 3 / 13

Primitive de création de processus (2/6) MODE UTILISATEUR PERE (pid :12222) ret = fork(); MODE SYSTEME Exécution de l appel système fork(). Si les ressources noyau sont disponibles : 1 allouer une entrée de la table des processus au nouveau processus 2 allouer un pid unique au nouveau processus 3 dupliquer le contexte du processus parent (code, données, pile) 4 retourner le pid du processus crée à son père et 0 au processus fils Rappel : un processus est identifié par un numéro unique appelé pid Amélie Lambert () NFA003 : L appel système fork 2013-2014 4 / 13

Primitive de création de processus (3/6) MODE UTILISATEUR MODE SYSTEME PERE (pid :12222) ret = fork(); // ret = 12223 FILS (pid :12223) ret = fork(); // ret = 0 Lors de l exécution de l appel système fork(), si les ressources noyau sont disponibles, il est retourné : le pid du processus crée au processus père (ici 12223) ; la valeur 0 au processus fils. Amélie Lambert () NFA003 : L appel système fork 2013-2014 5 / 13

Primitive de création de processus (4/6) Le mécanisme du copy on write (copie sur écriture) : Lors de sa création, le fils partage avec son père : le segment de code ; le segment de données et la pile sont également partagés et mis en accès lecture seule. Lors d un accès en écriture par l un des deux processus, le segment de données ou la pile sont effectivement dupliqués. Amélie Lambert () NFA003 : L appel système fork 2013-2014 6 / 13

Primitive de création de processus (5/6) PERE (pid :12222) ret = fork(); // ret = 12223 FILS (pid :12223) ret = fork(); //ret = 0 Chaque processus père et fils reprend son exécution après le fork(). Le code et les données étant strictement identiques, il est nécessaire de disposer d un mécanisme pour différencier le comportement des deux processus après le fork() On utilise pour cela le code retour du fork() qui est différent chez le fils (toujours 0) et le père (pid du fils crée) Amélie Lambert () NFA003 : L appel système fork 2013-2014 7 / 13

Primitive de création de processus (6/6) PERE (pid :12222) ret= fork(); if (ret == 0) printf(" je suis le fils ") else { printf ("je suis le père"); printf ("pid de mon fils %d", ret) Pid du fils : 12223 getpid : 12222 getppid :shell FILS (pid :12223) ret= fork(); if (ret == 0) printf(" je suis le fils ") else { printf ("je suis le père"); printf ("pid de mon fils, %d", ret) getpid : 12223 getppid : 12222 Le processus fils hérite de tous les attributs de son père sauf son pid. Les exécutions des processus père et fils peuvent s enchevêtrer en fonction de la politique d ordonnancement. Amélie Lambert () NFA003 : L appel système fork 2013-2014 8 / 13

Synchronisation père / fils et notion de primitive de recouvrement Amélie Lambert () NFA003 : L appel système fork 2013-2014 9 / 13

Synchronisation père / fils (1/3) #include <stdlib.h> void exit (int valeur); pid_t wait (int status); un appel à la primitive exit() provoque la terminaison du processus effectuant l appel avec un code retour valeur. (Par défaut, le franchissement de la dernière d un programme C tient lieu d exit()) un processus qui se termine passe dans l état Zombie et reste dans cet état tant que son père n a pas pris en compte sa terminaison. Le processus père "récupère" la terminaison de ses fils par un appel à la primitive wait () Amélie Lambert () NFA003 : L appel système fork 2013-2014 10 / 13

Synchronisation père / fils (2/3) PERE (pid :12222) ret= fork(); if (ret == 0) { printf(" je suis le fils "); exit(); else { printf ("je suis le père"); printf ("pid de mon fils,%d",ret); wait(); FILS (pid :12223) pid_t ret; ret= fork(); if (ret== 0) { printf(" je suis le fils "); exit (); else { printf ("je suis le père"); printf ("pid de mon fils,%d",ret); wait(); Amélie Lambert () NFA003 : L appel système fork 2013-2014 11 / 13

Synchronisation père / fils (3/3) Lorsqu un processus se termine (exit()), le système démantèle tout son contexte, sauf l entrée de la table des processus le concernant. Le processus père, par un wait(), "récupère" la mort de son fils, cumule les statistiques de celui-ci avec les siennes et détruit l entrée de la table des processus concernant son fils défunt. Le processus fils disparaît complètement. Un processus fils défunt reste zombie jusqu à ce que son père ait pris connaissance de sa mort Un processus fils orphelin, suite au décès de son père (le processus père s est terminé avant son fils) est toujours adopté par le processus 1 (init). Amélie Lambert () NFA003 : L appel système fork 2013-2014 12 / 13

Primitive de recouvrement Il s agit d un ensemble de primitives (famille exec() permettant à un processus de charger en mémoire, un nouveau code exécutable (execl, execlp, execle, execv, execvp, execve). pid_t pid ; pid= fork(); if (pid == 0) { printf(" je suis le fils "); execl("/home/calcul","calcul","3","4", NULL); // execution du programme calcul avec les // pramètres 3 et 4 else { printf ("je suis le père"); printf ("pid de mon fils, %d", pid); wait(); 1 Création d un processus fils par duplication du code et données du père ; 2 Le processus fils recouvre le code et les données hérités du père par ceux du programme calcul. Le père transmet des données de son environnement vers son fils par les paramètres de l exec(...) 3 Le père attend son fils Amélie Lambert () NFA003 : L appel système fork 2013-2014 13 / 13