Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС_Шеховцов_1.docx
Скачиваний:
73
Добавлен:
09.11.2019
Размер:
14.73 Mб
Скачать

20.2.1. Віддалені виклики процедур

RPC відрізняється від сокетів тим, що в разі використання цієї технології мережа є прозорою для програміста. Ця прозорість виявляється в тому, що код клієнт­ських застосувань і серверних процедур, які взаємодіють за допомогою RPC, пев­ною мірою виглядає так, ніби мережі немає; фактично його не можна відрізнити від коду, котрий використовує локальні процедури. Покажемо, внаслідок чого вдається досягти такої прозорості.

Заглушки

Основна ідея, на якій Грунтуються RPC, полягає в тому, що клієнт і сервер по­в'язані не прямо, а через заглушки (stubs) - спеціальні програмні модулі, відпові­дальні за мережну взаємодію. Розглянемо, які заглушки беруть участь у виклику віддаленої процедури.

1. Під час звертання до віддаленої процедури клієнтський процес використовує локальні домовленості про виклик (аналогічні до виклику локальної процедури), але насправді звертається до клієнтської заглушки (client stub), що маршалізує параметри і пересилає їх серверу. Під маршалізацією (marshaling) розуміють упакування даних у формат, придатний для передавання мережею (із мереж-ним порядком байтів тощо), під демаршалізацією (demarshaling) - їхнє зво­ротне перетворення.

2. На сервері дані приймає серверна заглушка (server stub), демаршалізує парамет­ри і викликає віддалену процедуру. Вона також буде викликана із локальними

домовленостями про виклик, її код не має інформації про те, що виклик був

віддаленим. Після цього серверна заглушка маршалізує повернені значення

і передає їх назад клієнтові.

3. На клієнті повернені значення демаршалізує клієнтська заглушка і передає

клієнтському застосуванню аналогічно до даних локальної процедури.

Основною особливістю заглушок є те, що вони мають ті самі інтерфейси, що й відповідні процедури. Клієнтська заглушка виглядає для застосування-клієнта як локальна процедура з одними й тими самими параметрами; серверна заглушка виглядає для віддаленої процедури як локальний клієнт.

Мова IDL

Для автоматизації створення заглушок у RPC використовують опис інтерфейсів процедур спеціальною мовою опису інтерфейсів (Interface Definition Language, IDL). Кожну процедуру, яку потрібно викликати віддалено, необхідно описати на IDL, задавши ім'я процедури, кількість і типи параметрів, а також тип повернен­ня. Файл з IDL-кодом, який містить оголошення таких процедур, обробляють IDL-компілятором, що генерує заглушки для клієнта і сервера.

Архітектура віддаленого виклику процедур показана на рис. 20.2.

Є різні реалізації ГОЦ що втілюють загальні принципи цієї мови.

1.Процедури на IDL об'єднують в інтерфейси. У цій мові під інтерфейсом розу­міють набір заголовків процедур і типів, пов'язаних спільним призначенням. Інтерфейс має ім'я і номер версії. Кожний інтерфейс внаслідок обробки IDL-компілятором перетворюється на пару заглушок - клієнтську і серверну.

2. IDL є декларативною мовою, вона призначена виключно для опису інтерфей­сів (фактично це зводиться до опису заголовків процедур і типів даних). Вико­нуваних операторів у ній немає.

3. Для забезпечення зв'язку між неоднорідними системами в IDL має бути зафік­совано набір базових типів (наприклад, може бути прийнято, що і nt завжди буде завдовжки 4 байти тощо).

4. Параметри процедур в IDL мають режими. Режим параметра визначає напря­мок пересилання відповідних даних. Для вхідних параметрів дані передають від клієнта серверу, для вихідних — від сервера клієнтові, для параметрів змі­шаного режиму - в обидва боки.