Les signaux. Cyril Rabat M2CCI - Système d exploitation

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

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)

Cours de S.E. les Signaux

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

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

Communication Interprocessus

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

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èmes d Exploitation

Introduction aux Systèmes et aux Réseaux

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Introduction au langage C

Cours 6 : Tubes anonymes et nommés

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Programmation système I Les entrées/sorties

Programmation système de commandes en C

Le traitement du temps

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

Programmation système

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

Playing with ptrace() for fun and profit

Les structures. Chapitre 3

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

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


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

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

Programmation impérative

Le prototype de la fonction main()

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

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

Le langage C. Séance n 4

Simulation d un système de paiement par carte bancaire

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

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

Arguments d un programme

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

Architecture des ordinateurs

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

OS Réseaux et Programmation Système - C5

Algorithmique et Programmation, IMA

Unix : Programmation Système

Conventions d écriture et outils de mise au point

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

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

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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

GESTION DES FICHIERS C/UNIX

Représentation d un entier en base b

Problèmes liés à la concurrence

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

L informatique en BCPST

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Licence Sciences et Technologies Examen janvier 2010

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

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

V- Manipulations de nombres en binaire

UE Programmation Impérative Licence 2ème Année

Introduction à la Programmation Parallèle: MPI

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

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

Cours Informatique 1. Monsieur SADOUNI Salheddine

Programmation Classique en langage C

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

Premiers Pas en Programmation Objet : les Classes et les Objets

IV- Comment fonctionne un ordinateur?

Programme Compte bancaire (code)

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

Lier Erlang avec d autres langages de programmation

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Remote Method Invocation (RMI)

TP : Gestion d une image au format PGM

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

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

A.P.I. Kuka Manuel de l utilisateur Version 0.0.5

Introduction à la programmation concurrente

Cours 1 : Qu est-ce que la programmation?

Cours d Algorithmique et de Langage C v 3.0

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

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Poker. A rendre pour le 25 avril

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

Informatique Générale

Les processus. Système L3, /39

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

NIMEGUE V3. Fiche technique 3.07 : Sauvegarde / Restauration manuelle

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

Mise en œuvre des serveurs d application

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

Cours Programmation Système

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

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

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

Chap III : Les tableaux

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

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

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

Transcription:

Les signaux Cyril Rabat cyril.rabat@univ-reims.fr M2CCI - Système d exploitation 2008-2009 Cours n 7 Les signaux (signaux particuliers, méthodes C). Cyril Rabat (M2CCI) Les signaux 2008-2009 1 / 24

Table des matières 1 Les signaux Introduction Généralités sur les signaux Signaux particuliers Envoyer des signaux 2 Manipulation des signaux en C Signaux dits non-fiables Manipulation de signaux en POSIX 3 Exercices Cyril Rabat (M2CCI) Les signaux 2008-2009 2 / 24

Les signaux Introduction Introduction Problématique : comment communiquer entre deux processus? Comment communiquer entre des processus indépendants? Processus A Communications? Processus B Cyril Rabat (M2CCI) Les signaux 2008-2009 3 / 24

Les signaux Introduction Introduction Problématique : comment communiquer entre deux processus? Idée : passer par un fichier partagé. Processus A Fichier Processus B Problème Il faut gérer les problèmes de concurrence sur les accès au fichier! Cyril Rabat (M2CCI) Les signaux 2008-2009 3 / 24

Les signaux Introduction Introduction Problématique : comment communiquer entre deux processus? Idée : passer par un fichier partagé. Processus A Fichier Processus B Problème Il faut gérer les problèmes de concurrence sur les accès au fichier! Cyril Rabat (M2CCI) Les signaux 2008-2009 3 / 24

Les signaux Introduction Introduction Problématique : comment communiquer entre deux processus? Utilisation des signaux. Processus A Signal Signal Processus B Cyril Rabat (M2CCI) Les signaux 2008-2009 3 / 24

Les signaux Généralités sur les signaux Les signaux Définition : un signal Un signal est une interruption logicielle asynchrone. Les signaux permettent de communiquer entre processus ou entre le système et les processus ; Sous Windows : les events ; Il y a 4 environnements de signaux qui cohabitent sous Unix : System V non-fiable ; BSD 4.x ; System V fiable (pour reliable) (SVR3) ; POSIX. Attention Il est possible de faire appel précisément à l un de ces environnements : c est déconseillé (problème de portabilité du code!) Cyril Rabat (M2CCI) Les signaux 2008-2009 4 / 24

Les signaux La fin d exécution d un fils Signaux particuliers Lorsqu un fils termine son exécution, un signal SIGCHLD est envoyé au père ; Le fils devient un processus zombie ; Lorsque le père capte le signal (fonction wait), le fils est définitivement détruit. Processus A fork() Attention Processus fils 000 111 000 111 Fin d exécution SIGCHLD Une application qui crée des processus (exemple d un serveur multi-clients) doit capturer les signaux SIGCHLD pour éviter une saturation mémoire. Cyril Rabat (M2CCI) Les signaux 2008-2009 5 / 24

Les signaux Violation d accès mémoire Signaux particuliers Si un processus accède à une zone mémoire interdite, le système d exploitation empêche cet accès : Envoi d un signal SIGSEGV au processus fautif ; Une copie mémoire du processus est réalisée dans un fichier (CORE) ; Le processus est tué. Processus Génération d un CORE accès mémoire invalide SIGSEGV Système Cyril Rabat (M2CCI) Les signaux 2008-2009 6 / 24

Les signaux Signaux particuliers Stopper un processus (et redémarrage) Il est possible de stopper l exécution d un processus à l aide du signal SIGSTOP ; Le processus reste en mémoire mais ne consomme plus de CPU ; Pour continuer son exécution, il faut lui envoyer le signal SIGCONT. processus stopé Processus 000000 111111 SIGSTOP SIGCONT Cyril Rabat (M2CCI) Les signaux 2008-2009 7 / 24

Les signaux Envoyer des signaux Envoyer des signaux depuis le terminal Depuis le terminal, avec la commande kill : kill -sigstop 1234 = Le processus dont l identifiant est 1234 est stopé. Des raccourcis clavier permettent aussi d envoyer des signaux au processus courant : CTRL+C : envoie le signal SIGINT au processus courant ; CTRL+D : envoie le signal SIGHUP au processus courant ; CTRL+Z : envoie le signal SIGSTOP au processus courant... Cyril Rabat (M2CCI) Les signaux 2008-2009 8 / 24

Les signaux Envoyer des signaux Appels système et fonctions C pour envoyer des signaux int kill(pid t pid, int sig) = envoie le signal sig au processus dont l identifiant est pid int raise(int sig) = idem mais envoie le signal au processus courant unsigned int alarm(unsigned int nb sec) = envoie le signal SIGALRM au processus courant dans nb sec secondes : retourne le nombre de secondes restantes depuis le dernier appel à alarm ou 0 int pause(void) = stoppe le processus jusqu à réception d un signal. Cyril Rabat (M2CCI) Les signaux 2008-2009 9 / 24

Les signaux Envoyer des signaux Liste des signaux et actions par défaut Signal Actions par défaut Description SIGHUP Termine le processus Fin de connexion SIGINT Termine le processus Interruption SIGQUIT Termine avec un core Interruption forte SIGKILL Termine le processus Interruption très forte SIGALRM Ignoré Interruption horloge SIGFPE Termine le processus Erreur arithmétique (division par 0) SIGCHLD Ignoré Fin d un fils SIGUSR1 Termine le processus Signal utilisateur SIGUSR2 Termine le processus Signal utilisateur SIGPIPE Termine le processus Écriture dans un tube sans lecteur ou tube cassé SIGSEGV Termine avec un core Violation mémoire SIGSTOP Stoppe le processus Le processus est stoppé SIGCONT Ignoré Le processus continue Cyril Rabat (M2CCI) Les signaux 2008-2009 10 / 24

Les signaux Envoyer des signaux Appels système et réception de signaux Certains appels système dits lents peuvent être interrompus par des signaux ; Généralement, l appel système retourne -1 et errno est renseignée : elle prend la valeur EINTR. Attention Lorsqu un processus est bloqué en attente d une connexion (socket) ou de la fin d un processus fils (wait), il faut vérifier la valeur de retour. Cyril Rabat (M2CCI) Les signaux 2008-2009 11 / 24

Table des matières Manipulation des signaux en C 1 Les signaux Introduction Généralités sur les signaux Signaux particuliers Envoyer des signaux 2 Manipulation des signaux en C Signaux dits non-fiables Manipulation de signaux en POSIX 3 Exercices Cyril Rabat (M2CCI) Les signaux 2008-2009 12 / 24

Manipulation des signaux en C Signaux dits non-fiables Signaux dits non-fiables Il est possible de modifier les actions associées à un signal (sauf pour certains comme SIGKILL) ; Pour modifier les actions associées à un signal : void (*signal(int signum, void (*handler)(int)))(int) Les paramètres sont : signum : le numéro du signal ; handler est le gestionnaire à appliquer : SIG IGN : le signal est ignoré ; SIG DFL : le comportement par défaut est replacé ; Une fonction void handler(int signum) : cette fonction est appelée lorsque le signal est reçu. Lorsqu une fonction est appelée comme gestionnaire et qu un signal est reçu : 1 Le gestionnaire est reconfiguré à SIG DFL ou le signal est bloqué ; 2 La fonction handler est appelée. Cyril Rabat (M2CCI) Les signaux 2008-2009 13 / 24

Exemple Manipulation des signaux en C Signaux dits non-fiables #include <stdio. h> // Pour p r i n t f #include <s i g n a l. h> // Pour la fonction s i g n a l void handler ( int signum ) { // Le s i g n a l SIGINT a été reçu p r i n t f ( Le s i g n a l SIGINT a été reçu \n ) ; } int main ( int argc, char argv [ ] ) { // La fonction handler est placée comme g e s t i o n n a i r e // pour l e s i g n a l SIGINT s i g n a l (SIGINT, handler ) ; // Boucle i n f i n e while (1) ; } return 1; Cyril Rabat (M2CCI) Les signaux 2008-2009 14 / 24

Signaux non-fiables? Manipulation des signaux en C Signaux dits non-fiables Dans la version originale d Unix, la fonction signal réinitialisait le gestionnaire à SIG DFL après chaque appel ; Un gestionnaire pour un signal SIGINT devient : void handler ( int signum ) { // Repositionnement du g e s t i o n n a i r e s i g n a l ( signum, handler ) ; } // Traitement proprement d i t p r i n t f ( Le s i g n a l SIGINT a été reçu \n ) ; Problème : entre l appel et le repositionnement, un signal peut être perdu ; Dans BSD, le gestionnaire n est pas replacé mais les nouvelles occurrences sont bloquées ; Comportement adopté dans la dernière version de la bibliothèque standard du C (lib6). Cyril Rabat (M2CCI) Les signaux 2008-2009 15 / 24

Manipulation des signaux en C Manipulation de signaux en POSIX Les ensembles de signaux Les signaux sont gérés via des ensembles de signaux : sigset t Ces ensembles sont manipulés via les fonctions suivantes : int sigemptyset(sigset t *set) : = vide l ensemble (tous les signaux sont désélectionnés) ; int sigfillset (sigset t *set) : = remplit l ensemble (tous les signaux sont sélectionnés) ; int sigaddset(sigset t *set, int signum) : = ajoute le signal signum à l ensemble set ; int sigdelset(sigset t *set, int signum) : = supprime le signal signum de l ensemble set ; int sigismember(const sigset t *set, int signum) : = indique si le signal signum appartient à l ensemble set (1 si oui, 0 sinon). Ces fonctions (sauf sigismember) retournent 0 en cas de réussite ou -1 en cas d erreur (erreur EINVAL si le signal n est pas valide). Cyril Rabat (M2CCI) Les signaux 2008-2009 16 / 24

Manipulation des signaux en C Manipulation de signaux en POSIX Modification des actions associées à un signal (1/2) La fonction pour modifier les actions des signaux : int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact) La structure sigaction est la suivante (peut varier suivant le système) : struct s i g a c t i o n { void ( sa handler ) ( int ) ; void ( s a s i g a c t i o n ) ( int, s i g i n f o t, void ) ; s i g s e t t sa mask ; int s a f l a g s ; } sa mask : ensemble de signaux à bloquer pendant l exécution du gestionnaire ; sa flags : ensemble d attributs modifiant le comportement du gestionnaire. Cyril Rabat (M2CCI) Les signaux 2008-2009 17 / 24

Manipulation des signaux en C Manipulation de signaux en POSIX Modification des actions associées à un signal (2/2) Si l attribut sa flags contient l indicateur SA SIGINFO, le gestionnaire est : void (* sa sigaction) (int, siginfo t *, void *) La structure siginfo t contient des attributs permettant de déterminer entre autres : si signo : le numéro du signal ; si errno : le numéro d erreur ; si pid : le PID du processus émetteur du signal (si le signal est SIGCHLD) ;... Si l indicateur SA SIGINFO n est pas spécifié : void (* sa handler)(int) Cyril Rabat (M2CCI) Les signaux 2008-2009 18 / 24

Manipulation des signaux en C Manipulation de signaux en POSIX Bloquer des signaux La fonction est la suivante : int sigprocmask(int how, const sigset t *set, sigset t *oldset) = Où : how peut prendre 3 valeurs : SIG BLOCK : les signaux de l ensemble set sont ajoutés à l ensemble des signaux déjà bloqués ; SIG UNBLOCK : les signaux de l ensemble set sont supprimés de l ensemble des signaux bloqués ; SIG SET : les signaux bloqués sont exactement ceux de l ensemble set. set : un ensemble de signaux ; oldset : s il n est pas nul, la valeur précédente du masque des signaux est placée dans oldset. Cyril Rabat (M2CCI) Les signaux 2008-2009 19 / 24

Manipulation des signaux en C Manipulation de signaux en POSIX Les fonctions sigpending et sigsuspend Pour récupérer l ensemble des signaux qui se sont déclenchés pendant qu ils étaient bloqués : int sigpending(sigset t *set) = L ensemble set reçoit les signaux qui se sont déclenchés. Remplacer temporairement l ensemble des signaux bloqués : int sigsuspend(const sigset t *mask) = L ensemble des signaux bloqués est maintenant mask et le processus courant est endormi jusqu à l arrivée d un signal. Cyril Rabat (M2CCI) Les signaux 2008-2009 20 / 24

Manipulation des signaux en C Exemple (sans gestion d erreur) #include <stdio. h> #include <s i g n a l. h> Manipulation de signaux en POSIX int main () { s i g s e t t sigs new ; s i g s e t t s i g s o l d ; s i g f i l l s e t (&sigs new ) ; s i g d e l s e t (&sigs new, SIGINT) ; s i g d e l s e t (&sigs new, SIGQUIT) ; sigprocmask (SIG BLOCK, &sigs new, &s i g s o l d ) ; // Signaux à bloquer // Ancien masque // Tous l e s signaux // Sauf SIGINT // Sauf SIGQUIT // Bloque l e s signaux / Action A : tous l e s signaux sont bloqués sauf SIGINT et SIGQUIT / sigprocmask (SIG SETMASK, &s i g s o l d, 0) ; sigemptyset(&sigs new ) ; sigaddset (&sigs new, SIGINT) ; sigaddset (&sigs new, SIGQUIT) ; sigprocmask (SIG BLOCK, &sigs new, &s i g s o l d ) ; // Replacer par défaut // Aucun s i g n a l // Plus SIGINT // Plus SIGQUIT // Bloque l e s signaux / Action B : s e u l s l e s signaux SIGINT et SIGQUIT sont bloqués / sigprocmask (SIG SETMASK, &s i g s o l d, 0) ; // Replacer par défaut } return 1; Cyril Rabat (M2CCI) Les signaux 2008-2009 21 / 24

Table des matières Exercices 1 Les signaux Introduction Généralités sur les signaux Signaux particuliers Envoyer des signaux 2 Manipulation des signaux en C Signaux dits non-fiables Manipulation de signaux en POSIX 3 Exercices Cyril Rabat (M2CCI) Les signaux 2008-2009 22 / 24

Exercices Exercice : un programme simple Enoncé 1 Écrire un programme qui s arrête après 3 réceptions du signal SIGINT ; 2 Décrivez la procédure pour exécuter ce programme et lui envoyer les signaux SIGINT ; 3 Peut-on écrire un programme qui ignore SIGKILL? Pourquoi? Cyril Rabat (M2CCI) Les signaux 2008-2009 23 / 24

Exercices Exercice : les signaux de fumée (sans fumée) Enoncé Nous désirons écrire deux programmes : le premier envoie des messages en morse au second qui doit les traduire et les afficher à l écran. Pour cela, nous proposons d utiliser les signaux. Nous nous contenterons d envoyer des chiffres dont les codes en morse sont les suivants : 1.---- 3...-- 5... 7 --... 9 ----. 2..--- 4...- 6 -... 8 ---.. 0 ----- 1 Proposez un protocole de communication en utilisant les signaux entre les deux programmes ; 2 Écrire un programme qui prend en paramètre le PID du programme traducteur et qui lui transfert un entier ; 3 Écrire le traducteur. Cyril Rabat (M2CCI) Les signaux 2008-2009 24 / 24