Gerenciamento de IDs multiplex

O RDBSS define uma ID multiplex (MID), um valor de 16 bits, que pode ser usado pelo cliente de rede (minidiretório) e pelo servidor para distinguir entre as solicitações ativas simultaneamente em qualquer conexão. Um redirecionador de rede pode associar um MID a qualquer contexto arbitrário ou estrutura de dados interna que ele usa. Ele está completamente na opção do redirecionador de rede se os MIDs são alocados e usados.

Um MID, conforme definido pelo RDBSS, faz parte de uma estrutura de dados MID_ATLAS que foi projetada para atender a vários critérios. Associados a uma estrutura de dados MID_ATLAS são uma série de uma ou mais estruturas de dados MID_MAP usadas para mapear MIDs para contextos associados.

A estrutura de dados MID_ATLAS, a estrutura MID_MAP e os MIDs devem ser dimensionados bem para lidar com as diferentes funcionalidades de vários servidores remotos. Por exemplo, o servidor típico do LAN Manager no Windows permite 50 solicitações pendentes em qualquer conexão. Alguns tipos de servidores podem dar suporte a apenas uma solicitação pendente, enquanto os servidores de gateway podem desejar que esse número seja muito alto (na ordem de milhares de conexões pendentes).

As duas operações primárias que precisam ser bem tratadas são:

  • Mapeando um MID para o contexto associado a ele. Essa rotina será invocada para processar todos os pacotes recebidos ao longo de qualquer conexão no cliente e no servidor (supondo que os servidores usem MIDs).

  • Gerando um novo MID para enviar solicitações ao servidor. Essa rotina será usada no cliente para imposição de limites máximos de conexão, bem como para marcar cada solicitação simultânea com uma ID exclusiva.

O MID deve ser capaz de gerenciar com eficiência a marcação exclusiva e a identificação de vários MIDs (normalmente 50) de uma combinação possível de 65.536 valores. Em alguns casos, pode fazer sentido criar uma estrutura de MID_ATLAS pequena para salvar a memória do kernel usada pela estrutura MID_MAP e expandir o tamanho da estrutura MID_ATLAS, se necessário, para lidar com maior uso com eficiência. Para garantir uma compensação de espaço no tempo adequada, a pesquisa é organizada como uma hierarquia de três níveis. Os 16 bits usados para representar um MID são divididos em campos de três bits. O comprimento do campo mais à direita (menos significativo ) é decidido pelo número máximo de MIDs permitidos no atlas inicial. Esse valor máximo é um parâmetro passado para a rotina RxCreateMidAtlas quando a estrutura de dados MID_ATLAS é criada pela primeira vez. Esse valor máximo determina o tamanho inicial da estrutura de dados MID_ATLAS criada e quantas estruturas de dados MID_MAP podem ser acomodadas. O comprimento restante é dividido igualmente entre os próximos dois campos, que determinam o tamanho máximo de possíveis estruturas subordinadas MID_ATLAS que podem ser definidas para expandir e estender um MID_ATLAS existente em uma hierarquia de três níveis de estruturas de dados MID_MAP. Portanto, cada estrutura de dados MID_ATLAS pode conter o número máximo de estruturas de MID_MAP ou um ponteiro para uma MID_ATLAS subordinada e as estruturas de MID_MAP.

Por exemplo, se um máximo de 50 MIDs forem alocados na criação, o comprimento do primeiro campo será 6 (64 ( 2 ** 6 ) for maior que 50 ). O comprimento restante é dividido em dois campos de 5 bits cada para o segundo e terceiro níveis hierárquicos para que uma estrutura de dados MID_ATLAS existente possa ser expandida para acomodar mais entradas MID_MAP.

O RDBSS fornece as seguintes rotinas para criar e manipular uma estrutura de dados MID_ATLAS, estruturas de dados MID_MAP associadas e IDs multiplex.

Rotina Descrição

RxAssociateContextWithMid

Essa rotina associa o contexto opaco fornecido a um MID disponível de uma estrutura de MID_ATLAS.

RxCreateMidAtlas

Essa rotina aloca uma nova instância do MID_ATLAS estrutura de dados e a inicializa.

RxDestroyMidAtlas

Essa rotina destrói uma instância existente de uma estrutura de dados MID_ATLAS e libera a memória alocada a ela. Como efeito colateral, ele invoca o destruidor de contexto passado em cada contexto válido na estrutura MID_ATLAS.

RxMapMidToContext

Essa rotina mapeia um MID para seu contexto associado em uma estrutura MID_ATLAS.

RxMapAndDissociateMidFromContext

Essa rotina mapeia um MID para seu contexto associado em uma estrutura MID_ATLAS e, em seguida, desassocia o MID do contexto.

RxReassociateMid

Essa rotina reassocia um MID com um contexto alternativo.