Управление мультиплексными идентификаторами

RDBSS определяет мультиплексный идентификатор (MID), 16-разрядное значение, которое можно использовать как сетевым клиентом (мини-перенаправлением), так и сервером, чтобы различать одновременные активные запросы для любого подключения. Сетевой перенаправлятель может связать MID с любым произвольным контекстом или внутренней структурой данных, которую он использует. Это полностью зависит от сетевого перенаправителя, будут ли MID выделены и использованы.

MID, определенный RDBSS, является частью структуры данных MID_ATLAS, которая была разработана для того, чтобы соответствовать нескольким критериям. Связанные со структурой данных MID_ATLAS — это ряд из одной или более структур данных MID_MAP, используемых для сопоставления MID с сопутствующими контекстами.

Структура данных MID_ATLAS, структура MID_MAP и MIDs должны хорошо масштабироваться, чтобы обрабатывать различные возможности удалённых серверов. Например, типичный сервер LAN Manager в Windows разрешает 50 невыполненных запросов по любому подключению. Некоторые типы серверов могут обрабатывать только один невыполненный запрос, в то время как для серверов шлюзов может требоваться, чтобы это число было на уровне тысяч активных подключений.

Двумя основными операциями, которые необходимо обрабатывать хорошо, являются:

  • Сопоставление MID с контекстом, связанным с ним. Эта подпрограмма будет вызываться для обработки каждого пакета, полученного вместе с любым подключением на клиенте и сервере (при условии, что серверы используют MID).

  • Создание нового MID для отправки запросов на сервер. Эта подпрограмма будет использоваться в клиенте для принудительного применения максимальных ограничений подключения, а также для тегов каждого параллельного запроса с уникальным идентификатором.

MID должен иметь возможность эффективно управлять уникальной маркировкой и идентификацией обычно 50 MID из возможного сочетания 65 536 значений. В некоторых случаях может потребоваться создать небольшую структуру MID_ATLAS для сохранения памяти ядра, используемой структурой MID_MAP, и расширить размер структуры MID_ATLAS при необходимости для эффективной обработки большего использования. Чтобы обеспечить надлежащий компромисс между временем и пространством, поиск организован как трехуровневая иерархия. 16 битов, используемых для представления MID, разделены на три поля битов. Длина правого поля (наименее значимая) определяется максимальным количеством MID, разрешенных в первоначальном атласе. Это максимальное значение — это параметр, передаваемый подпрограмме RxCreateMidAtlas при создании структуры данных MID_ATLAS. Это максимальное значение определяет начальный размер создаваемой структуры данных MID_ATLAS и количество MID_MAP структур данных. Оставшаяся длина равномерно делится между следующими двумя полями, которые определяют максимальный размер возможных подчиненных структур MID_ATLAS. Эти структуры могут быть определены для преобразования и расширения существующей MID_ATLAS в трехуровневую иерархию структур данных MID_MAP. Таким образом, каждая структура данных MID_ATLAS может содержать максимальное количество структур MID_MAP или указатель на один подчиненный MID_ATLAS, а также структуры MID_MAP.

Например, если для создания выделено не более 50 MID, длина первого поля составляет 6 (64 (2 ** 6) больше 50). Оставшаяся длина разделена на два поля из 5 битов для второго и третьего иерархических уровней, чтобы существующую MID_ATLAS структуру данных можно расширить для размещения более MID_MAP записей.

RDBSS предоставляет следующие процедуры для создания и управления структурой данных MID_ATLAS, связанными MID_MAP структурами данных и идентификаторами мультиплекса.

Рутина Описание

RxAssociateContextWithMid

Эта подпрограмма связывает указанный непрозрачный контекст с доступным MID из структуры MID_ATLAS.

RxCreateMidAtlas

Эта подпрограмма выделяет новый экземпляр структуры данных MID_ATLAS и инициализирует его.

RxDestroyMidAtlas

Эта подпрограмма уничтожает существующий экземпляр структуры данных MID_ATLAS и освобождает память, выделенную ей. За счёт чего происходит вызов переданного деструктора контекста для каждого допустимого контекста в структуре MID_ATLAS как побочного эффекта.

RxMapMidToContext

Эта функция сопоставляет MID с соответствующим контекстом в структуре MID_ATLAS.

RxMapAndDissociateMidFromContext

Эта подпрограмма сопоставляет MID с соответствующим контекстом в MID_ATLAS структуре, а затем отсоединяет MID от контекста.

RxReassociateMid

Эта подпрограмма перераспреждает MID с альтернативным контекстом.