- •Что такое процесс?
- •Адресное пространство
- •Набор ресурсов
- •Объект-процесс
- •Что такое поток?
- •Многозадачность и мультипроцессорная обработка
- •Многопоточность
- •Объект-поток
- •История
- •Опорная модель osi
- •Встроенная сетевая поддержка
- •Сетевые api
- •Разрешение имен
- •Встроенные сетевые компоненты
- •Открытая архитектура
- •Доступ пользовательского режима к удаленным файловым системам
- •Транспортные протоколы
- •Среда ndis для сетевых драйверов
- •Среда распределенных приложений
- •Удаленный вызов процедур
- •Именованные каналы
- •Корпоративные сети и распределенная защита
Удаленный вызов процедур
Средство удаленного вызова процедур
(remote procedure
call, RPC)
позволяет создавать приложения, состоящие
из произвольного числа процедур, из
которых часть выполняется локально, а
часть — по сети на удаленных компьютерах.
RPC предоставляет модель работы с сетью,
ориентированную на процедуры, а не на
транспорты, что позволяет упростить
разработку распределенных приложений.
Сетевое программное обеспечение
традиционно основывается на модели
ввода-вывода. В Windows NT,
например, сетевая операция начинается
с того, что приложение выдает запрос
удаленного ввода-вывода. ОС обрабатывает
запрос, передавая его редиректору,
который выступает в качестве удаленной
файловой системы. После того как удаленная
система отработает запрос и вернет
резуль-
Рис. 9-15. Приложение, использующее библиотеки.
таты, сетевая плата генерирует прерывание. Ядро обрабатывает это прерывание, и исходная операция ввода-вывода завершается, возвращая результаты вызывающей программе.
RPC использует совершенно другой подход. Приложения RPC выглядят так же, как и другие структурные приложения, — у них есть главная программа, которая для выполнения специфических задач вызывает процедуры или библиотеки процедур, как показано на рис. 9-15.
Однако отличие между приложениями RPC и обычными программами состоит в том, что некоторые библиотеки процедур в приложении RPC выполняются на удаленных компьютерах, а другие — локально (см. рис. 9-16).
Для приложения RPC все процедуры выглядят локальными. Другими словами, вместо того, чтобы заставлять программиста писать код для передачи запросов на вычисления или ввод-вывод по сети, для работы с сетевыми протоколами, обработки сетевых ошибок, ожидания результатов и т. д., программное обеспечение RPC выполняет эти задачи автоматически. А средство RPC Windows NT может работать с любыми доступными протоколами, загруженными в систему.
Для написания приложения RPC программист решает, какие процедуры будут исполняться локально, а какие — удаленно. Например, предположим, что обычная рабочая станция подключена по сети к суперкомпьютеру CRAY или к машине, специально предназначенной для быстрого выполнения векторных вычислений. Если программист пишет программу, работающую с большими матрицами, то с точки зрения производительности имеет смысл переложить математические вычисления на удаленный компьютер, написав программу в виде приложения RPC.
Функционирует приложение RPC следующим образом. В процессе своей работы оно вызывает как локальные процедуры, так и процедуры, отсутствующие на локальной машине. Для обработки последнего случая приложение связывается с локальной DLL, которая содержит по одной процедуре—заглушке (stub procedure) для каждой из удаленных процедур. Процедура-заглушка имеет то же имя и интерфейс, что и удаленная процедура, но вместо выполнения соответствующей операции заглушка берет переданные ей параметры и выполняет их преобразование (marshaling) для передачи по сети. Преобразование параметров — это упорядочение и упаковка их в определенном формате, пригодном для пересылки по сети, например, разрешение ссылок и копирование всех структур данных, на которые ссылаются указатели.
Рис. 9-16. Приложение RPC, использующее библиотеки.
Затем заглушка вызывает процедуры библиотеки RPC периода выполнения, и они находят компьютер, на котором расположены удаленные процедуры, определяют используемые этим компьютером механизмы транспорта и посылают запрос при помощи локального программного обеспечения сетевого транспорта. Когда удаленный сервер получает запрос RPC, он выполняет обратное преобразование параметров, реконструирует оригинальный вызов процедуры и вызывает ее. По окончании работы сервер выполняет обратную последовательность действий для возврата результатов вызывающей программе. Библиотека RPC периода выполнения показана на рис. 9-17.
Кроме библиотеки периода выполнения, в состав средств RPC Microsoft входит компилятор — так называемый компилятор MIDL (Microsoft Interface Definition Language, MIDL — язык описания интерфейса фирмы Microsoft). Использование компилятора MIDL упрощает написание приложений RPC. Программист пишет набор обычных прототипов функций (в предположении, что это язык С или C++), описывающих удаленные процедуры. Затем он добавляет к этим прототипам некоторую дополнительную информацию, например уникальный для сети идентификатор пакета процедур и номер версии, плюс атрибуты, указывающие, является ли параметр процедуры входом, выходом или и тем и другим. Из этих модифицированных прототипов и состоит файл на языке описания интерфейса (interface definition language, IDL).
После создания файла IDL он транслируется компилятором MIDL, который создает процедуры-заглушки для клиентской и серверной стороны, а также заголовочные файлы для подключения к приложению. При компоновке клиентского приложения с файлом процедур-заглушек разрешаются все ссылки на удаленные процедуры. Затем, используя аналогичный процесс, удаленные процедуры устанавливаются на удаленной машине. Программисту, желающему только вызывать существующее приложение RPC, нужно лишь написать программу для клиентской части и скомпоновать ее с локальной библиотекой RPC периода выполнения.
Библиотека RPC периода выполнения использует для взаимодействия с транспортным протоколом единый интерфейс доступа к транспорту RPC
Рис. 9-17. Библиотека RPC периода выполнения.
(RPC transport provider interface). Этот интерфейс служит тонкой прослойкой между средством RPC и транспортом, которая отображает операции RPC в функции, предоставляемые транспортом. Средство RPC для Windows NT предоставляет DLL компонентов доступа к транспорту для именованных каналов, NetBIOS, TPC/IP и DECnet. Поддержку других транспортов можно ввести, написав дополнительные DLL. Таким же образом средство RPC поддерживает работу с различными сетевыми средствами защиты. Кроме DLL компонентов доступа к транспорту, между средством RPC и сетью могут быть добавлены DLL защиты. В отсутствие других DLL защиты программное обеспечение RPC для Windows NT использует встроенную защиту именованных каналов.
Для того, чтобы средство RPC могло взаимодействовать с приложениями RPC на другой машине, они должны использовать одни и те же соглашения RPC. Microsoft RPC соответствует стандарту RPC, установленному Open Software Foundation (OSF) в спецификации среды распределенных вычислений (DCE). Таким образом, приложения, написанные с использованием Microsoft RPC, могут вызывать удаленные процедуры на других системах, использующих стандарт DCE.
Большинство сетевых сервисов Windows NT являются приложениями RPC, а это значит, что они могут вызываться как локальными процессами, так и процессами на удаленных машинах. Таким образом, удаленный клиентский компьютер может обращаться к сервисам Вашего сервера для просмотра списка совместно используемых ресурсов, открытых файлов, очередей печати или активных пользователей на этом сервере, либо он может вызвать сервис сообщений для посылки Вам сообщения (конечно, при наличии соответствующих прав доступа).
