Outils de communication entre processus Les signaux NSY



Documents pareils
Cours 6 : Tubes anonymes et nommés

Cours Programmation Système

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

Cours de S.E. les Signaux

Programmation système en C/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

Communication Interprocessus

Introduction aux Systèmes et aux Réseaux

Programmation système

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

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)

Les processus. Système L3, /39

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

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

Playing with ptrace() for fun and profit

Unix : Programmation Système

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

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

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

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

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

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)

Cours de Système : Gestion de Fichiers

Le traitement du temps

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

Cours de Systèmes d Exploitation

OS Réseaux et Programmation Système - C5

Introduction au langage C

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

Mesure de performances. [Architecture des ordinateurs, Hennessy & Patterson, 1996]

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

Gestion des processus

Applications client/serveur TCP/IP - Sockets Rappels. C.Crochepeyre Applications CS 1

Les structures de données. Rajae El Ouazzani

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

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

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

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

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

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

Les vulnérabilités du noyau. LECORNET Olivier LEGROS Bruno VIGIER Nicolas Promo 2005

Le prototype de la fonction main()

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

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

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Conventions d écriture et outils de mise au point

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

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

Les structures. Chapitre 3

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

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

GESTION DES FICHIERS C/UNIX

Communication par sockets

Programmation en langage C

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Programmation système I Les entrées/sorties

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

REALISATION d'un. ORDONNANCEUR à ECHEANCES

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

SRS DAY: Problématique liée à la virtualisation

Programmation impérative

Chapitre 4 : Outils de communication centralisés entre processus

Programmation client-serveur sockets - RPC

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

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

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

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

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

TP2 : tableaux dynamiques et listes chaînées

INTRODUCTION À LA PROGRAMMATION CONCURRENTE

gestion des processus La gestion des processus

Rappels Entrées -Sorties

INITIATION A LA PROGRAMMATION

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

Cours de C. Allocation dynamique. Sébastien Paumier

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

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

Cours d Algorithmique et de Langage C v 3.0


Programmation Internet en Java

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

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

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

Chap III : Les tableaux

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

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

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Cours 14 Les fichiers

PROGRAMMATION EVENEMENTIELLE sur EXCEL

Architecture d un système d exploitation

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Gestion de la mémoire

Programme Compte bancaire (code)

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Un ordonnanceur stupide

SUPPORT DE COURS. Langage C

Transcription:

Outils de communication entre processus Les signaux

Signaux : définition Le signal est une interruption logicielle. Il informe les processus de l'occurrence d'événements asynchrones. Il ne transporte pas d'informations. Le processus qui le prend en compte exécute un traitement. 64 signaux identifiés par un numéro et un nom (SIGX) à 3 : signaux classiques 32 à 63 : signaux temps réel 2

Signaux Classiques L'événement associé à un signal extérieur au processus (frappe caractère, terminaison d'un autre processus) intérieur au processus correspondant à une erreur (erreur arithmétique ou violation mémoire) : levée d'une trappe. 3

Liste des signaux selon le standard POSIX signaux relatifs à la fin de processus : SIGCHLD (7) : mort du fils SIGKILL (9) : signal de terminaison signaux relatifs à des erreurs SIGILL (4) : instruction illégale SIGFPE (8) : erreur arithmétique SIGSEGV () : violation mémoire SIGPIPE (3) : écriture dans un tube sans lecteur signaux relatifs aux temporisations SIGALRM (4): fin de temporisation (fonction alarm) 4

Liste des signaux selon le standard POSIX signaux relatifs aux interactions avec le terminal (extinction, frappe touche DELETE et BREAK) SIGHUP, SIGINT (crtl C), SIGQUIT (crtl \) signaux relatifs à la mise au point de programmes Deux signaux disponibles pour les utilisateurs (SIGUSR, SIGUSR2) 5

Signaux : aspects du traitement Comment le noyau envoie-t-il un signal à un processus? Comment le noyau traite-t-il un signal? Comment un processus contrôle-t-il ses réactions vis-à-vis des signaux? 6

Signaux : structures de données du processus PCB files_struct mm_struct signal_struct Typedef struct unsigned long sig[2]; sigset_t; Signaux classiques Signaux temps réel Struct signal_struct struct k_sigaction action [64];. volatile long state; - - état du processus TASK_STRUCT 7 sigset_t signal; -- signaux reçus sigset_t blocked; -- signaux bloqués («masqués») struct task_struct *next_task, *prev_task; -- chainage PCB struct task_struct *next_run, *prev_run; -- chainage PCB Prêt int pid; -- pid du processus struct task_struct *p_opptr, *p_pptr, *p_cptr,; -- pointeurs PCB père originel, père actuel, fils long need_resched; -- ordonnancement requis ou pas long utime, stime, cutime, cstime; -- temps en mode user, noyau, temps des fils en mode user, noyau unsigned long policy; -- politique ordonnancement SCHED_RR, SCHED-FIFO, SCHED_OTHER struct thread_struct tss; -- valeurs des registres du processeur struct mm_struct *mm; -- contexte mémoire struct files_struct *files ; -- table fichiers ouverts struct signal_struct *sig ; -- table de gestion des signaux ; actions à réaliser lors de la prise en compte des signaux par le processus

. Comment le noyau envoie-t-il un signal à un processus? Positionnement d'un bit à dans le champ signal de la table des processus, correspondant au type de signal reçu. signal pendant (reçu) vecteur de bits : pas de mémorisation du nombre de signaux d'un type reçu. 3 3 29 28 3 2 Signal[] Entier de 32 bits... 8

2. Comment le noyau traite-t-il un signal? Le noyau traite la réception des signaux quand le processus quitte le mode noyau pour retourner au mode utilisateur signal délivré le bit correspondant est remis à Utilisateur Noyau Un processus ne s'exécute jamais en mode utilisateur avant de traiter les signaux Ordonnancement Election 9 Examen des signaux reçus par le processus élu Traitement (do_signal())

3. Comment un processus contrôle-t-il ses réactions vis-à-vis des signaux? Traitement des signaux A tout signal est associé un traitement par défaut (ignorer, terminer le processus avec ou sans core, stopper le processus); Tout processus peut installer pour chaque type de signal (hormis SIGKILL), un nouveau handler handler SIG_IGN : pour ignorer le signal (sauf mort du fils pour Linux) handler fonction utilisateur pour capter le signal fonction signal et sigaction

3. Comment un processus contrôle-t-il ses réactions vis-à-vis des signaux? (fonction du noyau do_signal()) Traitement des signaux 3 2 entier signal[]... Indicateurs de Comportement (sig) SIG_IGN rien SIG_DFL... @handler action définie par l utilisateur

Fonction do_signal() signr = dequeue_signal() Oui, tous les signaux pendants sont traités signr =? non Récupération de l action associée à signr, stockée dans ka ka = &current->sig->action[signr-] Ignorer le signal if (ka->sa.sa_handler == SIG_IGN) -- traitement = ignorer le signal if (signr!= SIGCHLD) continue; /* Check for SIGCHLD: it's special. */ while (sys_wait4(-, NULL, WNOHANG, NULL) > ) continue; Traitement par défaut Traitement défini par l utilisateur Selon les signaux - ignorer; -Stopper le processus (TASK_STOPPED) -Tuer le processus avec ou sans core (do_exit()) handle_signal(signr); 2

3. Exécution d un handler de signal défini par l utilisateur Traitement des signaux Utilisateur Noyau main() 4 fonction handler 2 sig_int 3 @ handler 3

Les fonctions liées aux signaux Envoyer un signal à un processus int kill (pid_t pid, int sig) kill (2563, SIGKILL) kill -n signal pid kill -9 2563 Associer un handler à un signal signal(int sig, fonction) signal(sigint, p_hand) sigaction(int sig, struct sigaction action, NULL) Armer une temporisation int alarm (int seconds) alarm() au bout de seconds unités de temps, le signal SIGALRM est envoyé au processus Attendre un signal int pause(); 4

Primitive sigaction() Associer un handler à un signal (POSIX) int sigaction (int sig, const struct sigaction *p_action, struct sigaction *p_action_anc) struct sigaction void (*sa_handler)(); /* SIG_DFL ou SIG_IGN ou pointeur sur handler */ sigset_t sa_mask; /* masque sur signaux */ int sa_flags; /* options à mettre à NULL */ struct sigaction action; action.sa_handler = p_hand; sigaction (SIG_INT, &action, NULL); 5

Signaux : synthèse Utilisateur Processus Processus 2 Noyau signal(sig, handler) kill (proc, sig) processus sig handler() handler 6

Signaux : synthèse Utilisateur Noyau Processus Processus 2 signal(sig, handler) kill (proc, sig) processus sig handler() handler Signal pendant 7

Signaux : synthèse Utilisateur Noyau Processus Processus 2 signal(sig, handler) 8 handler() kill (proc, sig) It horloge processus sig handler Signal délivré ordonnancement élection processus examen, traitement signaux

Signaux et interruptions Signaux Le processus P2 envoie un signal au processus P (signal pendant chez P) Plus tard, le processus P est élu. Il quitte le mode noyau. Il exécute le handler du signal en mode utilisateur (signal délivré à P). Interruptions Le dispositif matériel X envoie une interruption lors de l exécution du processus P. Immédiatement, le processus P est dérouté en mode noyau pour exécuter le handler «routine» de l interruption. 9

/* programme où un processus crée un fichier sur lequel il travaille. En cas de réception du signal SIGINT, le processus ferme le fichier sur lequel il travaille avant de se terminer */ #include <sys/types.h> #include <signal.h> #include <unistd.h> #include <stdio.h> #include <fcntl.h> int desc; main() int i; extern onintr(); /* Handler */ desc = open("toto", O_RDWR, ); signal (SIGINT, onintr); i = ; while (i < 5) write (desc, "abcdefghijgl", 2); i = i + ; printf("fin process normal\n"); close (desc); 2 onintr () printf("handler onintr\n"); close(desc); exit ();

/* programme où un processus crée un fils puis se met en attente de la fin de son fils. Le fils exécute un code qui boucle. Au bout de secondes, le fils n'étant pas achevé, le père tue son fils */ #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <signal.h> pid_t pid; onalarm () main() extern onalarm(); /* Handler */ pid = fork(); if (pid == -) printf ("erreur creation de processus"); else if (pid == ) printf ("valeur du fork, %d", pid); printf (" je suis le fils, mon pid est %d\n", getpid()); for(;;) printf("je boucle!!!! \n"); exit(); else printf ("valeur du fork, %d", pid); signal (SIGALRM, onalarm); alarm(5); wait (); 2 printf("handler onalarm\n"); kill (pid, SIGKILL); exit ();

Les signaux pour gérer les exceptions signaux relatifs à des erreurs SIGILL (4) : instruction illégale SIGFPE (8) : erreur arithmétique SIGSEGV () : violation mémoire SIGPIPE (3) : écriture dans un tube sans lecteur 22

NOTIONS DE BASE : traitement d'une exception 23

Signal mort du fils Synchronisation père et fils 24

Synchronisation père fils : par défaut Lorsque le fils se termine, il envoie un signal «Mort du fils» à son père. Le père récupère cette mort par la primitive wait(). Réception du Signal «mort du fils» : Par défaut, réveille le processus s il est en endormi en mode interruptible Mort du fils exit() fils TASK_RUNNING Actif Utilisateur Nouveau Prêt Actif Noyau Mode Utilisateur Zombi wait() pere Endormi TASK_INTERRUPTIBLE, TASK_UNINTERRUPTIBLE, TASK_STOPPED TASK_ZOMBIE Mode Noyau en mémoire 25

Synchronisation père fils : par défaut Réception du Signal «mort du fils» : Par défaut, réveille le processus s il est en endormi en mode interruptible TASK_RUNNING Actif Utilisateur Mode Utilisateur Nouveau Prêt Actif Noyau Zombi TASK_ZOMBIE Endormi TASK_INTERRUPTIBLE, TASK_UNINTERRUPTIBLE, TASK_STOPPED Mode Noyau en mémoire Par défaut, le processus démantèle un processus fils zombi 26

Synchronisation père fils : traitement user Réception du Signal «mort du fils» : Si un traitement utilisateur est associé au signal, le noyau déclenche l exécution de ce traitement main() int i; pid_t ret; extern onintr(); /* Handler */ signal (SIGCHLD, onintr); ret = fork(); if (ret==) le fils fait des choses puis exit() else le père execute des choses onintr () printf( mort du fils pris en compte"); wait() Exit signal mort du fils délivré Irq horloge signal[] père onintr () Examen des signaux Traitant Irq horloge 27

Synchronisation père fils : traitement «ignorer» Réception du Signal «mort du fils» : Si un traitement «ignore» est associé au signal, le noyau recherche tous les fils zombies du processus main() int i; pid_t ret; Exit signal mort du fils délivré Traitant Irq horloge signal (SIGCHLD, SIG_IGN); Socke= socket( TCP); for(;;) socks = accept(socke,..) ret = fork(); if (ret==) close (socke); le fils traite la requete sur socks puis exit() else close (socks); Irq horloge signal[] père SIG_IGN 28 Examen des signaux Détruire tous les fils zombies existants