Jc/md/lp-01/05Communication inter processus corrigé1 Communication inter process Corrigé

Slides:



Advertisements
Présentations similaires
GEF 435 Principes des systèmes d’exploitation
Advertisements

Génération de plate-forme
Introduction Langage très répandu Noyau Linux VLC … Des avantages indéniables mais aussi des contraintes ! Ceci nest quun rapide tour.
Rappels C.
Synchronisation des processus père - fils
PROGRAMMATION LOGICIEL PL7 MICRO Consignes
GEF 243B Programmation informatique appliquée
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
LES DROITS DROITS Ce menu permet d'accéder à la saisie des paiements, à l'affichage des droits et à la validation des remboursements. SAISIE DES PAIEMENTS.
! ! ! PROCEDURE TYPE POUR ORGANISER L ’ANONYMAT
! 1 CREATION D'UNE MAQUETTE EXPORT / IMPORT
Utilisation des boutons Suivant MODULE 2 PRINCIPES GENERAUX DUTILISATION DAPOGEE.
1 BASE ELEVES PREMIER DEGRE Passage au collège des élèves du premier degré
Jc/md/lp-01/05Communication inter processus1 Communication inter process Présentation.
Driver de port parallèle
Jc/md/lp-01/06Applications1 Émulateur. jc/md/lp-01/06Applications2 Objectif du chapitre Génération dapplications –WCE Console Application –WCE Application.
Jc/md/lp-01/06Génération de plate-forme1 Émulateur.
Jc/md/lp-01/05WebPad1. jc/md/lp-01/05WebPad2 Objectif du chapitre Installation dun serveur Web élémentaire sur la plate-forme CEPC Envoi dune page daccueil.
Gestion mémoire : présentation
Jc/md/lp-01/05gestion mémoire : corrigé1 Gestion mémoire Corrigé
Jc/md/lp-01/06Kernel Tracker1 Debugging Kernel Tracker.
Jc/md/lp-01/05Essai ligne série COM1 : corrigé1 Essai ligne série CEPC Application écho sur COM1 Présentation.
Driver UART en polling : corrigé
Jc/md/lp-01/05Driver élémentaire : corrigé1 Driver élémentaire Émulateur Corrigé
Jc/md/lp-01/05Trains_presentation1 Threads et Synchronisation Application train Présentation.
Jc/md/lp-01/05Internet Appliance1. jc/md/lp-01/05Internet Appliance2 Objectif du chapitre Réalisation dune plate-forme permettant laccès à Internet Paramétrages.
Jc/md/lp-01/05Boot Loader1 BOOT LOADER. jc/md/lp-01/05Boot Loader2 Objectif du chapitre Introduire la notion de Boot Loader Donner un aperçu de lorganisation.
Jc/md/lp-01/05Driver élémentaire : présentation1 Driver élémentaire Émulateur Présentation.
Jc/md/lp-01/05Trains_corrigé1 Threads et Synchronisation Application train Corrigé
FLSI602 Génie Informatique et Réseaux
MENU DE L’AIDE Cliquer ici pour aide RESEAUX DE CONTACTS
Système d’Exploitation
Les fonctionnalités : Contacts Windows Présentation de CARNET DADRESSE.
Dans le menu Staff vous créez une nouvelle page
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()
TRAITEMENT DE STRUCTURES
LOGICIEL PL7 MICRO PROGRAMMATION MISE AU POINT Consignes?
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
1 CLUB DES UTILISATEURS SAS DE QUÉBEC COMMENT TRANSFORMER UN PROGRAMME SAS EN TÂCHE PLANIFIÉE SOUS WINDOWS Présentation de Jacques Pagé STRiCT Technologies.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Les fichiers binaires en C++
FICHIERS : Définition : Algorithme général:
INSCRIPTION AUX ELEMENTS
PROCEDURE TYPE D'ORGANISATION DES EPREUVES PROCEDURE TYPE D'ORGANISATION DES EPREUVES Saisir les évolutions éventuelles de caractéristiques de salles :
Programmation concurrente
Structure et Services « STS » Menu Structures : Divisions
Procédures et fonctions
Plan cours La notion de pointeur et d’adresse mémoire.
Le langage C Rappel Pointeurs & Allocation de mémoire.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
La notion de type revisitée en POO
Menu Structure : Divisions Diffusion Nationale TOULOUSE – Décembre 2008 Structure et Services « STS » Menu Structures : Divisions.
Créer des packages.
SYSTÈME D’EXPLOITATION I
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que l’on veut allouer. Le premier exemple: #include void main()
La programmation système
Programmation Système et Réseau
1 Le processus dans “Base Elèves premier degré” Passage au collège des élèves du premier degré.
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Les variables fichiers. Le type fichier On manipule les fichiers par l’intermédiaire de structures FILE décrites dans stdio.h FILE *monFichier; –Nom physique.
6ième Classe (Mercredi, 17 novembre) CSI2572
Les aide-mémoire.  Pour appeler les aide-mémoire, son icône doit avoir été rendu actif à partir de "Outils - Profils utilisateurs – Interface - Barre.
ALLOCATION DU CPU et GESTION DES TRAVAUX.
Scénario Les scénarios permettent de modifier la position, taille … des calques au cours du temps. Son fonctionnement est très proche de celui de Macromedia.
Introduction au WIKI Par Marc Chevarie.
Formation SGA Module Saisie des Demandes d’achat Durée : 0,5 jour.
Informatique 1A Langage C 6 ème séance 1. Objectifs de la séance 6  Allocation dynamique de mémoire  Application à la création de tableaux 2.
Transcription de la présentation:

jc/md/lp-01/05Communication inter processus corrigé1 Communication inter process Corrigé

jc/md/lp-01/05Communication inter processus corrigé2 Objectif du chapitre Notions de mémoire locale, publique et partagée Passage dadresses entre deux process

jc/md/lp-01/05Communication inter processus corrigé3 INTER_DE.h #include typedef struct { DWORD dwProcPermissions; WCHAR *MapPtr; }BUFFERINFORMATION;

jc/md/lp-01/05Communication inter processus corrigé4 INTER_D (1) // INTER_D.cpp : Defines the entry point for the application. #include "stdafx.h" #include "INTER_DE.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) {

jc/md/lp-01/05Communication inter processus corrigé5 INTER_D (2) WCHAR wcBuffer[256] = {_T("JE SUIS UN BUFFER EN MEMOIRE PRIVEE DE INTER_D !!!")}; BUFFERINFORMATION BufferInformation; HANDLE hFileMapping; LPVOID lpMappedMemAddress; PROCESS_INFORMATION process_info_INTER_E; DWORD dwExitCode_INTER_E;

jc/md/lp-01/05Communication inter processus corrigé6 INTER_D (3) // Création du nom de partage hFileMapping = CreateFileMapping( INVALID_HANDLE_VALUE,NULL, PAGE_READWRITE,0,1024, _T("POUR_ACCES_MEMOIRE_PRIVEE")); if(hFileMapping == NULL) { RETAILMSG(1,(TEXT("INTER_D: Pb Création POUR_ACCES_MEMOIRE_PRIVEE.\n"))); return ExitProcess(0); }

jc/md/lp-01/05Communication inter processus corrigé7 INTER_D (4) // Récupération de l'adresse utilisable pour communiquer lpMappedMemAddress = MapViewOfFile( hFileMapping,FILE_MAP_WRITE,0,0,0); if(lpMappedMemAddress == NULL) { RETAILMSG(1,(TEXT("INTER_D: Pb adresse mémoire de communication\n"))); return ExitProcess(0); }

jc/md/lp-01/05Communication inter processus corrigé8 INTER_D (5) // Édition de messages RETAILMSG(1,(TEXT("INTER_D: Adresse du buffer: %x\n"),wcBuffer)); RETAILMSG(1,(TEXT("INTER_D: Information à transférer: %s\n"),wcBuffer)); RETAILMSG(1,(TEXT("INTER_D: Adresse mémoire pour la communication:%x\n"), lpMappedMemAddress));

jc/md/lp-01/05Communication inter processus corrigé9 INTER_D (6) // Récupération des permissions BufferInformation.dwProcPermissions = GetCurrentPermissions(); // Mappage de l'adresse BufferInformation.MapPtr = (WCHAR *)MapPtrToProcess( wcBuffer,GetCurrentProcess()); if(BufferInformation.MapPtr == NULL) { RETAILMSG(1,(TEXT("INTER_D: Pb adresse mappée du buffer\n"))); return 0; }

jc/md/lp-01/05Communication inter processus corrigé10 INTER_D (7) // Édition de ladresse après mappage RETAILMSG(1,(TEXT("INTER_D: Adresse du buffer après mappage:%x\n"), BufferInformation.MapPtr)); // Écriture en mémoire physique memcpy(lpMappedMemAddress,&BufferInformation, sizeof(BUFFERINFORMATION));

jc/md/lp-01/05Communication inter processus corrigé11 INTER_D (8) // Création du processus INTER_E if(!CreateProcess(_T("INTER_E.exe"),NULL,NULL, NULL,NULL,0,NULL,NULL,NULL, &process_info_INTER_E)) { RETAILMSG(1,(TEXT("INTER_D: Pb création du processus INTER_E.exe\n"))); UnmapViewOfFile(lpMappedMemAddress); return ExitProcess(0); }

jc/md/lp-01/05Communication inter processus corrigé12 INTER_D (9) // Attente de la fin du processus INTER_E. while(GetExitCodeProcess( process_info_INTER_E.hProcess, &dwExitCode_INTER_E), dwExitCode_INTER_E == STILL_ACTIVE) Sleep(0); RETAILMSG(1,(TEXT("INTER_D: Code de retour fourni par le processus INTER_E = %d\n"), dwExitCode_INTER_E));

jc/md/lp-01/05Communication inter processus corrigé13 INTER_D (10) // Libération des ressources UnmapViewOfFile(lpMappedMemAddress); UnMapPtr(BufferInformation.MapPtr); RETAILMSG(1,(TEXT("INTER_D: Fin du processus INTER_D\n"))); return ExitProcess(0); }

jc/md/lp-01/05Communication inter processus corrigé14 INTER_E (1) // INTER_E.cpp : Defines the entry point for the application. #include "stdafx.h" #include "INTER_DE.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) {

jc/md/lp-01/05Communication inter processus corrigé15 INTER_E (2) // Déclarations HANDLE hFileMapping; LPVOID lpMappedMemAddress; BUFFERINFORMATION BufferInformation; DWORD dwProcPermissions;

jc/md/lp-01/05Communication inter processus corrigé16 INTER_E (3) // Ouverture du handle vers la zone de mémoire partagée hFileMapping = CreateFileMapping( INVALID_HANDLE_VALUE, NULL,PAGE_READWRITE,0,1024, _T("POUR_ACCES_MEMOIRE_PRIVEE")); // Vérifier que le handle nest pas nul et que le nom choisi existe bien if(hFileMapping==NULL || !(GetLastError() == ERROR_ALREADY_EXISTS)) { RETAILMSG(1,(TEXT("INTER_E: Pb création mémoire partagée.\n"))); return ExitProcess(10000); }

jc/md/lp-01/05Communication inter processus corrigé17 INTER_E (4) // Récupération de l'adresse mémoire utilisable pour communiquer lpMappedMemAddress = MapViewOfFile(hFileMapping, FILE_MAP_READ,0,0,0); if(lpMappedMemAddress == NULL) { RETAILMSG(1,(TEXT("INTER_E: Pb adresse mémoire partagée.\n"))); return ExitProcess(20000); }

jc/md/lp-01/05Communication inter processus corrigé18 INTER_E (5) RETAILMSG(1,(TEXT("INTER_E: Adresse mémoire pour la communication: %x\n"),lpMappedMemAddress)); // Récupération et visualisation des informations passées dans la mémoire partagée memcpy(&BufferInformation,lpMappedMemAddress, sizeof(BUFFERINFORMATION)); RETAILMSG(1,(TEXT("INTER_E: Adresse du buffer en absolu: %x\n"),BufferInformation.MapPtr)); RETAILMSG(1,(TEXT("INTER_E: Permissions du processus INTER_D: %04x\n"), BufferInformation.dwProcPermissions));

jc/md/lp-01/05Communication inter processus corrigé19 INTER_E (6) // Sauvegarde des permissions courantes de ce processus dwProcPermissions = GetCurrentPermissions(); RETAILMSG(1,(TEXT("INTER_E: Permissions du processus INTER_E: %04x\n"), dwProcPermissions)); // Remplacement des permissions d'accès par celles du process INTER_D SetProcPermissions( BufferInformation.dwProcPermissions);

jc/md/lp-01/05Communication inter processus corrigé20 INTER_E (7) // Lecture et visualisation du buffer du process INTER_D RETAILMSG(1,(TEXT("INTER_E: Lecture du buffer dans INTER_D: %s\n"), BufferInformation.MapPtr)); // Restauration des permissions antérieures du process INTER_E SetProcPermissions(dwProcPermissions);

jc/md/lp-01/05Communication inter processus corrigé21 INTER_E (8) // Libération du lien UnmapViewOfFile(lpMappedMemAddress); RETAILMSG(1,(TEXT("INTER_E: Fin du processus INTER_E\n"))); // Libération des ressources et retour return ExitProcess(12345); }

jc/md/lp-01/05Communication inter processus corrigé22 Exécution de INTER_D PID:e2db71aa TID:e2de9fae INTER_D: Adresse du buffer: 1202f9f PID:e2db71aa TID:e2de9fae INTER_D: Information à transférer: JE SUIS UN BUFFER EN MEMOIRE PRIVEE DE INTER_D !!! PID:e2db71aa TID:e2de9fae INTER_D: Adresse mémoire pour la communication: 46d PID:e2db71aa TID:e2de9fae INTER_D: Adresse du buffer après mappage: 1202f9f PID:c2f25b52 TID:c2f7cb8a INTER_E: Adresse mémoire pour la communication: 46d PID:c2f25b52 TID:c2f7cb8a INTER_E: Adresse du buffer en absolu: 1202f9f PID:c2f25b52 TID:c2f7cb8a INTER_E: Permissions du processus INTER_D: PID:c2f25b52 TID:c2f7cb8a INTER_E: Permissions du processus INTER_E: PID:c2f25b52 TID:c2f7cb8a INTER_E: Lecture du buffer dans INTER_D: JE SUIS UN BUFFER EN MEMOIRE PRIVEE DE INTER_D !!! PID:c2f25b52 TID:c2f7cb8a INTER_E: Fin du processus INTER_E PID:e2db71aa TID:e2de9fae INTER_D: Code de retour fourni par le processus INTER_E= PID:e2db71aa TID:e2de9fae INTER_D: Fin du processus INTER_D

jc/md/lp-01/05Communication inter processus corrigé23 Essai de Remote Process Viewer Remote Process Viewer est un outil qui permet dobtenir des informations sur les processus en cours dexécution : identificateur de processus (PID), priorité, slot affecté, etc. Cest un instantané des processus pris à linstant de lancement de loutil ou quand effectue un rafraîchissement. Nous voulons utiliser cet outil pour examiner les slots de chargement des processus.

jc/md/lp-01/05Communication inter processus corrigé24 Modification de INTER_E (1) Pour avoir le temps de faire un rafraîchissement des informations pour Remote Process Viewer, après lancement de INTER_D nous arrêtons le processus INTER_E par une demande de confirmation dans une boîte de message. Sinon, lexécution est finie avant le rafraîchissement. Rafraîchissement –Se placer dans la fenêtre Remote Process Viewer –Menu ConnectionRefresh –Touche de fonction F5

jc/md/lp-01/05Communication inter processus corrigé25 Modification de INTER_E (2) À placer juste avant le message de fin : MessageBox(NULL, _T("cliquer sur 'OK pour terminer"), _T("Communication inter processus"), MB_OK); Refaire lexécutable INTER_E.exe Refaire limage à télécharger

jc/md/lp-01/05Communication inter processus corrigé26 Essai de INTER_D Télécharger limage dans la cible Appeler loutil « Remote Process Viewer » Choisir la cible par défaut (émulateur) Examiner les processus en cours Lancer le processus INTER_D Observer les messages dans la fenêtre de sortie Exploiter les résultats –Slots en mémoire –Permissions

jc/md/lp-01/05Communication inter processus corrigé27 Après chargement de limage

jc/md/lp-01/05Communication inter processus corrigé28 Appel de Remote Process Viewer

jc/md/lp-01/05Communication inter processus corrigé29 Choix de la cible par défaut

jc/md/lp-01/05Communication inter processus corrigé30 Processus en cours dexécution Ni INTER_D ni INTER_E ne sont présents. Il ny a que les processus en cours avant le lancement de INTER_D.

jc/md/lp-01/05Communication inter processus corrigé31 Actualisation Remote Process Viewer

jc/md/lp-01/05Communication inter processus corrigé32 Après lancement de INTER_D INTER_D et INTER_E sont actifs

jc/md/lp-01/05Communication inter processus corrigé33 Messages PID:2db719a TID:2db7092 INTER_D: Adresse du buffer: 1602f9f PID:2db719a TID:2db7092 INTER_D: Information à transférer: JE SUIS UN BUFFER EN MEMOIRE PRIVEE DE INTER_D !!! PID:2db719a TID:2db7092 INTER_D: Adresse mémoire pour la communication: 46c PID:2db719a TID:2db7092 INTER_D: Adresse du buffer après mappage: 1602f9f PID:a2db7d12 TID:a2db7c72 INTER_E: Adresse mémoire pour la communication: 46c PID:a2db7d12 TID:a2db7c72 INTER_E: Adresse du buffer en absolu: 1602f9f PID:a2db7d12 TID:a2db7c72 INTER_E: Permissions du processus INTER_D: PID:a2db7d12 TID:a2db7c72 INTER_E: Permissions du processus INTER_E: PID:a2db7d12 TID:a2db7c72 INTER_E: Lecture du buffer dans INTER_D: JE SUIS UN BUFFER EN MEMOIRE PRIVEE DE INTER_D !!!

jc/md/lp-01/05Communication inter processus corrigé34 Détails INTER_D: Adresse du buffer: 1602f9f4 INTER_D: Information à transférer: JE SUIS UN BUFFER EN MEMOIRE PRIVEE DE INTER_D !!! INTER_D: Adresse mémoire pour la communication: 46c00000 INTER_D: Adresse du buffer après mappage: 1602f9f4 INTER_E: Adresse mémoire pour la communication: 46c00000 INTER_E: Adresse du buffer en absolu: 1602f9f4 INTER_E: Permissions du processus INTER_D: 0401 INTER_E: Permissions du processus INTER_E: 0801 INTER_E: Lecture du buffer dans INTER_D: JE SUIS UN BUFFER EN MEMOIRE PRIVEE DE INTER_D !!!

jc/md/lp-01/05Communication inter processus corrigé35 Exploitation des résultats INTER_A a été installé en donc slot 11 avec une clé de 400 INTER_B a été installé en donc slot 12 avec une clé de 800 Pendant lexécution les permissions passent à 401 et 801 donc accès en plus au slot 1 qui correspond au noyau NK.exe

jc/md/lp-01/05Communication inter processus corrigé36 Clé daccès à un slot Masque sur 32 bits : un bit pour 32 slots de 1 à 32

jc/md/lp-01/05Communication inter processus corrigé37 Place en mémoire des processus INTER_E sera en INTER_D sera en

jc/md/lp-01/05Communication inter processus corrigé38 INTER_F (1) Nous indiquons les modifications à apporter dans INTER_D De plus, il faut supprimer la déclaration de wcBuffer devenue inutile Ensuite, il faut régénérer INTER_F.exe puis refaire limage

jc/md/lp-01/05Communication inter processus corrigé39 INTER_F (2) WCHAR *lpBuffer; BUFFERINFORMATION BufferInformation; HANDLE hFileMapping; LPVOID lpMappedMemAddress; PROCESS_INFORMATION process_info_INTER_E; DWORD dwExitCode_INTER_E; // Allocation dynamique d'espace et remplissage lpBuffer = (WCHAR*)malloc(256*sizeof(WCHAR)); wcscpy(lpBuffer,_T("Je suis un buffer de l'INTER_F !!!"));

jc/md/lp-01/05Communication inter processus corrigé40 INTER_F (3) // Édition de messages RETAILMSG(1,(TEXT("INTER_F: Adresse du buffer: %x\n"),lpBuffer)); RETAILMSG(1,(TEXT("INTER_F: Information à transférer: %s\n"),lpBuffer)); RETAILMSG(1,(TEXT("INTER_F: Adresse mémoire pour la communication:x\n"), lpMappedMemAddress)); // Récupération des permissions BufferInformation.dwProcPermissions = GetCurrentPermissions();

jc/md/lp-01/05Communication inter processus corrigé41 INTER_F (4) // Mappage de l'adresse BufferInformation.MapPtr = (WCHAR *) MapPtrToProcess(lpBuffer,GetCurrentProcess()); if(BufferInformation.MapPtr == NULL) { RETAILMSG(1,(TEXT("INTER_F: Pb adresse mappée du buffer\n"))); return 0; }

jc/md/lp-01/05Communication inter processus corrigé42 INTER_F (5) // Libération des ressources free(lpBuffer); UnmapViewOfFile(lpMappedMemAddress); UnMapPtr(BufferInformation.MapPtr); RETAILMSG(1,(TEXT("INTER_F: Fin du processus INTER_F\n"))); return ExitProcess(0); }

jc/md/lp-01/05Communication inter processus corrigé43 Exécution de INTER_F INTER_F: Adresse du buffer: INTER_F: Information à transférer: Je suis un buffer de l'INTER_F !!! INTER_F: Adresse mémoire pour la communication: 46c00000 INTER_F: Adresse du buffer après mappage: INTER_E: Adresse mémoire pour la communication: 46c00000 INTER_E: Adresse du buffer en absolu: INTER_E: Permissions du processus INTER_D: 0401 INTER_E: Permissions du processus INTER_E: 0801 INTER_E: Lecture du buffer dans INTER_D: Je suis un buffer de l'INTER_F !!! INTER_E: Fin du processus INTER_E INTER_F: Code de retour fourni par le processus INTER_E = INTER_F: Fin du processus INTER_F

jc/md/lp-01/05Communication inter processus corrigé44 Mappage de ladresse On voit ici que la fonction MapPtrToProcess dans INTER_F a bien son utilité : –Avant mappage : Adresse du buffer: –Après mappage : Adresse du buffer après mappage: INTER_E pourra récupérer la zone qui avait été allouée dynamiquement dans INTER_F

jc/md/lp-01/05Communication inter processus corrigé45 Conclusion Exemples pratiques de communication dinformation entre plusieurs process situés chacun dans un espace privé.