Introdução ao Gerenciamento de Memória RPC

No contexto do RPC, o gerenciamento de memória envolve:

  • Alocar e desalocar a memória necessária para simular um único espaço de endereço conceitual entre o cliente e o servidor nos diferentes espaços de endereço dos threads do cliente e do servidor.
  • Determinando qual componente de software é responsável por gerenciar a memória — o aplicativo ou o stub gerado por MIDL.
  • Selecionando atributos MIDL que afetam o gerenciamento de memória: atributos direcionais, atributos de ponteiro, atributos de matriz e os atributos ACF [ byte_count], [ alocar]e [ enable_allocate].

Quando um programa chama uma função ou procedimento em seu espaço de endereço, o gerenciamento de memória é mais simples do que em um aplicativo distribuído. Para ilustrar, o diagrama a seguir ilustra uma árvore binária. Para passar essa estrutura de dados para um procedimento em seu espaço de endereço, um programa simplesmente passa um ponteiro para a raiz da árvore.

uma árvore binária, com ponteiros para estruturar dados hospedados na raiz da árvore

Aplicativos RPC cliente/servidor compartilham dados em dois espaços de memória diferentes. Esses espaços de memória podem ou não estar no mesmo computador. De qualquer forma, o cliente e o servidor não têm acesso direto ao espaço de memória um do outro. O RPC depende da capacidade de simular o espaço de endereço do programa cliente no espaço de endereço do programa de servidor. Ele também deve retornar dados, incluindo dados novos e alterados, do servidor para a memória do cliente.

Em casos como a árvore binária representada no diagrama anterior, não é suficiente passar um ponteiro para o nó raiz para um procedimento remoto. O programa ou os stubs devem passar a árvore inteira para o espaço de endereço do servidor para que o procedimento remoto opere nele.