Download - Gestion mémoire
![Page 1: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/1.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 1
Gestion mémoire
Présentation
![Page 2: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/2.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 2
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
![Page 3: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/3.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 3
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
![Page 4: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/4.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 4
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
![Page 5: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/5.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 5
Adressage d’un process en mémoire
![Page 6: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/6.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 6
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
![Page 7: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/7.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 7
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 »
![Page 8: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/8.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 8
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
![Page 9: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/9.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 9
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
![Page 10: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/10.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 10
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
![Page 11: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/11.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 11
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
![Page 12: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/12.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 12
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
![Page 13: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/13.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 13
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)
![Page 14: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/14.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 14
GetCallerProcess(void)
HANDLE GetCallerProcess(void);
Parameters
None.
Return Values
A handle to the caller process indicates success.
![Page 15: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/15.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 15
MapPtrToProcess
LPVOID MapPtrToProcess( LPVOID lpv, HANDLE hProc );
Parameterslpv
[in] Long pointer to be mapped. hProc
[in] Handle to the process into which the lpv pointer is to be mapped.
Return ValuesIf successful, returns a mapped version of the lpv pointer;
otherwise, the return value is NULL.
![Page 16: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/16.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 16
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
![Page 17: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/17.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 17
Driver (1)
![Page 18: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/18.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 18
Driver (2)
![Page 19: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/19.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 19
Driver (3)
![Page 20: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/20.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 20
Driver (3)
![Page 21: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/21.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 21
Driver : fichier .cpp fourni
![Page 22: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/22.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 22
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
![Page 23: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/23.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 23
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)
![Page 24: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/24.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 24
PTR_DRV.def
LIBRARY PTR_DRV
EXPORTS
PTR_Init
PTR_Deinit
PTR_Open
PTR_Close
PTR_IOControl
![Page 25: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/25.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 25
Structure du driver
![Page 26: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/26.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 26
Entête du driver
//includes// TODO
//définitions et réservations globales// TODO
//entrée du driverBOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){
return TRUE;}
![Page 27: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/27.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 27
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;
}
![Page 28: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/28.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 28
PTR_Deinit
BOOL PTR_Deinit(DWORD hDeviceContext)
{
BOOL bRet = TRUE;
RETAILMSG(1,(TEXT("PTR_DRV: PTR_Deinit\n")));
return bRet;
}
![Page 29: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/29.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 29
PTR_Open
DWORD PTR_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode)
{
DWORD dwRet = 1;
RETAILMSG(1,(TEXT("PTR_DRV: PTR_Open\n")));
return dwRet;
}
![Page 30: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/30.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 30
PTR_Close
BOOL PTR_Close(DWORD hOpenContext)
{
BOOL bRet = TRUE;
RETAILMSG(1,(TEXT("PTR_DRV: PTR_Close\n")));
return bRet;
}
![Page 31: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/31.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 31
IOCTL (1)
BOOL PTR_IOControl(DWORD hOpenContext,
DWORD dwCode,
PBYTE pBufIn,
DWORD dwLenIn,
PBYTE pBufOut,
DWORD dwLenOut,
PDWORD pdwActualOut)
{
![Page 32: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/32.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 32
IOCTL (2)
//Réservations
// TODO
switch(dwCode)
{
![Page 33: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/33.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 33
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;
![Page 34: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/34.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 34
IOCTL (4)
default: RETAILMSG(1,(TEXT("PTR_DRV: erreur IOCTL \n")));
bRet=FALSE;
break;
}//Fin du switch
return bRet;
} //Fin Ioctl
![Page 35: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/35.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 35
Génération du driver
![Page 36: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/36.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 36
Création de l’image noyau & driver
![Page 37: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/37.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 37
Application PTR_APP
Préparation
![Page 38: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/38.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 38
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é
![Page 39: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/39.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 39
Application (1)
![Page 40: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/40.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 40
Application (2)
![Page 41: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/41.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 41
Application (3)
![Page 42: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/42.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 42
Application (4)
![Page 43: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/43.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 43
Application (5)
![Page 44: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/44.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 44
Application PTR_APP
Code
![Page 45: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/45.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 45
Entête de l’application
// TODO : Include et définitions
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
![Page 46: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/46.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 46
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)
![Page 47: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/47.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 47
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;
}
![Page 48: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/48.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 48
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;
}
![Page 49: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/49.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 49
IOCTL
// TODO: appel de l'IOCTL pour modifier le contenu du buffer
// TODO: affichage du buffer de sortie modifié
![Page 50: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/50.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 50
Libération des ressources
// TODO: libération des buffers
// TODO: déchargement du driver et fermeture de tous les handles driver
return 0;
}
![Page 51: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/51.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 51
Génération de l’application
![Page 52: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/52.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 52
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
![Page 53: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/53.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 53
Début de l’exécution
![Page 54: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/54.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 54
Exécution
![Page 55: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/55.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 55
Messages dans la fenêtre se sortie
![Page 56: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/56.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 56
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
![Page 57: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/57.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 57
Target→Ce Processes
![Page 58: Gestion mémoire](https://reader035.vdocuments.fr/reader035/viewer/2022062309/56813a27550346895da20b4a/html5/thumbnails/58.jpg)
jc/md/lp-01/05 Gestion mémoire : présentation 58
Conclusion
• Première approche de l’organisation mémoire• Exemple pratique de communication d’adresses
créées dynamiquement dans le slot 0 à un driver