Gestion mémoire : présentation

Slides:



Advertisements
Présentations similaires
Génération de plate-forme
Advertisements

Synchronisation des processus père - fils
GEF 243B Programmation informatique appliquée
Gestion de FICHIERS.
La pile un élément essentiel
C.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Revision.
Jc/md/lp-01/05Communication inter processus1 Communication inter process Présentation.
Driver de port parallèle
Jc/md/lp-01/05TTY_IT : présentation1 TTY_IT Présentation.
Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation.
Jc/md/lp-01/05gestion mémoire : corrigé1 Gestion mémoire Corrigé
Jc/md/lp-01/05Communication inter processus corrigé1 Communication inter process Corrigé
Driver UART en polling : présentation
Driver de port parallèle
Jc/md/lp-01/06Kernel Tracker1 Debugging Kernel Tracker.
Jc/md/lp-01/05Principe des drivers1 Généralités sur les drivers 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/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
Parallel Programming in C with MPI and OpenMP
Système d’Exploitation
Programmation de cartes graphiques
Principes de programmation (suite)
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
Les fichiers binaires en C++
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Présentation Structures de Données et TDA
Chapitre XI Gestion des erreurs et exceptions. 2 La gestion des erreurs et exceptions De nombreux problèmes peuvent survenir pendant lexécution dun programme:
IFT 6800 Atelier en Technologies d’information
Types de données abstrait et mécanismes d'encapsulation
ÉLÉMENTS DE BASE UNIX.
Méthode et Outils pour la Programmation
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Structures de données IFT-2000 Abder Alikacem Retour sur les listes ordonnées Département dinformatique et de génie logiciel Édition Septembre 2009.
Plan cours La notion de pointeur et d’adresse mémoire.
1111 Gestion des exceptions Objectifs À la fin de ce cours, vous serez capables de : • Expliquer les concepts de base de la gestion des exceptions.
Le langage C Rappel Pointeurs & Allocation de mémoire.
Gérer la sécurité des mots de passe et les ressources
LES PILES ET FILES.
La notion de type revisitée en POO
Créer des packages.
SYSTÈME D’EXPLOITATION I
Labo 4 : Les structures et les entrées et sorties
CEG3585/CEG3555 Tutorat 2 Hi ver 2013.
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
La programmation système
Programmation Système et Réseau
CSI 3525, Implémentation des sous-programmes, page 1 Implémentation des sous-programmes L’environnement dans les langages structurés en bloc La structure.
ISBN Chapitre 10 L'implémentation des sous- programmes.
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.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 2 – Java Premiers pas Master 1 SIGLIS1 Java Lecteur - Chapitre 2 - Java Premiers Pas.
Architecture et technologie des ordinateurs II
1 PHP 5 Notions fondamentales (niveau 1 cours #3) Formation continue – Cégep de Sainte-Foy François G Couillard.
Chapitre 9 Les caractères.
3ième Classe (Mardi, 23 Septembre) CSI2572. O jourd'8: E Allocation de mémoire E Déallocation de mémoire E Tableaux (n dimensions) E Arithmetique des.
Flash MX – Séance 2 Interactions & ActionScript David Rapin Si28 P06.
C++ BY AURÉLIEN MODULO MARION. PLAN DES TROIS PRÉSENTATIONS C++ avancé C++ orienté objet Bases de C++
1 UNIX AVANCE Yves PAGNOTTE – Janvier – LES PROCESSUS SOUS UNIX.
Informatique 2A Langage C 4ème séance
Transcription de la présentation:

Gestion mémoire : présentation CE4.2 Gestion mémoire Présentation jc/md/lp-01/05 Gestion mémoire : présentation Gestion mémoire_presentation_V1.0.ppt

Gestion mémoire : présentation Objectif du chapitre Organisation de la mémoire Découpage en slots Rôle du slot 0 Passage d’adresses entre le slot 0 et le slot de l’application jc/md/lp-01/05 Gestion mémoire : présentation

Architecture mémoire (1) CE4.2 Architecture mémoire (1) Espace virtuel de 4 GB Séparation de la mémoire en deux espaces De 0 à 2GB user mode (process) De 2GB à 4GB kernel mode (system) Mémoire user mode 33 slots de 32MB 32 slots pour les process (numéros 1 à 32) 1 slot pour le process en cours (numéro 0) le reste (1GB moins 32MB) est partagé entre tous les processus Références utiles dans la documentation : Windows CE .NET Advanced Memory Management Memory Architecture and Addressing Memory Architecture Memory Access Virtual Memory VirtualAlloc Memory Management Memory Addressing System Memory Management in Windows CE .NET Creating Physical to Virtual Mappings jc/md/lp-01/05 Gestion mémoire : présentation Gestion mémoire_presentation_V1.0.ppt

Architecture mémoire (2) CE4.2 Architecture mémoire (2) Quand un process est créé le système lui attribue un slot disponible (« ouvert ») parmi les slots 1 à 32 Maximum de 32 processus ouverts Quand un process s’exécute, il est cloné dans le slot 0 Source : documentation Microsoft Windows CE .NET 4.2 : Memory Architecture jc/md/lp-01/05 Gestion mémoire : présentation Gestion mémoire_presentation_V1.0.ppt

Adressage d’un process en mémoire jc/md/lp-01/05 Gestion mémoire : présentation Gestion mémoire_presentation_V1.0.ppt

Gestion mémoire : présentation CE4.2 Gestion mémoire Mémoire gérée par pages de 4KB ou 1KB suivant les microprocesseurs Gestion par le mécanisme de page à la demande, mais on a aussi la possibilité de charger une application complète en mémoire Possibilité de réserver des régions Possibilité d’accéder à de vastes espaces mémoires dans une partie gérée comme des fichiers en RAM En général, la dimension de la page est 4KB, mais certains processeurs utilisent une page de 1 KB, par exemple dans la famille ARM le 920. jc/md/lp-01/05 Gestion mémoire : présentation Gestion mémoire_presentation_V1.0.ppt

Mémoire locale du process (1) 0 à 32 MB 64 KB réservés Code Données ROM Données RAM Tas Pile Espace allouable Dll « dynamiques » Dll dynamiques ou « RAM-based dll » ; ce sont des dll chargées et gérées par un process, dans son espace virtuel personnel de 32 MB, par opposition aux dll statiques qui seront utilisables par plusieurs process et chargées de façon figée dans l’espace commun aux processus qui va de 32 à 64 MB. jc/md/lp-01/05 Gestion mémoire : présentation Gestion mémoire_presentation_V1.0.ppt

Mémoire locale du process (2) Code et données RAM ou ROM suivant le programme Heap (tas) jusqu’à 192KB avec une granularité de 4 ou 8 bytes suivant les processeurs (LocalAlloc(), LocalFree(), etc. Possibilité de créer de nouveaux Heap si nécessaire (HeapCreate(), HeapAlloc(),…) Stack (pile), paramètre de l’édition de liens (link), 64KB par défaut jc/md/lp-01/05 Gestion mémoire : présentation

Mémoire locale du process (3) 32 à 64 MB Extension CE 4.x par rapport à CE 3.0 Dll systèmes Dll « statiques » en ROM avec les problèmes posés par l’interdiction du recouvrement des dll Les dll statiques ou systèmes sont réutilisables par plusieurs processus. Après le chargement d’une dll, n’importe quel processus doit pouvoir la retrouver au même endroit. De plus, ces dll sont prévues pour être installées dans des ROM et par conséquent, leur adresse de chargement est immuable après génération de la ROM ; les processeurs utilisés ne supportent pas la création de code ne dépendant pas de son adresse d’implantation en mémoire (PIC ou position independent code) et par conséquent après l’édition de liens, on ne peut plus modifier l’adresse d’implantation en mémoire. jc/md/lp-01/05 Gestion mémoire : présentation Gestion mémoire_presentation_V1.0.ppt

Mémoire locale du process (4) Extension d’allocation à la demande avec les fonctions VirtualAlloc, VirtualFree Sur des frontières de 64KB Allocation suivant la taille Dans l’espace virtuel du process ou dans l’espace partagé si la taille atteint ou dépasse deux MB Problèmes de protection d’accès à prendre en considération Microsoft Windows CE .NET 4.2  VirtualAlloc This function reserves or commits a region of pages in the virtual address space of the calling process. Memory allocated by VirtualAlloc is automatically initialized to zero. LPVOID VirtualAlloc( LPVOID lpAddress, DWORD dwSize, DWORD flAllocationType, DWORD flProtect ); Parameters lpAddress [in] Long pointer to the desired starting address of the region to be allocated. If the memory is being reserved, the specified address is rounded down to the next 64-KB boundary. If the memory is already reserved and is being committed, the address is rounded down to the next page boundary. To determine the size of a page on the host computer, use the GetSystemInfo function. If this parameter is NULL, the system determines where to allocate the region. dwSize [in] Specifies the size, in bytes, of the region. If the lpAddress parameter is NULL, this value is rounded up to the next page boundary. Otherwise, the allocated pages include all pages containing one or more bytes in the range from lpAddress to lpAddress+dwSize. This means that a 2-byte range straddling a page boundary causes both pages to be included in the allocated region. flAllocationType [in] Specifies the type of allocation. The following table shows flags you can specify for this parameter in any combination. ValueDescriptionMEM_COMMITAllocates physical storage in memory or in the paging file on disk for the specified region of pages. An attempt to commit an already committed page will not cause the function to fail. This means that a range of committed or decommitted pages can be committed without having to worry about a failure.MEM_RESERVEReserves a range of the virtual address space of the process without allocating any physical storage. The reserved range cannot be used by any other allocation operations, such as the malloc and LocalAlloc functions, until it is released. Reserved pages can be committed in subsequent calls to the VirtualAlloc function.MEM_RESETNot supported.MEM_TOP_DOWNAllocates memory at the highest possible address. This flag is ignored in Windows CE .NET. flProtect [in] Specifies the type of access protection. If the pages are being committed, any one of the flags shown in the following table can be specified, along with the PAGE_GUARD and PAGE_NOCACHE protection modifier flags, as desired. The following table shows the flags with their descriptions. ValueDescriptionPAGE_READONLYEnables read access to the committed region of pages. An attempt to write to the committed region results in an access violation. If the system differentiates between read-only access and execute access, an attempt to execute code in the committed region results in an access violation.PAGE_READWRITEEnables both read and write access to the committed region of pages.PAGE_EXECUTEEnables execute access to the committed region of pages. An attempt to read or write to the committed region results in an access violation.PAGE_EXECUTE_READEnables execute and read access to the committed region of pages. An attempt to write to the committed region results in an access violation.PAGE_EXECUTE_READWRITEEnables execute, read, and write access to the committed region of pages.PAGE_GUARDPages in the region become guard pages. Any attempt to read from or write to a guard page causes the system to raise a STATUS_GUARD_PAGE exception and turn off the guard page status. Guard pages thus act as a one-shot access alarm. The PAGE_GUARD flag is a page protection modifier. An application uses it with one of the other page protection flags, with one exception: It cannot be used with PAGE_NOACCESS. When an access attempt leads the system to turn off guard page status, the underlying page protection takes over. If a guard page exception occurs during a system service, the service typically returns a failure status indicator.PAGE_NOACCESSDisables all access to the committed region of pages. An attempt to read from, write to, or execute in the committed region results in an access violation exception, called a general protection (GP) fault.PAGE_NOCACHEAllows no caching of the committed regions of pages. The hardware attributes for the physical memory should be specified as no cache. This is not recommended for general usage. It is useful for device drivers; for example, mapping a video frame buffer with no caching. This flag is a page protection modifier and is only valid when used with one of the page protections other than PAGE_NOACCESS. Return Values The base address of the allocated region of pages indicates success. NULL indicates failure. To get extended error information, call GetLastError. Remarks The following flProtect flags are not supported: PAGE_WRITECOPY PAGE_EXECUTE_WRITECOPY VirtualAlloc can perform the following operations: Commit a region of pages reserved by a previous call to the VirtualAlloc function. Reserve a region of free pages. Reserve and commit a region of free pages. You can use VirtualAlloc to reserve a block of pages and then make additional calls to VirtualAlloc to commit individual pages from the reserved block. This enables a process to reserve a range of its virtual address space without consuming physical storage until it is needed. Each page in the virtual address space of the process is in one of three states: Free, in which the page is not committed or reserved and is not accessible to the process. VirtualAlloc can reserve, or simultaneously reserve and commit, a free page. Reserved, in which the range of addresses cannot be used by other allocation functions, but the page is not accessible and has no physical storage associated with it. VirtualAlloc can commit a reserved page, but it cannot reserve it a second time. The VirtualFree function can release a reserved page, making it a free page. Committed, in which physical storage is allocated for the page, and access is controlled by a protection code. The system initializes and loads each committed page into physical memory only at the first attempt to read or write to that page. When the process terminates, the system releases the storage for committed pages. VirtualAlloc can commit an already committed page. This means that you can commit a range of pages, regardless of whether they have already been committed, and the function will not fail. VirtualFree can decommit a committed page, releasing the page's storage, or it can simultaneously decommit and release a committed page. If the lpAddress parameter is not NULL, the function uses the lpAddress and dwSize parameters to compute the region of pages to be allocated. The current state of the entire range of pages must be compatible with the type of allocation specified by the flAllocationType parameter. Otherwise, the function fails and none of the pages are allocated. This compatibility requirement does not preclude committing an already committed page. VirtualAlloc will automatically reserve memory at the shared memory region if you call this function with dwSize >= 2 MB, flAllocationType set to MEM_RESERVE, and flProtect set to PAGE_NOACCESS. This preserves per-process virtual memory. Requirements OS Versions: Windows CE 1.0 and later. Header: Winbase.h. Link Library: Coredll.lib. See Also GetSystemInfo | LocalAlloc | VirtualFree | VirtualProtect | VirtualQuery  Last updated on Tuesday, February 03, 2004 © 1992-2003 Microsoft Corporation. All rights reserved. jc/md/lp-01/05 Gestion mémoire : présentation Gestion mémoire_presentation_V1.0.ppt

Mémoire externe au process 1 Go moins l’espace du slot 32 (32 Mo) Dans l’espace entre 1GB (+32MB) et 2GB Allocation à la demande de zones privées ou partageables VirtualAlloc(), VirtualFree(),… Fonctions fichiers jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation Passage de pointeurs Il peut être intéressant pour une application de passer à un driver des pointeurs créés dynamiquement Les adresses de ces pointeurs sont créées en slot 0, pendant l’exécution et par conséquent l’application ne connaît que l’adresse locale Le driver doit donc établir la correspondance entre cette adresse en slot 0 et son image dans l’espace virtuel de l’application pour pouvoir les réutiliser jc/md/lp-01/05 Gestion mémoire : présentation

Correspondance des pointeurs Le système propose deux fonctions pour résoudre le problème technique Le driver récupère le handle du process appelant par : GetCallerProcess(void) Puis le driver demande au système d’établir, grâce à ce handle, la correspondance pour le même pointeur vu dans l’autre slot par : MapPtrToProcess( LPVOID lpv, HANDLE hProc) jc/md/lp-01/05 Gestion mémoire : présentation

GetCallerProcess(void) HANDLE GetCallerProcess(void); Parameters None. Return Values A handle to the caller process indicates success. jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation MapPtrToProcess LPVOID MapPtrToProcess( LPVOID lpv, HANDLE hProc ); Parameters lpv [in] Long pointer to be mapped. hProc [in] Handle to the process into which the lpv pointer is to be mapped. Return Values If successful, returns a mapped version of the lpv pointer; otherwise, the return value is NULL. jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation CE4.2 Driver à réaliser Écrire un driver qui recevra dans un IOCTL, non pas un buffer avec des données, mais un buffer contenant deux adresses, l’une d’un buffer de texte unicode pour les entrées, l’autre d’un buffer de texte unicode pour les sorties (WCHAR) In et Out. L’IOCTL devra établir la correspondance pour ces pointeurs chez l’appelant L’IOCTL lira le buffer In, le modifiera (passage majuscule vers minuscule), et le réécrira dans la zone Out Le terme anglais map et ses dérivés mapped, mapping sont très employés et plus ou moins passés dans le jargon technique : ils sont difficiles à éviter en français. Une traduction du verbe to map par « établir la correspondance, faire correspondre, définir une application au sens mathématique du terme » serait utilisable, mais pour les dérivés, ce n’est pratiquement pas possible et nous conserverons quelquefois les termes maping, etc. jc/md/lp-01/05 Gestion mémoire : présentation Gestion mémoire_presentation_V1.0.ppt

Gestion mémoire : présentation Driver (1) jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation Driver (2) jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation Driver (3) jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation Driver (3) jc/md/lp-01/05 Gestion mémoire : présentation

Driver : fichier .cpp fourni jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation Insertion Créer et insérer dans le projet le fichier des entêtes PTR.h Créer et insérer dans le projet le fichier PTR_DRV.def jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation PTR.h #include <Windev.h> typedef struct { WCHAR *lpInBuffer; WCHAR *lpOutBuffer; }MYPTRS,*PMYPTRS; #define IOCTL_POINTEURS CTL_CODE( FILE_DEVICE_UNKNOWN, 2048, METHOD_BUFFERED,FILE_ANY_ACCESS) jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation PTR_DRV.def LIBRARY PTR_DRV EXPORTS PTR_Init PTR_Deinit PTR_Open PTR_Close PTR_IOControl jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation Structure du driver jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation Entête du driver //includes // TODO //définitions et réservations globales //entrée du driver BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation PTR_Init DWORD PTR_Init(DWORD dwContext) { DWORD dwRet =1; RETAILMSG(1,(TEXT("PTR_DRV: PTR_Init\n"))); //Initialisation du buffer de travail à zéro // TODO return dwRet; } jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation PTR_Deinit BOOL PTR_Deinit(DWORD hDeviceContext) { BOOL bRet = TRUE; RETAILMSG(1,(TEXT("PTR_DRV: PTR_Deinit\n"))); return bRet; } jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation PTR_Open DWORD PTR_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode) { DWORD dwRet = 1; RETAILMSG(1,(TEXT("PTR_DRV: PTR_Open\n"))); return dwRet; } jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation PTR_Close BOOL PTR_Close(DWORD hOpenContext) { BOOL bRet = TRUE; RETAILMSG(1,(TEXT("PTR_DRV: PTR_Close\n"))); return bRet; } jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation IOCTL (1) BOOL PTR_IOControl(DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut) { jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation IOCTL (2) //Réservations // TODO switch(dwCode) { jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation IOCTL (3) case IOCTL_POINTEURS: // TODO //Récupération du handle de l'appelant //Mappage des adresses des pointeurs //Impression des valeurs des pointeurs remappés //(RETAILMSG)… // TODO //Lecture du buffer In //Modification dans le buffer //Écriture dans le buffer Out bRet = TRUE; break; jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation IOCTL (4) default: RETAILMSG(1,(TEXT("PTR_DRV: erreur IOCTL \n"))); bRet=FALSE; break; }//Fin du switch return bRet; } //Fin Ioctl jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation Génération du driver jc/md/lp-01/05 Gestion mémoire : présentation

Création de l’image noyau & driver jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation Application PTR_APP Préparation jc/md/lp-01/05 Gestion mémoire : présentation

Application à réaliser L’application créera 2 buffers prévus pour des textes codés en unicode : In et Out In contiendra un texte en majuscule Out contiendra XXXXXXXXX L’application passera au driver une structure contenant l’adresse de ces 2 buffers Un IOCTL modifiera le buffer OUT L’application imprimera le buffer modifié jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation Application (1) jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation Application (2) jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation Application (3) jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation Application (4) jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation Application (5) jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation Application PTR_APP Code jc/md/lp-01/05 Gestion mémoire : présentation

Entête de l’application // TODO : Include et définitions int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { jc/md/lp-01/05 Gestion mémoire : présentation

Création et initialisation des buffers // TODO: définition du nom de la structure à passer // TODO: allocation des buffers In et Out // TODO: initialisation des 2 buffers (wcscpy) // TODO: affichage du buffer Out (MessageBox) // TODO: impression des adresses des buffers (RETAILMSG) jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation Chargement du driver // TODO: inscription du driver (RegisterDevice) if(hDriver == 0) { MessageBox(NULL, _T("Pb au chargement de PTR_DRV.dll"),_T("PTR_APP"),MB_OK); return 0; } jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation Ouverture du driver // TODO: ouverture du driver en Read/Write if (INVALID_HANDLE_VALUE == hPtr) { MessageBox(NULL, _T("Pb Open driver"), _T("PTR_APP"), MB_OK); //TODO: déchargement du driver return 0; } jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation IOCTL // TODO: appel de l'IOCTL pour modifier le contenu du buffer // TODO: affichage du buffer de sortie modifié jc/md/lp-01/05 Gestion mémoire : présentation

Libération des ressources // TODO: libération des buffers // TODO: déchargement du driver et fermeture de tous les handles driver return 0; } jc/md/lp-01/05 Gestion mémoire : présentation

Génération de l’application jc/md/lp-01/05 Gestion mémoire : présentation

Exécution de l’application Télécharger dans la cible l’image du noyau avec le driver STR_DRV Lancer l’application Target→Run Program→STR_APP jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation Début de l’exécution jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation Exécution jc/md/lp-01/05 Gestion mémoire : présentation

Messages dans la fenêtre se sortie jc/md/lp-01/05 Gestion mémoire : présentation

Adresses avant et après remapping PTR_APP: InBuffer avant remapping:30050 PTR_APP: OutBuffer avant remapping:30260 PTR_DRV: InBuffer après remapping:12030050 PTR_DRV: OutBuffer après remapping:12030260 jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation Target→Ce Processes jc/md/lp-01/05 Gestion mémoire : présentation

Gestion mémoire : présentation Conclusion Première approche de l’organisation mémoire Exemple pratique de communication d’adresses créées dynamiquement dans le slot 0 à un driver jc/md/lp-01/05 Gestion mémoire : présentation