• Aucun résultat trouvé

SYNCHRONISATION DE PROCESSUS FILIÉS .1 Généralités

Dans le document Td corrigé UNIX - Free pdf (Page 95-99)

4. GESTION DES PROCESSUS

4.5 SYNCHRONISATION DE PROCESSUS FILIÉS .1 Généralités

On distingue deux types de mécanismes de synchronisation :

 les primitives, encapsulées dans le noyau, dites primitives de bas niveau, assurent les synchronisations des processus par le système (par exemple sleep et wakeprocs),

 les appels systèmes, que nous présentons ci-après, permettent au programmeur de gérer la prise en compte d'événements dans ses applications.

4.5.2 L'appel système wait

 Cet appel système suspend à sa demande l'exécution d'un processus jusqu'à la terminaison d'un processus fils.

 Le processus père appelle l'ordonnanceur avant de s'endormir. En général, il ne reprend son exécution que lorsqu'un processus fils exécute une primitive exit. Le retour de l'appel est immédiat dès qu'un des processus fils s'est achevé avant l'exécution de la primitive wait par les autres processus fils.

 C’est le mode de fonctionnement par défaut.

 C'est la définition d'un processus interractif.

Exemple : mécanisme de création d'un shell if ((n = fork()) == 0)

{/* processus fils */

exec*("/bin/application",...); exit(1);

}

/* processus père */ while (wait(&status) != pid);

4.5.3 La commande du shell wait

La commande wait permet de synchroniser deux processus, le processus l'exécutant attendant la terminaison de tous les processus fils pour poursuivre son exécution.

Synopsis

wait [pid]

4.5.4 La commande du shell sleep

La commande sleep suspend l'exécution d'un processus pendant une durée définie en seconde.

Synopsis

sleep durée_en_secondes

4.6 SIGNAUX

Définition

Un signal est la représentation informatique d'un événement d’origine matériel (interruption) ou logicielle (déroutement ou exception) notifié au processus pouvant provoquer l'exécution d'une procédure prédéfinie dans le système d'exploitation ou dans le processus lui-même. Par ce mécanisme, le noyau peut communiquer avec les processus utilisateurs en cas d'erreur (violation protection mémoire, erreur d'entrées/sorties, etc.), ou des processus utilisateurs peuvent communiquer entre eux.

Voici la liste des signaux les plus usuels. Chacun est associé à un identificateur symbolique (quelquefois précédé des lettres SIG) et un nombre :

NOM NUMERO ROLE

HUP 1 Signal de fin de session, émis à tous les processus associés à un terminal, lorsque celui-ci est déconnecté.

INT 2 Signal d'interruption de l’exécution d'un processus (Ctrl C en général).

QUIT 3* Identique au signal INT avec la génération d'un fichier core.

ILL 4* Instruction illégale.

TRAP 5* Emis après l'exécution de chaque instruction, quand le processus fonctionne sous le contrôle d'un débogueur (mode trace).

IOT 6* Problème matériel.

EMT 7 Emulateur Trap.

FPE 8* Erreur d'exécution d'une instruction sur des nombres représentés en virgule flottante.

KILL 9 Meurtre d'un processus dont on est propriétaire.

BUS 10* Erreur matérielle sur le bus.

SEGV 11* Violation protection mémoire (segmentation ou pagination).

SYS 12* Appel système invalide.

PIPE 13 Ecriture sur un tube sans lecteur ou erreur sur une prise (BSD seulement).

ALRM 14 Signal généré par l'horloge du système, utilisé par les primitives sleep, alarm, setitimer pour définir des temporisations.

TERM 15 Terminaison normale d'un processus.

USR1 16 Signal à la disposition des utilisateurs.

USR2 17 Autre signal à la disposition des utilisateurs.

CCHLD 18 Terminaison d'un processus un fils.

PWR 19 Coupure de courant.

WINCH 20 Modification de la taille d'une fenêtre.

URG 21 Information urgente sur une prise (socket).

POLL, IO 22 Gestion des Entrée/sortie asynchrones sur un périphérique de type stream.

STOP 23 Interruption pour redémarrage d'un processus.

TSTP 24 Arrêt temporaire d'un processus depuis le terminal.

CONT 25 Redémarrage d'un processus stoppé.

TTIN 26 Lecture d'un terminal en mode background.

TOU 27 Ecriture d'un terminal en mode background.

XCPU 30 Limite de temps CPU (temps processeur) dépassée.

XFSZ 31 Limite de taille de fichier atteinte.

 La liste des signaux implémenté est accessible à partir de la commande : kill -l

 Les signaux dont le numéro est suivi par * génèrent un fichier image du processus appelé core, image de la mémoire sur disque du processus à l’instant où ce dernier a provoqué l'émission du signal.

 Le signal de meurtre (KILL), émis par le propriétaire du processus ou par le super-utilisateur, est le seul qu'on ne puisse ni ignorer, ni traiter par une fonction (c'est le meurtre du processus). L'arrivée des signaux TERM et KILL provoquent respectivement une fin normale et une fin catastrophique.

Application : signal de fin d'une session de travail

 Selon l'interprète de commandes utilisé, tous les processus actifs d'un utilisateur qui se déconnecte sont tués (signal HUP). Ce choix peut sembler draconien, mais pour assurer la bonne gestion du système, il est nécessaire qu'il ne soit pas une "poubelle".

 La commande du shell nohup permet de lancer un travail en mode différé (background), et de se déconnecter avec requête explicite de non prise en compte du signal HUP.

4.6.1 Emission de signaux

La commande du shell kill

La commande du shell kill envoie un signal donné à un processus.

Synopsis

kill -identificateur_signal pid_du_processus_destinataire kill -num_signal pid_du_processus_destinataire

Exemple

L’une des commandes :

kill -KILL 2383 #normalisé

kill -9 2383 #dépend de l’implémentation provoque la mort du processus dont le pid est 2383.

Appel système kill

L'appel système kill permet à un processus d'émettre un signal vers un autre processus.

Synopsis

int kill(int pid, int signum) Description

Le signal signum est envoyé au processus (ou au groupe de processus) d'identificateur pid et à tous ses fils.

4.6.2 Réception de signaux

Comportement par défaut des processus à un réception d'un signal donné

signal non masquable : par exemple le signal KILL. Le processus destinataire ne peut ni ignorer, ni modifier son comportement à réception.

signal masquable : le processus destinataire peut ignorer ou modifier le comportement par défaut du processus à réception du signal

Application : la commande du shell trap

La commande (interne) du shell trap permet de spécifier le comportement d'un processus à réception d'un signal donné.

Synopsis

trap [argument] identificateur_du_signal Les arguments possibles sont les suivants :

"" signal reçu ignoré,

• comportement par défaut du signal à redéfinir,

'commande' une commande ou une fonction de l'interprète à exécuter à réception du signal.

Exemple

trap 'rm /tmp/fichier; exit' INT QUIT

4.7 CONTRÔLE DE L'EXÉCUTION DES PROCESSUS

Dans le document Td corrigé UNIX - Free pdf (Page 95-99)