Алгоритм Скина — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
 
(не показана 1 промежуточная версия этого же участника)
Строка 5: Строка 5:
 
Используются [[Логические часы Лампорта|логические часы Лампорта]].
 
Используются [[Логические часы Лампорта|логические часы Лампорта]].
 
Ниже алгоритм расписан чуть подробнее, чем в Garg и на лекции, но вроде всё ещё верно.
 
Ниже алгоритм расписан чуть подробнее, чем в Garg и на лекции, но вроде всё ещё верно.
 +
 +
У каждого процесса есть очередь принятых необработанных multicast сообщений.
 +
Каждое сообщение имеет временну́ю метку и флаг — финализирована ли метка.
 +
 
# Инициатор отправляет сообщение и своё время (''предварительное время сообщения'') всем получателям
 
# Инициатор отправляет сообщение и своё время (''предварительное время сообщения'') всем получателям
# При приеме сообщения процесс запоминает сообщение со времени и отправляет свое время инициатору
+
# При приеме сообщения процесс запоминает сообщение со временем в очередь (как нефинализированное) и отправляет свое время инициатору
# Когда инициатору вернулись все сообщения, он выбирает максимальное время из них и снова отправляет сообщение со временем (уже ''финальное'')
+
# Когда инициатору вернулись все подтверждения, он выбирает максимальное время из них и снова отправляет сообщение со финализированным временем
# Получатель обрабатывает сообщение, если оно помечено как финальное и имеет минимальное финальное время среди всех известных получателю сообщений (и финальных, и нефинальных; иначе может получиться, что финализация сообщений произойдёт в разном порядке у разных получателей и нарушится общий порядок)
+
# Получатель может обработать сообщение, если оно помечено как финальное и имеет минимальное время среди всех известных получателю сообщений (и финальных, и нефинальных; иначе может получиться, что финализация сообщений произойдёт в разном порядке у разных получателей и нарушится общий порядок)
  
 
Полный порядок задается финальными временными метками. Финальные метки нужны, чтобы как-то зависеть от времени получателей.
 
Полный порядок задается финальными временными метками. Финальные метки нужны, чтобы как-то зависеть от времени получателей.
 
Доказательство на лекции и в Gaarg не приводилось.
 
Доказательство на лекции и в Gaarg не приводилось.
 +
 +
Итого $3(k-1)$ сообщений на каждый multicast на $k$ процессов (не обсуждалось на лекции, но вроде так).

Текущая версия на 00:13, 4 июня 2019

Алгоритм Скина[1] для организации общего порядка сообщений. Лучше, чем Алгоритм Лампорта, потому что для multicast сообщений общается только с получателями, а не со всеми процессами системы.

Используются логические часы Лампорта. Ниже алгоритм расписан чуть подробнее, чем в Garg и на лекции, но вроде всё ещё верно.

У каждого процесса есть очередь принятых необработанных multicast сообщений. Каждое сообщение имеет временну́ю метку и флаг — финализирована ли метка.

  1. Инициатор отправляет сообщение и своё время (предварительное время сообщения) всем получателям
  2. При приеме сообщения процесс запоминает сообщение со временем в очередь (как нефинализированное) и отправляет свое время инициатору
  3. Когда инициатору вернулись все подтверждения, он выбирает максимальное время из них и снова отправляет сообщение со финализированным временем
  4. Получатель может обработать сообщение, если оно помечено как финальное и имеет минимальное время среди всех известных получателю сообщений (и финальных, и нефинальных; иначе может получиться, что финализация сообщений произойдёт в разном порядке у разных получателей и нарушится общий порядок)

Полный порядок задается финальными временными метками. Финальные метки нужны, чтобы как-то зависеть от времени получателей. Доказательство на лекции и в Gaarg не приводилось.

Итого $3(k-1)$ сообщений на каждый multicast на $k$ процессов (не обсуждалось на лекции, но вроде так).