while counter < card(Out(this)) do
begin receive token; counter := counter + 1 end ;
return(OK)
end ;
Процессы для не-инициаторов:
begin receive token from u ; pre(this) := u ; counter := counter + 1 ;
for (u Î Out(this))&(u ¹ pre(this)) do out token to u ;
while counter < card(Out(this)) do
begin receive token; counter := counter + 1 end ;
out token to pre(this)
end
Отчётность:
В результате выполнения лабораторной работы должны быть представлены следующие материалы:
Программа;
Исходные тексты;
Презентация работы;
Презентация, в которой освещаются вопросы реализации консервативных алгоритмов.
Лабораторная работа №2 Разработка и реализация централизованного алгоритма балансировки для ВС с произвольной топологией
Постановка задачи:
Разработать централизованный алгоритм балансировки. Решение о переносе объекта с одного вычислительного узла распределенной системы на другой выполняется одним из процессов, который предварительно получает сообщения от всех вычислительных узлов об их загрузке. Сеть имеет произвольную топологию и является ориентированной. Схема сети прилагается.
Предположим, что распределенное приложение представляет собой взаимодействующие процессы, располагающиеся на различных вычислительных узлах.
Рекомендация: при выполнении работы использовать программные средства технологии .Net.
Централизованный алгоритм балансировки приведен в предыдущей лабораторной работе
Для передачи сообщений в сети следует реализовать волновой алгоритм
Алгоритм Финна
Алгоритм Финна – еще один волновой алгоритм, который можно использовать в ориентированных сетях произвольной топологии. Он не требует того, чтобы диаметр сети был известен заранее, но подразумевает наличие уникальных идентификаторов процессов. В сообщениях передаются множества идентификаторов процессов, что приводит к довольно высокой битовой сложности алгоритма.
Процесс сайта s содержит два множества идентификаторов процессов, Inc(s) и NInc(s). Неформально говоря, Inc(s) – это множество процессов u таких, что событие в u предшествует последнему произошедшему событию в s, а NInc(s) – множество процессов u таких, что для всех соседей r процесса u событие в r предшествует последнему произошедшему событию в s. Эта зависимость поддерживается следующим образом. Изначально Inc(s) = {s}, а NInc(s) = Æ. Каждый раз, когда одно из множеств пополняется, процесс s посылает сообщение, включая в него Inc(s) и NInc(s). Когда s получает сообщение, включающее множества Inc(s) и NInc(s), полученные идентификаторы включаются в версии этих множеств в процессе s. Когда s получит сообщения от всех соседей по входу, s включается в NInc(s). Когда два множества становятся равны, s выполняет процедуру return(OK). Из неформального смысла двух множеств следует, что для каждого процесса u такого, что событие в u предшествует некоторому событию e, выполняется следующее: для каждого соседа r процесса u событие в r также предшествует событию e.
Do'stlaringiz bilan baham: |