Э. Таненбаум, М. ван Стеен - Распределённые системы (принципы и парадигмы) (1162619), страница 45
Текст из файла (страница 45)
Третья возможность заключается в использовании сервера в качестве большого конечного автомата. По приходе запроса егопроверяет единственный поток выполнения. Если он может быть удовлетворенпутем обращения к кэшу, отлично, в противном случае происходит обращениек дисковой системе.Однако вместо блокировки поток выполнения записывает состояние текущего запроса в таблицу и переходит к ожиданию и получению нового сообщения.Новое сообщение может быть как запросом на совершение новой операции, таки ответом на предыдущий запрос от дисковой подсистемы. Если это новый запрос, мы начинаем новую работу. Если это ответ от диска, из таблицы извлекаетсясоответствующая информация, ответ формируется и передается клиенту. Согласно этой схеме, сервер должен быть в состоянии осуществлять неблокирующиевызовы send и receive.В подобной архитектуре модель «последовательных процессов», которую мынаблюдали в первых двух случаях, отсутствует.
Состояние вычислений для каждого принимаемого и отправляемого сообщения должно полностью сохранятьсяи извлекаться из таблицы. В результате мы сложным образом моделируем потоки выполнения и их стеки. Процесс, протекающий в конечном автомате, состоитв восприятии событий и зависящей от их типа реакции на эти события.Теперь становится ясно, зачем нужны потоки выполнения. Они делают возможным одновременное сохранение идеи последовательных процессов, осуществляющих блокирующие системные вызовы (как при вызовах RPC для работыс диском), и параллельной работы.
Блокирующие системные вызовы упрощают3.2. Клиенты175программирование, а параллельность повышает производительность. Однопоточные серверы сохраняют простоту блокирующих системных вызовов, но проигрывают в производительности. Подход, используемый в конечных автоматах,позволяет благодаря параллелизму добиться высокой производительности, ноиз-за неблокирующих вызовов тяжело программируется. Эти подходы суммированы в табл.
3.1.Таблица 3 . 1 . Три способа построения сервераМодельХарактеристикиПотоки выполненияПараллельность, блокирующие системныевызовыОднопоточный процессОтсутствие параллелизма, блокирующие системныевызовыКонечный автоматПараллелизм, неблокирующие системныевызовы3.2. Клиентыв предыдущих главах мы обсуждали модель клиент-сервер, роли клиента и сервера и способы их взаимодействия. Теперь мы рассматриваем анатомию клиентов и серверов.
Начнем с рассмотрения клиентов. Серверы будут рассматриваться в следующем разделе.3 . 2 . 1 . Пользовательские интерфейсыОсновная задача большинства клиентов — служить передаточным звеном междупользователем и удаленным сервером. Поддержка пользовательского интерфейса — основная функция большинства клиентов. Во многих случаях интерфейсмежду пользователем и удаленным сервером относительно прост и встроен в аппаратуру клиента. Так, например, сотовые телефоны в придачу к традиционномунабору кнопок для набора номера имеют небольшой дисплей.
Сколько-нибудьсложные вещи, такие как работа с электронной почтой, могут потребовать комплектации настоящей клавиатурой, электронным планшетом или устройством распознавания речи.Важный класс интерфейсов составляют графические пользовательские интерфейсы. Далее мы сперва рассмотрим в качестве примера традиционного пользовательского интерфейса систему X-Windows, а затем обсудим современные интерфейсы, которые обеспечивают прямое взаимодействие между приложениями.Система X-WindowsСистема X-Windows, обычно называемая просто X, используется для управлениярастровыми терминалами, в состав которых входят монитор, клавиатура и координатное устройство, такое как мышь.
На самом деле X можно рассматривать какчасть операционной системы, отвечающую за терминалы. Сердце системы ~ это176Глава 3. Процессыто, что мы называем Х-ядро (X kernel). Оно содержит все необходимые для управления терминалами драйверы устройств и потому сильно зависит от аппаратнойконфигурации.Х-ядро предоставляет относительно низкоуровневый интерфейс для управления экраном и перехвата сообщений, поступающрхх от клавиатуры и мыши.Этот интерфейс доступен для приложений в виде библиотеки ХНЬ.
Соответствующая организация показана на рис. 3.4. (В терминологии X-Windows Х-ядроназывается Х-сервером, в то время как программа, использующая его функции,называется Х-клиентом. Чтобы избежать путаницы со стандартной терминологией клиент-сервер, мы воздержимся от использования терминов Х-сервер иХ-клиент.)Машина клиентаМашина сервераИнтерфейс XlibХ-протоколХ-ядроТерминал (включая дисплей,клавиатуру, мышь и т. д.)Драйверы устройствРис. 3.4. Базовая организация системы X-WindowsСистема X различает два типа программ — обычные приложения и менеджеры окон. Нормальные приложения обычно запрашивают (через ХНЬ) созданиена экране окна, которое затем используется для ввода или другой работы.
Крометого, X гарантирует, что если окно приложения активно и указатель мыши находится внутри окна, значит, все сообщенрш от мыши и клавиатуры будут переданы в приложерше.Менеджер окон {window manager) — это приложение, которому дано особоеправо на работу со всем экраном. Обычное приложение обязано подчиняться ограничениям на работу с экраном, которые реализованы в менеджере окон. Так,менеджер окон может указать, что окна не должны перекрываться или должнывсегда выводиться одним и тем же цветом. Соответственно, менеджер окон определяет «вид и цвет» самой оконной системы.У Х-системы имеется интересная особенность, заключающаяся в том, чтоХ-ядро и приложения, используюш;ие Х-систему, не обязательно должны располагаться на одной и той же машине.
Так, Х-система поддерживает Х-протокол —ориентированный на использование в сети коммуникационного протокола, посредством которого экземпляры Xlib могут обмениваться данными и событиямис Х-ядром. Это приводит к существованию множества различных вариантов архитектуры клиент-сервер с широкой степенью варьирования уровня интеллектуальности клиента. В своей примитивнейшей форме клиент представляет собой3.2. Клиенты177«голое» Х-ядро, в то время как весь код приложения находится на удаленной машине.
Сконфигурированный таким образом терминал часто называют простоХ-терминалом (X terminal). В наиболее интеллектуальном виде на клиентскоймашине могут быть запущены многочисленные приложения, включая менеджерокон, и необходимость в сетевой связи отпадает.Важно понимать, что системы пользовательского интерфейса, такие как Х-система, только предоставляют приложениям пользовательский интерфейс.
Единственная информация, которую подобные приложения могут получать из системы, — это события, определяющие основные действия пользователя с подключенными к терминалу устройствами. Примерами подобных событий могут бытьнажатия клавиш, перемещение мыши и операции с кнопками мыши и т. п.Составные документыКак мы уже говорили в главе 1, современные пользовательские интерфейсы могут делать значительно больше, чем X-Windows. Так, они позволяют приложениям совместно использовать одно и то же графическое окно и в процессе работыпользователя обмениваться данными через это окно.
Дополнительные действия,которые могут выполнять пользователи, включают в себя и то, что обычно называют соответственно операциями перетаскивания (drag-and-drop) и редактирования по месту (in-place editing).Типичным примером функциональности перетаскивания является перемещение представляющего файл А значка в мусорную корзину, приводящее к его удалению. В данном случае пользовательский интерфейс должен быть в состоянииделать более сложную работу, чем при выравнивании значков на экране: когдазначок Л переносится на изображение мусорной корзины, он должен передатьимя файла Л приложению, ассоциированному с мусорной корзиной. Немного подумав, вы легко найдете и другие примеры.Редактирование по месту может быть с успехом проиллюстрировано на примере документа, содержащего текст и графику.
Представьте себе, что документпросматривается при помощи стандартного текстового редактора. Как только пользователь перемещает мышь на изображение, пользовательский интерфейс передает эту информацию приложению для работы с графикой, которое позволяетпользователю внести в изображение изменения. Так, пользователь может повернуть изображение, а это может повлиять на размещение рисунка в документе.Пользовательский интерфейс должен в этом случае определить новую высотуи ширину рисунка и передать эту информацию текстовому редактору.
Последний, в свою очередь, сможет автоматически обновить вид страницы.Ключевая идея, стоящая за пользовательскими интерфейсами, — это понятиео составном документе {compound document). Составной документ можно определить как набор документов, возможно различных типов (например, текст, рисунки, электронные таблицы и т. д.), которые интегрируются в одно целое науровне пользовательского интерфейса. Пользовательский интерфейс, в которомпредставляется этот документ, скрывает тот факт, что с разными частями документа работают различные приложения.
С точки зрения пользователя, все частисоедрпгены в одно целое. Если изменение одной из частей влечет за собой изме-178Глава 3. Процессынения других, пользовательский интерфейс может производить необходимые замеры, например, для уведомления соответствующих приложений.Аналогично ситуации, описанной для системы X-Windows, приложение, ассоциированное с составным документом, не обязательно выполняется на машине клиента. Однако должно быть понятно, что пользовательский интерфейс, поддерживающий составные документы, производит значительно больший объемработы, чем интерфейс, который этого не делает.3.2.2. Клиентское программное обеспечение,обеспечивающее прозрачность распределенияКак мы уже говорили в разделе 1.5, в программное обеспечение клиента входитне только пользовательский интерфейс. Во многих случаях на стороне клиентавыполняется также часть уровней обработки и данных приложения клиент-сервер.
На основе встроенного клиентского программного обеспечения функционирует целый класс специализированных устройств, таких как автоответчики (ATM),счетчики купюр, считыватели штрих-кодов, телеприставки и др. В подобных случаях пользовательский интерфейс является относительно небольшой частьюклиентского программного обеспечения по сравнению со средствами локальнойобработки и коммуникаций.Кроме пользовательского интерфейса и другого связанного с приложениемпрограммного обеспечения, клиентское программное обеспечение содержит компоненты, обеспечивающие прозрачность распределения.
В идеале клиент не должен быть осведомлен о своем взаимодействии с удаленными процессами. Длясерверов же, напротив, информация о распределенной работе обычно не скрывается в целях повышения производительности и корректной работы. Так, в главе 6 мы увидим, что реплицируемые серверы должны время от времени связываться друг с другом, чтобы обеспечить определенный порядок выполненияопераций в каждой из реплик.Прозрачность доступа обычно обеспечивается путем генерации (в виде заглушки клиента) из определения интерфейса того, что должен делать сервер. Заглушка предоставляет такой же интерфейс, как и сервер, скрывая при этом разницу архитектур и реальное взаимодействие.Существуют различные способы реализации прозрачности размещения, переноса и перемещения. Как станет ясно из материала следующей главы, важноиспользовать определенную систему именования.