Опубликован: 23.05.2008 | Доступ: свободный | Студентов: 1570 / 396 | Оценка: 4.80 / 4.10 | Длительность: 15:29:00
Специальности: Программист
Лекция 14:

Алгоритмы выбора сайтов

< Лекция 13 || Лекция 14: 12 || Лекция 15 >

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

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

Когда инициатор p получает свой собственный маркер, маркеры всех инициаторов прошли через p, и p выбирается лишь в том случае, если p имеет наибольшую оценку среди инициаторов. Напоминаем, что нужно различать внешнее и внутреннее обозначения сайтов. Здесь p и q – внешние обозначения. Они используются при необходимости процессами, выполняющимися на других сайтах. Собственный сайт p в своем процессе обозначается идентификатором this. При этом, разумеется, p и this имеют одно и то же значение (например, числовое или код). В приведенном ниже алгоритме переменная state задает состояние сайта.

Алгоритм Лелана:

var  Listp  : set of integer    init  {est(this)} ;
  state: (sleep, coordinator, lost);
begin  if  this - инициатор  then
  begin  state := cand ;  send (token, this)  to Nextp ;  receive (token, q) ;
    while  q not equils this  do
      begin  Listp := Listp join {q} ;
         send (token, q)  to Next_p ;  receive (token, q) ;
      end ;
    if  this = max (Listp)  then state := coordinator
        else state := lost
  end
  else  repeat  receive (token, q) ;  send (token, q)  to Nextp ;
      if state = sleep  then  state := lost
    until false
end

Так как порядок маркеров в кольце сохраняется (из предположения о каналах FIFO), и инициатор q отправляет (token, q) до того как получит (token, p), то инициатор p получает (token, q) прежде, чем вернется (token, p). Отсюда следует, что каждый инициатор p заканчивается со списком Listp, совпадающим с множеством всех инициаторов, и единственным выбираемым сайтом становится инициатор с наибольшей оценкой.

Все не-инициаторы приходят в состояние проигравший, но навсегда остаются в ожидании сообщений (token, r). Ожидание может быть прервано, если лидер посылает по кольцу специальный маркер, чтобы объявить об окончании выборов.

Алгоритм Чанга-Робертса, приведенный ниже, устраняет из кольца маркеры тех сайтов, для которых очевидно, что они проиграют выборы. В этом смысле он улучшает алгоритм Лелана. Т.е. инициатор p удаляет из кольца маркер (token, q), если est(q) < est(p). Инициатор p становится проигравшим, когда получает маркер с идентификатором q, таким что est(q) > est(p), или координатором, когда он получает маркер с идентификатором p.

var  state : (sleep, coordinator, lost);
begin  if  this - инициатор  then
  begin  state := cand ;  send (token, this)  to Nextp;
    repeat  receive (token, q) ;
      if  q = this  then  state := coordinator
        else if  est(this) < est(q)  then
          begin  if state = cand  then  state := lost ;
            send (token, q)  to Nextp
          end
    until  state = coordinator
  end
  else repeat  receive (token, q) ;  send (token, q)  to Nextp ;
      if state = sleep  then state := lost
    until false
end (* Только координатор может завершить выполнение программы. 
Он передает сообщение всем сайтам, чтобы сообщить им свой идентификатор. *)

Пусть p0 – инициатор с наибольшим идентификатором. Все процессы являются либо не-инициаторами, либо инициаторами с идентификаторами меньшими p0, поэтому все процессы передают дальше маркер (token, p0), отправленный p0. Следовательно, p0 получает свой маркер обратно и становится выбранным.

Не-инициаторы не могут быть выбраны, так как все они приходят в состояние проигравший самое позднее, когда через них передается маркер p0. Инициатор p с оценкой est(p) < est(p0) не может быть выбран; p0 не передаст дальше маркер (token, p), поэтому p никогда не получит свой собственный маркер. Такой инициатор p приходит в состояние проигравший самое позднее, когда через него передается маркер (token, p0).

 Иллюстрация к алгоритму Чанга-Робертса

Рис. 18.2. Иллюстрация к алгоритму Чанга-Робертса

На рис. 18.2 изображен некоторый момент выполнения алгоритма Чанга-Робертса. На кольце расположены сайты. На внешней стороне кольца указаны их идентификаторы, на внутренней – величины оценок, на основе которых производится выбор координатора. Кружок с числом 2 – маркер (token, 2), переносящий номер сайта, для которого оценка имеет значение "31", стрелка указывает направление движения маркера. Начальный сайт при выполнении алгоритма указан звездочкой – это сайт 1 с оценкой est(1) = 24.

< Лекция 13 || Лекция 14: 12 || Лекция 15 >
Дмитрий Полянский
Дмитрий Полянский
Ольга Космодемьянская
Ольга Космодемьянская

Я прошла курс "Распределенные системы и алгоритмы". Сдала экзамен экстерном и получила диплом. Вопрос: можно ли после завершения теста посмотреть все вопросы, которые были на экзамене и все варианты ответов? Мне это необходимо для отчета преподавателю в моем ВУЗе. Заранее спасибо!