Introduction aux Systèmes et aux Réseaux

Documents pareils
Cours Programmation Système

Programmation système en C/C++

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

Introduction aux Systèmes et aux Réseaux, Master 2 CCI

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

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

Cours A7 : Temps Réel

Le système GNU/Linux IUP NTIC /11/05

Les processus. Système L3, /39

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

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

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

DAns un système multi-utilisateurs à temps partagé, plusieurs processus

1 Mesure de la performance d un système temps réel : la gigue

Cours 6 : Tubes anonymes et nommés

Cours de Systèmes d Exploitation

REALISATION d'un. ORDONNANCEUR à ECHEANCES

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

Programmation système

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

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

Programmation système de commandes en C

gestion des processus La gestion des processus

GESTION DES FICHIERS C/UNIX

Chapitre 4 : Outils de communication centralisés entre processus

Systèmes d exploitation Gestion de processus

Cours de Système : Gestion de Fichiers

Synchro et Threads Java TM

Linux embarqué Retour d expérience et temps réel. Denis Coupvent-Desgraviers

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Introduction à la Programmation Parallèle: MPI

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

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

Gestion des processus

Introduction à la programmation concurrente

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

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)

Systèmes d exploitation

Un ordonnanceur stupide

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

CH.3 SYSTÈMES D'EXPLOITATION

DUT Informatique Module Système S4 C Département Informatique 2009 / Travaux Pratiques n o 5 : Sockets Stream

Programmation impérative

Virtualisation logicielle De la machine réelle à la machine virtuelle abstraite

Le langage C. Séance n 4

Programmation système I Les entrées/sorties

Formation Technicien Supérieur de Support en Informatique T2SI. Le module LINUX. Session J04 Version 01

L informatique en BCPST

Métriques de performance pour les algorithmes et programmes parallèles

Séance n o 5 : Alternatives, gestion des utilisateurs et des processus

Informatique industrielle A Systèmes temps-réel J.F.Peyre. Partie I : Introduction

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

SYSTÈME DE GESTION DE FICHIERS

Partie 7 : Gestion de la mémoire

Initiation au HPC - Généralités

Algorithmique et Programmation, IMA

Unix/Linux I. 1 ere année DUT. Université marne la vallée

Tutorial Terminal Server sous

Support de cours système d exploitation

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Licence Sciences et Technologies Examen janvier 2010

Simulation d un système de paiement par carte bancaire

Playing with ptrace() for fun and profit

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

INTRODUCTION À LA PROGRAMMATION CONCURRENTE

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

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

Architecture d un système d exploitation

Le prototype de la fonction main()

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

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)

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

Manuel de System Monitor

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

Configuration requise

Projet gestion d'objets dupliqués

On appelle variable condition une var qui peut être testée et

Ordonnancement temps réel

Communication Interprocessus

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

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

Annexe 6. Notions d ordonnancement.

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

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

Les structures de données. Rajae El Ouazzani

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

Concept de machine virtuelle

Introduction aux systèmes temps réel. Iulian Ober IRIT

Module : Informatique Générale 1. Les commandes MS-DOS

INITIATION AU LANGAGE JAVA

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

TP1 : Initiation à l algorithmique (1 séance)

Windows XP niveau 2. D. Hourquin, Médiapôle St Ouen l'aumône

Outils pour la pratique

Programmation parallèle et distribuée

TP1 - Prise en main de l environnement Unix.

TP 1 Prise en main de l environnement Unix

Problèmes liés à la concurrence

Transcription:

Introduction aux Systèmes et aux Réseaux Cours 5 Processus D après un cours de Julien Forget (univ Lille1) Laure Gonnord http://laure.gonnord.org/pro/teaching/ Laure.Gonnord@univ-lyon1.fr Master CCI - Université Lyon 1 - FST

Plan 1 Notions de base 2 Gestion Système des processus Ordonnancement Communication et synchronisation inter-processus Les interruptions 3 Processus, programmation C Utilitaires de gestion de processus Création d un nouveau processus : Fork Recouvrement d un processus : Exec Communication par tuyau : Pipe Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 2 / 70

Plan Les processus Objectif : Connaître les caractéristiques système d un processus. Programmation C de processus. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 3 / 70

Notions de base 1 Notions de base 2 Gestion Système des processus 3 Processus, programmation C Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 4 / 70

Notions de base Programme et processus Définition Un processus est un programme en cours d exécution. Chaque exécution d un programme (éventuellement plusieurs fois le même) donne lieu à un processus différent ; A tout instant, un processeur exécute au plus un processus ; Dans un OS multi-tâches, le système alterne entre l exécution de plusieurs processus ; Seuls les systèmes multi-cœur ou multi-processeur exécutent réellement plusieurs processus en même temps (un par cœur/processeur) ; Plus généralement, les processus partagent l accès à différentes ressources : processeur mais aussi mémoire et périphériques. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 5 / 70

Notions de base Propriétés d un processus A un instant donné, un processus est caractérisé par de nombreuses informations, dont : Son état : exécution, suspendu, etc. ; Son identificateur ; Son compteur ordinal : indique la prochaine instruction à exécuter ; Sa pile d exécution : mémorise l empilement des appels de fonction ; Ses données en mémoire ; Toutes autres informations utiles à son exécution (E/S, fichiers ouverts,... ) Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 6 / 70

Notions de base Création de processus En Unix : Au lancement du système, un unique processus ; L appel système fork crée un nouveau processus ; Le processus père et le processus fils s exécutent en parallèle ; Le père et le fils peuvent à nouveau effectuer un fork ; Hiérarchie arborescente de processus. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 7 / 70

Notions de base Commande pstree Visualiser l arborescence des processus : pstree init --- NetworkManager - - -2*[ dhclient ] -3*[{ NetworkManager }]... - gnome - terminal --- bash --- emacs - more - pstree Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 8 / 70

Notions de base Mode d exécution Deux modes d exécution d un processus : Mode noyau : accès sans restriction (manipulation de la mémoire, dialogue avec les contrôleurs de périphériques,... ) Mode utilisateur : accès restreint, certaines instructions sont interdites (pas d accès direct aux périphériques). Il peut être interrompu par d autres processus. Les appels systèmes permettent à un processus en mode utilisateur d accéder (temporairement) à des fonctions nécessitant le mode noyau. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 9 / 70

Notions de base Identificateurs d un processus Plusieurs identificateurs sont associés à un processus (UNIX) : Numéro de processus (pid) ; Numéro du processus père (ppid) ; Identificateurs d utilisateur, et de groupe,... Possibilité de connaître ces informations dynamiquement via des appels systèmes. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 10 / 70

Notions de base Evolution de l état au cours de l exécution Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 11 / 70

Notions de base Etat d un processus non créé : le code n est pas en mémoire ; créé : le code est en mémoire, en attente d activation ; éligible : l activation a été demandée. En attente de l accès au processeur ; élu : le processus s exécute ; suspendu : une ressource est indisponible (allouée à un autre processus). Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 12 / 70

Notions de base Préemption Le système interrompt l exécution d un processus pour en exécuter un autre (ressource indisponible, processus prioritaire, etc.) ; Il sauve le contexte du processus et le remplace par celui d un autre ; Il rétablira plus tard le contexte du processus préempté. Contexte d un processus : valeur des registres, des variables, où on en est dans son exécution... Une préemption prend du temps : le temps de commutation Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 13 / 70

Notions de base Classification des systèmes Gestion des processus mono-tâche : CPU dédié à un processus ; multi-tâche : CPU partagé entre les processus ; multi-tâche préemptif : possibilité de suspendre puis rétablir un processus en cours d exécution. Gestion des utilisateurs mono-utilisateur : pas de cohabitation entre utilisateurs ; multi-utilisateur : cohabitation possible. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 14 / 70

Notions de base Exemples de système d exploitation MS-DOS : mono-utilisateur, mono-tâche ; Windows : mono-utilisateur, multi-tâche ; WinNT : mono-utilisateur, multi-tâche préemptif ; UNIX : multi-utilisateur, multi-tâche préemptif. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 15 / 70

Notions de base Visualisation (statique) des processus 1/2 Sous UNIX : l information sur les processus en cours peut être obtenue par : ps [options] Attention les options sont de deux types (bsd/gnu). Quelques exemples : ps -ef : every,full. ps -eo pid,ppid,tt,user,fname grep laure Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 16 / 70

Notions de base Visualisation (statique) des processus 2/2 laure@sorlin : ~ $ ps PID TTY TIME CMD 18220 pts /13 00:00:00 bash 18270 pts /13 00:00:00 ps laure@sorlin : ~ : ps ef UID PID PPID C STIME TTY TIME CMD r o o t 1 0 0 07:59? 00:00:00 / sbin / i n i t r o o t 2 0 0 07:59? 00:00:00 [ kthreadd ] r o o t 3 2 0 07:59? 00:00:00 [ k s o f t i r q d / 0 ]... l a u r e 19717 1909 0 10:34? 00:00:00 evince... l a u r e 19856 3014 0 10:34 pts /14 00:00:00 bash l a u r e 20093 5867 3 10:35? 00:00:01 / usr / l i b / chromium browser / chro l a u r e 20238 19856 0 10:36 pts /14 00:00:00 ps ef Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 17 / 70

Notions de base Visualisation des processus Sous UNIX : visualisation dynamique des processus : top [options] Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 18 / 70

Notions de base Interruption des processus Sous UNIX : kill [numéro_de_signal] numéro_de_processus kill -l donne l ensemble des signaux disponibles exemple de signaux : SIGHUP (1) : émis à tous les processus associés à un terminal lorsque celui-ci se déconnecte SIGINT (2) : émis à tous les processus associés à un terminal lorsque <ctrl + C > est tapé SIGKILL (9) : tue un processus quel que soit son état. C est l arme absolue. SIGTERM (15) : signal de terminaison normale d un processus Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 19 / 70

Notions de base Lancement en arrière plan Il est possible de lancer une commande sans que le shell courant en attende la terminaison : commande & Elle ne peut plus lire au clavier ; Les sorties standards sont toujours associées, par défaut, au terminal ; Elles ne sont plus interruptibles à partir du clavier (ctrl-c par exemple). Connaître les processus lancés en arrière plan (pour un shell donné) : jobs Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 20 / 70

Notions de base Changement d état d un processus Sous UNIX (%n est le numéro obtenu par jobs) Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 21 / 70

Notions de base Démo Les PID seront récupérés avec la commande ps -ef lancée dans un autre terminal. Lancement du logiciel eog et terminaison avec CTRL-c ou kill -SIGINT. Lancement du logiciel eog en arrière plan. CTRL-c ne permet pas de terminer. kill -SIGINT le peut (ou kill sans option (SIGTERM). Lancement du logiciel eog puis suspendu (CTRL-z) puis en arrière plan (bg), puis suspendu avec kill -SIGSTOP, puis fg. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 22 / 70

Gestion Système des processus 1 Notions de base 2 Gestion Système des processus Ordonnancement Communication et synchronisation inter-processus Les interruptions 3 Processus, programmation C Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 23 / 70

Gestion Système des processus Problématiques de la gestion de processus Difficulté principale : gestion de l accès concurrent à diverses ressources : Accès au processeur : ordonnancement ; Lecture/écriture de données : Assurer la cohérence des données ; Gérer les synchronisations lecteur/écrivain ; Eviter les blocages. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 24 / 70

Gestion Système des processus Ordonnancement 1 Notions de base 2 Gestion Système des processus Ordonnancement Communication et synchronisation inter-processus Les interruptions 3 Processus, programmation C Utilitaires de gestion de processus Création d un nouveau processus : Fork Recouvrement d un processus : Exec Communication par tuyau : Pipe Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 25 / 70

Gestion Système des processus Ordonnancement Définition L ordonnancement (scheduling) est une fonction fondamentale d un système d exploitation ; A la base de la programmation multi-tâche : Plusieurs processus en mémoire en même temps ; Assignation du processeur à un processus en fonction de certains critères ; Objectif = optimiser l utilisation concurrente du processeur. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 26 / 70

Gestion Système des processus Ordonnancement Ordonnanceur vs dispatcher L ordonnanceur est responsable de l organisation des file d attente des tâches éligibles ; Le dispatcher réalise l élection d un processus et le changement de contexte associé. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 27 / 70

Gestion Système des processus Ordonnancement Décisions de l ordonnanceur Les décisions de l ordonnanceur peuvent avoir lieu dans les circonstances suivantes : Quand un processus passe de l état "élu" à "suspendu" (attente de disponibilité d une ressource) ; Quand un processus passe de l état "élu" à l état "éligible" (à cause d une interruption) ; Quand un processus passe de l état "suspendu" à l état "éligible" (libération d une ressource) ; Quand un processus se termine. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 28 / 70

Gestion Système des processus Ordonnancement Pour aller plus loin Différents algorithmes (FIFS, tourniquet),.... (voir la littérature). http://fr.wikipedia.org/wiki/ordonnancement_dans_les_ syst%c3%a8mes_d'exploitation Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 29 / 70

Gestion Système des processus Communication et synchronisation 1 Notions de base 2 Gestion Système des processus Ordonnancement Communication et synchronisation inter-processus Les interruptions 3 Processus, programmation C Utilitaires de gestion de processus Création d un nouveau processus : Fork Recouvrement d un processus : Exec Communication par tuyau : Pipe Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 30 / 70

Gestion Système des processus Communication et synchronisation Processus communicants Les processus concurrents d un système d exploitation peuvent être : Indépendants : les traitements qu ils effectuent ne sont pas liés ; Communicants : les processus ont besoin d échanger des données. Plusieurs raisons pour la communication : Le partage d information ; L accélération du calcul ; La modularité (séparation d un programme complexe en plusieurs processus). La communication peut se faire : Via une zone mémoire commune ; Par échange de messages ; Par fichiers. Nécessite de synchroniser les processus communicants. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 31 / 70

Gestion Système des processus Communication et synchronisation Le problème des accès concurrents Les processus communicants partagent des données assurer la cohérence des données. Exemple : out indique le fichier à imprimer ; in indique où mettre en attente un fichier à imprimer ; Problème : si B interrompt A juste quand il lit la valeur de in. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 32 / 70

Gestion Système des processus Communication et synchronisation Exclusion mutuelle Il faut interdire l accès simultané à une ressource partagée ; On parle d exclusion mutuelle entre processus concurrents ; L exclusion mutuelle ne concerne qu une portion de l exécution des processus : les sections critiques ; Il faut assurer que : On n a jamais deux processus simultanément en section critique ; La solution ne dépend pas de la vitesse relative des processus ; Un processus suspendu hors section critique ne bloque pas les autres ; Tout processus finit par rentrer en section critique. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 33 / 70

Gestion Système des processus Communication et synchronisation Plusieurs solutions à ce problème Exclusion par verrou Exclusion par alternance. Sémaphores Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 34 / 70

Gestion Système des processus Communication et synchronisation Exclusion par sémaphore Exemple : 3 tâches qui désirent utiliser une ressource commune (une imprimante) ; Les processus à synchroniser partagent un sémaphore ; Sémaphore binaire : le compteur vaut 0 ou 1 ressource unique, pas d accès simultané. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 35 / 70

Gestion Système des processus Communication et synchronisation Communication par messages Dans le cas de systèmes distribués (mémoires distinctes) : On doit synchroniser des processus distants les uns des autres ; On utilise un système d échange de message : Envoi du message : sendmsg(destinataire, message) ; Réception du message : rcvmsg(expéditeur, message). Principaux modes d échange de messages possibles : Boîte aux lettres ; Rendez-vous. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 36 / 70

Gestion Système des processus Communication et synchronisation Echange de messages : problèmes classiques Réseau imparfait possibilité de perte de message ; Côté producteur : s assurer que le message est bien arrivé (acquittement) ; Côté consommateur, si aucune donnée n arrive : Continuer avec une donnée ancienne? Attendre l arrivée d une nouvelle donnée? Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 37 / 70

Gestion Système des processus Les interruptions 1 Notions de base 2 Gestion Système des processus Ordonnancement Communication et synchronisation inter-processus Les interruptions 3 Processus, programmation C Utilitaires de gestion de processus Création d un nouveau processus : Fork Recouvrement d un processus : Exec Communication par tuyau : Pipe Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 38 / 70

Gestion Système des processus Les interruptions Interruption Cas particulier de communication : Une interruption est un signal provenant de l extérieur du processus-programme (émis par l OS) et non synchronisé avec le processus en cours ; Le processus en cours d exécution est suspendu dans son activité ; On exécute un programme prédéfini associé au traitement de cette interruption ; Les causes d interruptions sont multiples (cf http: //en.wikipedia.org/wiki/interrupt_descriptor_table (exemple, div by 0) et il faut prévoir leur traitement. Un exemple en TP. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 39 / 70

Gestion Système des processus Les interruptions À retenir de cette partie Qu est-ce qu un ordonnanceur? (partie de l OS) Quels sont les problèmes qui se posent lorsque deux processus communiquent (programmation système)? Qu est-ce qu une interruption? Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 40 / 70

Processus, programmation C 1 Notions de base 2 Gestion Système des processus 3 Processus, programmation C Utilitaires de gestion de processus Création d un nouveau processus : Fork Recouvrement d un processus : Exec Communication par tuyau : Pipe Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 41 / 70

Processus, programmation C Arborescence de processus / Rappel Au lancement du système, un unique processus ; Création d un nouveau processus : Duplication = création d un fils identique au père (fork) ; Le fils a les mêmes propriétés que le père (code, données, pile, droits,...) Recouvrement du code du fils par le programme voulu (exec) ; Eventuellement, communication entre père et fils (pipe). Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 42 / 70

Processus, programmation C Utilitaires 1 Notions de base 2 Gestion Système des processus Ordonnancement Communication et synchronisation inter-processus Les interruptions 3 Processus, programmation C Utilitaires de gestion de processus Création d un nouveau processus : Fork Recouvrement d un processus : Exec Communication par tuyau : Pipe Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 43 / 70

Processus, programmation C Utilitaires Accès aux propriétés du processus #include <sys/types.h> #include <unistd.h> pid_t getpid(void) : l identifiant du processus ; pid_t getppid(void) : l identifiant du père du processus ; char *getcwd(char *buf, size_t size) : le répertoire de travail ; int chdir(const char *path) : changer le répertoire de travail ;... Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 44 / 70

Processus, programmation C Utilitaires Divers unsigned int sleep(unsigned int seconds) : endormir le processus pour quelques secondes ; void exit(int status) : termine le processus + renvoie un code de retour. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 45 / 70

Processus, programmation C Fork 1 Notions de base 2 Gestion Système des processus Ordonnancement Communication et synchronisation inter-processus Les interruptions 3 Processus, programmation C Utilitaires de gestion de processus Création d un nouveau processus : Fork Recouvrement d un processus : Exec Communication par tuyau : Pipe Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 46 / 70

Processus, programmation C Fork Primitive # include < unistd.h > pid_t fork ( void ); Crée dynamiquement un processus ; Processus qui exécute le fork = père du processus créé (fils) ; Fils = copie exacte du père ; Exécution concurrente du père et du fils (entrelacement possible des instructions). Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 47 / 70

Processus, programmation C Fork Schéma d exécution (1) père fork() fils Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 48 / 70

Processus, programmation C Fork Propriétés du fils Le fils hérite de son père : le même code ; une copie des données (variables et valeurs) ; le même environnement (e.g. répertoire de travail) ; la même priorité ; les mêmes droits ; les descripteurs de fichiers ; la gestion des signaux. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 49 / 70

Processus, programmation C Fork Exemple (création) # i n c l u d e < s t d i o. h> # i n c l u d e < u n i s t d. h> i n t main ( ) { p r i n t f ( " 1 proc %d, pere %d \ n ", g e t p i d ( ), getppid ( ) ) ; f o r k ( ) ; / 2 processus / p r i n t f ( " 2 proc %d, pere %d \ n ", g e t p i d ( ), getppid ( ) ) ; f o r k ( ) ; / 4 processus! / p r i n t f ( " 3 proc %d, pere %d \ n ", g e t p i d ( ), getppid ( ) ) ; } Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 50 / 70

Processus, programmation C Fork Schéma d exécution de l exemple laure@sorlin : ~ /... / Cours / $. / f o r k 1 1 proc 990, pere 11539 2 proc 990, pere 11539 3 proc 990, pere 11539 2 proc 991, pere 990 3 proc 992, pere 990 3 proc 991, pere 1909 3 proc 993, pere 991 laure@sorlin : ~ /... / Cours / $ 990 fork() fork() 991 992 fork() fin 993 fin fin fin Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 51 / 70

Processus, programmation C Fork Exemple fork1-3/3 Sur l exemple précédent, bien observer les dates d impression. D autres exécutions sont possibles, lesquelles? Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 52 / 70

Processus, programmation C Fork Terminaison d un processus Les processus terminent lorsqu ils arrivent à la fin de leur code. Dans l exemple précédent, le processus de pid 990 termine avant que le processus 991 n exécute son printf(3...), le père de 991 est alors le processus init (ou init-user). Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 53 / 70

Processus, programmation C Fork Distinguer père et fils Grâce à la valeur de retour du fork : Le PID du fils est retourné au père ; 0 est retourné au fils ; -1 est retourné au père si erreur. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 54 / 70

Processus, programmation C Fork Exemple (distinction père/fils) # include <sys / types. h> / programme creerproc /... i n t main ( ) { p i d _ t n ; n= f o r k ( ) ; i f ( n == 1) { p e r r o r ( " c r e a t i o n de processus " ) ; e x i t ( 1 ) ; } i f ( n == 0) { / seul l e processus f i l s execute c eci / p r i n t f ( " dans f i l s n = %d \ n ", n ) ; p r i n t f ( " PID f i l s %d \ n ", g e t p i d ( ) ) ; } else { seul l e processus pere execute ceci / p r i n t f ( " dans pere n = %d \ n ", n ) ; p r i n t f ( " PID pere %d \ n ", g e t p i d ( ) ) ; p r i n t f ( " f i n proc pere \ n " ) ; } e x i t ( 0 ) ; } Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 55 / 70

Processus, programmation C Fork Exemple (distinction père/fils) (2) laure@sorlin : ~ /.. / Cours$ dans pere n = 2577 PID pere 2576 f i n proc pere dans f i l s n = 0 PID f i l s 2577 laure@sorlin : ~ /.. / Cours$. / creeproc Ici (dans cette exécution) le père se termine avant le fils ; Le fils est alors adopté par le processus init (PID 1) ou init-user. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 56 / 70

Processus, programmation C Fork Synchronisation # include <sys / types.h > # include <sys / wait.h > pid_t wait (int *status) Suspend le processus jusqu à ce qu un de ses fils termine ; Valeur de retour : -1 si pas de fils ; Le PID du fils terminé sinon. pid_t waitpid(pid_t pid, int *status, int opts) Attend le fils de PID pid. status décrit l état de terminaison du fils. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 57 / 70

Processus, programmation C Fork Exemple (synchronisation) void main ( ) / sync1. c / { i f ( f o r k ( ) == 0) { p r i n t f ( " f i l s PID = %d \ n ", g e t p i d ( ) ) ; e x i t ( 3 ) ; } else { p i d _ t m; i n t n ; m = wait (&n ) ; p r i n t f ( " f i n proc %d avec code %d \ n ", m, n ) ; } } laure@sorlin : ~ /.. / Cours / $. / sync1 f i l s PID = 2689 f i n proc 2689 avec code 768 laure@sorlin : ~ /.. / Cours / $ Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 58 / 70

Processus, programmation C Fork Exemple : synchronisation (2) main ( ) / sync2. c / { i f ( f o r k ( ) == 0) { p r i n t f ( " PID f i l s = %d \ n ", g e t p i d ( ) ) ; for ( ; ; ) ; / on va t e r m i n e r ce proc par un k i l l / } else { i n t n ; p i d _ t m ; m = wait (&n ) ; p r i n t f ( " f i n proc %d avec code %d \ n ", m, n ) ; } } Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 59 / 70

Processus, programmation C Exec 1 Notions de base 2 Gestion Système des processus Ordonnancement Communication et synchronisation inter-processus Les interruptions 3 Processus, programmation C Utilitaires de gestion de processus Création d un nouveau processus : Fork Recouvrement d un processus : Exec Communication par tuyau : Pipe Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 60 / 70

Processus, programmation C Exec Primitives # i n c l u d e < u n i s t d. h> i n t execl ( const char path, const char arg,... ) ; i n t execlp ( const char f i l e, const char arg,... ) ;... Exécute un nouveau programme ; Ce programme recouvre l ancien (pas de processus créé) ; Conservation des propriétés système : PID, PPID, priorité ; descripteurs de fichiers ;... Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 61 / 70

Processus, programmation C Exec Un exemple simple i n t main ( ) / my_ls. c / { i f ( execlp ( " l s ", " l s ", " l ", NULL) == 1) { p e r r o r ( " echec execlp \ n " ) ; e x i t ( 1 ) ; } p r i n t f ( " c e t t e l i g n e ne sera jamais a f f i c h e e \ n " ) ; e x i t ( 0 ) ; } Liste des arguments, comme argc/argv. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 62 / 70

Processus, programmation C Exec Shell simple Schéma simplifié d un Shell : tant que vrai faire lire ( commande ) Si ( fork () ==0) exec ( commande ) Sinon wait ( -1) fin_ tq Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 63 / 70

Processus, programmation C Exec Conclusion Le langage C fournit des primitives pour : Créer, inspecter des processus Exécuter des commandes système. Ce que l on n a pas vu : Comment faire les pipe (tubes, tuyaux) en C (dup,pipe) La notion de processus léger (thread) : partage d une même zone de mémoire virtuelle, et son utilisation en C. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 64 / 70

Processus, programmation C Pipe 1 Notions de base 2 Gestion Système des processus Ordonnancement Communication et synchronisation inter-processus Les interruptions 3 Processus, programmation C Utilitaires de gestion de processus Création d un nouveau processus : Fork Recouvrement d un processus : Exec Communication par tuyau : Pipe Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 65 / 70

Processus, programmation C Pipe Duplication de descripteur # include < unistd.h > int dup ( int oldfd ); int dup2 ( int oldfd, int newfd ); Duplique oldfd ; dup retourne la plus petite valeur possible ; dup2 : ferme newfd ; copie oldfd vers newfd ; Retourne -1 si échec ; Utilisation : redirection d E/S standard. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 66 / 70

Processus, programmation C Pipe Exemple main ( ) { i n t desc ; i f ( ( desc = c r e a t ( " e r r e u r. t x t ", 0666) ) == 1) { p e r r o r ( " c r e a t i o n f i c h i e r e r r e u r impossible " ) ; e x i t ( 1 ) ; } / r e d i r e c t i o n de l a s o r t i e e r r e u r standard / close ( 2 ) ; dup ( desc ) ; f p r i n t f ( s t d e r r, " message d e r r e u r r e d i r i g e dans e r r e u r. t x t \ n " ) ; } Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 67 / 70

Processus, programmation C Pipe Communication par FIFO (file/tube/pipe) Communication typique 1 producteur 1 consommateur ; Taille limitée ; On écrit d un côté......et on lit de l autre (dans le même ordre que l écriture) ; Le système bloque : La lecture si tube vide ; L écriture si tube plein. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 68 / 70

Processus, programmation C Pipe Tubes en POSIX # include < unistd.h > int pipe ( int pipefd [2]) ; Tube = 1 fichier, mais pas de référence dans le système ; On lit/écrit avec les primitives classiques sur les fichiers ; Tube = 2 descripteurs (sur le même fichier) : fd[0] pour l écriture ; fd[1] pour la lecture. Retourne 0 si ok, -1 si erreur (ex : trop de descripteurs ouverts) ; S utilise typiquement avec fork (communication père fils) ; Il faut systématiquement fermer les descripteurs de tubes non utilisés Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 69 / 70

Processus, programmation C Pipe Exemple main ( ) { i n t tube [ 2 ] ; i n t i, pid, r e t ; i f ( pipe ( tube ) <0) { p e r r o r ( " e r r e u r ouverture pipe " ) ; e x i t ( 1 ) ; } i f ( ( pid= f o r k ( ) ) <0) { p e r r o r ( " e r r e u r f o r k " ) ; e x i t ( 1 ) ; } i f ( pid! = 0 ) { close ( tube [ 0 ] ) ; / pere ne l i t pas ds l e tube / for ( i =1; i <=1000 ; i ++) w r i t e ( tube [ 1 ], &i, sizeof ( i n t ) ) ; close ( tube [ 1 ] ) ; wait (& r e t ) ; } else { close ( tube [ 1 ] ) ; / f i l s n e c r i t pas ds tube / while ( read ( tube [ 0 ], & i, sizeof ( i n t ) ) ==sizeof ( i n t ) ) p r i n t f ( "%d ", i ) ; p r i n t f ( " \ n " ) ; close ( tube [ 0 ] ) ; } } Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 5 : Processus 2014 70 / 70