Architecture des Ordinateurs et Systèmes d Exploitation

Documents pareils
Programmation système en C/C++

Introduction aux Systèmes et aux Réseaux

Cours Programmation Système

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

Cours 6 : Tubes anonymes et nommés

Programmation système

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

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)

Le prototype de la fonction main()

Les processus. Système L3, /39

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

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

Communication Interprocessus

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)

Le traitement du temps

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

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

Programmation système de commandes en C

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

Introduction à la Programmation Parallèle: MPI

Cours de S.E. les Signaux

Architecture d un système d exploitation

Playing with ptrace() for fun and profit

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

Simulation d un système de paiement par carte bancaire

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

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

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

Java Licence Professionnelle CISII,

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

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

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

Cours de Systèmes d Exploitation

Programmation système I Les entrées/sorties

Chapitre 4 : Outils de communication centralisés entre processus

Introduction au langage C

Introduction à la programmation concurrente

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

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

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

Gestion des processus

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

Outils pour la pratique

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

Le langage C. Séance n 4

Les structures. Chapitre 3

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

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

Problèmes liés à la concurrence

Chap III : Les tableaux

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Unix : Programmation Système

OS Réseaux et Programmation Système - C5

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

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

Examen d informatique première session 2004

Arguments d un programme

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

Chapitre 1 : La gestion dynamique de la mémoire

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

REALISATION d'un. ORDONNANCEUR à ECHEANCES

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

Structure d un programme

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

Projet gestion d'objets dupliqués

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

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

Travaux Dirigés n 1 : chaînes de caractères

Gestion de la mémoire

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

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

Programmation impérative

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

Premiers Pas en Programmation Objet : les Classes et les Objets

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Derrière toi Une machine virtuelle!

as Architecture des Systèmes d Information

TP2 : tableaux dynamiques et listes chaînées

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

INTRODUCTION À LA PROGRAMMATION CONCURRENTE

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

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

INFO-F-404 : Techniques avancées de systèmes d exploitation

Licence Sciences et Technologies Examen janvier 2010

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

INITIATION AU LANGAGE JAVA

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Les chaînes de caractères

Synchro et Threads Java TM

Programme Compte bancaire (code)

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

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

Cours de Système : Gestion de Fichiers

Programmation client-serveur sockets - RPC


Programmer en JAVA. par Tama

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Transcription:

Architecture des Ordinateurs et Systèmes d Exploitation Cours n 11 Les Processus : Processus : appels systèmes Communication inter processus 3ème année

Processus : appels systèmes 1/4 Appels (primitives) système permettant de manipuler des processus Comment les utiliser en C sous Unix? Le détail des fonctions systèmes est aussi donné par le man! man primitive_système vous indiquera les librairies à inclure dans votre programme C (#include <librairie.h>) Exemple : GETPID(2) Linux Programmer's Manual GETPID(2) NAME getpid, getppid - get process identification SYNOPSIS #include <unistd.h> pid_t getpid(void); pid_t getppid(void); DESCRIPTION getpid returns the process ID of the current process. (This is often used by routines that generate unique temporary file names.) getppid returns the process ID of the parent of the current process.

int fork() Processus : appels systèmes 2/4 L appel système fork duplique le processus. Après l appel, l exécution continue dans les 2 processus (fils et père) Pour savoir dans quel processus (père/fils) on se retrouve, il faut regarder la valeur retournée par la fonction :» PID (fils) pour le processus père» 0 pour le processus fils» -1 en cas d échec (manque de mémoire, trop de processus, ) void exit(int status) L appel système exit termine le processus qui l appelle La valeur status est retournée au processus père pour indiquer une éventuelle erreur (0 sinon) int sleep(int seconds) L appel système sleep bloque un processus pendant n secondes sauf si le processus reçoit un signal (ne pas utiliser pour de la synchronisation de processus)

Processus : appels systèmes 3/4 int execlp(char *comm, char *arg,, NULL) L appel système execlp recouvre un processus par un autre exécutable. Après l appel, la fonction retourne :» -1 en cas d erreur» rien sinon : le programme appelant n existe plus, puisqu il a été remplacé par la commande passée en paramètres! Ex : execlp( "ls", "ls", "-l", "/usr", NULL)» il faut bien indiquer 2 fois ls (commande et argument[0]) int wait(0) L appel système wait bloque un processus jusqu à la fin d un de ses fils Après l appel, la fonction retourne :» -1 en cas d erreur ou si le processus n a pas de fils» le PID du fils qui s est arrêté

Processus : appels systèmes 4/4 Ex de prog. C Création d un processus fils avec même segment de code que le père! pid=0, processus fils c est donc là qu il faut mettre la partie de programme du fils processus père c est donc là qu il faut mettre la partie de programme du père #include <stdio.h> #include <stdlib.h> #include <unistd.h> void main(void) { int pid, i ; pid = fork() ; switch (pid) { case -1: printf(«erreur : echec du fork()\n»); exit(1); break ; case 0: printf(«-------- Processus fils : pid =%d\n», getpid() ); sleep(100); printf(«-------- fin du fils \n»); exit(0); break ; default: printf(«processus père : le fils à un pid=%d\n», pid) ; wait(0); printf(«fin du père\n») } }

Communication inter-processus Signaux asynchrones Tubes (liés à la gestion de fichier) Files de messages Sémaphores Segments de mémoire partagée

Signaux asynchrones Signaux asynchrones idée = avertir un processus d un événement extérieur généralement, un SE possède une liste fixée de signaux lors de la réception d un signal, le processus peut :» l ignorer» mourir / stopper» se réveiller» exécuter une fonction donnée correspondant au signal Manipulation de signaux en C : int kill(int pid, int signum)» envoyer le signal signum au process pid void (*signal(int signum, void (*handler)(int)))(int)» lier la réception du signal signum avec l exécution de la fonction handler

Les signaux Linux [pleray@servasi Processus]$ kill -l 1) SIGHUP : fin de session 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGIOT 7) SIGBUS 8) SIGFPE : erreur de calcul 9) SIGKILL : le «signal tueur» 10) SIGUSR1 : utilisateur 11) SIGSEGV 12) SIGUSR2 : utilisateur 13) SIGPIPE 14) SIGALRM 15) SIGTERM : terminaison propre 17) SIGCHLD : fin du fils 18) SIGCONT : reprise 19) SIGSTOP : arrêt 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR

Tubes Idée = échange de données entre 2 processus Tube (Unix) = fichier spécial avec : 2 extrémités (lire/écrire) lecture destructrice (l information lue est «enlevée» du tube) gestion fifo : l information n 1 en écriture = n 1 en lecture capacité finie Autres attributs d un tube : nb de lecteurs = nb de descripteurs associés à l entrée «lecture» du tube nb d écrivains = nb de descripteurs associés à l entrée «écriture» du tube 2 types de tubes : tubes ordinaires (adapté à la communication entre processus fils) *** tubes nommés (communication entre processus sans parenté)

Tubes ordinaires Idée : tube = 2 fichiers sans nom utilisés pour communiquer Manipulation de tubes ordinaires en C : int pipe(int p[2])» création d un tube» retour : p[0]=fichier lecture p[1]=fichier écriture int read(p[0], buffer, n)» lecture d au moins n caractères dans le tube» opération bloquante si le tube est vide (permet de synchroniser) int write(p[1], buffer, n)» écriture des n caractères du buffer dans le tube

Files de messages Idée = boîte à lettres «numérotée», avec une clé Créer ou trouver une file existante : int msgget(key_t cle, int option)» retourne un numero de file (msgid) en fonction d une clé Envoyer un message dans une file : int msgsnd(int msgid, const void *p_msg, int lg, int option)» envoi bloquant ou non selon option Extraire un message d une file : int msgrcv(int msgid, const void *p_msg, int lg, long type, int option) possibilité de définir des priorités avec type

Sémaphores Mécanisme de synchronisation des processus Définition : un sémaphore S est une variable entière (positive ou nulle) 2 opérations possibles :» P(S) : si S=0 alors mettre le processus en attente, sinon S S-1» V(S) : S S+1 ; réveiller un (ou plus) processus en attente P et V non interruptibles Mémorisation des opérations P non satisfaites (= processus en attente) Fonction Z = attente qu un sémaphore devienne nul [Unix]

Sémaphores : exemple Rendez-vous de processus N processus P i le code de chaque P i est partagé en 2 parties A i ; B i on veut que tous les A i soient exécutés avant de passer aux B i Utilisation d un sémaphore S initialisé à N A 1 P ; Z B 1 A 2 B 2 P ; Z A 3 B 3 P ; Z A N P ; Z B N

Sémaphores : quelques primitives Créer ou trouver un sémaphore existant : int semget(key_t cle, int nbsems, int option)» retourne un n de sémaphore (semid) en fonction d une clé Initialiser la valeur d un sémaphore : int semctl(int semid, int num, int cmd, arg) Appliquer une opération (P, V, Z) sur un sémaphore : int semop(int semid, int sops, nops)

Segment de mémoire partagée Au lieu de communiquer en échangeant de l information par un support externe, les processus vont partager un même espace physique Besoin d une synchronisation des accès à cet espace pour éviter tout problème Segment de mémoire partagé : existence indépendante des processus rattaché à un processus lorsqu il le demande

Segment de mémoire partagée : primitives Créer ou trouver un segment partagé : int shmget(key_t cle, int taille, int option)» retourne un n de segment (shmid) en fonction d une clé Attacher un segment partagé à un processus : void *shmat(int shmid, const void *adr, int option)» attachement à l adresse adr du processus Détacher un segment partagé : void *shmdt(const void *adr) Opérations de contrôle : int shmctl(int shmid, int op,...arg)

Références Processus : généralités Systèmes d Exploitation - A. Tanenbaum (InterEditions) Processus et programmation C sous UNIX/Linux : La programmation Unix - J.M. Rifflet (Ediscience) Programmer avec les outils GNU - M. Loukides & A. Oram (O Reilly) Linux in a nutshell - E. Siever (O Reilly) A suivre : TP n 11 : Communication inter-processus (C Unix) Cours n 12 : Interblocage