Главная » Просмотр файлов » Э. Таненбаум, М. ван Стеен - Распределённые системы (принципы и парадигмы)

Э. Таненбаум, М. ван Стеен - Распределённые системы (принципы и парадигмы) (1162619), страница 24

Файл №1162619 Э. Таненбаум, М. ван Стеен - Распределённые системы (принципы и парадигмы) (Э. Таненбаум, М. ван Стеен - Распределённые системы (принципы и парадигмы)) 24 страницаЭ. Таненбаум, М. ван Стеен - Распределённые системы (принципы и парадигмы) (1162619) страница 242019-09-20СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 24)

Это короткая процедура, которая обыч­но реализуется путем системного вызова read. Другими словами, процедураread — это интерфейс между кодом пользователя и локальной операционной сис­темой.Даже если read — это системный вызов, он производится аналогичным обра­зом, путем помещения параметров в стек, как показано на рис. 2.6, б. Таким обра­зом, программист так и не узнает, что read делает что-то хитрое.RPC организует свою прозрачность аналогичным образом. Если read являет­ся удаленной процедурой (то есть будет исполняться на машине файлового сер­вера), в библиотеку помещается специальная версия read, называемая клиент­ской заглушкой {client stub).

Как и оригинальная функция, она также вызываетсяв соответствии с последовательностью, показанной на рис 2.6, б. Как и оригинал,она также производит вызов локальной операционной системы, только в от­личие от оригинальной функции клиентская заглушка не запрашивает данныеу операционной системы. Вместо этого она упаковывает параметры в сообщениеи путем вызова процедуры send требует переслать это сообщение на сервер, какпоказано на рис. 2.7.

После вызова процедуры send клиентская заглушка вызыва­ет процедуру receive, блокируясь до получения ответа.кОжидание результатаВызов \удаленной \процедуры \/// ЗавершениевызоваЗапрос\Сервер/ Ответ'Вызов локальнойпроцедуры и возвращениерезультатаВремя•Рис. 2.7. Схема RPC между программами клиента и сервераКогда сообщение приходит на сервер, операционная система сервера передаетего серверной заглушке {server stub). Серверная заглушка эквивалентна клиент­ской, но работает на стороне сервера.

Это фрагмент кода, который преобразуетприходящие по сети запросы в вызовы локальных процедур. Обычно сервернаязаглушка запускает процедуру receive и блокируется, ожидая входящих сообще­ний. После получения сообщения серверная заглушка распаковывает его, извле­кая параметры, и традиционным способом (то есть так, как показано на рис.

2.6)2.2. Удаленный вызов процедур97вызывает процедуру сервера. С точки зрения сервера это воспринимается какпрямой вызов с клиента — параметры и адрес возврата находятся в стеке, гдеони и должны находиться, и ничего необычного в этом нет. Сервер делает своедело и обычным порядком возвращает результат вызвавшей процедуре. Так,например, в случае чтения файла сервер заполняет данными буфер, на кото­рый указывает второй параметр.

Этот буфер — внутренний буфер серверной за­глушки.Когда серверная заглушка после окончания обработки вызова возвращаетуправление вызвавшей программе, она запаковывает результаты выполнения (бу­фер) в сообщение и вызывает процедуру send, чтобы возвратить их клиенту. По­сле этого серверная заглушка вновь вызывает процедуру receive, переходя в ре­жим ожидания следующего сообщения.Когда на клиентскую машину приходит ответное сообщение, операционнаясистема клиента обнаруживает, что оно адресовано клиентскому процессу (пасамом деле клиентской заглушке, но операционная система их не различает).Сообщение копируется в буфер ожидания, и клиентский процесс разблокирует­ся. Клиентская заглушка рассматривает сообщение, распаковывает его, извлекаярезультаты, копирует их в память вызвавшей программы и, завершая работу, пе­редает в нее код возврата.

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

Как мы видели, доступ к удаленным службам осуществляется по­средством вызова обычных (то есть локальных) процедур, без всяких там sendи гесе1 ve. Все детали пересылки сообщений скрыты в двух библиотечных проце­дурах, так же как в традиционных библиотеках скрыты детали реально произво­димых системных вызовов.Подведем итоги. При удаленном вызове процедур происходят следующиедействия.1. Процедура клиента обычным образом вызывает клиентскую заглушку.2. Клиентская заглушка создает сообщение и вызывает локальную операцион­ную систему.3.

Операционная система клиента пересылает сообщение удаленной операцион­ной системе.4. Удаленная операционная система передает сообщение серверной заглушке.5. Серверная заглушка извлекает из сообщения параметры и вызывает сервер.6. Сервер выполняет вызов и возвращает результаты заглушке.7. Серверная заглушка запаковывает результаты в сообщение и вызывает своюлокальную операционную систему.8. Операционная система сервера пересылает сообщение операционной системеклиента.98Глава 2.

Связь9. Операционная система клиента принимает сообщение и передает его клиент­ской заглушке.10. Заглушка извлекает результаты из сообщения и передает их клиенту.Сетевые эффекты этих шагов состоят в том, что клиентская заглушка превра­щает локальный вызов процедуры клиента в локальный вызов процедуры серве­ра, причем ни клиент, ни сервер ничего не знают о промежуточных действиях.2.2.2. Передача параметровНазначение клиентской заглушки состоит в том, чтобы получить параметры, за­паковать их в сообщение и послать его серверной заглушке. Хотя эти действиявыглядят несложно, они не так просты, как кажется на первый взгляд. В этомпункте мы рассмотрим некоторые вопросы, связанные с передачей параметровв системах RPC.Передача параметров по значениюУпаковка параметров в сообщение носит название маршалиига параметров{parameter marshaling), В качестве простейшего примера рассмотрим удаленнуюпроцедуру, add (1, j), которая использует два целых параметра, 1 и j , и возвращаетв результате их арифметическую сумму.

(На практике так не делается, посколькуудаленная реализация столь простой процедуры крайне невыгодна, но для при­мера сойдет.) Вызов add иллюстрируется левой частью рис. 2.8 (в клиентскомпроцессе). Клиентская заглушка извлекает два ее параметра и, как показано нарисунке, упаковывает их в сообщение. Она также помещает туда имя или номервызываемой в сообщении процедуры, поскольку сервер может поддерживать не­сколько разных процедур и ему следует указать, какая из них потребоваласьв данном случае.Клиентская машинаСерверная машинаКлиентский процессСерверный процессРеализацияпроцедуры addСервернаязаглушкак^&^Щ).ргос: "add"inti val(i)int: val(j)Операционнаясистема клиентаКлиентскаязаглушкаргос: "add"val(i)int: val(j)jnt:Niiiiiiiргос: "add"int: val(i)int: val(j)Операционнаясистема сервераРис.

2.8. Процесс удаленных вычислений с использованием RPC2.2. Удаленный вызов процедур99Когда сообщение приходит на сервер, заглушка исследует сообщение в поискахуказания на то, какую процедуру следует вызвать, а затем делает соответствую­щий вызов. Если сервер поддерживает и другие удаленные процедуры, сервер­ная заглушка должна содержать ргнструкцию типа switch для выбора вызываемойпроцедуры в зависимости от первого поля сообщения. Реальный вызов процеду­ры сервера из серверной заглушки выглядит почти как первоначальный клиент­ский вызов, если не считать того, что параметрами являются переменные, ини­циализированные значениями, взятыми из сообщения.ТакР1м образом, имеет место следующая пошаговая процедура.1.

Клиент вызрлвает процедуру add.2. Клиентская заглушка строит сообщение.3. Сообщение отправляется по сети на сервер.4. Операционная система сервера передает сообщение серверной заглушке.5. Серверная заглушка распаковывает сообщение.6. Серверная заглушка выполняет локальный вызов процедуры add.Когда сервер заканчивает работу, управление вновь передается серверной за­глушке.

Она получает результат, переданный сервером, и запаковывает его в со­общение. Это сообщение отправляется назад, к клиентской заглушке, котораяраспаковывает его и возвращает полученное значение клиентской процедуре.До тех пор пока машины клиента и сервера идентичны, а все параметры и ре­зультаты имеют скалярный тип (то есть целый, символьный или логический),эта модель работает абсолютно правильно. Однако в больип1х распределенныхсистемах обычно присутствуют машины разных типов. Каждая из машин частоимеет собственное представление чисел, символов и других элементов данных.Так, в мэйнфреймах IBM используется кодовая таблица EBCDIC, а в персональ­ных компьютерах той же фирмы — ASCII.

Вследствие этого, если передать сим­вольный параметр с клиента на базе IBM PC на мэйнфрейм IBM, используемыйв качестве сервера, по простейшей схеме, показанной на рис. 2.8, сервер пойметэти символы неправильно.Сходные проблемы могут обнаружиться при передаче целых чисел (знако­вый или значащий старший бит) и чисел с плавающей точкой. Вдобавок сущест­вует значительно более серьезная проблема, состоящая в том, что в некоторыхмашинах, таких как Intel Pentium, байты нумеруются справа налево, а в других,например в Sun SPARC, — в обратном направлении. Формат компании Intel на­зывается остроконечным {little endian), а формат SPARC — тупоконечным (bigendian), по аналогии с названиями политрхческих партий из книги «ПутешествияГулливера», которые в спорах о том, с какой стороны разбивать яйца, дошли довойны [108]. Для примера рассмотрим процедуру с двумя параметрами, целымчислом и строкой из четырех символов. Для размещения каждого из параметровтребуется одно 32-битное слово.

На рис. 2.9, а показано, как будет выглядеть со­держащий параметры фрагмент сообщения, построенного клиентской заглуш­кой, когда клиент работает на компьютере Intel Pentium. Первое слово содержитцелый параметр, в данном случае 5, а второе слово — строку JILL.100Глава 2. Связь1 2 |1о ' " " о'""' о ' " "1 3171L;_6_L'"" 11_5_|0б'""—1——1Р 1 11—3!0 ""о505\6J 7.J4 1J "' 1 " " LL—,— —.,—— 1"""о1 1""о_5_!L_6j 0\L1Л!51}Рис. 2.9. Исходное сообщение, подготовленное на Pentium (а). Сообщение послеполучения на SPARC (б).

Сообщение после инверсии (в). Цифры в квадратахпоказывают адрес каждого байтаПоскольку сообщение передается по сети байт за байтом (на самом деле бит забитом), первый посланный байт будет и первым принятым. На рис. 2.9, б мы ви­дим, как будет выглядеть сообщение с рис. 2.9, а, принятое на компьютере SPARC.Нумерация байтов здесь такова, что нулевым байтом считается левый (верхню"!байт), а не правый (нижний байт), как в процессорах Intel. После того как сер­верная заглушка прочитает параметры по адресам О и 4, сервер получит, соответ­ственно, целое число, равное 83 886 080 (5x2^"^), и строку JILL,Очевидное, но, к сожалению, неверное решение — просто инвертировать бай­ты каждого слова после того, как оно будет принято (рис.

2.9, в). Теперь целоечисло стало правильным, а строка превратилась в LLIJ. Проблема состоит в том,что целые нужно приводить к другому порядку следования байтов, а строки —нет. Не имея дополнительной информации о том, где строка, а где целое, мы нев состоянии исправить положение дел.Передача параметров по ссылкеТеперь мы подошли к сложной проблеме: как передавать указатели или, в общемслучае, ссылки? Общий ответ таков: с величайшим трудом. Мы помним, что ука­затель имеет смысл только в адресном пространстве того процесса, в котором ониспользуется. Возвращаясь к нашему примеру с процедурой read, который мы об­суждали ранее, второй параметр (адрес буфера) для клиента может быть равен,например, 1000, но нельзя же просто передать на сервер число 1000 и ожидать,что это сработает. На сервере адрес 1000 вполне может прийтись на середину тек­ста программы.Одно из решений состоит в том, чтобы вообще забыть про указатели и ссыл­ки в качестве параметров.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6517
Авторов
на СтудИзбе
302
Средний доход
с одного платного файла
Обучение Подробнее