Управление подключением и структурой файлов
Существует шесть основных структур данных, используемых RDBSS для управления подключениями и файловых структур. Эти структуры данных используются внутри RDBSS и различными сетевыми мини-перенаправлениями. Существует две версии этих структур данных. Версия сетевого мини-перенаправления содержит поля, которыми может управлять драйвер сетевого мини-перенаправления. Версия сетевого мини-перенаправления этих структур данных начинается с префикса MRX_. Версия RDBSS содержит дополнительные поля, которыми может управлять только RDBSS.
Ниже перечислены шесть основных структур данных.
SRV_CALL—контекст вызова сервера. Эта структура обеспечивает абстракцию для удаленного сервера.
NET_ROOT — корень сети. Эта структура абстрагирует подключение к общей папке.
V_NET_ROOT — представление корневых сетей (также называемых виртуальными сетевыми корнями).
FCB — блок управления файлом. Эта структура представляет открытый файл в общей папке.
SRV_OPEN—открытый контекст на стороне сервера. Эта структура инкапсулирует открытый дескриптор на сервере.
FOBX—расширение объекта файла. Эта структура является расширением RDBSS для структуры FILE_OBJECT .
Эти структуры данных организованы в следующей иерархии:
SRV_CALL
FCB <------> NET_ROOT
SRV_OPEN <---> V_NET_ROOT
FOBX
FILE_OBJECT
В ответ на вызовы файловой системы ядра RDBSS обычно создает и завершает для драйвера сетевого мини-перенаправления все ранее упомянутые структуры, кроме структуры FOBX. Таким образом, драйвер сетевого мини-перенаправления обычно вызывает только несколько подпрограмм RDBSS, используемых для управления подключением и структурой файлов. Большинство из этих процедур вызываются внутри RDBSS.
Все эти структуры данных считаются ссылочными. Ссылочные значения в структуре данных:
Структура данных | Описание счетчика ссылок |
---|---|
SRV_CALL |
Количество NET_ROOT записей, указывающих на SRV_CALL, а также некоторое динамическое значение. |
NET_ROOT |
Количество записей FCB и V_NET_ROOT записей, указывающих на NET_ROOT, а также некоторое динамическое значение. |
V_NET_ROOT |
Количество SRV_OPEN записей, указывающих на V_NET_ROOT, а также некоторое динамическое значение. |
FCB |
Количество SRV_OPEN записей, указывающих на FCB, а также некоторое динамическое значение. |
SRV_OPEN |
Количество записей FOBX, указывающих на SRV_OPEN, а также некоторое динамическое значение. |
FOBX |
Некоторое динамическое значение. |
В каждом случае динамическое значение ссылается на количество вызывающих объектов, которые ссылались на структуру без разыменовки. Статическая часть счетчика ссылок поддерживается самими подпрограммами. Например, RxCreateNetRoot увеличивает число ссылок для связанной структуры SRV_CALL.
Вызовы ссылок и успешные поиски увеличивают количество ссылок; Вызовы разыменования уменьшает количество. Создание обычных вызовов выделяет структуру и задает для счетчика ссылок значение 1.
Число ссылок, связанных с любой структурой данных, равно не менее 1 плюс количество экземпляров структуры данных на следующем более низком уровне, связанном с ней. Например, число ссылок, связанных с SRV_CALL с двумя NET_ROOTs, равно не менее 3. Помимо ссылок, содержащихся во внутренних структурах NameTable RDBSS и структуре данных на следующем более низком уровне, существуют дополнительные ссылки, которые могут быть получены.
Эти ограничения гарантируют, что структура данных на любом заданном уровне не может быть завершена (освобождена и соответствующий блок памяти освобожден), пока не будут завершены все структуры данных на следующем уровне ниже, не будут завершены или не будут освобождены ссылки на них. Например, если ссылка на FCB хранится, то можно безопасно получить доступ к связанным с ним структурам V_NET_ROOT, NET_ROOT и SRV_CALL.
Две важные абстракции, используемые в интерфейсе между мини-перенаправлениями сети и RDBSS, — это SRV_CALL и NET_ROOT структуры. Структура SRV_CALL соответствует контексту, связанному с сервером, с которым установлено соединение, а структура NET_ROOT соответствует общей папке на сервере (это также может рассматриваться как часть пространства имен, которое было заявлено мини-перенаправлением сети).
Создание SRV_CALL и NET_ROOT структур обычно включает по крайней мере один круговой путь сети. Чтобы обеспечить продолжение асинхронных операций, эти операции моделироваются как двухфазное действие. Каждый вызов мини-перенаправления сети для создания SRV_CALL и структуры NET_ROOT сопровождается вызовом от мини-перенаправления сети к RDBSS для уведомления о состоянии завершения запроса. В настоящее время они являются синхронными.
Создание структуры SRV_CALL еще более осложняется тем, что RDBSS должен выбрать один из нескольких мини-перенаправителей сети для установления соединения с сервером. Чтобы предоставить RDBSS максимальную гибкость при выборе мини-перенаправителя сети, который он хочет развернуть, создание структуры SRV_CALL включает третий этап, на котором RDBSS уведомляет мини-перенаправление сети о победителе. Все проигрышные сетевые мини-перенаправители уничтожают связанный контекст.
В этом разделе рассматриваются следующие вопросы.
Подключения и блокировка структуры файлов
Процедуры управления блоками подключения и управления файлами