Communication entre Processus

Slides:



Advertisements
Présentations similaires
Synchronisation des processus père - fils
Advertisements

Signaux – Tubes La gestion des signaux La communication par tube
02/11/06Programmation multitâche sous UnixIsaip-Esaip1 Groupe Isaip-Esaip P. Trégouët – A. Schaal remerciements à M. Benzaïd pour sa contribution à la.
Signaux Il s'agit de messages asynchrones envoyés à un processus
1 UNIX AVANCE Yves PAGNOTTE – Janvier – LES PROCESSUS SOUS UNIX.
Total France - RM/MKF/RES/PCS/SIS - V1.2 - Février LAVAGE Multiprogramme et Haute Pression TPE M25 Paramètres d’installation Document à l’usage.
Le débogage Semaine 12 Version A15. Plan de leçon - Débogage  Commentaire javadoc  Définition  Fonctionnement  Point d’arrêt  Exécution  Contrôler.
Outils logiciel pour la programmation en C. 2 Automatiser la compilation : make make est un utilitaire présent dans toute les distribution de linux >
C++ Les fonctions. Présentation Utilité : Dès qu'un programme dépasse la centaine de lignes de code, il est pratique de pouvoir le décomposer en plusieurs.
Des commandes plus avancées I. Les processus Lister des processus : ps & top Arrêter des processus : kill II. Recherche Rechercher des fichiers : find.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
1 I P CI P C. 2 Inter Process Communication 3 Définition d'un processus. ● Un système multitâche permet l'exécution simultanée de nombreux programmes.
Mode noyau Appels Systèmes Interruptions Grégory Seront Institut Paul Lambin
Synthèse TP 2 Codeblock 1 Les objectifs de ce tp sont :
Les tableaux différencier les variables simples des variables indicées (ordonnées et numérotées) un identificateur unique désigne un ensemble, une collection.
Mettre à jour les données
Gestion du temps.
03/02/2018.
Utiliser le dossier Mon EBSCOhost
Modifications des blocs fonctionnels du Servo 9300 V2.0
Quelques Termes INFORMATIQUE ? ORDINATEUR ( Système Informatique)?
Chapitre 1 nombres, chaînes de caractères, booléens, et VARIABLES
Qu'est-ce que POSIX? Une librairie en langage C
AIDE A L’UTILISATION DU LOGICIEL LATISPRO
Javadoc et débogueur Semaine 03 Version A17.
Status logiciel 29 avril 2010.
Langages pour le Temps Réel
AO (Architecture des ordinateurs)
7 – COMMUNICATION INTER PROCESSUS SEGMENTS DE MÉMOIRE PARTAGEE
L'approche asynchrone.
Principes de programmation (suite)
Master Réseaux et Systèmes Distribués (RSD)
11ième Classe (Mardi, 18 novembre) CSI2572
Semaine 11 Les pointeurs (suite)
Les fonctions.
Présentation du B2i école Références : B.O. n° 42 du 16 novembre 2006
Inter Process Communication
SIF-1053 Architecture de ordinateurs
Chapitre 12 Surveillance des ressources et des performances
Javadoc et débogueur Semaine 03 Version A16.
Difficultés de programmation
Elaboré par Ahmed BESSAIDI
Présentation du B2i école Références : B.O. n° 42 du 16 novembre 2006
L E C ORPS D ’ UN A LGORITHME / P ROGRAMME – L A PARTIE I NSTRUCTION Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie.
Cours 8 5. Appels de fonctions Le matériel Concepts de pile
Structure D’une Base De Données Relationnelle
1 RECURSIVITE PRESENTATION Ch. PAUL ALGORITHMIQUE Présentation de la récursivité.
Modélisation avec UML 2.0 Partie II Diagramme de classes.
Interruptions GIF-1001 Ordinateurs: Structure et Applications, Hiver 2015 Jean-François Lalonde.
Plus de 4000 langages....
Bus et adressage GIF-1001: Ordinateurs: Structure et Applications
Calcul Scientifique Initiation à SCILB
Liaison série.  Dans une liaison série, les données sont envoyées successivement, bit par bit. Il suffit de deux fils (un fil de signal et un fil de.
STS Web Services libres Créer un service libre
SYSTèMES à évènements discrets
Considérations de programmation
Processus et threads: Programme et Processus
Les exceptions Le mécanisme des exceptions est destiné à permettre aux fonctions profondes d'une bibliothèque de notifier la survenue d'une erreur aux.
Position, dispersion, forme
Compléments sur Python (EduPython)
RABAH M ed Ali 2018/2019
Cours 8 5. Appels de fonctions Le matériel Concepts de pile
Threads et Lightweight Processes
Ordonnancement des processus sous Windows NT
Lecture/Écriture de fichiers (I/O)
TP N°1 : GUI en NetBeans Module R & C Université de Jijel
DONNÉE DE BASE QM Manuel de formation. Agenda 2  Introduction  Objectif de la formation  Données de base QM: Caractéristique de contrôle Catalogue.
LES TRANSMISSIONS DE DONNEES : Les types de liaisons en PARALLELE ou en SERIE
Processus de permis de travail​ REGLE HSE GROUPE (CR-GR-HSE-402)
Les Commandes de base Linux. 1 L’aide sur les commandes Linux ◦ help : obtenir de l’aide pour une commande interne du shell. Elle permet aussi d'afficher.
Transcription de la présentation:

Communication entre Processus 1. Les Signaux

Sommaire 1) Définition. 2) Liste des signaux. 3) Aspects du traitement des signaux par le noyau. a. Envoie d’un signal. b. Prise en compte d’un signal. b.1 Ignorer le signal. b.2 Exécuter l’action par défaut. b.3 Exécuter une procédure spécifique. c. Signaux et héritage. d. Structure de donnée associée à un signal. 4) Programmation des signaux. a. Envoyer un signal. b. Attacher un Handler à un signal. c. Attente d’un signal. d. Armer une temporisation.

Définition Un signal est une interruption logicielle asynchrone qui a pour but d’informer de l’arrivée d’un événement (outil de base de notification d’évènement). Sous UNIX un signal est identifié par un numéro et est décrit par un nom (significatif) préfixé par la constante « SIG ».

Liste des signaux Le noyau UNIX admet 64 signaux différents. Les signaux 1 à 31 correspondent aux signaux classiques. Les numéros 32 à 63 correspondent aux signaux temps réel que nous n’allons pas étudier ici. Le tableau ci-dessous donne la liste des signaux classiques en précisant l’événement auquel ils sont attachés.

Liste des signaux Numéro Nom Description 1 SIGHUP Instruction (HANG UP) - Fin de session 2 SIGINT Interruption du clavier (frappe de « Ctrl+C ») 3 SIGQUIT Caractère « quit » frappé depuis le clavier (Frappe de « Ctrl \ ») 4 SIGILL Instruction illégale 5 SIGTRAP Trace trap (Point d’arrêt pour le débogage) 6 SIGIOT /SIGABRT Terminaison anormale 7 SIGBUS Erreur de bus 8 SIGFPE Erreur mathématique virgule flottante 9 SIGKILL Terminaison forcée du processus 10 SIGUSR1 Signal utilisateur 1 11 SIGSEGV Violation de mémoire (Référence mémoire invalide) 12 SIGUSR2 Signal utilisateur 2 13 SIGPIPE Ecriture dans un tube sans lecteur 14 SIGALRM Horloge temps réel, fin de temporisation 15 SIGTERM Signal de terminaison 16 SIGSTKFLT Stack Fault (Erreur de pile du coprocesseur) 17 SIGCHLD ou SIGCLD Processus fils terminé

Liste des signaux Numéro Nom Description 18 SIGCONT Demande de reprise du processus 19 SIGSTOP Stoppe l’exécution d’un processus 20 SIGTSTP Demande de suspension depuis le clavier 21 SIGTTIN lecture terminal en arrière-plan 22 SIGTTOU écriture terminal en arrière-plan 23 SIGURG évènement urgent sur socket 24 SIGXCPU temps maximum CPU écoulé 25 SIGXFSZ taille maximale de fichier atteinte 26 SIGVTALRM alarme horloge virtuelle 27 SIGPROF Profiling alarm clock 28 SIGWINCH changement de taille de fenêtre 29 SIGPOLL (System V) occurence d'un évènement attendu 30 SIGPWR Chute d’alimentation 31 SIGSYS Erreur d'appel système 32 SIGUNUSED Non utilisé

Traitement d’un signal a. Envoie d’un signal Un processus peut recevoir un signal de deux façons différentes : Un signal lui est envoyé par un autre processus par l’intermédiaire de l’appel système kill () que nous détaillerons dans la partie programmation des signaux. Exemple: le Shell envoie le signal SIGKILL si la commande kill -9 pid est frappé ; L’exécution du processus a levé une trappe (exécution d’une instruction non autorisée : division par 0) et le gestionnaire d’exception associé positionne un signal pour signaler l’erreur détectée. Exemple: l’occurrence d’une division par zéro amène le gestionnaire d’exception divide_error () à positionner le signal SIGFPE. Un signal ainsi délivré mais pas encore pris en compte par le processus destinataire est qualifié de signal pendant.

Traitement d’un signal b. Prise en compte d’un signal La prise en compte d’un signal par un processus s’effectue : Lorsque celui-ci s’apprête à quitter le mode noyau pour repasser en mode utilisateur Avant de passer dans un état bloqué. En sortant de l’état bloqué.

Traitement d’un signal b. Prise en compte d’un signal b.1 Ignorer le signal Lorsque le signal est ignoré, aucune action n’est entreprise au moment de sa prise en compte. Une exception existe cependant concernant le signal SIGCHLD. Lorsque ce signal est ignoré, le noyau force le processus à consulter les informations concernant ces fils zombies de manière à ce que leur prise en compte soit réalisée et que les blocs de contrôle associés soient détruits.

Traitement d’un signal b. Prise en compte d’un signal b.2 Exécuter l’action par défaut Le système d’exploitation associe à chaque signal une action par défaut (Gestionnaire par défaut du signal) ; ces actions par défaut sont de 5 natures : Abort: abondon ou terminaison du processus et génération d’un fichier core contenant son contexte d’exécution, ce fichier core est exploitable par l’outil débogueur : SIGFPE, SIGQUIT… ;

Traitement d’un signal b. Prise en compte d’un signal Exit: terminaison du processus sans génération d’un fichier core: SIGINT 1 , SIGKILL, SIGUSR1, SIGUSR2 ; Ignore (le signal est ignoré) : SIGCHLD ; Stop (suspension du processus : passage à l’état bloqué) : SIGSTOP ; Continue (reprendre l’exécution si le processus est suspendu sinon le signal est ignoré) : SIGCONT ;

Traitement d’un signal b. Prise en compte d’un signal b.3 Exécuter une procédure spécifique Le processus ne peut pas modifier l’action par défaut de SIGKILL et SIGSTOP Par contre pour des signaux telles que SIGINT, SIGUSR1, SIGUSR2..., l’action par défaut peut être modifié, pour cela le processus doit associer au signal une autre procédure de gestion c’est le Handler. Quand un signal arrive et le Handler sera pris en compte par le noyau le processus revient en mode utilisateur pour exécuter la procédure associé, à la fin de l’exécution de la procédure le processus poursuit son exécution à son point de déroutement vers le mode noyau.

Traitement d’un signal b. Prise en compte d’un signal Remarque 1 : On peut associer un même gestionnaire (Handler) à des signaux différents. Remarque 2 : Les signaux SIGKILL, SIGSTOP ne peuvent être ni capturés (modifier leur actions par défaut), ni bloqués, ni ignorés.

Signaux et héritage Un processus fils n’hérite pas des signaux pendants de son père, mais il hérite les gestionnaires (Handler). En cas de recouvrement du code hérité du père (le fils exécute la fonction execlp…), les gestionnaires par défaut sont réinstallés pour tous les signaux du fils.

Structure de donnée associée à un signal Dans le PCB d’un processus, on retrouve trois tables (1 entrée par signal) qui servent à la gestion des signaux : Table des signaux pendants (en attente) : on a 1 bit par signal. Le bit est 1 si le signal associé est en attente. Table des signaux masqués (bloqués) : on a 1 bit par signal. Le bit est 1 si le signal associé est bloqué. Table des gestionnaires des signaux (bloqués) : on a 1 pointeur par signal. Le pointeur est nul si le signal associé est bloqué.

Programmation des signaux a. Envoyer un signal Comme nous l’avons vu précédemment un signal peut être envoyé soit à partir du Shell soit par un processus en appelant la primitive kill () dont le prototype est : #include <sys/types.h> #include <signal.h> int kill ( pid_t pid, int sig); L’interprétation du résultat de la fonction diffère en fonction de la valeur présente dans le champ pid: Si pid > 0, le signal sig est envoyé au processus pid. Si pid = 0, le signal est envoyé à tous les processus du groupe du processus émetteur. Si pid < 0 (en dehors de la valeur -1), le signal est envoyé à tous les processus du groupe dont le PGID = |pid|. Si pid = -1, le signal est envoyé à tous les processus du système sauf le processus 1 et le processus appelant. La primitive kill retourne 0 en cas de succès et -1 en cas d’erreur.

Programmation des signaux : b. Attacher un Handler à un signal : La primitive qui permet d’attacher un gestionnaire de traitement à un signal est l’appel système signal(), son prototype est : #include <signal.h> void(*signal(int sig,void(*func)(int)))(int) ; sig : représente le numéro ou le nom du signal. func : c’est la fonction à exécuter, à l’arrivé du signal. Le Handler (la procédure) défini par *func est attaché au signal sig, désigné par le nom qui lui est associé. L’argument func peut prendre trois valeurs distinctes : func = SIG_DFL: l’action par défaut est attaché au signal sig. func = SIG_IGN: alors le signal sig est ignoré, elle est utilisé pour les processus en arrière plan ; func est un pointeur vers une procédure Handler définie dans le code utilisateur. La prise en compte du signal sig par le processus entraine l’exécution de cette procédure. En cas d’échec, la fonction signal() renvoie la valeur SIG_ERR.

Programmation des signaux : c. Attente d’un signal L’appel système pause() suspend l’appelant jusqu’au prochain signal. Son prototype est : #include <unistd.h> int pause (void) ; L’appel système sleep(v) suspend l’appelant jusqu’au prochain signal ou l’expiration du délai (v secondes). Son prototype est : void sleep (int );

Programmation des signaux : d. Armer une temporisation La primitive alarme permet à un processus d’armer une temporisation. A l’issue de cette temporisation le signal SIGALRM est délivré au processus. Le comportement par défaut est d’arrêter l’exécution du processus. Le prototype de la fonction est : #include <unistd.h> Unsigned int alarm (unsigned int nb_sec); Une temporisation d’une durée égale à nb_sec seconds est armée. Remarque: L’opération alarm(0) annule une temporisation précédemment armée.