Вы находитесь на странице: 1из 7

Les signaux la synchronisation

Numro de session 1 2 3 Intitul de la session Gnralits Les types de signaux Gestion des signaux - envoi dun signal - rception dun signal - mise en attente dun signal

Session 1 : Gnralits

1.1 Dfinition Les signaux sont des interruptions logicielles envoyes aux processus par le systme dexploitation. Un signal peut tre ignor, mais sil est pris en compte, il dclenche de faon asynchrone laction qui lui est associe. Dans la pratique, les signaux permettent de tuer des processus, davertir un processus dun vnement extrieur (terminaison dun autre processus, fin dun dlai temporel, ) et permettent de ce fait plusieurs processus de communiquer entre eux. La liste des signaux disponibles sur une machine Unix est disponible dans le fichier suivant : /usr/include/sys/signal.h Les signaux sont identifis par le systme par un numro allant de 1 31. Pour chaque signal, un mnmonique a t dfini en tant que constante afin de mieux prciser son rle. Exemple : Mnmonique (numro associ). SIGINT : (2) est le signal reu par un processus lorsque lon excute un Ctrl + C . SIGKILL : (9) est le signal reu par un processus lorsque lon excute un kill -9. Ce signal ne peut tre ni ignor, ni drout, on dit quil est non masquable. La liste des signaux avec leur mnmonique peut tre obtenue par man 5 signal.

1.2 Implmentation Limplmentation des signaux Unix est diffrente selon les systmes, et pour un mme systme selon les plateformes. Par exemple, le signal SIGSTOP peut correspondre aux valeurs suivantes : - 24 pour HP-UX sur plateforme PA-RISC, - 19 pour Linux sur i386, - 17 pour Linux sur Sparc, - 23 pour Linux sur MIPS. Do lintrt dutiliser des symboles plutt que des numros.

1.3 Comportement Le comportement par dfaut est labandon pour la plupart des signaux, sauf pour : - SIGQUIT ( Ctrl + \ ), SIGABRT (abandon programm), SIGFPE (dbordement flottant), SIGSEGV (adresse mmoire invalide) qui provoquent en plus la cration dun fichier dextension .core. Un fichier .core contient des informations qui dcrivent ltat du processus lors dune terminaison anormale : tat de la mmoire, de la pile, des variables ... - SIGSTOP qui fait passer le processus dans ltat suspendu, on le refait passer dans ltat activable par le signal SIGCONT.

- SIGCHLD qui est le signal envoy par un fils vers son pre lorsque le fils reoit luimme un signal (notification au pre) ou lorsquil se termine ; par dfaut, ce signal est ignor. Un signal est donc une interruption logicielle exploitable par un programme, qui informe un processus de loccurrence dun vnement asynchrone. De manire gnrale on utilise les signaux pour synchroniser des processus.

Session 2 : Les types de signaux

Il existe 3 diffrents types de signaux prdfinis sous Unix : 2.1 Signaux relatifs des erreurs internes

envoi d'un signal

Le noyau envoi un signal 1 processus. Exemple : SIGSYS (12) : signal mis en cas d'erreur de paramtre dans un appel systme. 2.2 Signaux relatifs des manipulations utilisateur au niveau Shell

envoi d'un signal par l'intermdiaire du noyau

Un processus met un signal vers le noyau qui le redirige sur dautres processus.

Exemple : SIGINT (2) : signal d'interruption mis tous les processus associs un terminal lorsque le caractre d'interruption (en gnral Ctrl + C ) est tap. SIGQUIT (3) : signal d'interruption mis tous les processus associs un terminal lorsque le caractre pour quitter une application (en gnral Ctrl + \ ) est tap. SIGKILL (9) : signal de terminaison du processus, permet de tuer un processus quelque soit son tat. 2.3 Signaux relatifs la mise au point de programmes manipulant plusieurs processus

envoi d'un signal entre processus

Le processus A doit envoy un signal au processus B. Le noyau joue alors le rle dintermdiaire. Exemple : SIGUSR1 (16) et SIGUSR2 (17) : signaux utilisateurs utiliss par les programmeurs. SIGALRM (14) : signal associ une horloge. 2.4 Exemple

PRISE SIGUSR1

ENREGISTRE

SIGUSR2 Prend une vue et la range dans le buffer. - Prise de vue - Envoie SIGUSR1 ENREGISTRE - Interprte SIGUSR2 : enregistrement effectu Stocke limage sur un support magntique. - Interprte SIGUSR1 : la vue a t prise - Stocke limage sur support - Envoi PRISE que le travail est effectu : SIGUSR2

Session 3 : Gestion des signaux

La liste de tous les signaux peut tre obtenue par: - une commande : man 7 signal - la lecture du fichier : /usr/include/sys/signal.h 3.1 Emission des signaux int kill (pid, sig) int pid, /* identificateur de processus destinataire.*/ int sig; /* identification (numro) du signal mis.*/

Syntaxe :

Cette commande permet denvoyer un signal sig au processus identifi par pid. Valeur de retour : - = 0 si succs. - = -1 si chec. La variable errno (variable globale qui contient le numro de la dernire erreur ayant eu lieu) est positionne : - EINVAL : le signal sig nexiste pas, le processus pid nexiste pas. - ESRCH : mauvais processus cible. - EPERM : les processus metteur et rcepteur ne sont pas dans la mme famille. Variantes dutilisation de la fonction kill : - Si pid > 0 et sig = 0, la fonction kill teste lexistence du processus dsign par pid. Exemple : kill (1234,0) ; Si la valeur de retour est nulle, le processus 1234 existe. Si la valeur de retour est diffrente de 0, le processus 1234 nexiste pas. - Si le pid = -1, le signal est envoy tous les processus de lutilisateur. Exemple : kill (-1, 9) ; Tous les processus de lutilisateur qui excute cette commande sont arrts.

3.2

Traitement des signaux Int *signal (sig, fcn( )) Int sig , /*numro de signal rcuprer*/ Int (*fcn()) ; /*pointeur sur la fonction excuter lors de la rception du signal*/

Syntaxe :

Cette commande permet de prciser la fonction excuter (fcn()) en mode asynchrone lors de la/des prochaines rceptions du signal prcis (sig). Elle retourne un pointeur vers la fonction prcdemment associe au signal. On appelle la primitive signal () dans 3 cas : - pour prendre en compte (drouter) le signal avec (vers) une fonction de traitement, cest un droutement dans le processus, - Pour rtablir le comportement par dfaut du signal, - Pour ignorer le signal.

Valeur de retour : - = 0 si succs, - = -1 si chec.

La variable errno est positionne EINVAL si le signal sig nexiste pas. Systmatiquement, quand un processus reoit un signal, il fait un traitement particulier. Si la rception de ce signal ntait pas prvue, le traitement est prdfini par le systme. Il sagit souvent de la terminaison du processus. Pour chaque signal, une terminaison par dfaut est prvue.

Excution dun traitement particulier : Fct() est le nom dune fonction qui est excute la rception du signal.

reception d'un signal et traitement

Lavis de rcupration dun vnement spcifi dans la primitive signal() nest valide que pour une seule occurrence de lvnement (une seule rception du kill()).

Variantes dutilisation de la fonction signal : - Excution du traitement par dfaut (SIGDFL) signal (SIGUSR2, SIGDFL) ; - Ignorer le signal signal (SIGUSR1, SIGIGN) ;

3.3

Attendre la rception dun signal

Syntaxe : Int pause ( ) ; Cette primitive permet de suspendre le processus jusqu la prochaine rception dun signal. Ceci permet dviter dattendre larrive du signal avec une boucle infinie, ce qui consommerait de la ressource UC alors que le processus suspendu nen consomme pas. La valeur de retour est toujours gale -1.

Ce chapitre a prsent les caractristiques gnrales des signaux ainsi que les mthodes qui permettent leur utilisation : kill(), signal(), et pause(). Nous avons ainsi pu voir que les signaux sont des moyens de synchronisation de processus. Nous verrons dans le chapitre suivant que des processus peuvent communiquer entre eux grce aux tubes (pipes).

Вам также может понравиться