La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Jc/md/lp-01/05Gestion mémoire : présentation1 Gestion mémoire Présentation.

Présentations similaires


Présentation au sujet: "Jc/md/lp-01/05Gestion mémoire : présentation1 Gestion mémoire Présentation."— Transcription de la présentation:

1 jc/md/lp-01/05Gestion mémoire : présentation1 Gestion mémoire Présentation

2 jc/md/lp-01/05Gestion mémoire : présentation2 Objectif du chapitre Organisation de la mémoire Découpage en slots Rôle du slot 0 Passage dadresses entre le slot 0 et le slot de lapplication

3 jc/md/lp-01/05Gestion mémoire : présentation3 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

4 jc/md/lp-01/05Gestion mémoire : présentation4 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 sexécute, il est cloné dans le slot 0

5 jc/md/lp-01/05Gestion mémoire : présentation5 Adressage dun process en mémoire

6 jc/md/lp-01/05Gestion mémoire : présentation6 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é daccéder à de vastes espaces mémoires dans une partie gérée comme des fichiers en RAM

7 jc/md/lp-01/05Gestion mémoire : présentation7 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 »

8 jc/md/lp-01/05Gestion mémoire : présentation8 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

9 jc/md/lp-01/05Gestion mémoire : présentation9 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 linterdiction du recouvrement des dll

10 jc/md/lp-01/05Gestion mémoire : présentation10 Mémoire locale du process (4) Extension dallocation à la demande avec les fonctions VirtualAlloc, VirtualFree Sur des frontières de 64KB Allocation suivant la taille –Dans lespace virtuel du process ou dans lespace partagé si la taille atteint ou dépasse deux MB –Problèmes de protection daccès à prendre en considération

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

12 jc/md/lp-01/05Gestion mémoire : présentation12 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 lexécution et par conséquent lapplication ne connaît que ladresse locale Le driver doit donc établir la correspondance entre cette adresse en slot 0 et son image dans lespace virtuel de lapplication pour pouvoir les réutiliser

13 jc/md/lp-01/05Gestion mémoire : présentation13 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 lautre slot par : MapPtrToProcess ( LPVOID lpv, HANDLE hProc)

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

15 jc/md/lp-01/05Gestion mémoire : présentation15 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.

16 jc/md/lp-01/05Gestion mémoire : présentation16 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, lune dun buffer de texte unicode pour les entrées, lautre dun buffer de texte unicode pour les sorties (WCHAR) In et Out. LIOCTL devra établir la correspondance pour ces pointeurs chez lappelant LIOCTL lira le buffer In, le modifiera (passage majuscule vers minuscule), et le réécrira dans la zone Out

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

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

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

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

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

22 jc/md/lp-01/05Gestion mémoire : présentation22 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

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

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

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

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

27 jc/md/lp-01/05Gestion mémoire : présentation27 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; }

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

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

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

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

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

33 jc/md/lp-01/05Gestion mémoire : présentation33 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;

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

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

36 jc/md/lp-01/05Gestion mémoire : présentation36 Création de limage noyau & driver

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

38 jc/md/lp-01/05Gestion mémoire : présentation38 Application à réaliser Lapplication 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 Lapplication passera au driver une structure contenant ladresse de ces 2 buffers Un IOCTL modifiera le buffer OUT Lapplication imprimera le buffer modifié

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

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

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

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

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

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

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

46 jc/md/lp-01/05Gestion mémoire : présentation46 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)

47 jc/md/lp-01/05Gestion mémoire : présentation47 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; }

48 jc/md/lp-01/05Gestion mémoire : présentation48 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; }

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

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

51 jc/md/lp-01/05Gestion mémoire : présentation51 Génération de lapplication

52 jc/md/lp-01/05Gestion mémoire : présentation52 Exécution de lapplication Télécharger dans la cible limage du noyau avec le driver STR_DRV Lancer lapplication TargetRun ProgramSTR_APP

53 jc/md/lp-01/05Gestion mémoire : présentation53 Début de lexécution

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

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

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

57 jc/md/lp-01/05Gestion mémoire : présentation57 TargetCe Processes

58 jc/md/lp-01/05Gestion mémoire : présentation58 Conclusion Première approche de lorganisation mémoire Exemple pratique de communication dadresses créées dynamiquement dans le slot 0 à un driver


Télécharger ppt "Jc/md/lp-01/05Gestion mémoire : présentation1 Gestion mémoire Présentation."

Présentations similaires


Annonces Google