Présentation de la gestion de la mémoire RPC
Dans le contexte de RPC, la gestion de la mémoire implique :
- Allocation et suppression de la mémoire nécessaire pour simuler un espace d’adressage conceptuel unique entre le client et le serveur dans les différents espaces d’adressage des threads du client et du serveur.
- Détermination du composant logiciel responsable de la gestion de la mémoire : l’application ou le stub généré par MIDL.
- Sélection des attributs MIDL qui affectent la gestion de la mémoire : attributs directionnels, attributs de pointeur, attributs de tableau et attributs ACF [ byte_count], [ allouer] et [ enable_allocate].
Lorsqu’un programme appelle une fonction ou une procédure dans son espace d’adressage, la gestion de la mémoire est plus simple que dans une application distribuée. À titre d’illustration, le diagramme suivant illustre une arborescence binaire. Pour passer cette structure de données à une procédure dans son espace d’adressage, un programme passe simplement un pointeur vers la racine de l’arborescence.
Les applications RPC client/serveur partagent des données sur deux espaces de mémoire différents. Ces espaces de mémoire peuvent se trouver ou non sur le même ordinateur. Quoi qu’il en soit, le client et le serveur n’ont pas d’accès direct à l’espace mémoire de l’autre. RPC dépend de la possibilité de simuler l’espace d’adressage du programme client dans l’espace d’adressage du programme serveur. Il doit également retourner des données, y compris les données nouvelles et modifiées, du serveur à la mémoire du client.
Dans des cas tels que l’arborescence binaire illustrée dans le diagramme précédent, il ne suffit pas de passer un pointeur vers le nœud racine vers une procédure distante. Le programme ou les stubs doivent passer toute l’arborescence à l’espace d’adressage du serveur pour que la procédure distante fonctionne dessus.