Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GOS / Дисциплины специализации.doc
Скачиваний:
42
Добавлен:
09.05.2015
Размер:
1.61 Mб
Скачать

24. Волновые алгоритмы распространения информации. Требования к волновому алгоритму. Алгоритм для кольцевой структуры. Алгоритм для дерева. Алгоритм голосования.

Многие задачи в распределенных системах решаются путем пересылки сообщений согласно некоторой схемы, которая гарантирует участие всех сайтов. Эта схема зависит от топологических особенностей системы, т.е. от вида графов, представляющих связи между узлами – сайтами.

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

Волновой алгоритм - это распределенный алгоритм, который удовлетворяет следующим трем требованиям:

  1. Конечность. Каждое вычисление содержит конечное число событий.

  2. Успешное завершение. Каждое вычисление содержит хотя бы одно событие return(OK).

  3. Зависимость. В каждом вычислении каждому событию вызова процедуры return(OK) предшествует (в смысле причинно-следственной связи) какое-либо событие на каждом сайте.

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

Обычно при применении волновых алгоритмов в сообщение могут быть включены дополнительные переменные и другая информация. Многие приложения используют одновременное или последовательное распространение нескольких волн; в этом случае в сообщение должна быть включена информация о волне, которой оно принадлежит. Кроме того, процесс может хранить дополнительные переменные для управления волной, или волнами, в которых он в настоящее время активен.

Алгоритм для кольцевой архитектуры

Если сайты распределенной системы соединены однонаправленными каналами связи так, что образуют граф – ориентированный цикл, применим следующий волновой алгоритм.

Суть его в следующем. Один из сайтов – инициатор посылает маркер token своему единственному соседу по выходу (в ориентированном цикле каждый сайт имеет в точности один вход и один выход; выход одного сайта соединен со входом соседнего). Маркер, как правило, не имеет «содержания». Важен лишь факт отсылки маркера или поступления маркера.

Любой сайт (кроме инициатора), получив маркер, тут же отправляет его соседу. Инициатор, получив маркер, завершает процесс. Завершение процесса заключается в том, что сайт не посылает далее маркер, а выполняет некоторую процедуру return(OK) – успешный возврат. Рис. иллюстрирует работу этого алгоритма.

Рис. Перемещение маркера по кольцу

Опишем волновой алгоритм для кольцевой архитектуры, используя языковые средства из лекции 7.

Структура распределенной системы задается формулой

System := dcycle(n)(Node[1..n]).

В системе имеется n сайтов с именами Node[i]. У каждого сайта имеется один входной полюс и один выходной полюс. Выходной полюс сайта Node[i], i  n, соединен каналом связи с входным полюсом сайта Node[i + 1]. Выходной полюс сайта Node[n] соединен с входным полюсом сайта Node[1].

Алгоритм (рутина) узла – инициатора:

routine Initiator