Видалений виклик процедур

Книга присвячена сімейству операційних систем UNIX та містить інформацію про принципи організації, ідеології та архітектури, що поєднують різні версії цієї операційної системи.
У книзі розглядаються: архітектура ядра UNIX (підсистеми вводу/виводу, управління пам'яттю та процесами, а також файлова підсистема), програмний інтерфейс UNIX (системні виклики та основні бібліотечні функції), середовище користувача (командний інтерпретатор shell, основні команди та утиліти) та сеті підтримка UNIX (протоколів сімейства TCP/IP, архітектура мережевої підсистеми, програмні інтерфейси сокетів і TLI).
Для широкого кола користувачів
Операційна система UNIX
Видалений виклик процедур
Видалений виклик процедур
У попередніх розділах розглядався програмний інтерфейс досить низького рівня — по суті, програма взаємодіяла безпосередньо з транспортним протоколом, самостійно реалізуючи деякий протокол верхнього рівня при обміні даними. У наведених прикладах легко помітити, що значна частина коду цих програм присвячена створенню комунікаційних вузлів, встановленню та завершенню зв'язку.
З погляду розробника програмного забезпечення, перспективнішим є підхід, коли використовується прикладний програмний інтерфейс вищого рівня, ізолюючий програму від специфіки мережевої взаємодії. У цьому розділі ми розглянемо один із таких підходів, на базі якого, зокрема, розроблена файлова система NFS, що отримав назвувіддалений виклик процедур(Remote Procedure Call, RPC).
Використання підпрограм у програмі — традиційний спосіб структурувати завдання, зробити його більш ясним. Найчастіше використовувані підпрограми збираються вбібліотеки, де можна використовувати різними програмами. У разі йдеться про локальному (місцевому) виклик, тобто. і викликає, і об'єкти, що викликається, працюють в рамках однієї програми на одному комп'ютері.
У разі віддаленого виклику процес, що виконується на одному комп'ютері, запускає процес на віддаленому комп'ютері (тобто фактично запускає код процедури на віддаленому комп'ютері). Вочевидь, що віддалений виклик процедури істотно відрізняється від традиційного локального, проте з погляду програміста таких відмінностей практично відсутні, тобто. архітектура віддаленого виклику процедури дозволяє зімітувати виклик локальною.
Однак якщо у разі локального виклику програма передає параметри в викликану процедуру і отримує результат роботи через стек або загальні області пам'яті, то у разі віддаленого виклику передача параметрів перетворюється на передачу запиту по мережі, а результат роботи знаходиться в відгуку.
Цей підхід є можливою основою створення розподілених додатків, і хоча багато сучасних систем не використовують цей механізм, основні концепції та терміни у багатьох випадках зберігаються. При описі механізму RPC ми традиційно називатимемо викликаючий процес - клієнтом, а віддалений процес, що реалізує процедуру, - сервером.
Видалений виклик процедури включає такі кроки:
1. Програма-клієнт здійснює локальний виклик процедури, яка називаєтьсязаглушкою(stub). При цьому клієнту "здається", що, викликаючи заглушку, він здійснює власне виклик процедури-сервера. клієнт передає заглушці необхідні параметри, а вона повертає результат. Однак справа не зовсім так, як це собі уявляє клієнт. Завдання заглушки - прийняти аргументи, що призначаютьсявіддаленій процедурі, можливо, перетворити їх на певний стандартний формат і сформувати мережевий запит. Упаковка аргументів та створення мережного запиту називаєтьсяскладанням(marshalling).
2. Мережевий запит пересилається через мережу на віддалену систему. Для цього у заглушці використовуються відповідні дзвінки, наприклад, розглянуті у попередніх розділах. Зауважимо, що у своїй можуть бути використані різні транспортні протоколи, причому як сімейства TCP/IP.
3. На віддаленому хості все відбувається у зворотному порядку. Заглушка сервера чекає на запит і при отриманні витягує параметри - аргументи виклику процедури.Вилучення(unmarshalling) може включати необхідні перетворення (наприклад, зміни порядку розташування байтів).