Вызов удаленных процедур (RPC) - реферат

Концепция удаленного вызова процедур

Мысль вызова удаленных процедур (Remote Procedure Call - RPC) состоит в расширении отлично известного и понятного механизма передачи управления и данных снутри программки, выполняющейся на одной машине, на передачу управления и данных через сеть. Средства удаленного вызова процедур созданы для облегчения организации распределенных вычислений. Большая эффективность использования RPC достигается Вызов удаленных процедур (RPC) - реферат в тех приложениях, в каких существует интерактивная связь меж удаленными компонентами с маленьким временем ответов и относительно малым количеством передаваемых данных. Такие приложения именуются RPC-ориентированными.

Соответствующими чертами вызова локальных процедур являются:

Реализация удаленных вызовов значительно труднее реализации вызовов локальных процедур. Начнем с того, что так как вызывающая и вызываемая процедуры производятся на различных машинах, то они имеют различные адресные места, и это делает трудности при передаче характеристик Вызов удаленных процедур (RPC) - реферат и результатов, в особенности если машины не схожи. Потому что RPC не может рассчитывать на разделяемую память, то это значит, что характеристики RPC не должны содержать указателей на ячейки нестековой памяти и что значения характеристик должны копироваться с 1-го компьютера на другой. Последующим различием RPC от локального Вызов удаленных процедур (RPC) - реферат вызова будет то, что он непременно употребляет нижележащую систему связи, но это не должно быть очевидно видно ни в определении процедур, ни в самих процедурах. Удаленность заносит дополнительные препядствия. Выполнение вызывающей программки и вызываемой локальной процедуры в одной машине реализуется в рамках одного процесса. Но в реализации RPC участвуют Вызов удаленных процедур (RPC) - реферат как минимум два процесса - по одному в каждой машине. В случае, если какой-то из них аварийно закончится, могут появиться последующие ситуации: при аварии вызывающей процедуры удаленно вызванные процедуры станут "осиротевшими", а при аварийном окончании удаленных процедур станут "обездоленными родителями" вызывающие процедуры, которые будут безрезультативно ждать ответа от удаленных процедур.

Не считая Вызов удаленных процедур (RPC) - реферат того, существует ряд заморочек, связанных с неоднородностью языков программирования и операционных сред: структуры данных и структуры вызова процедур, поддерживаемые в каком-либо одном языке программирования, не поддерживаются точно так же во всех других языках.

Эти и некие другие препядствия решает обширно всераспространенная разработка RPC, лежащая в базе многих распределенных Вызов удаленных процедур (RPC) - реферат операционных систем.

Базисные операции RPC

Чтоб осознать работу RPC, разглядим сначала выполнение вызова локальной процедуры в обыкновенной машине, работающей автономно. Пусть это, к примеру, будет системный вызов

count=read (fd,buf,nbytes);

где fd - целое число,
buf - массив знаков,
nbytes - целое число.

Чтоб выполнить вызов, вызывающая Вызов удаленных процедур (RPC) - реферат процедура заталкивает характеристики в стек в оборотном порядке (набросок 3.1). После того, как вызов read выполнен, он помещает возвращаемое значение в регистр, перемещает адресок возврата и возвращает управление вызывающей процедуре, которая выбирает характеристики из стека, возвращая его в начальное состояние. Заметим, что в языке С характеристики могут вызываться либо по Вызов удаленных процедур (RPC) - реферат ссылке (by name), либо по значению (by value). По отношению к вызываемой процедуре параметры-значения являются инициализируемыми локальными переменными. Вызываемая процедура может поменять их, и это не воздействует на значение оригиналов этих переменных в вызывающей процедуре.

Если в вызываемую функцию передается указатель на переменную, то изменение значения этой переменной вызываемой процедурой тянет Вызов удаленных процедур (RPC) - реферат изменение значения этой переменной и для вызывающей процедуры. Данный факт очень существенен для RPC.

Существует также другой механизм передачи характеристик, который не употребляется в языке С. Он именуется call-by-copy/restore и состоит в необходимости копирования вызывающей программкой переменных в стек в виде значений, а потом копирования Вызов удаленных процедур (RPC) - реферат вспять после выполнения вызова поверх уникальных значений вызывающей процедуры.

Решение о том, какой механизм передачи характеристик использовать, принимается разработчиками языка. Время от времени это находится в зависимости от типа передаваемых данных. В языке С, к примеру, целые и другие скалярные данные всегда передаются по значению, а массивы - по ссылке.

Рис Вызов удаленных процедур (RPC) - реферат. 3.1. а) Стек до выполнения вызова read;
б) Стек во время выполнения процедуры;
в) Стек после возврата в вызывающую программку

Мысль, положенная в базу RPC, заключается в том, чтоб сделать вызов удаленной процедуры выглядящим по способности также, как и вызов локальной процедуры. Другими словами - сделать RPC прозрачным: вызывающей процедуре Вызов удаленных процедур (RPC) - реферат не требуется знать, что вызываемая процедура находится на другой машине, и напротив.

RPC добивается прозрачности последующим методом. Когда вызываемая процедура вправду является удаленной, в библиотеку помещается заместо локальной процедуры другая версия процедуры, именуемая клиентским стабом (stub - заглушка). Подобно уникальной процедуре, стаб вызывается с внедрением вызывающей последовательности (как Вызов удаленных процедур (RPC) - реферат на рисунке 3.1), так же происходит прерывание при воззвании к ядру. Исключительно в отличие от уникальной процедуры он не помещает характеристики в регистры и не запрашивает у ядра данные, заместо этого он сформировывает сообщение для отправки ядру удаленной машины.

Этапы выполнения RPC

Взаимодействие программных компонент при выполнении удаленного вызова процедуры иллюстрируется рисунком Вызов удаленных процедур (RPC) - реферат 3.2. После того, как клиентский стаб был вызван программой-клиентом, его первой задачей является наполнение буфера отправляемым сообщением. В неких системах клиентский стаб имеет единственный буфер фиксированной длины, заполняемый всякий раз с самого начала при поступлении каждого нового запроса. В других системах буфер сообщения представляет собой пул буферов для Вызов удаленных процедур (RPC) - реферат отдельных полей сообщения, при этом некие из этих буферов уже заполнены. Этот способ в особенности подходит для тех случаев, когда пакет имеет формат, состоящий из огромного числа полей, но значения многих из этих полей не изменяются от вызова к вызову.

Потом характеристики должны быть преобразованы в соответственный формат и вставлены в Вызов удаленных процедур (RPC) - реферат буфер сообщения. К этому моменту сообщение готово к передаче, потому производится прерывание по вызову ядра.

Рис. 3.2. Remote Procedure Call

Когда ядро получает управление, оно переключает контексты, сохраняет регистры микропроцессора и карту памяти (дескрипторы страничек), устанавливает новейшую карту памяти, которая будет употребляться для работы в режиме ядра. Так как Вызов удаленных процедур (RPC) - реферат контексты ядра и юзера различаются, ядро должно точно скопировать сообщение в свое собственное адресное место, так, чтоб иметь к нему доступ, уяснить адресок предназначения (а, может быть, и другие поля заголовка), также оно должно передать его сетевому интерфейсу. На этом заканчивается работа на клиентской стороне. Врубается таймер Вызов удаленных процедур (RPC) - реферат передачи, и ядро может или делать повторяющийся опрос наличия ответа, или передать управление планировщику, который изберет какой-нибудь другой процесс на выполнение. В первом случае ускоряется выполнение запроса, но отсутствует мультипрограммирование.

На стороне сервера поступающие биты помещаются принимающей аппаратурой или во интегрированный буфер, или в оперативку. Когда вся информация будет Вызов удаленных процедур (RPC) - реферат получена, генерируется прерывание. Обработчик прерывания инспектирует корректность данных пакета и определяет, какому стабу следует их передать. Если ни один из стабов не ждет этот пакет, обработчик должен или поместить его в буфер, или вообщем отрешиться от него. Если имеется ожидающий стаб, то сообщение копируется ему. В конце концов Вызов удаленных процедур (RPC) - реферат, производится переключение контекстов, в итоге чего восстанавливаются регистры и карта памяти, принимая те значения, которые они имели в момент, когда стаб сделал вызов receive.

Сейчас начинает работу серверный стаб. Он распаковывает характеристики и помещает их подходящим образом в стек. Когда все готово, производится вызов сервера. После выполнения процедуры сервер передает Вызов удаленных процедур (RPC) - реферат результаты клиенту. Для этого производятся все описанные выше этапы, исключительно в оборотном порядке.

Набросок 3.3 указывает последовательность команд, которую нужно выполнить для каждого RPC-вызова, а набросок 3.4 - какая толика общего времени выполнения RPC тратится на выполнение каждого их обрисованных 14 шагов. Исследования были проведены на мультипроцессорной рабочей станции DEC Firefly Вызов удаленных процедур (RPC) - реферат, и, хотя наличие 5 микропроцессоров непременно воздействовало на результаты измерений, приведенная на рисунке гистограмма дает общее представление о процессе выполнения RPC.

Рис. 3.3. Этапы выполнения процедуры RPC

Рис. 3.4. Рассредотачивание времени меж 14 шагами выполнения RPC

1. Вызов стаба

2. Приготовить буфер

3. Упаковать характеристики

4. Заполнить поле заголовка

5. Вычислить контрольную сумму в сообщении

6. Прерывание к ядру

7. Очередь пакета Вызов удаленных процедур (RPC) - реферат на выполнение

8. Передача сообщения контроллеру по шине QBUS

9. Время передачи по сети Ethernet

10. Получить пакет от контроллера

11. Процедура обработки прерывания

12. Вычисление контрольной суммы

13. Переключение контекста в место юзера

14. Выполнение серверного стаба

Динамическое связывание

Разглядим вопрос о том, как клиент задает месторасположение сервера. Одним из способов решения этой трудности является Вызов удаленных процедур (RPC) - реферат конкретное внедрение сетевого адреса сервера в клиентской программке. Недочет такового подхода - его чрезвычайная негибкость: при перемещении сервера, либо при увеличении числа серверов, либо при изменении интерфейса во всех этих и многих других случаях нужно перекомпилировать все программки, которые использовали жесткое задание адреса сервера. Для того, чтоб избежать всех этих Вызов удаленных процедур (RPC) - реферат заморочек, в неких распределенных системах употребляется так называемое динамическое связывание.

Исходным моментом для динамического связывания является формальное определение (спецификация) сервера. Спецификация содержит имя файл-сервера, номер версии и перечень процедур-услуг, предоставляемых данным сервером для клиентов (набросок 3.5). Для каждой процедуры дается описание ее характеристик с указанием того Вызов удаленных процедур (RPC) - реферат, является ли данный параметр входным либо выходным относительно сервера. Некие характеристики могут быть сразу входными и выходными - к примеру, некий массив, который посылается клиентом на сервер, модифицируется там, а потом ворачивается назад клиенту (операция copy/ restore).

Рис. 3.5. Спецификация сервера RPC

Формальная спецификация сервера употребляется в качестве начальных данных для программы-генератора стабов Вызов удаленных процедур (RPC) - реферат, которая делает как клиентские, так и серверные стабы. Потом они помещаются в надлежащие библиотеки. Когда пользовательская (клиентская) программка вызывает всякую функцию, определенную в спецификации сервера, соответственная стаб-процедура связывается с двоичным кодом программки. Аналогично, когда компилируется сервер, с ним связываются серверные стабы.

При запуске сервера самым первым Вызов удаленных процедур (RPC) - реферат его действием является передача собственного серверного интерфейса специальной программке, именуемой binder'ом. Этот процесс, узнаваемый как процесс регистрации сервера, включает передачу сервером собственного имени, номера версии, уникального идентификатора и описателя местопребывания сервера. Описатель системно независим и может представлять собой IP, Ethernet, X.500 либо еще какой-нибудь адресок. Не считая того Вызов удаленных процедур (RPC) - реферат, он может содержать и другую информацию, к примеру, относящуюся к аутентификации.

Когда клиент вызывает одну из удаленных процедур 1-ый раз, к примеру, read, клиентский стаб лицезреет, что он еще не подсоединен к серверу, и отправляет сообщение binder-программе с просьбой об импорте интерфейса подходящей версии подходящего сервера Вызов удаленных процедур (RPC) - реферат. Если таковой сервер существует, то binder передает описатель и уникальный идентификатор клиентскому стабу.

Клиентский стаб при посылке сообщения с запросом употребляет в качестве адреса описатель. В сообщении содержатся характеристики и уникальный идентификатор, который ядро сервера употребляет для того, чтоб навести поступившее сообщение в подходящий сервер в случае, если их Вызов удаленных процедур (RPC) - реферат несколько на этой машине.

Этот способ, заключающийся в импорте/экспорте интерфейсов, обладает высочайшей гибкостью. К примеру, может быть несколько серверов, поддерживающих один и тот же интерфейс, и клиенты распределяются по серверам случайным образом. В рамках этого способа становится вероятным повторяющийся опрос серверов, анализ их работоспособности и, в случае отказа, автоматическое отключение Вызов удаленных процедур (RPC) - реферат, что увеличивает общую отказоустойчивость системы. Этот способ может также поддерживать аутентификацию клиента. К примеру, сервер может найти, что он может быть применен только клиентами из определенного перечня.

Но у динамического связывания имеются недочеты, к примеру, дополнительные затратные расходы (временные издержки) на экспорт и импорт интерфейсов. Величина этих Вызов удаленных процедур (RPC) - реферат издержек может быть значительна, потому что многие клиентские процессы есть куцее время, а при каждом старте процесса процедура импорта интерфейса должна быть опять выполнена. Не считая того, в огромных распределенных системах может стать узеньким местом программка binder, а создание нескольких программ аналогичного предназначения также наращивает затратные расходы на создание и Вызов удаленных процедур (RPC) - реферат синхронизацию процессов.

Семантика RPC в случае отказов

В эталоне RPC должен работать верно и в случае отказов. Разглядим последующие классы отказов:

  1. Клиент не может найти местопребывания сервера, к примеру, в случае отказа подходящего сервера, либо из-за того, что программка клиента была скомпилирована издавна и использовала старенькую версию интерфейса Вызов удаленных процедур (RPC) - реферат сервера. В данном случае в ответ на запрос клиента поступает сообщение, содержащее код ошибки.
  2. Потерян запрос от клиента к серверу. Самое обычное решение - через определенное время повторить запрос.
  3. Потеряно ответное сообщение от сервера клиенту. Этот вариант труднее предшествующего, потому что некие процедуры не являются идемпотентными. Идемпотентной именуется процедура, запрос на Вызов удаленных процедур (RPC) - реферат выполнение которой можно повторить пару раз, и итог при всем этом не поменяется. Примером таковой процедуры может служить чтение файла. Но вот процедура снятия некой суммы с банковского счета не является идемпотентной, и в случае утраты ответа повторный запрос может значительно поменять состояние счета клиента. Одним из вероятных решений Вызов удаленных процедур (RPC) - реферат является приведение всех процедур к идемпотентному виду. Но на практике это не всегда удается, потому может быть применен другой способ - поочередная нумерация всех запросов клиентским ядром. Ядро сервера запоминает номер самого последнего запроса от каждого из клиентов, и при получении каждого запроса делает анализ - является ли этот запрос Вызов удаленных процедур (RPC) - реферат первичным либо повторным.
  4. Сервер потерпел катастрофу после получения запроса. Тут также принципиально свойство идемпотентности, но к огорчению не может быть использован подход с нумерацией запросов. В этом случае имеет значение, когда произошел отказ - до либо после выполнения операции. Но клиентское ядро не может распознать эти ситуации, для него Вызов удаленных процедур (RPC) - реферат понятно только то, что время ответа истекло. Существует три подхода к этой дилемме:

Ни один из этих подходов не является Вызов удаленных процедур (RPC) - реферат очень симпатичным. А лучший вариант, который бы гарантировал ровно одно выполнение RPC, в общем случае не может быть реализован по принципным суждениям. Пусть, к примеру, удаленной операцией является печать некого текста, которая включает загрузку буфера принтера и установку 1-го бита в неком управляющем регистре принтера, в итоге которой принтер Вызов удаленных процедур (RPC) - реферат стартует. Катастрофа сервера может произойти как за микросекунду до, так и за микросекунду после установки управляющего бита. Момент сбоя полностью определяет функцию восстановления, но клиент о моменте сбоя выяснить не может. Короче говоря, возможность аварии сервера конструктивно меняет природу RPC и ясно отражает разницу меж централизованной и распределенной системой Вызов удаленных процедур (RPC) - реферат. В первом случае крах сервера ведет к краху клиента, и восстановление нереально. Во 2-м случае деяния по восстановлению системы выполнить и может быть, и нужно.

    Клиент потерпел катастрофу после отсылки запроса. В данном случае производятся вычисления результатов, которых никто не ждет. Такие вычисления именуют "сиротами". Наличие сирот может Вызов удаленных процедур (RPC) - реферат вызвать разные задачи: непродуктивные издержки процессорного времени, блокирование ресурсов, замена ответа на текущий запрос ответом на запрос, который был выдан клиентской машиной еще до перезапуска системы.

Как поступать с сиротами? Разглядим 4 вероятных решения.

На практике ни один из этих подходов не Вызов удаленных процедур (RPC) - реферат желателен, более того, ликвидирование сирот может ухудшить ситуацию. К примеру, пусть сирота заблокировал один либо более файлов базы данных. Если сирота будет вдруг уничтожен, то эти блокировки останутся, не считая того уничтоженные сироты могут остаться стоять в разных системных очередях, в дальнейшем они могут вызвать выполнение новых процессов и т Вызов удаленных процедур (RPC) - реферат.п.


vivodi-iz-priobretennogo-opitaoblasti-trebuyushie-dalnejshej-raboti-programmi-na-2002-2003-godi-predlagaemie.html
vivodi-k-glave-4-dissertaciya-na-soiskanie-uchenoj-stepeni-kandidata-medicinskih-nauk.html
vivodi-komissii-po-razdelu-1-1-obshie-svedeniya-o-specialnosti-i-vipuskayushih-kafedrah.html