Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 146
Текст из файла (страница 146)
Использование линий связи позволяет разрабатывать слабосвязанные системы. В таких системах каждый процессор имеет свою собственную оператив~~ую память и собственное дисковое запоминающее устройство, но взаимодействует с другими процессорами для передачи информации. Системы, разработанные на основе таких архитектур, называются распределенными системами. Распределенные системы могут быть централизованными, когда какой-либо один процессор осуществляет планирование и сообщает остальным машинам, какие задачи им следует выполнять, или равноправными, когда все машины равноправныы и участвуют в процессе планирования. В централ пзощншой системе один процессор будет сообщать другому процессору, какую задачу тот должен вьщолннть.
По сс завершении второй процессор сигнализирует, что он готов к вы полнению следующей задачи. В равноправной системе олин процессор может послать 526 Глава 11. Распределенная обработка данных широковещательное сообгцение всем процессорам о том, что требуется выполнить некоторую задачу, и какой-нибудь свободный в данный момент процессор может ответить сообщением: «Я ее выполню».
В отличие от предыдущего способа каждая мапшна в сети будет запускать задачу на некоторой другой машине той же сети. При таком способе вся сеть постепенно загружается работой. Развитие персональных компьютеров изменило эту модель.
В начале 80-х гг. использование терминалов являлось типичным методом взаимодействия с большой универсальной машиной. Когда персональные компьютеры (ПК) стали появляться на рабочих столах, для них были разработаны программы, имитирующие работу терминала. Таким образом, ПКмоглиработатьлокальнокакотдельныекомпьютеры,атакже могли служить терминалом для больших универсальных машин.
По мере того как П К становились более быстродействую вши и, выяснялось, что они могли бы решать вычислительные задачи, которые до сих пор выполнялись только на больших универсальных машинах. Для этого данные из большой машины можно было бы передавать на ПК и обрабатывать локально. Например, финансовая база данных большой компаниыи могла храниться на болыпой универсальной машине, а программа табличных вычислений для получения локальных статистических данных могла выполняться на ПК.
Программа, работающая на большом компьютере, стала называться сервер, тогда как программа, выполняющаяся на ПК, стала называться клиент. Клиент-серверные вычисления предполагают разделение задач на сегменты — части, требующие централизованного управления, например поиск в базе данных, и части, требующие локальных вычислений, например табличные вычисления, По мере того как мощность микропроцессоров увеличивалась и дальше, многие приложения, которые выполнялись на универсальных машинах, начинали легко обрабатываться и на рабочих станциях.
Использование больших универсальных машин существенно сократилось, но клиент-серверная модель вычислений все еще оставалась жизнеспособной. В настояпгее время существует множество приложений, разработанных с использованием этого подхода. Например, централизованное крапилин~с данных осуществляет и извлекает данные как программа-сервер, в то время как программа-клиент выполняется налокальной рабочей станции, осуществляя вычисления, электронную обработку текстов или обрабатывая данные каким-либо иным способом.
Основное влияние этой концепции на разработку языков программирования проявилось в отказе от хранения глобальных данных для программы. И сервер, и клиент имеют лишь ограниченный доступ к информационному содержимому программыы. Для эффективного вычисления результата программы необходимо разбить на отдельные части. Некоторые методы решения этих проблем уже обсуждались в нашей книге. Задачи в языке Аоа представ.чают одну из форм разделения программ на независимые части. Другим методом является вызов удаленных процедур' Вылов удаленных про пслу р был первым способом реализации распределенных приложений, позволявший псрспашпь в качестве параметров процедур и возврашать результаты в ниЛе основных элемептари ых ти пов лм вы х. В|~астояшее время в связи с иш рок им распространением объектно-ориентированного подхола разработаны специ алы пас технологии вызова металов улалсппых объектов и возвраьцеиия результатов в ниле объектов: ПСОМ, ВМВ СОВВА — Примем.
науч.ред. 11.6. Задачи н упражнения 527 (Вепюге Ргосес)иге Са[1, ВРС). Синтаксически вызов удаленной процедуры выглядит так же, как обычный вызов т>роцсдуры, за исключением того, что операционная система будет осуществлять вызов программы, выполняемой, возможно, другим процессором.
Вызовы удаленных процедур связаны с передачей сообщений и часто реализуются с помощью методики сообщений о>лп)>авив>ь-получил>ь (зепг]- гесе1уе), при которой клиент посылает сообщение о вызове удаленной процедуры на сервер, ожидающий иолумепил сообщения и затем отвечающий клиенту аналогичным способом. Широкоераспространениетехнологии >у">у">т'вызвалоинтсрес кразновидности клиент-серверной архитектуры шн>числений с промежуточным звеном'. Промежуточное звено — зто программный модуль, который использует закодированную информацию о множествах данных и создаст информацию, необходимую для класса приложения более высоко~о уровня. При такой организации пользователь взаимодействует с программным обеспечением клиента (например, уксЬ-браузсром), который, в свою очередь, взаимодействует с сервером.
У сервера имеется доступ к многочисленным ресурсам данных, и он извлекает информацию из некоторых ресурсов, чтобы создать новую информации> для пользователя. Более подробно мы обсудим зти вопросы в разделе 12.2. Вообще говоря, клиент-серверное программирование не требует внесения больших изменений в используемый язык программирования, если в него добавлен какой-либо механизм сообщений, например вызов удаленных процедур или какой-либо другой. Но структура самой программы становится более сложной. Программа должна быть разделена на фрагменты таким образом, чтобы минимизировать передачу сообщений по сети. Например, можно перемножать матрицы в программе-клиенте, каждый раз запрашивая с сервера очередную строку или столбец, но результирующий трафик сообп>ений может перегрузить сеть и сделать систему полностью непригодной к работе.
11.5. Рекомендуемая литература Параллельные системы обсуждаются в [26, 121]. Устройство ЫБС-машин рассматривается в статьях [24, 60 и 102], а в [111] описано несколько примеров В18С- архитектуры. В статье [73] описана разработка параллельных алгоритмов для М1М()-манинь Общий обзор вариантов организации параллельной архитектуры дается в [38].
Компьютеры с массовым параллелизмом обсуждаются в [42, 112]. Языки, нолдсрживаюгинс сохраняемые данные, представлены в [13], 11.6. Задачи и упражнения 1. Возможно лн реализовать опсрации на>1 и з>ояа1 семафора с помощью сообшсннй зеяй и гесе1ме? Напишите две процедуры з>Чяз1(Р) и нз>1(Р), Лрхмтектура системы канент-ссраср с промежуточаьач аксиом аатыаастса также трехсаойной.— 11римеч.
науч. ред. 528 Глава 11. Распределенная обработка данных которые взаимодейству1от с помощью сообщений, но семантически имеют тот же смысл, что и операции семафора на1л и з1дпа1. Какие проблемы с атомарностью возникают при таком решении? Операции нз1г и з1цпа1 могут использоваться множеством задач, применяющих один и тот же семафор. Как можно обобщить сообщения зепо и гесе1 че, чтобы они могли использоваться более чем одной посылающей и одной принимающсй задачей? 2. Одной из наиболес трудных задач в параллельных приложениях является получение ответа на вопрос «который час?».
Синхронизация часов в сети компьютеров может оказаться сложным делом, так как мы хотим, чтобы отсчитываемое на разных компьютерах сети время было бы абсолютно одинаковым, но сама передача точного времени на все компьютеры требует некоторого конечного промежутка времени. а) Предложитс метод сообщения значения времени всем процессорам в мультипроцессорной системе, так чтобы в результате на всех машинах время было в точности одлшаковым. б) Если в некоторой системе имеются отдельные функции для определения текущих значений времени и даты, к каким проблемам это может привести? (Рассмотрите проблему функциональной атомарности при определении времени близ полуночи. По этой причине в большинстве систем в настоящее время используется одна функция 7шеАпббзсе для определения текущих времени и даты.) 3.
Перслача параметров по ссылке и по значению-результату обычно дает один и тот жс эффект (с точки зрения программиста). Но если подпрограмма завершается в результате возникновения исключительной ситуапии и это исключение псрслается обработчику, расположенному вне данной подпрограммы (или оператором 5осо осуьчествляется переход к помеченному нелокальному оператору), два метода передачи параметров могут приводить к различным эффектам. Предположим, что в подпрограмме 5оо) параметр У имеет значение 5, затем этот параметр передается в подпрограмму 5аЬ2, в ней этому параметру присваивается значение 7 и затем генерируется исключение, которое передается обработчику из подпрограммы 5оЫ.