Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

Розподілені алгоритми

РефератДопомога в написанніДізнатися вартістьмоєї роботи

Модульна Будівництво Korach-Kutten-Moran алгоритм використовує ідеї перетворення виродження (Підрозділ 7.3.1) і ідеї Peterson/Dolev-Klawe-Rodeh алгоритму (Підрозділ 7.2.2). Подібно перетворенню виродження ініціатори вибору починають обхід мережі з маркера, позначеного їх ідентифікатором. Якщо обхід закінчується (дозволяється), ініціатор обходу стає обраним; алгоритм передбачає, що трапляється для… Читати ще >

Розподілені алгоритми (реферат, курсова, диплом, контрольна)

Пролог 6.

1 Запровадження: розподілені системи 7.

1.1 Що таке розподілена система? 7 1.1.1 Мотивація 8 1.1.2 Комп’ютерні мережі 10 1.1.3 Глобальні мережі 11 1.1.4 Локальні мережі 13 1.1.5 Многопроцессорные комп’ютери 16 1.1.6 Взаємодіючі процеси 19.

1.2 Архітектура і Мови 22 1.2.1 Архітектура 22 1.2.2 Ссылочная Модель OSI 24 1.2.3 OSI Модель в локальних мережах: IEEE Стандарти 26 1.2.4 Підтримка Язика 27.

1.3 Розподілені Алгоритми 29 1.3.1 Розподілений проти Централізованих Алгоритмів 30 1.3.2 Приклад: Зв’язок із одиночним повідомленням 32 1.3.3 Область дослідження 37 1.3.4 Ієрархічна структура книжки 37.

2 Модель 40.

2.1 Системи переходу і алгоритми 41 2.1.1 Системи переходів 42 2.1.2 Системи з асинхронної передачею повідомлень 43 2.1.3 Системи з синхронної передачею повідомлень 45 2.1.4 Справедливість 47.

2.2 Доказ властивостей систем переходу 47 2.2.1 Властивості безпеки 48 2.2.2 Властивості жвавості 50.

2.3 Каузальний порядок подій і логічні годинник 51 2.3.1 Незалежність і залежність подій 52 2.3.2 Еквівалентність виконань: обчислення 54 2.3.3 Логічні годинник 57.

2.4 Додаткові припущення, складність 60 2.4.2 Властивості каналів 62 2.4.3 Припущення реального часу 64 2.4.4 Знання процесів 64 2.4.5 Складність розподілених алгоритмів 66.

3 Протоколи Зв’язки 66.

3.1 Збалансований протокол ковзаючого вікна 68 3.1.1 Уявлення протоколу 68 3.1.2 Доказ правильності протоколу 71 3.1.3 Обговорення протоколу 73.

3.2 Протокол, заснований на таймере 75 3.2.1 Уявлення Протоколу 78 3.2.2 Доказ коректності протоколу 81 3.2.3 Обговорення протоколу 85.

Упражнения до глави 3 88 Розділ 3.1 88 Розділ 3.2 89.

4 Алгоритми маршрутизації 89.

4.1 Адресат-основанная маршрутизація 91.

4.2 Проблема кротчайших шляхів всіх пар 95 4.2.1 Алгоритм Флойда-Уошала 95 4.2.2 Алгоритм кротчайшего пути.(Toueg) 98 4.2.3 Обговорення і Додаткові Алгоритми 102.

4.3 Алгоритм Netchange 106 4.3.1 Опис алгоритму 107 4.3.2 Коректність алгоритму Netchange 112 4.3.3 Обговорення алгоритму 113.

4.4 Маршрутизація з Компактними Таблицями маршрутизації 114 4.4.1 Схема розмітки дерев 115 4.4.2 Интервальная маршрутизація 118 4.4.3 Префиксная маршрутизація 125.

4.5 Ієрархічна маршрутизація 127 4.5.1 Зменшення кількості рішень маршрутизації 128.

Упражнения до Частини 4 130 Розділ 4.1 130 Розділ 4.2 131 Розділ 4.3 131 Розділ 4.4 131 Розділ 4.5 132.

5 Беступиковая комутація пакетів 132.

5.1 Запровадження 133.

5.2 Структуровані рішення 134 5.2.1 Буферні Графи 135 5.2.2 Орієнтації G 138.

5.3 Неструктуровані рішення 141 5.3.1 Контролери з прямим і зворотним рахунком 141 5.3.2 Контролери з випереджаючим і відстаючим станом 142.

5.4 Подальші проблеми 144 5.4.1 Топологічні зміни 145 5.4.2 Інші види глухих кутів 146 5.4.3 Лайфлок (livelock) 147.

Упражнения до Главі 5 149 Розділ 5.1 149 Розділ 5.2 149 Розділ 5.3 149.

6 Хвильові алгоритми і алгоритми обходу 149.

6.1 Визначення й використання хвильових алгоритмів 150 6.1.1 Визначення хвильових алгоритмів 151 6.1.2 Елементарні результати про хвильових алгоритми 153 6.1.3 Поширення інформації із другого зв’язком 155 6.1.4 Синхронізація 156 6.1.5 Обчислення функцій инфимума 156.

6.2 Хвильові алгоритми 158 6.2.1 Кольцевой алгоритм 158 6.2.2 Деревоподібний алгоритм 159 6.2.3 Эхо-алгоритм 161 6.2.4 Алгоритм опитування 163 6.2.5 Фазовий алгоритм 164 6.2.6 Алгоритм Фінна 167.

6.3 Алгоритми обходу 169 6.3.1 Обхід клік 170 6.3.2 Обхід торів 171 6.3.3 Обхід гиперкубов 172 6.3.4 Обхід зв’язкових мереж 173.

6.4 Тимчасова складність: пошук завглибшки 175 6.4.1 Розподілений пошук завглибшки 176 6.4.2 Алгоритми пошуку глибину за лінійне час 177 6.4.3 Пошук завглибшки зі знанням сусідів 182.

6.5 Усі питання 182 6.5.1 Огляд хвильових алгоритмів 182 6.5.2 Обчислення сум 184 6.5.3 Альтернативні визначення тимчасової складності 186.

Упражнения до Главі 6 188 Розділ 6.1 188 Розділ 6.2 189 Розділ 6.3 190 Розділ 6.4 190 Розділ 6.5 190.

7 Алгоритми вибору 190.

7.1 Запровадження 191 7.1.1 Припущення, використовувані у цій главі 192 7.1.2 Вибір і хвилі 193.

7.2 Кільцеві мережі 196 7.2.1 Алгоритми ЛеЛанна і Чанга-Робертса 196 7.2.2 Алгоритм Petersen / Dolev-Klawe-Rodeh 200 7.2.3 Висновок нижньої межі 203.

7.3 Самовільні Мережі 207 7.3.1 Виродження і Швидкий Алгоритм 208 7.3.2 Алгоритм Gallager-Humblet-Spira 210 7.3.3 Глобальне Опис GHS Алгоритму. 212 7.3.4 Детальний описи GHS алгоритму 215 7.3.5 Обговорення і Варіанти GHS Алгоритму 219.

7.4 Алгоритм Korach-Kutten-Moran 220 7.4.1 Модульна Будівництво 221 7.4.2 Застосування Алгоритму KKM 225.

Упражнения до Главі 7 225 Розділ 7.1 225 Розділ 7.2 226 Розділ 7.3 226 Розділ 7.4 226.

8 Виявлення завершення 227.

8.1 Попередні зауваження 228 8.1.1 Визначення 228 8.1.2 Дві нижніх кордону 231 8.1.3 Завершення Процесів 233 8.2.2 Алгоритм Shavit-Francez 237.

8.3 Рішення, засновані на хвилях 241 8.3.1 Алгоритм Dijkstra-Feijen-Van Gasteren 242 8.3.2 Підрахунок Основних Повідомлень: Алгоритм Сафра 245 8.3.3 Використання Підтверджень 249 8.3.4 Виявлення завершення з допомогою хвиль 252.

8.4 Інші Рішення 254 8.4.1 Алгоритм відновлення кредиту 254 8.4.2 Рішення, використовують тимчасові позначки 256.

Упражнения до Главі 8 259 Розділ 8.1 259 Розділ 8.2 259 Розділ 8.3 259 Розділ 8.4 260.

13 Отказоустойчивость в Асинхронних Системах 260.

13.1 Неможливість згоди 260 13.1.1 позначення, Визначення, Елементарні Результати 260 13.1.2 Доказ неможливості 262 13.1.3 Обговорення 264.

13.2 Изначально-мертвые Процеси 265.

13.3 Детерминированно Досяжні Випадки 268 13.3.1 Розв’язна Проблема: Перейменування 269 13.3.2 Розширення Результатів Неможливості 273.

13.4 Імовірнісні Алгоритми Злагоди 275 13.4.1 Аварийно-устойчивые Протоколи Злагоди 276 13.4.2 Византийско-устойчивые Протоколи Злагоди 280.

13.5 Слабка Завершення 285.

Упражнения до Главі 13 289 Розділ 13.1 289 Розділ 13.2 289 Розділ 13.3 289 Розділ 13.4 290 Розділ 13.5 291.

14 Отказоустойчивость в Синхронних Системах 291.

14.1 Синхронні Протоколи Рішення 292 14.1.1 Кордон Здібності відновлення 293 14.1.2 Алгоритм Візантійського мовлення 295 14.1.3 Полиномиальный Алгоритм Мовлення 298.

14.2 Протоколи з Встановленням Дійсності 303 14.2.1 Протокол Високої Ступені Відновлення 304 14.2.2 Реалізація Цифрових Підписів 307 14.2.3 Схема Підписи ЭльГамаля 308 14.2.4 Схема Підписи RSA 310 14.2.5 Схема Підписи Фиата-Шамира 310 14.2.6 Резюме і Обговорення 313.

14.3 Синхронізація Годин 315 14.3.1 Читання Віддалених Годин 316 14.3.2 Розподілена Синхронізація Годин 318.

Пролог.

Розподілені системи та обробка розподіленої інформації отримали значну увагу останні кілька років, і кожен університет пропонує, по крайнього заходу, один курс для розробки розподілених алгоритмів. Існує велика число книжок про принципи розподілених систем; див. наприклад Tanenbaum [Tan88] чи Sloman and Kramer [SK87], хоча вони концентруються здебільшого архітектурних аспектах, а чи не на алгоритмах.

Було виявлено, що алгоритми — це основа будь-якого застосування комп’ютерів. Тому здається виправданим присвятити цієї книжки повністю розподіленим алгоритмам. Ця книга спрямовано те що уявити більшу частину теорії розподілених алгоритмів, що розвивалися в протягом останніх 15 років. Ця книга можна використовувати як для однечи двух-семестрового курсу по розподіленим алгоритмам. Викладач одно-семестрового курсу може вибирати теми зі свого усмотрению.

Ця книга також забезпечить корисну допоміжну і ссылочную інформацію для професійних інженерів і дослідників, які працюють із розподіленими системами.

Вправи. Кожна глава (крім глав 1 та дванадцяти) закінчується списком вправ і маленькі проектів. Проекти зазвичай вимагають, щоб читач розробив маленьке, але нетривиальное розширення чи практичне рішення щодо матеріалу глави, в більшості випадків автор немає рішення. Якщо читач зможе домогтися успіху з розробки цих маленьких проектів, то мені хотілося б мати копію результата.

Список відповідей (іноді часткових) у більшості вправ доступний викладачів. Він можна отримати автор чи з анонімному ftp.

Виправлення і товарної пропозиції. Якщо читач знайде помилки і пропуски в цій книжці, нехай інформує автора (перевага віддається електронної пошті). Уся конструктивна критика, включаючи пропозиції щодо вправи, дуже приветствуется.

1 Запровадження: розподілені системы.

Ця глава представляє підстави вивчення розподілених алгоритмів, коротко описуючи типи апаратних і програмних систем, котрим розвивалися розподілені алгоритми. Під розподіленої системою ми розуміємо все комп’ютерні системи, де кілька комп’ютерів чи процесорів кооперуються певним чином. Цю ухвалу включає глобальні комп’ютерні мережі, локальні мережі, мультипроцессорные комп’ютери, у яких кожен процесор має власний управляючий блок, і навіть системи з взаємодіючими процессами.

Різні типи розподілених систем і використання розподілених систем обговорюються розділ 1.1. Наводяться деякі приклади існуючих систем. Головна тема цієї книжки, проте, чи, як ці системи виглядають, чи як їх використовують, але, як примусити їх працювати. Понад те, як змусити працювати розподілені алгоритми в цих системах.

Звісно, повністю структуру і функціонування розподіленої системи не можна цілковито зрозуміти вивченням лише алгоритмів самих собою. Щоб зрозуміти такої системи повністю слід також вивчити її архітектуру і програмне забезпечення, тобто, розбивка цільною функціональності по модулями. Також, є багато важливих питань, які стосуються властивостями мов програмування, що використовуються розробки програмного забезпечення розподілених систем. Це питання обговорюватимуться розділ 1.2.

Але тепер є багато чудових книжок з розподіленим системам, що стосуються архітектурних і мовних аспектів. Дивіться Tanenbaum [Tan88], Sloman and Kramer [SK87], Bal [Bal90], Coulouris [CD88], Goscinski [Gos91]. Як мовилося раніше, справжній працю наголошує на алгоритми розподілених систем. Розділ 1.3 пояснює, чому розробка розподілених алгоритмів відрізняється від розробки централізованих алгоритмів, там також робиться короткий огляд поточного стану справ дослідженнях і дають опис решти книги.

1.1 Що таке розподілена система?

У цьому главі ми будемо використовувати термін «розподілена система», маючи на увазі взаємопов'язаний набір автономних комп’ютерів, процесів чи процесорів. Комп’ютери, процеси чи процесори згадуються як вузли розподіленої системи. (У наступних розділах ми будемо використовувати більш технічне поняття, див. визначення 2.6.) Будучи певними як «автономні», вузли повинні прагнути бути, по крайнього заходу, обладнані своїм власним блоком управління. Отже, паралельний комп’ютер з одним потоком управління та ще кількома потоками даних (SIMD) не підпадає під визначення розподіленої системи. Щоб певними як «взаємопов'язаними», вузли повинен мати можливість обмінюватися информацией.

Оскільки процеси можуть зайняти позицію вузлів системи, визначення включає програмні системи, побудовані як набір взаємодіючих процесів, навіть якщо вони виконуються в одній апаратної платформі. У багатьох випадків, проте, розподілена система буде, по крайнього заходу, утримувати кілька процесорів, з'єднаний коммутирующей аппаратурой.

Більше обмежують визначення розподілених систем можуть бути і знайдено у літературі. Tanenbaum [Tan88], наприклад, називає систему розподіленої, лише коли існують автономні вузли прозорі для користувачів системи. Система розподілена у сенсі поводиться як віртуальна самостійна комп’ютерну систему, але реалізація цієї прозорості вимагає розробки хитромудрих алгоритмів розподіленого управления.

1.1.1 Мотивация.

Розподілені комп’ютерні системи можуть одержати перевагу серед низки систем чи його використання буває просто більше не уникнути, через багато причин, деякі з них обговорюються нижче. Цей перелік не вичерпний. Вибір розподіленої системи то, можливо мотивованою більш ніж одним аргументів наведених нижче. І що з переваг можуть отримати як корисний побічний ефект під час виборів інших причин. Характеристики розподілених систем можуть також варіюватися, в залежність від причини існування, але це ми ще поговоримо більш детально в розділах з 1.1.2 по 1.1.6.

1) Обмін інформацією. Необхідність обміну даними між різними комп’ютерами зросла шістдесятих, коли більшість основних університетів та акцій компаній почали користуватися власними майнфреймами. Взаємодія для людей із різних організацій полегшилося завдяки обміну даними між комп’ютерами цих організацій, і це дасть зростання розвитку про глобальних мереж (WAN). Комп’ютерна система сполучена в глобальну мережу зазвичай постачали всім що необхідно користувачеві: резервними сховищами даних, дисками, багатьма прикладними програмами і принтерами.

Пізніше комп’ютери стали менший прибуток і дешевше, і сьогодні одна організація може мати безліч комп’ютерів, іноді навіть один комп’ютер одному працівникові (робочу станцію). І тут також потрібна щоб ці комп’ютери з'єднали для електронного обміну інформацією між персоналом компании.

2) Поділ ресурсів. Хоча приходом дешевших комп’ютерів з’явилася можливість постачати кожного працівника організації особистим комп’ютером, це само не можна б зробити периферії (принтери, резервні сховища, блоки дисків). У цьому вся меншому масштабі кожен комп’ютер може покластися на спеціальні сервери, які забезпечують його компиляторами та інші прикладними програмами. Також, пам’яті будь-якого комп’ютера зазвичай недостатньо, щоб зберігати великий набір прикладних програм, необхідних кожного користувача. З іншого боку, комп’ютери може використати спеціальні вузли для служб пресі й зберігання даних. Мережа, з'єднує комп’ютери масштабу підприємства називається локальної обчислювальної сетью (LAN).

Причини, якими організація встановлює мережу невеликих комп’ютерів, а чи не майнфреймы — зниження вартості і расширяемость.

По-перше, менші комп’ютери мають краще співвідношення цінапродуктивність, ніж великі комп’ютери. Типовий майнфрейм може виконувати операції в 50 раз швидше, ніж персонального комп’ютера, але мати вартість 500 разів більшу. По-друге, якщо потужності, системи большє нє досить, то мережу може бути розширена додаванням інших машин (файлових серверів, принтерів і сотні робітників станцій). Якщо потужність монолітною системи більше незадовільна, залишається тільки повна замена.

3) Велика надійність завдяки реплікації. Розподілені системи мають потенціал надійності більший, ніж монолітні системи завдяки властивості їх часткового виходу з експлуатації. Це означає, деякі вузли системи вийти з експлуатації, тоді як інші як раніше функціонують і може прийняти завдання зіпсованих компонентов.

Вихід із ладу монолітного комп’ютера діє всієї системи які і немає можливості продовжувати обчислення у разі. Через це розподілені архітектури цікаві розробки високо надійних комп’ютерних систем.

Високо надійну систему зазвичай і двох, 3 або чотирьох репликационных унипроцессоров, які виконують прикладну програму і підтримуються механізмом голосування, щоб відфільтрувати результати машин. Правильне функціонування розподіленої системи за наявності ушкоджених компонент вимагає важкою алгоритмічної поддержки.

4) Велика продуктивність завдяки распараллеливанию. Наявність багатьох процесорів в розподіленої системі відкриває можливість зниження додаткового часу для інтенсивної роботи з допомогою поділу роботи серед кількох процессоров.

Паралельні комп’ютери розроблено спеціально цієї мети, але користувачі локальних мереж також можуть одержати користь від паралелізму, перекладаючи завдання інші робочі станции.

5) Спрощення розробки завдяки спеціалізації. Розробка комп’ютерної системи то, можливо складної, якщо потрібно значна функціональність. Розробка то, можливо найчастіше спрощена разбитием системи на модулі, кожен із яких відпо-відає частина функціональності і комутується коїться з іншими модулями.

На рівні однієї програми модульність досягається визначенням абстрактних типів даних, і процедур щодо різноманітних завдань. Велика система може бути оцінена як набір кооперирующих процесів. У обох випадках, модулі може бути виконані однієї комп’ютера. Але і можливо мати локальну мережу з різними типами комп’ютерів: один оснастили спеціальним устаткуванням для обчислень, інший — графічним устаткуванням, третій — дисками і т.д.

1.1.2 Комп’ютерні сети.

Під комп’ютерної мережею ми розуміємо набір комп’ютерів, з'єднаних комунікаційними засобами, з допомогою яких комп’ютери можуть обмінюватися інформацією. Цей обмін має місце при посилці й одержанні повідомлень. Комп’ютерні мережі задовольняють нашому визначенню розподілених систем. Залежно від відстані між комп’ютерами та його приналежністю, комп’ютерні мережі називаються або глобальними, або локальными.

Глобальна мережу зазвичай з'єднує комп’ютери, належать різним організаціям (підприємства, університети тощо.). Фізичне відстань між вузлами зазвичай становить 10 кілометрів і більше. Кожен вузол такий мережі - це закінчена комп’ютерну систему, куди входять всю периферію, і значну кількість прикладного програмного забезпечення. Головна завдання глобальної мережі - це обміну інформацією між користувачами різними узлов.

Локальна мережу зазвичай з'єднує комп’ютери, належать однієї організації. Фізичне відстань між вузлами зазвичай 10 кілометрів і менш. Вузол такий мережі - це звичайно робоча станція, файловий сервер чи сервер друку, тобто. щодо маленька станція, що спеціалізується на особливих функціях всередині організації. Головне завдання локальної мережі - це звичайний обміну інформацією і поділ ресурсов.

Кордон між двома типами мереж може бути завжди чітко окреслена, і звичайно відмінність немає значення з алгоритмічної погляду, оскільки переважають у всіх комп’ютерних мережах зустрічаються схожі проблеми. Релевантні відмінності, які стосуються розвитку алгоритмів, следующие:

1) Параметри надійності. У глобальних мережах ймовірність, що піде негаразд протягом предачи повідомлення никода може бути игнорирована. Розподілені алгоритми для глобальних мереж зазвичай розробляються те щоб справлятися з можливими неполадками.

Локальні мережі надійніші, і алгоритми їм можуть бути розроблені в припущенні абсолютної надійності комунікацій. І тут, проте, неймовірне подія, що станеться негаразд то, можливо пропущено, що обумовить неправильне роботу системы.

2) Час комунікації. Часи передачі повідомлень в глобальних мережах на порядки більше, ніж часи передачі у локальних мережах. У глобальних мережах час необхідне обробки повідомлення майже може бути игнорировано по стравнению згодом передачі сообщения.

3) Гомогенність. Навіть хоча у локальних мережах в повному обсязі вузли обов’язково рівні, зазвичай можливо прийняти єдине програмне забезпечення і протоколи від використання у межах однієї організації. У глобальних мережах використовується масу різноманітних протоколів, що піднімають проблему перетворення між різними протоколами і розробки програмного забезпечення, яке сумісно з різними стандартами.

4) Взаємна довіра. Усередині однієї організації можна довіряти всім користувачам, але у глобальної мережі це точно не так.

Глобальна мережу вимагає розвитку безпечних алгоритмів, захищають вузли від аггресивных пользователей.

Розділ 1.1.3 присвячений короткому обсуждлению глобальних мереж, локальні мережі обговорюються розділ 1.1.4.

1.1.3 Глобальні сети.

Історичний розвиток. Більшість первооткрывательской роботи у розвитку глобальних комп’ютерних мереж було зроблено в проектах агентства ARPA Міністерства оборони США. Мережа ARPANET почала працювати 1969, і з'єднувала тоді 4 вузла. Ця мережу зросла за кілька сотень вузлів, і інші сітці були встановлено з допомогою як і технології (MILNET, CYRPRESS). ARPANET містить спеціальні вузли (звані процесорами інтерфейсу повідомлень (IMP)), призначених лише обробки потоку сообщений.

Коли UNIX системи стали широко використовуватися, було визнана необхідність інформаційного обміну між різними UNIX машинами, для чого було написано програма uucp (Unix-to-Unix CoPy). З допомогою цієї програми можна обмінюватися файлами по телефонних каналах і мереж з користувачами UNIX — цю програму дав назву быстрорастущим UUCP мереж. Також інша велика мережу, BITNET, була розроблена вісімдесяті, оскільки ARPANET належала міністерства оборони і лише кілька організацій могли до неї подключаться.

Сьогодні всі ці мережі з'єднані між собою з допомогою вузлів, які належать двом мереж (звані шлюзами) і дозволяють обмінюватися інформацією вузлам різних мереж. Запровадження уніфікованого адресного простору перетворило все мережі до однієї віртуальну мережу, була як Internet. Електронна адреса автора ([email protected]) забезпечує інформацію про мережі, до котрої я підключений його департамент.

Алгоритмічні проблеми освіти й проблеми організації. Глобальні мережі завжди організовані як мережі типу точка-точка. Це означає, що комунікація пари вузлів здійснюється за допомогою механізму особливого стосовно цим двом вузлам. Такий механізм то, можливо телефонної лінією, оптоволокном чи супутникового зв’язком тощо. Структура сполук, у мережах точка-точка то, можливо добре зображено, якщо намалювати кожен вузол як окружність та зв’язку з-поміж них як лінії, якщо лінія комунікація між цими двома вузлами, див. рис. 1.1. Говорячи технічним мовою, структура представляється графом, межі якого є лінії комунікації у мережі. Зведення за висловом теорії графів приведено в Доповненні Б.

[pic].

Рис. 1.1 Приклад мережі точка-точка.

Основне призначення глобальних мереж — це обміну інформацією, наприклад, у формі електронного пошти, дощок оголошень, віддалених файлів. Розробка прийнятною системи коммнуникаций цих цілей вимагає розв’язання наступних алгоритмічних проблем, деякі з них обговорюються в Частини 1 цієї книги.

1) Надійність обміну даними на кшталт точка-точка (глава 3). Два вузла з'єднані лінією, обмінюються даними у цій лінії, але мають якось справлятися з потенційної ненадійністю лінії. Зза атмосферних явищ, падіння напруження і інших фізичних обставин, повідомлення, надіслане через лінію то, можливо отримано з частково спотвореним і навіть втраченим. Ці порушення під час передачі може бути розпізнані і исправлены.

Проблема трапляється лише двох безпосередньо з'єднаних вузлів, а й також вузлів, не з'єднаних безпосередньо, а пов’язаних у вигляді проміжних вузлів. І тут проблема навіть більше складна, оскільки до всього повідомлення можуть доставлятися гаразд, відмінному від цього, де вони були, і навіть повідомлення можуть прибувати з великим запізненням чи продублированные.

2) Вибір шляхів комунікації. (глава 4). У «тенета точка-точка зазвичай занадто дороге забезпечувати зв’язок між кожної парою узлов.

Отже, деякі пари вузлів повинні покластися інші вузли у тому, щоб взаємодіяти. Проблема маршрутизації до вибору шляху (чи шляхів) між вузлами, які хочуть взаємодіяти. Алгоритм, використовуваний для вибирати шлях, пов’язане з схемою, через яку вузли іменуються, тобто. форматом адреси, який вузол повинен використовувати, щоб послати повідомлення іншому вузлу. Вибір шляху до проміжних вузлах здійснюється з використанням адреси, і вибір може бути зроблений ефективно, тоді як адресі кодується в адресах.

3) Контроль перевантажень. Пропускна здатність коммутируемой мережі може дуже падати, якщо багато повідомлень передається одновременно.

Тому генерування повідомлень різними вузлами повинно управлятися це має залежати від вільних потужностей сети.

Деякі методи запобігання перевантажень обговорюються в [Tann88, розділ 5.3].

4) Запобігання глухих кутів. (глава 5). Мережі типу точка-точка іноді називаються мережами типу сохранить-и-передать, оскільки повідомлення, яке посилається за кілька проміжних вузлів має зберігатися у кожному з цих вузлів, та був форвардиться ось до чого вузлу. Оскільки простір пам’яті, доступне цієї мети в проміжних вузлах обмежена, то пам’ять повинна ретельно управлятися у тому, щоб уникнути тупикові ситуації. У цих ситуаціях існує набір повідомлень, жоден з яких немає то, можливо отфорвардено, оскільки пам’ять наступного вузла в маршруті повністю зайнято іншими сообщениями.

5) Безпека. Мережі, з'єднують комп’ютери з різними користувачами, деякі з них можуть спробувати зловжити і навіть зіпсувати системи інших. Оскільки можливо зареєструватися у комп’ютерній системі з точки світу, то потрібні надійні методи для аутентифікації користувачів, писав криптографічні методи, сканування яка входить информации.

Писав Криптографічні методи можна використовувати, щоб шифрувати дані національній безпеці від несанкціонованого читання і щоб ставити електронні підписи проти несанкціонованого написания.

1.1.4 Локальні сети.

Локальна мережу використовується організацією для сполуки набору комп’ютерів, що їй належать. Зазвичай, основне призначення цих комп’ютерів залежить від поділі ресурсів (як файлів, і апаратної перефирии) й у полегшення обміну інформацією між співробітниками. Іноді мережі також йдуть на підвищення швидкості обчислень (перекладанням завдань інші вузли) і аби дозволити деяким вузлам бути й інших запасними у випадку їхньої повреждения.

Узлы.

Рис. 1.2 Мережа з шинної организацией.

Приклади і організація. У першій половинек 1970;х локальна мережу Ethernet розробили Xerox. Тоді як імена глобальних мереж ARPANET, BITNET, тощо. походить від конкретних мереж, імена локальних мереж — це звичайно імена виробників. Є один ARPANET, одна BITNET, і одна UUCP мережу, кожна компанія може встановити своє власне Ethernet, Token Ring чи SNA сеть.

На відміну від глобальних мереж, ethernet організована з допомогою шинної структури, тобто. сполучення між вузлами має місце у вигляді єдиного механізму, до якого вузли підключені; див. рис. 1.2. Шинна організація стала повсюдної для локальних мереж, хоча може бути розбіжності у тому що таке механізм чи як і используется.

Пристрій Ethernet дозволяє передачу лише одну сполучення кожен час; інших розробок, такі як токен ринг (розроблений лабораторії Цюріх IBM), допускає просторове використання, яке означає, кілька повідомлень можуть передаватися механізмом комунікації одночасно. Шинна організація вимагає трохи апаратури і тому дешева, однак має той недолік, що цю організацію невідь що добре масштабується. Це означає, що є дуже жорсткий стелю числа вузлів, які можна з'єднані однієї шиною. Великі компанії зі багатьма комп’ютерами повинні з'єднувати їх кількома шинами, і використовувати мости для сполуки шин друг з одним, створюючи ієрархію в усій мережі организации.

Не всі ті локальні мережі використовують шинную організацію. IBM розробила точка-точка мережевий продукт званий SNA у тому, аби дозволити покупцям з'єднувати їх різноманітні продукти IBM. Розробка SNA ускладнювалася вимогою її сумісності з майже кожним мережним продуктом, вже запропонованим IBM.

Алгоритмічні проблеми. Впровадження локальних мереж вимагає розв’язання деяких, але з всіх, проблем, розглянутих попередньому підрозділі по глобальним мереж. Надійний обмін даними не така велику проблему, тому що шини зазвичай дуже надійніші швидкі. Проблема маршрутизації не постає в шинних мережах, оскільки кожне призначення то, можливо адресовано прямо по мережі. У кільцевих мережах все повідомлення зазвичай посилаються щодо одного напрямі вздовж кільця і видаляються або одержувачем, або відправником, що також робить проблему маршрутизації вичерпаною. У шині немає перевантаження завдяки з того що кожне повідомлення приймається (береться з шини) відразу після його відправки, але необхідно обмежувати навантаження від повідомлень, очікуючих у вузлах виходу шину. Якщо повідомлення не зберігаються в проміжних вершинах, те й немає глухого кута типу сохрани-и-передай. Не треба у механізмах безпеки крім тієї звичайній захисту, запропонованої операційній системою, якщо комп’ютерами володіє одна компанія, яка довіряє своїм сотрудникам.

Використання локальних мереж для розподіленого виконання прикладних програм (набору процесів, поширених по вузлам мережі) вимагає розв’язання наступних проблем розподіленого управління, деякі з них обговорюються у частині 2.

1) Широкомовлення і синхронізація (глава 6). Якщо інформація мусить бути доступна всім процесам, або всі процеси повинні чекати виконання деякого глобального умови, необхідно мати схему передачі повідомлень, яка якимось чином «додзвонюється» до всіх процессов.

2) Виборність (глава 7). Деякі завдання мають бути здійснені точно одним процесом з багатьох, наприклад, генерування виведення чи ініціалізація структури даних. Якщо, що інколи бажано чи необхідно, немає процесу покликаного забезпечити цього заздалегідь, то розподілений алгоритм мусить вибрати одні з процесів до виконання задачи.

3) Виявлення завершення (глава 8). Не завжди є для процесів в розподіленої системі помічати безпосередньо, що розподілені обчислення, до яких вони залучені, завершены.

Тому виявлення потрібно, щоб зробити вычисляемые результати окончательными.

4) Розподіл ресурсів. Вузол вимагатиме доступом до деяким ресурсів, доступними, десь у мережі, але з знає, де цей ресурс перебуває. Підтримка таблиці, що описує місце розташування кожного ресурсу який завжди адекватна, оскільки число потенційних ресурсів може бути великим при цьому, чи ресурси можуть мігрувати від однієї вузла до іншого. І тут, запитуючий вузол може опитувати усі поголовно чи деякі вузли щодо доступності ресурсу, наприклад, використовуючи широкомовний механізм. Алгоритми з цією проблеми можуть базуватися на хвильових механізмах, описаних у Пророчих главі 6, див., наприклад Баратц і другие.

[BGS87].

5) Взаємна виняток. Проблема взаємного винятку постає, якщо процеси можуть покластися спільний ресурс, що може бути використаний лише одною ресурсом у кожний час. Таким ресурсом то, можливо принтер чи файл, що має бути перезаписан. Роздільного алгоритму у разі необхідно визначити, якщо вимагають процеси доступу одночасно, якого з них дозволити використовувати ресурс першим. Також переконатися у тому, наступний процес почне використовувати ресурс, тільки тоді, як процес закінчить його использовать.

6) Виявлення глухих кутів та його дозвіл. Якщо процеси повинні чекати одне одного (як у, якщо поділяють ресурси, і, якщо їх обчислення покладаються на дані, забезпечувані іншими процесами), може виникнути циклічне очікування, у якому нічого очікувати можливо подальших обчислень. Ці тупикові ситуації мають визначатися правильні дії мають вживатися у тому, щоб перезапустить чи продовжити вычисления.

7) Розподілена підтримка файлів. Коли вузли поміщають запити для читання і запис віддаленого файла, цих запитів, можуть оброблятися в довільному порядку, і звідси мусить бути передбачена міра бути впевненими у цьому, кожен вузол спостерігає цілісний вид файла чи файлів. Зазвичай це виробляється тимчасовим штампуванням запитів, як і інформацією файлах і упорядкування вхідних запитів з їхньої тимчасовим оцінкам; див., наприклад, [LL86].

1.1.5 Многопроцессорные компьютеры.

Многопроцессорный комп’ютер це обчислювальна система, що складається з кількох процесорів у маленькому масштабі, зазвичай всередині однієї великої коробки. Цей тип комп’ютерної системи відрізняється від локальних мереж по наступному критерію. Його процесори гомогенны, тобто. вони ідентичні по апаратурі. Географічний масштаб машини дуже маленький, зазвичай порядку метри більш-менш. Процесорам призначені задля об'єднаного використання їх у одному обчисленні (або щоби підвищити швидкість, або підвищення надійності). Якщо основне призначення многопроцессорного комп’ютера це підвищення швидкості обчислень, він часто називається паралельним комп’ютером. Якщо його основне призначення — підвищення надійності, він часто називається система репликации.

Паралельні комп’ютери поділяються на одно-командные много-поточные за даними (чи SIMD) і много-командные много-поточные за даними (чи MIMD) машины.

Рис. 1.3 Транспьютер і мікросхема маршрутизатора.

SIMD машини мають один інтерпретатор інструкцій, але команди виконуються великою кількістю арифметичних блоків. Зрозуміло, що це блоки мають недолік автономності, яку вимагають у нашій визначенні розподілених систем, і тому SIMD комп’ютери ні розглядатися у книзі. MIMD машини складаються з кількох незалежних процесорів і вони класифікуються як розподілені системы.

Процесорам зазвичай обладнуються спеціальної апаратурою для комунікації коїться з іншими процесорами. Комунікація між процесорами може відбутися або через шину, або через сполуки точка-точка. Якщо обрано шинна організація, то архітектура масштабируема лише до певного уровня.

Дуже популярним процесором і розробити багатопроцесорних комп’ютерів є транспьютер, розроблений Inmos; див. рис. 1.3. Транспьютер складається з центрального процесора (CPU), спеціального блоку з плаваючою точкою (FPU), локальної пам’яті, і чотири спеціальних процесорів. Чіпи дуже добре підходять для побудови мереж ступеня 4 (тобто. кожен вузол з'єднаний із чотирма іншими вузлами). Inmos також виробляє спеціальні чіпи для комунікації, звані маршрутизаторами. Кожен маршрутизатор може водночас обробляти трафік 32 транспьютерных сполук. Кожне входячи повідомлення проглядається на предмет того, якою зв’язку, воно то, можливо перенаправлено; потім вона іде по це связи.

Інший приклад паралельного комп’ютера це система Connection Machine CM-5, розроблена Thinking Machines Corporation [LAD92]. Кожен вузол машини складається з швидкого процесора і обробних блоків, таким чином, пропонуючи внутрішній паралелізм на додаток паралелізму, цих подій наявністю кількох вузлів. Оскільки кожен вузол має потенційну продуктивність 128 мільйонів операцій на секунду, і жодна машина може містити 16 384 вузлів, повна машина може виконувати понад 1012 операцій на секунду. (Максимальна машина з 16 384 процесорів займає кімнату 900 м² і найшвидше дуже дорога.) Вузли СМ-5 з'єднані трьома точка-точка комунікаційними мережами. Мережа даних, з топологією товстого дерева, використовується обмінюватись даними за технологією точка-точка між процесорами. Мережа управління, технологією бінарного дерева, здійснює спеціальні операції, такі як глобальна синхронізація і комбінування введення. Діагностична мережу невидима для програміста і використовується для поширення інформації про поламаних компонентах. Комп’ютер то, можливо запрограмований як і режимі SIMD, і у (синхронному) MIMD режиме.

У паралельному комп’ютері обчислення поділені на подвычисления, кожне здійснюється одноїм з вузлів. У репликационной системі кожен вузол проводить обчислення повністю, після чого результати порівнюються у тому, аби виявити і скоригувати ошибки.

Побудова багатопроцесорних комп’ютерів вимагає розв’язання кількох алгоритмічних проблем, деякі з них подібні проблемам в комп’ютерних мережах. Деякі з них обговорюються у цій книге.

1) Розробка системи передачі повідомлень. Якщо многопроцессорный комп’ютер організований як мережу точка-точка, має бути розроблена комунікаційна система. Це має проблемами схожими на ті, які творяться у розробці комп’ютерних мереж, таких як управління передачею, маршрутизація, і запобігання глухих кутів і перевантажень. Рішення них часто простіше, чому власне разі комп’ютерних мереж. Проблема маршрутизації, наприклад, дуже спрощена регулярністю мережевий топології (наприклад, кільце чи сітка) і надійністю узлов.

Inmos С104 маршрутизатори використовують дуже проста алгоритм маршрутизації, званий внутрішньої маршрутизацією, яка обговорюється в підрозділі 4.4.2, вона може бути використана у мережах із довільною топологією. Це порушує питання чи можуть використовуватися рішення проблем, наприклад, запобігання глухих кутів, в комбінації з механізмом маршрутизації (див. проект 5.5).

2) Розробка віртуальної поділюваної пам’яті. Багато паралельні алгоритми розроблено для так званої моделі паралельної пам’яті з довільним доступом (PRAM), у якій кожен процесор має доступом до поділюваної пам’яті. Архітектури з пам’яттю, яка поділяється фізично, не масштабируются; тут відтворена жорсткий межа числа процесорів, які можна обслужені одним чіпом памяти.

Тому дослідження на архітектури, які мають кілька вузлів пам’яті, приєднаних до процесорам через интерсеть. Така интерсеть то, можливо побудована, наприклад, з траспьютеров.

3) Балансування завантаження. Обчислювальна міць паралельного комп’ютера експлуатується лише, якщо робоча навантаження обчислень розподілено рівномірно по процесорам; концентрація роботи з одному вузлі знижує продуктивність до продуктивності одного вузла. Якщо всі кроки обчислень можуть визначити під час компіляції, то можливо розподілити їх статично. Більше важкий випадок виникає, коли блоки роботи створюються динамічно під час обчислення; у разі потрібні складні методи. Черги завдань процесорів повинні регулярно порівнюватися, після чого завдання повинні мігрувати від однієї в іншу. Для огляду деяких методів і алгоритмів балансування завантаження див. Гочинский [Gos91, глава 9] чи Харгет і Джонсон [HJ90].

4) Робастость проти необнаруживаемых збоїв (част. З). У репликационной системі може бути механізм задля подолання збоїв щодо одного чи навіть кількох процесорах. Звісно, комп’ютерні мережі мають також продовжувати їх функціонування, попри збої вузла, але передбачається, що така збій то, можливо виявлено іншими узлами.

(див., наприклад, алгоритм мережного обміну розділ 4.3).

Припущення, у яких репликационные системи повинні залишатися правильними, суворіші, т.к. процесор може дати помилковий відповідь, і те час кооперуватися коїться з іншими з допомогою протоколів як правильно працюючий процесор. Має бути впроваджений механізм голосування, щоб відфільтрувати результати процесорів, отже лише правильні відповіді передаються в усі час, поки що більшість процесорів працює правильно.

1.1.6 Взаємодіючі процессы.

Розробка складних програмних систем то, можливо найчастіше спрощена організацією програми як набору (послідовних) процесів, кожен із добре певної, простий задачей.

Класичний приклад для ілюстрації цього спрощення це перетворення записів Конвея. Проблема у цьому, щоб читати 80 символьні запису і записувати таку ж інформацію в 125 символьні записи. Після кожної вхідний записи повинен уставлятися додатковий прогалину, й кожна пара зірочок («**») повинна замінюватись на окличний знак («!»). Кожна вихідна запис повинна завершуватися символів кінця записи (EOR). Перетворення може бути проведене однієї програмою, але написання програмних засобів дуже складно. Усі функції, тобто. заміна «**» на «!», вставка прогалин, і вставка символів EOR, має здійснюватися за цикл.

Програму краще структурувати як взаємодіючих процесу. Перший процес, скажімо р1, читає вхідні карта народження і конвертує вхідний потік в потік друкованих символів, не розбиваючи на записи. Другий процес, скажімо р2, отримує потік символів і вставляє EOR після 125 символів. Структура програми як набір двох процесів зазвичай передбачається для операційними системами, телефонних переключающих центрів, і ми побачимо в підрозділі 1.2.1, для комунікаційних програм, у комп’ютерних сетях.

Набір кооперирующих процесів стає причиною, що додаток стає локально розподіленим, але цілком можливо виконувати процеси однією комп’ютері, у разі додаток перестав бути фізично розподіленим. Звісно, у разі досягти фізичної распределенности легше саме з систем, які логічно розподілені. Операційна система комп’ютерної системи повинна управляти конкурентним виконанням процесів й забезпечити кошти комунікації і синхронізації між процессами.

Процеси, які виконуються однією комп’ютері, мають доступом до однієї фізичної пам’яті, звідси — природно використання цієї пам’яті для комунікації. Один процес пише у певне місце пам’яті, і той процес читає від цього місця. Ця модель конкуруючих процесів була використана Дейкстрой [Dij68] і Овицким і Грайсом [OG76]. Проблеми, розглянуті у цьому контексті, включають следующие.

1) Атомичность операцій із пам’яттю. Часто передбачається, що читання і запис слова пам’яті атомичны, тобто. читання і запис що їх процесом завершується перш ніж інша операція читання чи записи розпочнеться. Якщо структури великі, більш ніж один голос оновлюється, операції повинні прагнути бути акуратно синхронізовані, щоб уникнути читання частково оновленої структури. Це можна, наприклад, застосуванням взаємного винятку [Dij68] у структурі: поки що одна процес має доступом до структурі, жоден інший процес неспроможна розпочати читання чи запис. Застосування взаємного винятку з допомогою поділюваних змінних ускладнено через можливість кількох процесів шукати полі ЄС у цей самий время.

Умови очікування, що накладалися доступом зі взаємним винятком до поділюваним даним, можуть понизити продуктивність процесів, наприклад, якщо «швидкий» процес має чекати дані, нині використовувані «повільним» процесом. У недавні роки увагу концентрувалася на застосуванні поділюваних змінних, що є wait-free, що таке, що може читати чи писати дані без очікування будь-яких інших процесів. Читання і запис можуть перекриватися, але при ретельному пропрацюванні алгоритмів читання і запис, яка має забезпечити атомичность. Для огляду алгоритмів для wait-free атомичных поділюваних змінних см.

Киросис і Кранакис [KK89].

2) Проблема виробник-споживач. Два процесу, одна з яких пише в поділюваний буфер і той і котрих читає з буфера, би мало бути скоординовані, щоб запобігти перший процес від записи, коли буфер сповнений і друге процес від читання, коли буфер порожній. Проблема виробник-споживач виникає, коли розв’язання проблеми перетворення Конвея вироблено; р1 виробляє проміжний потік символів, і р2 споживає его.

3) Складання сміття. Додаток, яке запрограмовано з допомогою динамічних структур даних може дати недоступні осередки пам’яті, звані сміттям. Формально, додаток мала б зійти нанівець, коли в системи пам’яті закінчується вільне місце, щоб дозволити спеціальної програмі, званої збирачем сміття, ідентифікувати й повернути недоступну память.

Дейкстра та інші [DLM78] запропонували складальник сміття на-лету, котрі можуть працюватиме, як окремий процес, паралельно з приложением.

Потрібна складне взаємодія між додатком і збирачем, т.к. додаток може модифікувати структури покажчиків у пам’яті, тоді як складальник вирішує які осередки є недоступными.

Алгоритм може бути старанно проаналізовано, щоб показати, що модифікації не зумовлять помилковий повернення доступним осередків. Алгоритм для збору сміття на-лету з спрощеним доказом правильності було запропоновано Бен-Ари [BA84].

Рішення проблем, перелічених тут, демонструють, які можуть бути вирішені дуже важкі проблеми взаємодії процесів для процесів, які повідомляються у вигляді поділюваної пам’яті. Проте, рішення часто виключно ускладнені і часом дуже незначна перемішування кроків різних процесів дає помилкові результати для рішень, що здаються правильними перший і навіть у другий погляд. Тому, операційні системи та мови програмування пропонують примітиви ще структурної організації межпроцессовых коммуникаций.

1) Семафори. Семафор [Dij68] це неотрицательная змінна, чиє значення то, можливо читано і записане за атомичную операцию.

V операція приращает його значення, а Р операція зменшує його значення, як його позитивно (і підвішує виконання процесу в цій операції, поки значення перемінної нулевое).

Семафори — підходяще засіб до застосування взаємного винятку над поділюваної структурою даних: семафор инициализируется один, й доступу до структури розпочинається операцією Р і завершується операцією V. Семафори накладають велику відповідальність за кожен процес за правильне використання; цілісність поділюваних даних порушується, якщо процес маніпулює даними неправильно або виконує необхідних Р і V операций.

2) Монітори. Монітор [Hoa74] складається з структури даних, і набору процедур, які можуть опинитися виконуватися над цими даними, з допомогою їх виклику процесами способом, використовує взаємне виняток. Т.к. до даних доступ здійснюється повністю через процедури, оголошені в моніторі, гарантується правильне використання даних, якщо монітор оголошено коректно. Монітор, в такий спосіб, запобігає не позволенный доступом до даним і синхронізує доступ різних процессов.

3) Канали. Канал [Bou83] це механізм, який передає потік даних від однієї процесу іншій можуть і синхронізує два комутувальних процесу; це заздалегідь запрограмоване розв’язання проблеми производитель-потребитель.

Канал це основний механізм комунікацій в операційній системе.

UNIX. Якщо програма р1 виконує процес р1 перетворення Конвея і р2 виконує р2, команда UNIX р1 | р2 викликає дві програми розвитку й з'єднує їх каналом. Висновок р1 буферизируется і мені стає введенням р2.

; р1 підвішується, коли буфер сповнений, і р2 підвішується, коли буфер пуст.

4) Передача повідомлень. Деякі мови програмування, такі как.

OCCAM і ADA, забезпечують передачу повідомлень, як механізм для межпроцессовой комунікації. Проблеми синхронізації щодо легко вирішуються з допомогою передачі повідомлень; т.к. повідомлення може бути отримано до передачі, виникає тимчасове ставлення між подіями завдяки обміну сообщениями.

Передача повідомлень можуть виконати з допомогою моніторів чи каналів, і це природні кошти на систем комунікації, які використовуються у апаратурі розподілених систем (без поділюваної пам’яті). У насправді, мови OCCAM і ADA розробили з використання їх задля фізично розподілених приложений.

[pic].

Рис 1.4 Слоеная мережна архитектура.

1.2 Архітектура і Языки.

Програмне забезпечення до виконання комп’ютерних мереж зв’язків дуже ускладнене. У розділі пояснено, як і програмне забезпечення зазвичай структурується в ациклически залежних модулях названих рівнями (Підрозділ 1.2.1). Ми обговорюємо два стандарту з мережевий архітектурою, а саме, модель МІЖНАРОДНОЇ ОРГАНІЗАЦІЇ ПО СТАНДАРТИЗАЦІЇ Сполуки Відкритих систем, стандарт для глобальних мереж, та будівництво додаткового стандарту IEEE для локальних мереж (Підрозділи, 1.2.2 і 1.2.3). Також мови, використовувані для програмування розподілили системи, коротко обговорені (Підрозділ 1.2.4).

1.2.1 Архитектура.

Складність завдань, виконуваних підсистемою зв’язку розподіленої системи вимагає, щоб ця підсистема розробили високо структурованим способом. На той час, мережі завжди організовуються як сукупність модулів, кожне виконання дуже специфічне функція і яка грунтується на послугах, запропонованих іншими модулями. У мережевих організаціях є завжди сувора ієрархія між тими модулями, бо кожен модуль виключно використовує послуги, запропоновані попереднім модулем. Модулі названі рівнями чи рівнями у тих мережевий реалізації; див. 1.4 Малюнок. Кожен рівень здійснює частина функціональних можливостей, необхідних реалізації сіті й потрібно було до рівня тільки нижчими цього. Послуги, запропоновані і рівнем і + 1 рівню точно описані у інтерфейсі і рівня життя та і + 1 рівня (коротко, і / (і + 1) інтерфейс). Під час проектування мережі, насамперед, слід визначити число рівнів і інтерфейсів між наступними уровнями.

Функціональні можливості кожного рівня потрібно виконати розподіленим алгоритмом, таким, що алгоритм для і рівня вирішує «проблему », певну і / (і + 1) інтерфейсом, відповідно до «припущенням », певним в (і — l) /і інтерфейсі. Наприклад, (і — 1) /і інтерфейс може визначати, що повідомлення транспортуються з вузла p до вузлу q, та деякі повідомлення може бути втрачені, тоді як і / (і + 1) інтерфейс визначає, що повідомлення передаються від p до q надійно. Алгоритмічна проблема для і рівня потім — виконати надійне проходження повідомлення, використовуючи ненадійна проходження повідомлення, що зазвичай робиться з допомогою підтвердження і перепередачи втрачених повідомлень (див. Підрозділ, 1.3.1 і Главу 3). Вирішення проблеми визначає тип повідомлень, обменянных процесами і рівня життя та значення цих повідомлень, тобто., як процеси повинні реагувати для цієї повідомлення. Правила і угоди, використовувані в «сеансі зв’язку «між процесами і рівня згадуються як layer-i протокол. Найнижче ієрархії (рівень 0 на Малюнку 1.4) — завжди апаратний рівень. Інтерфейс 0/1 описує процедури, якими рівень і може передати неопрацьовану інформацію через що з'єднують дроти, і опис рівня безпосередньо визначає то, які типи дроти використовуються, скільки вольт представляють одиницю чи нуль, тощо. Важливе спостереження — те, що зміна у реалізації рівня 0 (заміна дротів іншими проводами чи супутниковими підключеннями) не вимагає, щоб інтерфейс 0/1 змінили. Ті самі умови на більш високих рівнях: інтерфейси рівня служать екраном від реалізація рівня для інших рівнів, і реалізація можна змінити так, щоб впливати інші рівні. Під мережевий архітектурою ми розуміємо сукупність рівнів й що описів всіх інтерфейсів і протоколів. Оскільки мережу може містити вузли, вироблені різними виготовлювачами, программируемые програмним забезпеченням, написаним різними компаніями, важливо, щоб вироби різних компаній були сумісними. Важливість сумісності було визнано в усьому світу і отже стандартні мережні архітектури розробили. Наступного підрозділі два стандарту обговорюються, що отримала «офіційне «статус, оскільки їх прийнято впливовими організаціями (МІЖНАРОДНА ОРГАНИЗАЦИЯ ПО СТАНДАРТИЗАЦІЇ, та Інститут Електричних і Електронних Інженерів, IEEE). Протокол керування передаванням / internet протокол (TCP/IP) — сукупність протоколів, які у Internet. TCP/IP — не офіційний стандарт, але використовується настільки, що стала фактичним стандартом. Сімейство протоколів TCP/IP (див. Davidson [Dav88] запровадження) структурований відповідно до рівням OSI моделі, обговореної в наступному підрозділі, але протоколи можна використовувати в глобальних мережах як і в локальних сетях.

Вищі рівні містять протоколи для електронної пошти (простий протокол передачі пошти — SMTP), передача файлів (протокол передачі файлів, FTP), і двунаправленная зв’язок для віддаленого входу до системи (Telnet).

1.2.2 Ссылочная Модель OSI.

МІЖНАРОДНА ОРГАНИЗАЦИЯ ПО СТАНДАРТИЗАЦІЇ встановила стандарт для комп’ютерних изделий (программ) до роботи з мережами на кшталт тих, які використовуються (переважно) в глобальних мережах. Їх стандарт для мережевий архітектури названо З'єднанням відкритих систем (OSI) ссылочной моделлю, і буде описаний коротко у тому підрозділі. Оскільки стандарт в повному обсязі відповідний від використання в локальних мережах, додаткові стандарти IEEE для локальних мереж обговорені наступного підрозділі. Модель посилання OSI складається з семи рівнів, саме фізичного, зв’язку даних, мережі, транспорту, сеансу, уявлення, і рівнів прикладної програми. Ссылочная модель визначає інтерфейси між рівнем і відданість забезпечує, для кожного рівня, чи більше стандартних протоколів (розподілені алгоритми, аби виконати уровень).

Фізичний (1) рівень. Мета фізичного рівня у тому, щоб передати послідовності бітов на каналі зв’язку. Оскільки ім'я рівня передбачає, що ця впоралися у вигляді фізичного підключення між двома вузлами, типу телефонній лінії, волоконно-оптичного підключення, чи супутникового підключення. Проект рівня безпосередньо — цілком запитання в інженерів — електриків, тоді як інтерфейс ½ визначає процедури, якими такий рівень викликає послуги фізичного рівня. Обслуговування фізичного рівня не в надійно; потік бітов то, можливо попсований протягом передачи.

Канальний рівень (2). Мета канального рівня у тому, щоб маскувати ненадійність фізичного рівня, тобто забезпечити надійний зв’язку з вищими рівнями. Рівень зв’язку даних лише здійснює надійне підключення між вузлами, які безпосередньо пов’язані фізичної зв’язком, оскільки він сформований безпосередньо над фізичним рівнем. (Зв'язок між несмежными вузлами виконано мережному рівні.) Щоб осягнути мету, рівень ділить потік бітов на частини фіксованою довжини, названі кадрами. Приймач кадру може проверять (отмечать), був чи кадр отримано правильно, перевіряючи контрольну суму, що є деякою надлишкової інформацією, доданої до кожного кадру. Є зворотний від приймача до відправника, щоб повідомити відправнику щодо правильно чи неправильно отриманого кадру; ця зворотний відбувається у вигляді повідомлень подтверждения.

Відправник пошле кадр знову, якщо виявилося, що він отримано неправильно чи цілком втрачено. Загальні принципи, розгадані у минулому параграфі може бути удосконалені до низки різних протоколів зв’язку даних. Наприклад, повідомлення підтвердження то, можливо послано для кадрів, які отримані (позитивні підтвердження) або заради кадрів, які відсутні з сукупності отриманих кадрів (негативні підтвердження). Остаточна відповідальність за правильну передачу всіх кадрів може бути відправника чи боці приймача. Підтвердження можуть бути послані для одиночних кадрів чи блоків кадрів, кадри може мати числа послідовності або, і т.д.

Мережний рівень (3). Мета мережного рівня у тому, щоб забезпечити засоби зв’язку поміж усіма парами вузлів, як пов’язаних фізичним каналом. Цей рівень мусить вибрати маршрути через мережу, що використовується для зв’язок між не-смежными вузлами і має управляти завантаженням руху на кожному вузлі і каналі. Вибір маршрутів зазвичай грунтується на інформації щодо мережевий топології, котра міститься в маршрутизації таблиць, збережених у кожному вузлі. Мережний рівень містить алгоритми, щоб модифікувати таблиці маршрутизації, якщо топологія мережі змінилася (внаслідок збою каналу, чи відновлення). Такий збій чи відновлення можна знайти канальным рівнем зв’язку. Хоча канальний рівень забезпечує надійне обслуговування у мережного рівня, обслуговування, запропоноване мережним рівнем не надійно. Повідомлення (названі пакетами у тому рівні) послані від однієї вузла до іншого можуть слідувати різними шляхами, викликаючи небезпека, що сама повідомлення дістане інше. У результаті збоїв вузла повідомлення може бути втрачені (вузол може накритися під час зберігання cообщения), і внаслідок зайвих повідомлень перепередач можуть і бути дублированы. Рівень може гарантувати обмеженому пакету термін їхньої служби; тобто, існує константа з така, кожен пакет чи передається в вузол адресата протягом з секунд, чи теряется.

Транспортний рівень (4). Мета транспортного рівня у тому, щоб маскувати ненадійність, подану мережним рівнем, тобто, забезпечити надійний зв’язок між будь-якими двома вузлами. Проблему було б подібна тієї розв’язаною канальным рівнем, але ускладнено можливістю дублювання і переупорядочения повідомлень. Це неможливим використовувати циклічні числа послідовності, якщо обмеження терміном служби пакета не гарантується мережним уровнем.

Алгоритми, використовувані керувати передачі у транспортному рівні використовують подібні методи для алгоритмів в канальном рівні: числа послідовності, зворотний через підтвердження, і перепередачи.

Рівень сеансу (5). Мета рівня сеансу у тому, щоб забезпечити кошти на підтримки підключень між процесами у різних вузлах. Підключення то, можливо відкритий і закрито й між відкриттям, і закриттям підключення можна використовувати обмінюватись даних, використовуючи адресу сеансу скоріш, ніж повторення адреси віддаленого процесу з кожним повідомленням. Рівень сеансу використовує надійну безперервну зв’язок, запропоновану транспортним рівнем, але структурує передані сполучення сеанси. Сеанс можна використовувати передачі файла чи віддаленого входу в систему. Рівень сеансу може забезпечувати механізми на відновлення, якщо вузол зазнає краху протягом сеансу й у взаємного винятку, якщо критичні операції що неспроможні виконуватися обох кінцях одновременно.

Рівень уявлення (6). Мета рівня уявлення у тому, аби виконати перетворення даних, де надання інформації щодо одного вузлі відрізняється від подання у іншому вузлі або підходяще для передачі. Нижче цього рівня (тобто, при інтерфейсі 5/6) дані перебувають в передавабельной і стандартизованої формі, тоді як вище цього рівня (тобто, при інтерфейсі 6/7) дані перебувають у пользовательско — чи комп’ютерно — специфічну форму. Рівень виконує стиснення даних, і декомпресію, аби знизити кількість даних, переданих через більш низькі рівні. Рівень виконує шифрування даних, і розшифровку, щоб гарантувати конфіденційність і цілісність у присутності зловмисних сторін, які прагнуть отримувати чи руйнувати передані данные.

Рівень прикладної програми (7). Мета рівня прикладної програми у тому, щоб виконувати конкретні вимоги користувача типу передачі файла, електронної пошти, інформаційних табло, чи віртуальних терміналів. Широке розмаїтість можливих прикладних програм робить неможливим стандартизувати повні функціональні можливості цього рівня, але декого з прикладних програм, перелічених тут, стандарти були предложены.

1.2.3 OSI Модель в локальних мережах: IEEE Стандарты.

На проект ссылочной моделі OSI впливають великою мірою архітектури існуючих глобальних мереж. Технологія, яка у локальних мережах накладає різні програмні вимоги, і через цих вимог що з рівнів можуть зовсім відсутні в локальних мережах. Якщо мережна організація потрібно було загальну шину, загальнодоступну усіма вузлам (див. Підрозділ 1.1.4), то мережевий рівень майже порожній, оскільки кожне подружжя вузлів пов’язана безпосередньо через шину. Проект транспортного рівня дуже спрощений обмеженою кількістю недетерминизма що був шиною, проти проміжної двухточечной мережею. Навпаки, канальний рівень ускладнено фактом, що тієї ж самої фізичної середовищі звертається потенційно дуже багато вузлів. У ній для цієї проблеми IEEE схвалив додаткові стандарти, покриваючи лише трохи більше низькі рівні OSI ієрархії, від використання в локальних мережах (чи, якщо бути точнішим, переважають у всіх мережах, що є структурованими шиною скоріш, ніж двухточечными сполуками). Оскільки ніякий одиночний стандарт було бути досить загальний, щоб охопити все мережі, вже широко які використовуються, IEEE схвалив три різних, несумісних стандарту, саме МНОЖИННИЙ ДОСТУП З ОПИТУВАННЯМ НЕСУЧОЮ І ДОЗВОЛОМ КОНФЛІКТІВ, маркерную шину, і эстафетное кільце. Канальний рівень замінений двома подуровнями, саме управління доступом до середовища і подуровни управління логічним соединением.

Фізичний (1) рівень. Мета фізичного рівня стандартах IEEE подібна такого початкового стандарту МІЖНАРОДНОЇ ОРГАНІЗАЦІЇ ПО СТАНДАРТИЗАЦІЇ, саме передавати послідовності бітов. Фактичні стандартні описи (тип монтажу тощо.), проте, радикально різні, через те, що все зв’язок відбувається після загальнодоступну середу, а чи не через двухточечные подключения.

Medium-access-control подуровень (2a). Мета цього подуровня полягає у тому, щоб вирішити конфлікти, які виникають між вузлами, які хочуть використовувати загальнодоступну середу зв’язку. Статичний підхід назавжди і безповоротно планував б інтервали часу, протягом яких кожному вузлу дозволяють використовувати середу. Цей метод втрачає багато пропускну здатність, проте, за умови що кілька вузлів мають дані, щоб передавати, й інші вузли тихі, середовище залишається у просте протягом часів, планованих для тихих вузлів. У шинах маркера і естафетних кільцях доступом до середовищі перебувають розслідування щодо карусельному принципу: вузли циркулюють привілей, названу маркером, у тому числі, і вузлу, задерживающему цей маркер, використовувати середу. Якщо вузол, затримуючий маркер, немає ніяких даних, щоб передати, він передає маркер ось до чого вузлу. У эстафетном кільці циклічний порядок, у якому вузли отримують їх право ходу, визначено фізичної топологією підключення (який, справді, кільце), у те час як і шині маркера, циклічний порядок визначено динамічно виходячи з порядку адрес вузлів. У стандарті МНОЖИННОГО ДОСТУПУ З ОПИТУВАННЯМ НЕСУЧОЮ І ДОЗВОЛОМ КОНФЛІКТІВ вузли спостерігають, коли середовище неактивна, і якщо така, то їм дозволяють послати. Якщо чи більше вузла запускають посилку (приблизно) одночасно, є перевірка на те що, яке можна знайти, що змушує кожен вузол переривати передачу і намагатися знову у пізніший время.

Logical-link-control подуровень (2b). Мета цього рівня порівняти з метою канального рівня OSI моделі, саме: управляти обміном даними між вузлами. Рівень забезпечує управління помилками і управління потоком даних, використовуючи методи, як ті як у OSI протоколах, а саме числа послідовності і підтвердження. Видящийся з погляду вищих рівнів, logical-link-control подуровень з’являється подібно мережному рівню OSI моделі. Справді, зв’язок між будь-який парою вузлів не викликає здобуття права використовувати проміжні вузли, і то, можливо оброблена безпосередньо logical-link-control подуровнем. Окремий мережевий рівень не було б виконувати в локальних мережах; натомість, транспортний рівень сформований безпосередньо верхній частини logicallink-control подуровня.

1.2.4 Підтримка Языка.

Реалізація однієї з програмних рівнів мережі зв’язків чи розподіленої прикладної програми вимагає, щоб розподілений алгоритм, вживаний у рівні чи прикладної програмі був кодирован мовою програмування. На фактичне кодування звісно високо впливає язик, і особливо примітиви, що він пропонує. Позаяк у цій книжці ми концентруємося на алгоритми й не їх кодування як програма, наша базисна модель процесів полягає в станах процесу переходах стану (див. Підрозділ 2.1.2), а чи не на виконанні команд, прийнятих з запропонованого набору. Звісно, неминуче, щоб там, куди ми представили алгоритми, була потрібна деяка формальна запис; запис програмування, яка у цій книжці забезпечена в Додатку A. У цьому підрозділі ми описуємо що з конструкцій, які можна поспостерігати на фактичних мовами програмування, розроблених для розподілених систем. Ми обмежуємося тут коротким описом цих конструкцій; Для великої кількості деталей прикладів фактичних мов, що використовують різні конструкції, див., наприклад, Bal [Bal90]. Мова для програмування розподілених прикладних програм, має забезпечити кошти, щоб виявити паралелізм, обробляти взаємодія, і недетерминизм. Паралелізм, звісно, потрібно програмування різних вузлів системи у такий спосіб, яким вузли виконають частина їх програми одночасно. Зв’язок між вузлами повинна також бути підтримана в відповідність до мовою програмування. Недетерминизм необхідний, оскільки вузол повинен іноді бути спроможний одержати повідомлення від різних вузлів, чи бути здатним або посилати, або отримувати сообщение.

Паралелізм. Найбільш відповідна ступінь паралелізму в розподіленої прикладної програмі залежить від отношения (коэффициента) між вартістю зв’язку й вартістю обчислення. Менша ступінь паралелізму враховує швидше виконання, але й вимагає великої кількості зв’язку, то якщо ми зв’язок дорога, посилення в быстродействии обчислення то, можливо втрачено у додатковій вартості зв’язку. Паралелізм зазвичай виражається, визначенням кількох процесів, де кожен процес є послідовним об'єктом зі своїм простором стану. Мова може або пропонувати можливість статичного визначення сукупності процесів чи дозволяти динамічний створення умов та завершення процесів. Також можливо висловити паралелізм у вигляді паралельних інструкцій чи функціональному мові програмування. Паралелізм який завжди явний у мові; виділення розділів коду в паралельні процеси може виконуватися складним транслятором.

Зв’язок. Зв’язок між процесами властива розподіленим системам: якщо процеси не зв’язуються, кожен процес функціонує в ізоляції з інших процесів і має вивчатися в ізоляції, a не як частина розподіленої системи. Коли процеси співробітничають у обчисленні, зв’язок необхідна, якщо один процес потребує проміжний результат, зробленому іншим процесом. Також, синхронізація необхідна, оскільки вищезгаданий процес має бути призупинений, поки результат досягнуто не доступний. Проходження cообщения зачіпає, і зв’язок і синхронізацію; загальнодоступна пам’ять стосується лише зв’язок: додаткова обережність мусить бути передбачена для синхронізації процесів, які повідомляються з використанням загальнодоступною пам’яті. У мовами, що забезпечують передачу повідомлення, доступні операції «посилати «і «отримувати ». Зв’язок відбувається виконанням посылающейся операції щодо одного процесі (отже названим процесом відправника) і получающейся операцією в іншому процесі (процес приймача). Параметри посылающей операції - адресу приймача та створює додаткові дані, формують зміст повідомлення. Ці додаткові дані стають доступними приймачу, коли отримує інструкція виконано, тобто, в такий спосіб здійснює зв’язок. Отримує операція то, можливо закінчилася лише по тому, як що насилає операція було виконано, як і здійснює синхронізацію. У деяких мовами отримує операція недоступна явно; натомість, процедура чи операція активізується неявно, коли повідомлення отримано. Мова може забезпечувати синхронне проходження повідомлення, коли що насилає операція завершено тільки після виконання отримує операции.

Інакше кажучи, відправник блокований, поки повідомлення був отримано, і має місце двобічна синхронізація між результатами приймача і відправником. Повідомлення може бути послані двухточечно, то є, від однієї відправника однією приймач, чи широкомовно, коли той самий повідомлення отримано усіма приймачами. Термін мультиприведение також використовується, щоб звернутися до повідомлень, які послані сукупності (необов'язково всіх) процесів. Трохи більше структурований примітив зв’язку — віддалений виклик процедури (RPC). Щоб зв’язуватися з процесом b, процедура a звертається процедури, представленої у процесі b, посилаючи параметри процедури у міжнародному сполученні; а припиняється, поки результат процедури нічого очікувати повернутий й інші повідомленні. Варіант для проходження повідомлення — використання загальнодоступною пам’яті для зв’язку; один процес пише значення перемінної, і той процес читає значення. Синхронізація між процесами важче, щоб їх досягти, оскільки читання перемінної можна використовувати колись, ніж змінна була. З використанням примітивів синхронізації типу семафорів [Dij68] чи моніторів [Hoa78], можливо виконати передачу повідомлення, серед загальнодоступних змінних. І навпаки, також можливо виконати (віртуальну) загальнодоступну пам’ять в передавальної повідомлення середовищі, але це неэффективно.

Недетерменизм. У багатьох точках у виконанні процес то, можливо здатний продовжитись в різний спосіб. Отримує операція часто недетерминирована, що це дозволяє отримання повідомлень від різних відправників. Додаткові способи висловлювати недетерменизм засновані на охоронюваних командах. Охоронялась команда у найбільш загальної формі - список інструкцій, кожен предшествованный булевым вираженням (його захисником). Процес може й далі виконання з кожного з інструкцій, для яких відповідна захист оцінюється істиною. Захист може містити получающую операцію, коли він оцінюється істиною, якщо є повідомлення, доступне, щоб бути полученным.

1.3 Розподілені Алгоритмы.

Попередні розділи дали підстави використання розподілених комп’ютерних систем і пояснили характер цих систем; потреба програмувати ці системи виник як слідство. Програмування розподілених систем має грунтуватися на використанні правильних, гнучких, і найефективніших алгоритмів. У розділі обговорюється, що розробка розподілених алгоритмів — ремесло, цілком різне по характеру від ремесла, що у розробці централізованих алгоритмів. Розподілені і централізовані системи відрізняються за низкою істотних відносин, оброблюваних в Підрозділі 1.3.1 і иллюстрируемых в 1.3.2 Підрозділі. Розподілене дослідження алгоритмів отже розвинулося як незалежне полі наукового дослідження; див. 1.3.3 Підрозділ. Ця книга призначена, аби уявити читачеві це полі дослідження. Цілі тогочасні книги й вибору результатів, включених до книги прописані у Підрозділі 1.3.4.

1.3.1 Розподілений проти Централізованих Алгоритмов.

Розподілені системи від централізованих комп’ютерних систем за трьома істотним відносинам, які ми тепер обсуждаем.

(1) Недолік знання глобального стану. У централізованих рішеннях управління алгоритмом може бути зроблене заснованим на спостереженнях стану системи. Навіть притому, що всьому стану зазвичай не можна звертатися до одиночній машинної операції, програма може оглядати перемінні одна одною, і вчасно приймати рішення, зрештою релевантна інформація розцінюватиметься. Ніякі дані не змінюються між перевіркою і рішенням, і це гарантує цілісність рішення. Вузли в розподіленої системі мають доступ лише у їхньому власному станові й існувати немає глобальному стану всієї системи. Отже, неможливо робити рішення управління заснованим на глобальному стані. Це має місце те що, що вузол може одержувати інформацію щодо стану інших вузлів і базувати рішення управління в цій інформації. На відміну від централізованих систем, факт, що отримана інформація стара, дає підстави отримання неприпустимій інформації, оскільки стан іншого вузла, можливо, змінилося між посилкою інформації гніву й рішення, заснованого у цьому. Стан підсистеми зв’язку (то є, які повідомлення перебувають у транзит певний момент) ніколи безпосередньо немає вузлами. Цю інформацію може лише бути виведено побічно, порівнюючи інформацію щодо повідомлень, посланих і збереження одержаних вузлами. Недолік глобального кадру часу. Події, складові виконання централізованого алгоритму повністю упорядковуються природним способом їх тимчасовим появою; кожної пари подій, кожне відбувається раніше чи пізніше ніж інше. Тимчасовий ставлення, викликане на подіях, складових виконання розподіленого алгоритму — не загальна кількість; Для деяких пар подій може матись причина на вирішення, що кожен відбувається перед іншим, але й інших пар має місце, що жодне з подій немає перед іншим [Lam78]. Взаємна виняток можна досягнути в централізовану систему потребують його, якщо доступ процесу p до ресурсу починається пізніше ніж доступ процесу q, то доступ процесу p почався тільки тоді, як доступ процесу q закінчився. Справді, всі такі події (старт і закінчення доступу процесів p і q) повністю упорядковуються ставленням тимчасового предшествования; в розподіленої системі вони — не упорядковуються, й та сама стратегія не достатня. Процеси p і q можуть почати звертатися до ресурсу, тоді як початок одного не передує початку другой.

(3) Недетерменизм. Централізована програма може описувати обчислення, оскільки вони розгортаються з деякого введення недвозначно; маючи цю програму і введення, лише одиночне обчислення можливо. Навпаки, виконання розподіленої системи звичайнодетерміновано, через можливі відмінностей у быстродействии виконання компонентів системы.

Розглянемо ситуацію, де процес серверу може отримувати запити з невідомого числа процесів користувача. Сервер неспроможна призупинити обробку запитів, доки всі запити були отримані, бо ні відомо, скільки повідомлень прибуде. Отже, кожен запит повинен бути оброблений негайно, і Порядок обробки — порядок, куди запити прибувають. Порядок, у якому клієнтура посилає їхніх запитів, то, можливо відомий, але, оскільки затримки передачі невідомі, запити можуть прибувати у різному порядке.

Комбінація нестачі знання щодо глобального стану, недолік глобального кадру часу, і недетерменизм робить проект розподілених алгоритмів заплутаним ремеслом, оскільки три аспекти втручаються кількома способами. Поняття часу й стану дуже пов’язані; в централізованих системах поняття часу можна визначити, розглядаючи послідовність станів, прийнятих системи у протягом виконання. Навіть притому, що у розподіленої системі глобальне стан можна визначити, і виконання може розглядатися як послідовність глобальних станів (Визначення 2.2), це уявлення має обмежений використання, оскільки виконання може також бути описано іншими послідовностями глобальних станів (Теорему 2.21). Ті альтернативні послідовності зазвичай складаються з різних глобальних станів; це дає утвердженню «система, приймала те чи те статки у протягом виконання «дуже сумнівне значення. Недолік знання щодо глобального стану міг би компенсуватися, якщо було можливе передбачити це глобальне стан з алгоритму, виконуваному. На жаль, це можливо через властивого недетерменизма у виконанні розподілених систем.

[pic].

Рис. 1.5 Спрощена мережна архитектура.

1.3.2 Приклад: Зв’язок із одиночним сообщением.

Ми проілюструємо труднощі, що накладалися недоліком знання щодо глобального гніву й нестачі глобального кадру, з допомогою прикладу, обговореного Beisnes [Bel76l, саме надійний обмін інформацією через ненадійну середу. Розглянемо процеси a і b, пов’язаних мережею передачі, яка передає повідомлення від однієї процесу до іншого. Повідомлення то, можливо отримано в довільно тривале час по тому, як він послано, він може також бути втрачено у цілому мережі. Надійність зв’язку збільшується під час використання мережевих процедур управління (NCPs), з якого a і b звертаються до неї. Процес a инициализирует зв’язок, передаючи інформаційний модуль m до NCP A. Взаємодія між NCPs (через мережу передачі, DN) має гарантувати, що m передано у процес b (NCP B), після якого a повідомляється щодо доставки (через NCP A). Структура зв’язку зображено в Малюнку 1.5. Навіть якщо взяти лише одиночний інформаційний модуль повинен транспортуватися від a до b, ненадійність мережі змушує NCP A і NCP B утягуватися в сеанс зв’язку, що з кількох повідомлень. Вони підтримують інформацію стану щодо цього сеансу зв’язку, але оскільки число можливих партнерів сеансу зв’язку кожному за процесу велике, то потрібно, щоб інформація стану було відкинуто після того, як обмін повідомленнями завершено. Ініціалізація інформації стану називається відкриття, і його відкидання називається закриттям сеансу зв’язку. Зауважте, що тепер після закриття сеансу зв’язку, NGP перебуває у точно тому самому самому стані як і для відкриттям його; це і називається закритим станом. Інформаційний модуль m., кажуть, втрачено, якщо a отримав повідомлення від b, але модуль фактично ні ніколи переданий до b. Модуль m, кажуть, дубльований коли він передали двічі. Надійні механізми зв’язку запобігають і і дублювання. Приймається, що NCPs можуть терпіти невдачу, після якого вони перезапускаются участь у закритому стані (справді втрачаючи усю інформацію щодо відкритого на цей час сеансу связи).

Ніяка надійний зв’язок не досяжним. Як перше спостереження, то, можливо показано, що незалежно від цього, як заплутано NCPs розроблено, не можливо досягти повністю надійного зв’язку. Це спостереження то, можливо зроблено незалежно від проекту мережі передачі чи NCPs і лише потрібно було на припущення, що NCP може втрачати інформацію щодо активного сеансу зв’язку. Щоб бачити це, припустимо, що опісля, як ініціалізація зв’язку a, NCP і NCP У запускає разговор (сеанс зв’язку), в протягом якого NCP У доставляє м. b після одержання повідомлення М. з NCP A. Розгляньте випадок де NCP У збоями і перезапущен у зачиненому стані по тому, як NCP послав повідомлення, м. У цій ситуації, ні NCP ні NCP У неспроможна повідомляти, був чи м. вже поставлений, коли NCP У зазнав краху; NCP, що це неспроможна спостерігати події у NCP У (недолік знання щодо глобального стану) і NCP У, що це зазнали краху і це перезапущено участь у закритому стані. Незалежно від цього, як NCPs продовжують їх разговор (сеанс зв’язку), помилку можна представляти. Якщо NCP посилає повідомлення NCP У, знову і NCP У доставляє повідомлення, дублювання може постати. Якщо повідомлення до дано без поставки, втрата може виникати. Ми нині оцінимо кілька можливих проектів NCPs щодо можливості втрати чи дублювання повідомлень. Ми пробуємо розробляти протоколи у такий спосіб, яким втрат уникають у кожному случае.

Cеанс в зв’язку зі одним повідомленням. У найпростішому можливий проекті, NCP, А посилає дані, незмінні через мережу, повідомляє звідси a, і закривається, в одиночному дії після ініціалізації. NCP У завжди доставляє повідомлення, яку він, до b і закривається після кожної доставки. Цей протокол представляє втрату щоразу, коли мережу відмовляється доставляти повідомлення, але з є неможливо запровадження дублирований.

Cеанс зв’язки й з двома повідомленнями. Обмежена захист проти втрати повідомлень пропонується додаванням підтверджень до протоколу. У нормальному сеансі зв’язку, NCP, А посилає повідомлення даних (дані, m) і чекає отримання повідомлення підтвердження (ack) з NCP B. Коли це повідомлення отримано, NCP, А закриває сеанс зв’язку. NCP B, після одержання повідомлення (дані, m), доставляє m до b, відповідає повідомленням (ack), і закривається. Підбиваючи підсумки, можна сказати, що вільний від власних помилок сеанс зв’язку складається з трьох событий.

1. NCP, А send (дані, m).

2. NCP B receive (дані, m), deliver m., send (ack), close.

3. NCP, А receive (ack), notify, close.

Можливість втрати повідомлення даних змушує NCP, А посилати (дані, m) знову, якщо підтвердження ніхто не почув після певного часу. (Через нестачі знання щодо глобального стану, NCP, А може спостерігати, були (дані, m) втрачені, (ack) було втрачено, чи NCP B зазнав краху між отриманням (дані, m) і посилкою (ack).) До цього моменту, NCP A чекає отримання підтвердження протягом обмеженого кількості часу, і якщо ніяке таке повідомлення ніхто не почув, таймер переповнюється й відбувається тайм-аут. Можливо легко помічено, що ця опція перепередачи представляє можливість дубліката, саме, а то й початкове повідомлення даних, а підтвердження було втрачено, як і наступному сценарии:

1. NCP A send (data, m).

2. NCP B receive (data, m), deliver m, send (ack), close.

3. DN (ack) is lost.

4. NCP A timeout, send (data, m).

5. NCP B receive (data, m), deliver m, send (ack), close.

6. NCP A receive (ack), notify, close.

Але підтвердження представляють як можливість дублікатів, вони також зазнають поразки, аби вберегти проти втрат, як такий сценарій показує. Процес, а пропонує два інформаційних модуля, m1 і m2, для передачи.

1. NCP A send (дані, m1).

2. NCP B receive (дані, m1), deliver m1, send (ack), close.

3. NCP A timeout, send (дані, m1).

4. NCP B receive (дані, m1), deliver m1, send (ack), close.

5. NCP A receive (ack), notify, close.

6. NCP A send (дані, m2).

7. DN (дані, m2) is lost.

8. NCP A receive (ack) (step 2), notify, close.

Повідомлення m1 дублировано як у минулому сценарії, але перше підтвердження було доставлене повільно, а чи не втрачено, викликаючи втрату більш пізнього інформаційного модуля. Повільна доставка не виявлено через нестачі глобального часу. Проблема надійного стабільного зв’язку між процесами може бути розв’язана легше, якщо буде прийнято слабке поняття глобального часу, саме, існує верхня межа T затримки передачі будь-якого повідомлення, посланого через мережу. Це називається глобальним припущенням синхронізації, що це породжує тимчасове ставлення між подіями у різних вузлах (саме, посилка NCP Проте й отримання NCP B). Одержання повідомлень з більш ранніх сеансів зв’язку то, можливо відвернуть у тому протоколі закриттям сеансу зв’язку в NCP Та лише через 2T після посилки останнього сообщения.

Cеанс зв’язки й з трьома повідомленнями. Оскільки протокол з цими двома повідомленнями втрачає чи дублює інформаційний модуль, коли підтвердження втрачено чи відстрочене, так можна трактувати додавання третього повідомлення до сеансу зв’язку для інформування NCP У, що NCP, А отримав підтвердження. Нормальний сеанс зв’язку потім складається з таких событий.

1. NCP A send (data, m).

2. NCP B receive (data, m), deliver m, send (ack).

3. NCP A receive (ack), notify, send (close), close.

4. NCP B receive (close), close.

Втрата повідомлення (дані, m) викликає тайм-аут в NCP A, коли NCP A повторно передає повідомлення. Втрата повідомлення (ack) також викликає перепередачу (дані, m), але ці не веде до дублювання, оскільки NCP У має відкритий сеанс зв’язку й розпізнає повідомлення, що він вже получил.

На жаль, протокол може всі ще втрачати і дублювати інформацію. Оскільки NCP У має бути здатним закритися навіть, коли повідомлення (close) втрачено, NCP У повинен повторно передати (ack) повідомлення, коли він не одержує ніякої повідомлення (close). NCP A відповідає, кажучи, що не має жодного сеансу зв’язку (повідомлення (nocon)), після якого NCP У закривається. Перепередача (ack) може прибувати, проте, наступного сеансі зв’язку NCP A і інтерпретуватися як підтвердження у тому сеансі зв’язку, викликаючи те що, наступний інформаційний модуль буде втрачено, як і наступному сценарии.

1. NCP A send (data, m1).

2. NCP B receive (data, m1), deliver m1, send (ack).

3. NCP A receive (ack), notify, send (close), close.

4. DN (close) is lost.

5. NCP A send (data, m2).

6. DN (data, m2) is lost.

7. NCP B retransmit (ack) (step 2).

8. NCP A receive (ack), notify, send (close), close.

9. NCP B receive (close), close.

щК (¶VП¤ёVУб№сХ"№SЧy№Щ®єEЬиЅ^ЮСА›ЬnБЇЧюї?ТѕюПРјС?ЅкХWАҐЪтБ5ЪА‰ХEј"Р‘єMО=ј =ОЫѕьМтѕ¤Й?јЖЎєVЖb", ЙXѕ^Н:В?ТpЖXЩјЛІвJТiмkШіуЬхц:ЭсцвЬхПЫ{тґЪрбЩ"мuЧ)еЧСъЪВК?СAЕbК4БГr" єяІE±" Знову проблема виникла, оскільки повідомлення одного сеансу зв’язку зіштовхувалися з іншим сеансом зв’язку. Це то, можливо виключено вибором пари нових чисел ідентифікації сеансу зв’язку кожному за нового сеансу зв’язку, одне для NCP A родовищ і одне для NCP B. Обрані числа включені в усі повідомлення сеансу зв’язку, й закони використовують, щоб перевірити, що отримане повідомлення справді належить поточному сеансу зв’язку. Нормальний сеанс зв’язку протоколу із трьома повідомленнями следующий.

1. NCP A send (data, m, x).

2. NCP B receive (data, m, x), deliver m, send (ack, x, у).

3. NCP A receive (ack, x, y), notify, send (close, x, y), close.

4. NCP B receive (close, x, y), close.

Ця модифікація протоколу із трьома повідомленнями виключає помилковий сеанс зв’язку, даний раніше, оскільки повідомлення, отримане NCP A за крок 8 немає звичаю як підтвердження для повідомлення даних, посланого за крок 5. Проте, NCP B не перевіряє перевірку правильності (дані, m, x) перед доставкою m (за крок 2), що легко веде до дублювання інформації. Якщо повідомлення, надіслане за крок 1 відстрочене і перетранслировано, пізніше прибуваюче повідомлення (дані, m, x) змушує NCP B доставляти інформацію m знову. Звісно, NCP B повинен також перевіряти правильність повідомлень, що він отримує, перед доставкою даних. Ми розглядаємо модифікацію сеансу зв’язки й з трьома повідомленнями, у якому NCP B доставляє дані за крок 4, a над кроці 2. Повідомлення тепер передається від NCP A перед доставкою від NCP B, а й тому що NCP B одержав інформацію, це здається виправданим. Мабуть забезпечене, тим щонайменше, що NCP B тепер доставить дані у разі; зокрема, коли повідомлення (close, x, y) втрачено. NCP B повторює повідомлення (ack, x, y), яким NCP, А відповідає з повідомленням (nocon, x, y), примушуючи NCP B завдати і закритися, як і наступному сценарии.

1. NCP A send (data, m, x).

2. NCP B receive (data, m, x), send (ack, x, y).

3. NCP A receive (ack, x, y), notify, send (close, x, y), close.

4. DN (close, x, y) is lost.

5. NCP B timeout, retransmit (ack, x, y).

6. NCP A receive (ack, x, y), reply (nocon, x, y).

7. NCP B receive (nocon, x, y), deliver m, close.

Виявилося, щоб уникати втрати інформації NCP B повинен доставляти дані, навіть якщо NCP, А підтверджує, що є підключення з ідентифікаторами x і y. Це механізм перевірки вмотивованості непотрібним для NCP B, ведучи до можливості дублювання інформації, як в наступному сценарии.

1. NCP A send (data, m, x).

2. NCP A timeout, retransmit (data, m, x).

3. NCP B receive (data, m, a:) (sent in step 2), send (ack, x, y1).

4. NCP A receive (ack, x, y1), notify, send { close, x, y1), close.

5. NCP B receive (close, x, yi), deliver m, close.

6. NCP B receive (data, m, x) (sent in step 1), send (ack, x, у2).

7. NCP A receive (ack, x, y2), reply { nocon, x, y2).

8. NCP B receive (nocon, x, y2) in reply to (ack, x, y2), deliver m, close.

Сеанс зв’язки й з чотирма повідомленнями. Доставки інформації із старих сеансів зв’язку можна уникати за наявності NCPs, взаємно согласующих їхньої кількості ідентифікації сеансу зв’язку колись, ніж будь-які дані постануть, як і наступному сеансі связи.

1. NCP A send (data, m, x).

2. NCP B receive (data, m, x), send (open, x, у).

3. NCP A receive (open, x, у), send (agree, x, у).

4. NCP B receive (agree, x, y), deliver m, send (ack, x, y), close.

5. NCP A receive (ack, x, y), notify, close.

Можливість аварійного відмови NCP У змушує обробку помилок бути такий, що дублікат може всі ще відбуватися, навіть, коли ніякої NCP фактично немає крах. Повідомлення помилки (nocon, x, y) послано NCP У коли повідомлення (agree, x, y) отримано, і ніякий сеанс зв’язку не відкритий. Припустимо, що NCP A не отримує повідомлення (ack, x, y), навіть по кілька перепередач {agree, x, y); лише повідомлення (nocon, x, y) отримані. Оскільки можливо, що NCP У зазнав краху колись, що вона отримав (agree, x, y), NCP змушений запустити новий сеанс зв’язку (посилаючи {data, m, x}) щоб уникнути втрату m! Але і можливо, що NCP У вже доставив m, і повідомлення (ack, x, y) було втрачено, тоді з’являється дублікат. Можливо змінити протокол в такий спосіб, що NCP A повідомляє і закривається після одержання повідомлення {nocon, x, y); це запобігає дублікати, а може представляти втрату, яка розглядається навіть менше желательной.

Сеанс зв’язку з п’ятьма повідомленнями і порівняння. Beisnes [Bel76] дає протокол з п’ятьма повідомленнями, який втрачає інформацію, і це представляє дублікати лише, якщо NCP фактично зазнає краху. Отже, це — найкращий можливий протокол, аналізований в світлі того спостереження, що її жодна надійний зв’язок перестав бути можливої, чого раніше підрозділі. Через надмірних накладних витрат (п'ять повідомлень проходять через NCPs, щоб передати один інформаційний модуль), має піддаватись сумніву, чи протокол з п’ятьма повідомленнями справді бути предпочтен набагато більше простому протоколу з цими двома повідомленнями. Справді, бо протокол з п’ятьма повідомленнями може становити дублікати (коли дають збої NCP), рівень процесу повинні поводитися з ними однак. Так виходить, що протокол з двома повідомленнями, котрі можуть представляти дублікати, але, можливо зроблено вільний від втрат, якщо ідентифікації сеансу зв’язку додано, як ми робили для протоколу із трьома повідомленнями, можемо також использоваться.

1.3.3 Область исследования.

Було триваюче дослідження розподілених алгоритми в протягом останнього два десятиріччя, істотний прогрес був зроблено надто ж протягом 80-x. У попередніх розділах зазначили певні технічні досягнення, які стимулювали дослідження розподілених алгоритми, саме, розробка комп’ютерних мереж (і глобальних і локальних) і многопроцессорные комп’ютери. Спочатку дослідження було дуже націлене до прикладному застосуванню алгоритмів в глобальних мережах, але у час розроблено чіткі математичні моделі, дозволяють прикладне застосування результатів і методів до ширшим класам розподілених середовищ. Проте, дослідження підтримує щільні зв’язки Польщі з досягненнями техніки методів зв’язку, оскільки результати в алгоритми часто чутливі до змін у мережевий моделі. Наприклад, доступність дешевих мікропроцесорів уможливила створити системи з багатьма ідентичними процесорами, які стимулювали вивчення «анонімних мережі «(див. Главу 9).

Є кілька журналів і щорічних конференцій, які спеціалізуються на результатах розподілених алгоритмів і розподілених обчислень. Деякі інші журнали та конференції не спеціалізуються лише з цьому предмета, але з тих щонайменше є багато публікацій у цій галузі. Щорічний симпозіум по Принципів розподіленого обчислення (PoDC) організовувався щороку починаючи з 1982 до часу запис у Північній Америці, і слухання видано Асоціацією для Обчислення Машин. Міжнародні Симпозіуми по розподіленим алгоритмам (WDAG) було проведено в Оттаві (1985), Амстердамі (1987), Ніцці (1989), Bari (1990), Delphi (1991), Хайфі (1992), Lausanne (1993), і Terschelling (1994). З 1989, симпозіуми проводилися щороку й слухання було видано Springer-Verlag в серіях Примітки за лекціями з інформатики. Щорічні симпозіуми на теорії обчислення (SToC) і засад інформатики (FoCS) покривають все фундаментальні області інформатики, і найчастіше несуть статті про розподіленому обчисленні. Слухання SToC зустрічей видано Асоціацією для Обчислення Машин, і таких FoCS зустрічей інститутом IEEE. Журнал Паралельного і Розподіленого Обчислення (JPDC) і Розподіленого Обчислення видає розподілені алгоритми регулярно, і робить Листи з обробки інформації (IPL).

1.3.4 Ієрархічна структура книги.

Ця книгу було написано з такими трьома цілями в памяти.

(1) Зробити читача знайомим з методами, які можуть використовуватися, щоб досліджувати властивості даного розподіленого алгоритму, аналізувати і вирішувати проблему що виникає у тих розподілених систем, чи оцінювати якості специфічної мережевий модели.

(2) щоб забезпечити розуміння у властивих можливості та неможливості кількох моделей системи. Вплив доступності глобального кадру часу вивчається в Розділі 3.2 й у Розділах 11 і 14. Вплив знання процесами їх ідентичності вивчається в Главі 9. Вплив вимоги завершення процесу вивчається в Главі 8. Вплив збоїв процесу вивчається у частині 3.

(3) Представляти сукупність недавнього сучасного стану розподілених алгоритмів, разом із їхніми перевіркою й аналізом їх сложности.

Де предмет неспроможна оброблятися в повних подробицях, посилання до релевантної наукову літературу дано. Матеріал, зібраний у книзі розділений в частини: Протоколи, Фундаментальні Алгоритми, і Отказоустойчивость.

Частина 1: Протоколи. Ця частина оперує протоколами зв’язку, які у реалізації комп’ютерних мереж зв’язку й також представляє методи, використовувані на більш пізніх частинах. У Главі 2 модель, яка використовуватиметься переважно пізніших глав, представляється. Модель є, і загальної, щоб бути підходить розробки та перевірки алгоритмів і щільною як доказ результатів неможливості. Це базується на понятті систем переходу, котрим правила докази властивостей безпеки і гостроти можуть бути дані легко. Поняття причинного зв’язку як часткового лада на подіях обчислення представляється, і визначено логічні часы.

У Главі 3 питання передачі повідомлення між двома вузлами розглядається. Спочатку сімейство протоколів обмінюватись пакетами над одиночній зв’язком забезпечене, і доказ правильності, по Schoone, дано. Також, протокол по Fletcher і Watson розглядається, правильність якого потрібно було на правильне використання таймерів. Обробка цього протоколу показується, як засіб перевірки може застосовуватися до протоколів, заснованим на використанні таймерів. Глава 4 розглядає проблему маршрутизації в комп’ютерних мережах. Вона спочатку представляє деяку загальну теорію щодо маршрутизації і алгоритму Toueg для обчислення маршрутизації таблиць. Також опрацьований — Netchange алгоритм Tajibnapis й докази правильності при цьому алгоритму, даного Lamport. Ця глава закінчується компактними алгоритмами маршрутизації, включаючи інтервал і префиксную маршрутизацію. Ці алгоритми названі компактними алгоритмами маршрутизації, оскільки вони вимагають лише маленького кількості пам’яті в кожному вузлі мережі. Обговорення протоколів для комп’ютерних мереж закінчується деякими стратегіями для відмови від глухих кутів з проміжним накопиченням в комп’ютерних мережах із комутацією пакетів в Главі 5. стратегії засновані щодо вільних від циклів спрямованих графів на буферах в вузлах мережі, і показано, як такий граф може бути, використовуючи лише скромне кількість буферів у кожному узле.

Частина 2: Фундаментальні Алгоритми. Ця частина представляє ряд алгоритмічних «будівельних блоків », що використовуються як процедури у багатьох розподілених прикладних програмах, і розробляє теорію щодо обчислювальної потужності різних мережевих пропозицій. Глава 6 визначає поняття «хвильової алгоритм », що є узагальненої схемою відвідин всіх вузлів мережі. Хвильові алгоритми використовуються, щоб поширити інформацію через мережу, синхронізувати вузли, чи вираховуватимуть функцію, яка від поширення інформації з усіх вузлами. Адже це збереться на більш пізніх розділах, багато проблем розподіленого управління можна вирішити відповідно до дуже загальними алгоритмічними схемами, у яких хвильової алгоритм використовують як компонент. Ця глава також складність часу розподілених алгоритмів і досліджує час і складність повідомлення низки розподілених алгоритмів пошуку глубину.

Фундаментальна проблема в розподілених системах — вибір: Вибір одиночного процесу, який має запустити различаемую роль наступному обчисленні. Проблема вивчається в Главі 7. Спочатку проблема вивчається для кільцевих мереж, де показано, що складність повідомлення проблеми — O (NlogN) повідомлень (на кільці N процесорів). Проблема також вивчається для загальних мереж, і пояснюються деякі конструкції демонструються, яких алгоритми вибору можна отримати з хвильових алгоритмів і алгоритмів обходу. Ця глава також обговорює алгоритм для конструкції охоплення дерева Gallager і другие.

Друга проблема — виявлення завершення, розпізнавання (процесами безпосередньо) те, що розподілене обчислення завершено. Проблема вивчається в Главі 8. Нижню межу складності розв’язання проблеми доведено, і кілька алгоритмів обговорені докладно. Глава включає деякі класичні алгоритми (наприклад., Dijkstra, Feijen, і Van Gasteren і Dijkstra і Scholten) і знову конструкція дана щоб одержати алгоритмів з цією проблеми з хвильових алгоритмов.

Глава 9 вивчає обчислювальну потужність систем, де процеси не різняться унікальними ідентифікаторами. Як показав Angluin, у цьому разі багато обчислень неможливо знайти виконані детермінованим алгоритмом. Глава представляє імовірнісні алгоритми, і ми досліджуємо які проблеми, можна вирішити цими алгоритмами.

Глава 10 пояснює, як процеси системи можуть вираховуватимуть глобальне «зображення », знімок стану системи. Такий кадр корисний визначення властивостей обчислення, мовляв, стався чи глухий кут, чи як далеко обчислення прогрессировало.

У Главі 11 ефект доступності поняття глобального часу буде вивчатися. Кілька ступенів синхронизма буде визначено, і буде показано, що цілком асинхронні системи можуть моделювати повністю синхронні досить тривіальними алгоритмами. Отже помічено, що припущення щодо синхронизма не впливають на сукупність функцій, що є вычислимыми розподіленої системою. Буде згодом показуватися, проте, що є впливом геть складність зв’язку багатьох проблем: що краще синхронізм мережі, тим нижче складність алгоритмів тих проблем.

Частина 3: Отказоустойчивость. У практичних розподілених системах можливість збою в компоненті неспроможна ігноруватися, і отже важливо вивчити, як гарно алгоритм поводиться, якщо компоненти терплять невдачу. Цей предмет буде оброблятися у вищій частини книжки; короткий введення у предмет дано в Главі 12. Отказоустойчивость асинхронних систем вивчається в Главі 13. Результат Fischer та інших забезпечений; показується, що детермінований асинхронні алгоритми що неспроможні справлятися з чи навіть дуже скромним типом збою, аварійним відмовою одиночного процесу. Також введуть заборону показано, що з слабшими типами несправностей може мати справа, І що деякі завдання є розв’язуються попри збій типу аварійного відмови. Алгоритми Bracha і Toueg будуть безплатно забезпечені: виявляється, навпаки, рандомизированные асинхронні системи, здатні справитися з прийнятно велику кількість збоїв. Отже помічено, що відбувається для надійних систем (див. Главу 9), рандомизированные алгоритми пропонують більше можливостей ніж детермінований алгоритмы.

У Главі 14 отказоустойчивость синхронних алгоритмів вивчатимуть. Алгоритми Lamport та інші показали, що детермінований синхронні алгоритми можуть допустити нетривіальні збої. Отже помічено, що, на відміну випадку надійних систем (див Главу 11), синхронні системи пропонують більше можливостей ніж асинхронні системи. Навіть більше несправностей може допускатися, якщо процеси здатні «підписатися «на зв’язок решти процесам. Отже, виконання синхронизма в ненадійної системі більше ускладнене, ніж у надійному разі. І останній розділ Глави 14 буде присвячено цієї проблеме.

Інший підхід до надійності, саме через само-стабилизацию алгоритмів, супроводжується в Главі 15. Алгоритм стабілізується, якщо, незалежно від початковій конфігурації, він сходиться зрештою до призначеному поведінці. Деяка теорія щодо стабілізації алгоритмів буде розроблена, і кілька алгоритмів стабілізації буде забезпечений. Ці алгоритми включають протоколи для кількох алгоритмів графа типу обчислення дерева пошуку глибину (як і Розділі 6.4) і обчислення таблиць маршрутизації (як і Главі 4). Також, стабілізаційні алгоритми для передачі (як і Главі 3) було запропоновано. Це означатиме, що все комп’ютерні мережі можуть бути виконані, з використанням стабилизационых алгоритмов.

Додатка. Додаток A пояснює нотацію, яка у цій книжці, аби уявити розподілені алгоритми. Додаток У забезпечує деякі фонові основи з теорії графів і термінології графів. Книжка закінчується списком заслань та індексом терминов.

2 Модель.

У вивченні розподілених алгоритмів часто використовується кілька різних моделей розподіленої обробки інформації. Вибір певної моделі зазвичай залежить того яка проблема розподілених обчислень вивчається і якому типу алгоритму чи неможливість докази представлена. У цій книзі, хоча він і покриває великий діапазон розподілених алгоритмів і теорії про неї, зроблено спробу працювати з одного, загальної моделлю, описаної у цій главі наскільки це возможно.

Щоб визнати висновки неможливості (доказ не існування алгоритму для певної завдання), модель має бути дуже точної. Висновок неможливості це твердження про всіх можливих алгоритми, прийнятих у системі, звідси модель має бути досить точної, щоб описати релевантні властивості всім що допускаються алгоритмів. З іншого боку, обчислювальна модель це як детальне опис конкретної комп’ютерної системи чи мови програмування. Існує безліч різних комп’ютерних систем, і хочемо, щоб модель була застосовна до класу схожих систем, що мають спільні основні властивості, що роблять їх «розподіленими». І, насамкінець, модель мусить бути прийнятно компактній, оскільки хотілося б, щоб у доказах враховувалися всіх аспектів моделі. Підсумовуючи, можна сказати, що модель повинна описувати саме і коротко релевантні аспекти класу комп’ютерних систем.

Розподілені обчислення зазвичай розуміються як набір дискретних подій, де кожна ця атомарну зміна в конфігурації (стану всієї системи). У розділі 2.1 це поняття включено в визначення систем переходу, що призводять до поняттю досяжних конфігурацій і конструктивного визначенню безлічі виконань, породжуваних алгоритмом. Що робить систему «розподіленої»? Те, що у кожен перехід впливає, і він своєю чергою впливає лише з частина конфігурації, переважно на локальне стан процесу. (Або на локальні стану підмножини взаємодіючих процессов.).

Розділи 2.2 і 2.3 розглядають слідства й властивості моделі, описаної розділ 2.1. Розділ 2.2 оперує питанням у тому, як може бути доведені бажані властивості даного розподіленого алгоритму. У розділі 2.3 обговорюється дуже важливе поняття, саме: каузальне ставлення між подіями у виконанні. Це ставлення викликає ставлення еквівалентності, визначене виконання; обчислення це клас еквівалентності, породжений цим ставленням. Визначено годинник, і подано логічні годинник як розподілений алгоритм, обговорюваний у книзі. І нарешті, розділ 2.4 обговорюватимуться подальші припущення і нотація, не включені в основну модель.

2.1 Системи переходу і алгоритмы.

Система, чиї стану змінюються дискретними кроками (переходами чи подіями) то, можливо зазвичай зручно описана з допомогою поняття системи переходів. У вивченні розподілених алгоритмів це стосується до розподіленої системі як повністю, і до індивідуальних процесам, які співробітничають у рамках алгоритму. Тому системи переходу це надзвичайно важливе поняття до вивчення розподілених алгоритмів і це визначається підрозділі 2.1.1.

У розподілених системах переходи впливають лише з частина конфігурації (системного глобального стану). Кожна конфігурація як така це кортеж, і кожен стан пов’язані з деякими компонентами тільки з цього кортежу. Компоненти конфігурації включають стану кожного індивідуального процесу. Для точного описи конфігурацій повинні підрозділятися різні види розподілених систем, залежно від типу комунікацій між процессами.

Процеси в розподіленої системі повідомляються або з допомогою доступу з поділюваним змінним або за допомоги передачі повідомлень. Ми приймемо більш обмежений перший погляд і розглянемо лише розподілені системи, де процеси повідомляються з допомогою обміну повідомленнями. Розподілені системи, де повідомлення виробляється у вигляді поділюваних змінних, будуть обговорюватися у розділі 15. Читач, цікавиться повідомленням у вигляді поділюваних змінних, може проконсультуватися в поворотною статті Дейкстры [Dij68] чи Овицкий і Грайс [OG76].

Повідомлення розподілених системах можуть передаватися або одночасно, або асинхронно. Основний упор у книзі робиться на алгоритми для систем, де повідомлення передаються асинхронно. В багатьох випадках синхронна передача повідомлень може розглядатися як спеціальний випадок асинхронної передачі повідомлень, як це було продемонстровано Чаррон-Бост та інших. [CBMT92]. Підрозділ 2.1.2 описує модель асинхронної передачі повідомлень точно; в підрозділі 2.1.3 модель адаптується до систем, використовує синхронну передачу повідомлень. У підрозділі 2.1.4 коротко обговорюється справедливость.

2.1.1 Системи переходов.

Система переходів складається з безлічі всіх можливих станів системи, переходів («ходів»), які система робить у тому безлічі, і підмножини станів, у яких системі дозволено стартувати. Щоб уникнути безладдя між станами окремого процесу станами алгоритму повністю («глобальних станів»), останні тепер називатися конфигурациями.

Визначення 2.1 Система переходів є трійка P. S = (З, (, I), де З це безліч конфігурацій, (це бінарну ставлення переходу на З, і I це підмножина З початкових конфигураций.

Ставлення переходу це підмножина З x З. Замість ((, () ((буде використовуватися зручніша нотація (((.

Визначення 2.2 Нехай P. S = (З, (, I) це система переходів. Виконання P. S це є максимальна послідовність E = ((0, (1, (2,…), де (0 (I, і всім і (0, (і ((i+1.

Терминальная конфігурація це конфігурація (, на яку немає (такий, що (((. Слід пам’ятати, що послідовність E = ((0, (1, (2,…) з (і ((i+1 всім і максимальна, якщо вони або нескінченна, або закінчується термінальній конфигурации.

Визначення 2.3 Конфігурація (досяжним з (, нотація (((, якщо існує послідовність (= (0, (1, (2, …, (k = (з (і ((i+1 для всіх 0 (і < k. Конфігурація (досяжним, якщо вона досяжним з початкового состояния.

2.1.2 Системи з асинхронної передачею сообщений.

Розподілена система складається з набору процесів і комунікаційної підсистеми. Кожен процес є системою переходів сам собою з тим лише застереженням, що може взаємодіяти з комунікаційної підсистемою. Щоб уникнути плутанини між атрибутами розподіленої системи як цілого й атрибутів індивідуальних процесів, ми використовуємо таке угоду. Терміни «перехід» і «конфігурація» йдуть на атрибутів системи повністю, і (їх еквівалентами) терміни «подія» і «стан» йдуть на атрибутів процесів. Щоб взаємодіяти з комунікаційної системою процес має лише звичайні події (згадувані як внутрішні події), але й події відправки і отримання, у яких повідомлення відтворюються і споживаються. Нехай M буде безліччю можливих повідомлень, і позначимо набір мультимножеств з елементами з M через M (M).

Визначення 2.4 Локальний алгоритм процесу є п’ятірка (Z, I, (і, (p.s, ®, де Z це безліч станів, I це підмножина Z початкових станів, (і цей показник на Z x Z, і (p.s і (r взаємини на Z x M x Z. Бінарну ставлення (на Z визначається как.

з (d ((з, d) ((і ((m (M ((c, m, d) ((p.s ((r).

Відносини (і, (p.s, (r відповідають переходами стану, соотносящихся з внутрішніми повідомленнями, повідомленнями відправки і повідомленнями отримання, відповідно. Згодом ми позначати процеси через p, q, r, p1, p2 тощо., і позначати безліч процесів системи P. Визначення 2.4 служить як теоретична модель для процесів; звісно, алгоритми у цій книзі не описуються лише перерахуванням їх статків і подій, але й засобами зручного псевдокода (див. додаток А). Виконання процесу є виконання системи переходів (Z, (, I). Нас, проте, цікавитимуть виконання системи повністю, й у такому виконанні виконання процесів координуються через комунікаційну систему. Щоб описати координацію, ми визначимо розподілену систему в розумінні системи переходів, де безліч конфігурацій, ставлення переходу, і початкові стану будуються з відповідних компонентів процессов.

Визначення 2.5 Розподілений алгоритм для набору P = {p1, …, pN} процесів це набір локальних алгоритмів, одного кожному за процесу у P.

Поведінка розподіленого алгоритму описується системою переходів, як це пояснюється далі. Конфігурація складається з стану кожного процесу набору повідомлень у процесі передачі; переходи події процесів, які впливають як на стан процесу, але й впливають (чи піддаються такого) на набір повідомлень; початкові конфігурації це конфігурації, де кожен процес перебуває у початковому стані перебуває й набір повідомлень пуст.

Визначення 2.6 Система переходів, породжена розподіленим алгоритмом для процесів p1, …, pN при асинхронної комунікації, (де локальний алгоритм для процесу pi це є (Z, I, (і, (p.s, ®), це P. S = (З, (, I), где.

(1) З = {(cP1, …, cPN, M): ((p (P: cp (Zp) і M (M (M)}.

(2) (= ((p (P (p), де (p це переходи відповідні змін стану процесу p; (Pi це безліч пар

(cP1, …, cPi, …, cPN, M1), (cP1, …, c’Pi, …, cPN, M2),.

котрим виконується один з наступних трьох условий:

. (cPi, c’Pi) ((iPi і M1 = M2;

. для деякого m (M, (cPi, m, c’Pi) ((sPi і M2 = M1 ({m};

. для деякого m (M, (cPi, m, c’Pi) ((rPi і M1 = M2 ({m}.

(3) I = {(cP1, …, cPN, M): ((p (P: cp (Ip) (M = (}.

Виконання розподіленого алгоритму це виконання його, породившее систему переходів. Події виконання виконуються явно з допомогою наступній нотації. Пари (з, d) ((ip називаються (можливими) внутрішніми подіями процесу p, і трійки в (sp і (rp називаються подіями відправки й небуденними подіями отримання процесса.

. Внутрішнє подія е заданий як е = (з, d) процесу p називається застосовним в конфігурації (= (cP1, …, cP, …, cPN, M), якщо cp = c.

І тут, e (() окреслюється конфігурація (cP1, …, d, …, cPN, M).

. Подія відправки e, заданий як e = (з, m, d) процесу p називається застосовним в конфігурації (= (cP1, …, cP, …, cPN, M), якщо cp = c.

І тут, e (() окреслюється конфігурація (cP1, …, d, …, cPN, M ({m}).

. Подія отримання e, заданий як e = (з, m, d) процесу p називається застосовним в конфігурації (= (cP1, …, cP, …, cPN, M), якщо cp = з і m (M. І тут, e (() окреслюється конфігурація (cP1, …, d, …, cPN, M {m}).

Передбачається, що кожного повідомлення існує унікальний процес, котрі можуть отримати повідомлення. Цей процес відбувається називається призначенням сообщения.

2.1.3 Системи з синхронної передачею сообщений.

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

Визначення 2.7 Система переходів, породжена розподіленим алгоритмом для процесів p1, …, pN при синхронної комунікації, це P. S = (З, (, I), где.

(1) З = {(cP1, …, cPN): (p (P: cp (Zp}.

(2) (= ((p (P (p) (((p, q (P:p (q (pq), где.

. (Pi це безліч пар

(cP1, …, cPi, …, cPN), (cP1, …, c’Pi, …, cPN),.

котрим (cPi, c’Pi) ((iPi ;

. (PiPj це безліч пар

(…, cPi, …, cPj, …), (…, c’Pi, …, c’Pj, …),.

котрим існує повідомлення m (M таке, что.

(cPi, m, c’Pi) ((sPi і (cPj, m, c’Pj) ((rPj .

(3) I = {(cP1, …, cPN): ((p (P: cp (Ip)}.

Деякі розподілені системи допускають гібридні форми комунікації; процеси у яких мають комунікаційні примітиви передачі повідомлень як і синхронному і у асинхронному стилі. Маючи дві моделі, певні вище, неважко розробити формальну модель при цьому типу розподілених систем. Конфігурації такої системи включають стану процесів й створили набір повідомлень у процесі передачі (саме, асинхронних повідомлень). Переходи включають усе типи переходів які у визначеннях 2.6 і 2.7.

Синхронізм і на алгоритми. Вже зазначалося, що в багатьох випадках синхронна передача повідомлень може розглядатися як спеціальний випадок асинхронної передачі повідомлень. Набір виконань обмежений у разі синхронної передачі повідомлень виконаннями, де кожним подією відправки негайно слід відповідне подія прийому [CBMT92]. Ми тому розглядаємо асинхронну передачу повідомлень як більше загальну модель, і будемо розробляти алгоритми переважно при цьому загального случая.

Проте, треба бути уважним, коли алгоритм, розроблений для асинхронної передачі повідомлень виконується системі з синхронної передачею повідомлень. Понижений недетерминизм в комунікаційної системі може бути збалансований підвищеним недетерминизмом у процесах, інакше результатом від цього може бути тупик.

Ми проілюструємо це елементарним прикладом, у якому процеси посилають одна одній деяку інформацію. У асинхронному разі, кожен процес може спочатку послати повідомлення згодом отримує повідомлення від іншого процесу. Повідомлення тимчасово накопичуються в комунікаційної підсистемі поміж їхніми відправкою і посилкою. У синхронному разі, такого нагромадження неможливо, і якщо обидва процесу повинні послати їхні власні повідомлення перш ніж вони можуть одержати повідомлення, то ніякої передачі взагалі буде. У синхронному разі, одне із процесів повинен мати повідомлення перш ніж інший процес відправить свій власний повідомлення. Немає сенсу говорити, що, якщо обидва процесу маємо отримати повідомлення перед відправкою їх своїх власних повідомлень, знов-таки нічого очікувати ніякої передачи.

Обмін двома повідомленнями матиме місце у синхронному разі, лише якщо з двох нижченаведених умов выполняется.

1) Заздалегідь визначено, який із двох процесів відправлятиме першим, і який процес це отримувати. В багатьох випадках неможливо на вибір заздалегідь, що це зажадає виконання різних локальних алгоритмів в процессах.

2) Процеси заслуговують недетерминированного вибору або відправляти спочатку, потім приймати, або отримувати спочатку, потім — посилати. У кожному виконанні одне із можливих порядків виконання буде обраний кожного процесу, тобто. симетрія порушується комунікаційної системой.

Коли уявляємо алгоритм для асинхронної передачі повідомлень і стверджуємо, що алгоритм може також використовуватися при синхронної передачі повідомлень, додавання цього недетерминизма, що завжди може бути, передбачається неявно.

2.1.4 Справедливость.

У окремих випадках необхідно обмежити поведінка системи так званими справедливими виконаннями. Умови справедливості вводять виконання, де події завжди (чи нескінченно часто) застосовні, але ніколи невідомі як (оскільки виконання магістралі триває з допомогою інших застосовних событий).

Визначення 2.8 Виконання справедливо у слабкому сенсі, якщо ні події применимого в нескінченно багатьох послідовних конфігураціях без появи у виконанні. Виконання справедливо у сильному сенсі, якщо ні події применимого в нескінченно багатьох конфігураціях без появи у исполнении.

Можливо включити умови справедливості в формальну модель явно, як це Манна і Штовхнули [MP88]. Більшість алгоритмів, з якими ми маємо залежить від цій книжці, не покладаються для цієї умови; тому вирішили не включати в модель, а встановлювати самі ці умови явно, що вони йдуть на конкретного алгоритму чи проблеми. Також, існує суперечка, прийнятно чи включати припущення справедливості в моделі розподілених систем. Було висунуто твердження, що припущення справедливості нічого не винні здійснюватися, більше алгоритми нічого не винні розроблятися з урахуванням цих припущень. Дискусія за деякими заплутаним питанням, які належать до припущенню справедливості то, можливо знайдено в [Fra86].

2.2 Доказ властивостей систем перехода.

Розглядаючи розподілений алгоритм для деякою проблеми, необхідно продемонструвати, що алгоритм є коректне розв’язання проблеми. Проблема вказує, які властивості необхідний алгоритм повинен мати; має бути показано, що розв’язання цієї має цими властивості. Питання перевірки розподілених алгоритмів отримав значну увагу і велике кількість статей, які обговорюють формальні методи перевірки; див. [CM88, Fra86, Kel76, MP88]. У розділі обговорюються деякі прості, але часто використовувані методи підтвердження правильності розподілених алгоритмів. Ці методи покладаються лише з визначення системи переходов.

Чимало понять з необхідних властивостей розподілених алгоритмів потрапляють у один з цих двох типів: вимоги безпеки й підвищити вимоги жвавості. Вимоги безпеки накладають обмеження, що певне властивість має виконуватися кожному за виконання системи у кожному конфігурації, достигаемой у тому виконанні. Вимоги жвавості визначають, що певне властивість мало виконуватися кожному за виконання системи в деяких конфігураціях, достигаемых у тому виконанні. Ці вимоги можуть зустрічатиметься в ослабленою формі, наприклад, можуть задовольнятися із певною фіксованою ймовірністю над безліччю можливих виконань. Інші вимоги до алгоритмам можуть включати обмеження, що грунтуються лише з використанні деякого даного знання (див. підрозділ 2.4.4), що вони гнучкі по зношений ію до порушень у деяких процесах (див. част. З), що згадані процеси рівні (див. главу 9), і т.д.

Методи перевірки, достойні цьому розділі, базуються на істинності тверджень в конфігураціях, достигаемых у виконанні. Такі методи називаються методами перевірки тверджень. Твердження це унарное ставлення на безлічі конфігурацій, тобто, предикат, котра приймає значення істина однією підмножині конфігурацій і брехня — на другом.

2.2.1 Властивості безопасности.

Властивість безпеки алгоритму це властивість у вигляді «Твердження P істина у кожному конфігурації кожного виконання алгоритму». Неформально це формулюється як «Твердження Р завжди істина». Основний метод у тому, щоб показати, що затвердження Р завжди істина, це продемонструємо, що Р інваріант відповідно до наступним визначень. Нотація P ((), де (це конфігурація, є булево вираз, чиє значення істина, якщо Р виконується в (, і брехня у протилежному случае.

Визначення залежить від даної системи переходів P. S = (З, (, I). Далі, ми писати {P} ({Q}, щоб позначити, що кожного переходу ((((системи P. S), якщо Р (() то Q ((). Отже {P} ({Q} означає, що, якщо Р виконується перед будь-яким переходом, то Q виконується після цього перехода.

Визначення 2.9 Твердження Р інваріант системи P. S, если.

1) всім ((I, и.

2) {P} ({P}.

Визначення каже, що інваріант виконується у кожному початковій конфігурації, й тепло зберігається при кожному переході. З цього випливає, що він зберігається у кожної достигаемой конфігурації, як і формулюється в наступному теореме.

Теорему 2.10 Якщо Р це інваріант системи P. S, то Р виконується для кожної конфігурації кожного виконання системи S.

Доказ. Нехай Є = ((0, (1, (2, …) виконання системи P. S. Буде показано по індукції, що Р ((i) виконується кожному за і. По-перше, Р ((0) виконується, оскільки (0 (I і щодо першого пропозиції визначення 2.9. Удругих, припустимо P ((i) виконується і (і ((i+1 є перехід, який є у E. За другим пропозиції визначення 2.9 P ((i+1) виконується, як і завершує доказ. (.

І навпаки, твердження, яке виконується у кожному конфігурації кожного виконання, є інваріант (див. вправу 2.2). Звідси кожне властивість безпеки то, можливо доведено застосуванням теореми 2.10. У цьому вся разі, проте, кожне твердження, що завжди істинно, включено в інваріант; звідси може бути показане, застосуванням наступній теореми, що твердження завжди істинно. (Слід пам’ятати, проте, що часто дуже важко знайти належний інваріант Q, якого можна застосувати теорему.).

Теорему 2.11 Нехай Q буде інваріантом системи P. S і між іншим Q (P (для кожного ((З). Тоді Р виконується у кожному конфігурації кожного виконання системи S.

Доказ. По теоремі 2.10, Q виконується у кожному конфігурації, і оскільки Q включає P, то P виконується у кожному конфігурації також. (.

Іноді корисно довести спочатку слабкий інваріант, і потім використати його як доказ сильнішого інваріанту. Як можна зробити інваріант сильнішим демонструється наступного визначенні і теореме.

Визначення 2.12 Нехай P. S буде системою переходів і P, Q будуть твердженнями. Р називається Q-производным, если.

1) всім ((I, Q (() (Р ((); и.

2) {Q (Р} ({Q (Р}.

Теорему 2.13 Якщо Q є інваріант і Р — Q-производное, то Q (P є инвариант.

Доказ. Відповідно до визначення 2.9, має бути показано, что.

1) всім ((I, Q (() (Р ((); и.

2) {Q (Р} ({Q (Р}.

Т.к. Q це інваріант, Q (() виконується всім ((I, і т.к. всім ((I, Q (() (Р ((), P (() виконується всім ((I. Отже, Q (() (P (() виконується всім ((I.

Припустимо (((і Q (() (Р ((). Т.к. Q це інваріант, Q (() виконується, і т.к. {Q (P} ({Q (Р}, Q (() (Р ((), звідки Р (() випливає. Отже, Q (() (Р (() виконується. (.

Приклади докази безпеки, починаючи від матеріалі даного розділу, представлені у розділі 3.1.

2.2.2 Властивості живости.

Властивість жвавості алгоритму це властивість у вигляді «Твердження Р істина в деякою конфігурації кожного виконання алгоритму». Неформально це формулюється як «Твердження Р зрештою істина». Основні методи, використовувані, щоб показати, що Р зрештою істина — це нормирующие функції і беступиковость (чи правильне завершення). Простіший метод можна використовувати для алгоритмів, у яких дозволяються лише виконання фіксованою, кінцевої длиной.

Нехай P. S буде системою переходів і Р — предикат. Визначимо term як предикат, який істина переважають у всіх термінальних конфігураціях і лжу на всіх нетермінальних конфігураціях. Ми спочатку припустимо ситуації, де виконання сягає термінальній конфігурації. Зазвичай небажано, щоб така конфігурація досягалася, тоді, як «мета» Р була досягнуто. Кажуть, у цьому разі має місце глухий кут. З іншого боку, завершення дозволено, коли їхня мета було досягнуто, у разі говорять про правильному завершении.

Визначення 2.14 Система P. S завершується правильно (чи ні глухих кутів), якщо предикат (term (Р) завжди щирий у системі S.

Нормирующие функції покладаються га математичне поняття обгрунтованих множин. Це безліч з порядком w3 … .

Приклади обгрунтованих множин, які використовуватимуться у цій книзі - це натуральні числа зі звичайним порядком, і n-кортежи натуральних чисел з лексикографічним порядком (див. розділ 4.3). Властивість, що обгрунтоване безліч немає безкінечною убутній послідовності, можна використовувати, щоб показати, що затвердження Р зрештою істина. На той час має бути показано, що є функція f з З в обгрунтоване безліч W така, що у кожному переході значення f убуває чи Р стає истиной.

Визначення 2.16 Нехай дано система переходів P. S і запровадження Р. Функція f з З в обгрунтоване безліч W називається нормирующей функцією (стосовно Р), для кожного переходу (((, f (() > f (() чи Р (().

Теорему 2.17 Нехай дано система переходів P. S і запровадження Р. Якщо P. S завершується правильно і нормирующая функція f (w.r.t Р) існує, то Р — істина у певній конфігурації кожного виконання системи S.

Доказ. Нехай Є = ((0, (1, (3, …) — виконання системи P. S. Якщо Є звісно, його остання конфігурація є термінальній, і т.к. term (Р завжди істина у системі P. S, то Р виконується у цій конфігурації. Якщо Є нескінченно, нехай E' буде самим довгим префіксом Є, який містить конфігурацій, у яких Р істина, і нехай p. s буде послідовністю (f ((0), f ((1), …) всім конфігурацій (і, які з’являються у Є'. Залежно від вибору Є' й властивості f, p. s то, можливо убутній послідовністю, і звідси, по обгрунтованості W, p. s кінцева. Це передбачає і, що Є' - кінцевий префікс ((0, (1, …, (k) виконання Є. Залежно від вибору Є', Р ((k+1) виконується. (.

Якщо прийнято властивості справедливості, можна зрозуміти з більш слабких посилок (ніж у теоремі 2.17), що Р зрештою стане істиною. Значення нормирующей функції на повинен зменшуватися при кожному переході. Припущення справедливості можна використовувати, щоб показати, що нескінченні виконання містять переходи певного типу нескінченно часто. Далі буде досить показати, що f будь-коли збільшується, а зменшується з кожним переходом цього типа.

У окремих випадках ми будемо використовувати наступний результат, який є спеціальний випадок теореми 2.17.

Теорему 2.18 Якщо P. S завершується правильно це і є число До таке, що кожне виконання містить по крайнього заходу До переходів, то Р істина в деякою конфігурації кожного исполнения.

Рис. 2.1 Приклад просторово-часової диаграммы.

2.3 Каузальний порядок подій і логічні часы.

Погляд на виконання як послідовності переходів природним чином породжує поняття часу у виконання. Кажуть, що перехід, а з’являється раніше переходу b, якщо a є у послідовності перед b. Для виконання Є = ((0, (1, …) визначимо асоційовану послідовність подій Е'=(е0, е1, …), де еi — всі ці події, при якому конфігурація змінюється з (і в (i+1. Зауважте, що кожен виконання визначає унікальну послідовність подій цим шляхом. Виконання то, можливо визуализировано в просторово-часової діаграмі, малюнок 2.1, якої, представляє приклад. У такій діаграмі, горизонтальна лінія намальована кожному за процесу, і кожен подія намальовано точкою на лінії процесу, де вона має місце. Якщо повідомлення m послано при подію p. s і отримано при подію r, стрілка малюється від p. s до r. Кажуть, що події p. s і r відповідні у тому случае.

Як побачимо в підрозділі 2.3.1, події розподіленого виконання можуть іноді бути взаємно обміняли без на наступні конфігурації виконання. Тому поняття часу, як абсолютного порядку на подіях виконання неприйнятне для розподілених виконань, і тоді замість цього вважаємо поняття каузальною залежності. Еквівалентність виконань при переупорядочивании подій вивчається в підрозділі 2.3.2. Ми обговорюємо в підрозділі 2.3.3 як можуть визначити годинник для виміру каузальною залежності (а чи не часу), і уявляємо логічні годинник Лампорта, важливий приклад таких часов.

2.3.1 Незалежність і залежність событий.

Вже зазначалося, що переходи розподіленої системи впливають, і зазнають впливу, лише з частина конфігурацій. Це призводить до того що спостереженню, що дві послідовних події, впливаючи на розділені частини конфігурації, незалежні і може також з’являтися у порядку. Для систем з асинхронної передачею повідомлень, висловлюється у наступному теореме.

Теорему 2.19 Нехай (буде конфігурацією розподіленої системи (з асинхронної передачею повідомлень) і нехай ер і еq будуть подіями різних процесів р і q, застосовних в (. Тоді ер застосовно в еq ((), еq застосовно в ер ((), і ер (еq (()) = еq (ер (()).

Доказ. Щоб уникнути аналізу випадків, що є посилка, отримання, чи внутрішні події, ми уявімо кожну подію однорідної нотацією (з, x, у, d). Тут від і d позначають стан процесу доі після події, x — набір повідомлень, здобутих під час події, і в — набір повідомлень, посланих у протягом події. Отже, внутрішньо подія (з, d) позначається як (c,(,(, d), подія відправки (з, m, d) позначається як (з, (, {m}, d), й цю подію прийому (з, m, d) — (з, {m}, (, d). У цьому нотації, подія е = (з, x, y, d) процесу p застосовно в конфігурації (= (Сp1, …, Cp, …, СрN, M), якщо порівн = сек. і x (M. І тут е (() = (Сp1, …, d, …, (M x) (у).

Тепер припустимо ер = (bp, xр, кр, dp) і еq = (bq, xq, уq, dq) застосовні в.

. = (…, порівн, …, сq, …, M),.

то є порівн = bp, cq = bq, xp (M, і xq (M. Важливе спостереження полягає у тому, що хр і xq розділені, повідомлення xp (є таке) має призначенням р, тоді як повідомлення хq (є таке) має призначенням q.

Запишемо (р = ер ((), та й запам’ятаймо что.

(р = (…, dp, …, cq, …, (M xp) (кр).

Оскільки xq (M і xq (хр = (, слід, що хq ((M xp (кр), і звідси еq застосовно в (р. Запишемо (pq = eq ((р), та й запам’ятаймо, что.

(рq = (…, dp, …, dq, …, ((M xp (кр) xq) (уq).

З допомогою симетричного аргументу може бути показане, що ер застосовно в (q = eq ((). Запишемо (qp = ep ((q), та й запам’ятаймо, что.

(qp = (…, dp, …, dq, …, ((M xq (уq) xp) (уp).

Оскільки M — мультимножество повідомлень, xp (M, і xq (M,.

((M xp (кр) хq (уq) = ((M xq (уq) xp (кр),.

і звідси (pq = (qp. (.

Нехай ер і еq будуть двома подіями, що з’являються послідовно у виконанні, тобто. виконання містить подпоследовательность.

…, (, ер ((), еq (ер (()), …

для деяких (. Відправка теореми 2.19 застосовна до цих подій за винятком наступних двох случаев.

1) p = q; или.

2) ер — подія відправки, і еq — відповідне подія получения.

У насправді, теорема явно стверджує, що p і q мали бути зацікавленими різними, і якщо еq отримує повідомлення, надіслане в ер, подія відправки не застосовно у початковій конфігурації події eр, як потрібно. Таким чином, якщо одна з цих двох тверджень істина, події що неспроможні з’являтися у порядку, інакше: вони могли трапитися у протилежному порядку та, крім того мати результат лише у конфігурації. Запам’ятайте, що з глобальної погляду переходи неможливо знайти обміняли, оскільки (в нотації теореми 2.19) перехід із (р в (pq відрізняється від переходу із (в (q. Проте, з погляду процесу ці події неразличимы.

Факт, що конкретна пара подій може бути обміняно, виражається тим, що є каузальне ставлення між двома подіями. Це ставлення може бути розширена до часткового порядку на безлічі подій у виконанні, званого каузальний порядок исполнения.

Визначення 2.20 Нехай Є - виконання. Ставлення (, зване каузальним порядком, на подіях виконання є щонайменше ставлення, яке удовлетворяет.

1) Якщо е і f — різні події процесу і е з’являється перед f, то е (f.

2) Якщо p. s — подія відправки і r — відповідне подія отримання, то p. s (r.

3) Ставлення (транзитивно.

Ми пишемо, а (= b, щоб позначити (а (b (а = b). Оскільки (= є частковий порядок, можуть існувати події чи b, котрим ні а (= b ні b (= а чи не виконується. Кажуть такі події конкуруючі, в нотації а || b. На малюнку 2.1, b || f, d || і, і т.д.

Каузальний порядок уперше визначено Лампортом [Lam78] і відіграє значної ролі в міркуваннях, які стосуються розподіленим алгоритмам. Визначення (передбачає існування каузальною ланцюжка між каузально пов’язаними подіями. Цим ми розуміємо, що, а (b включає існування послідовності а = е0, е1, …, ек = b такий, що кожне подружжя послідовних подій у ланцюжку задовольняє або (1), або (2) у визначенні 2.20. Каузальна ланцюжок може навіть обрано отже кожне подружжя, яка задовольнить (1), є послідовна пара подій у процесі, де їх зустрічаються, тобто., немає подій з-поміж них. На малюнку 2.1 каузальна ланцюжок між подією чи подією l є послідовність а, f, g, h, j, k, l.

2.3.2 Еквівалентність виконань: вычисления.

У цьому вся підрозділі показується, що події виконання може бути переупорядковані у кожному порядку, согласующимся з каузальним порядком, без на результат виконання. Це переупорядочивание подій викликає іншу послідовність конфігурацій, але ці виконання буде розглядатися як еквівалент вихідного исполнения.

Нехай f = (f0, f1, f2 ,…) буде послідовністю подій. Ця послідовність — послідовність подій які стосуються виконання F = ((0, (1, (2, …), для кожного і, fi застосовно в (і і fi ((і) = (i+1. І тут F називається включеним виконанням послідовності f. Ми хотів би, щоб F унікально визначалася послідовністю f, але це завжди так. Якщо деякого процесу p немає події у p, включеного в f, стан процесу p то, можливо довільним початковим станом. Проте, якщо f містить по крайнього заходу одна подія з р, то перша подія в р, скажімо (з, x, у, d), визначає, що початкова стан процесу р буде пов’язаний із. Тому, якщо f містить по крайнього заходу одне події кожному процесі, (0 унікально визначено, і це визначає ціле виконання уникально.

Тепер нехай Є = ((0, (1, (2, …) буде виконанням з асоційованої послідовністю подій Є' = (е0, е1, е2, …) і між іншим, що f -перестановка з Є'. Це означає, що є перестановка (натуральних чисел (чи безлічі {0, …, k-1}, якщо Є - кінцеве виконання з k подіями) таких, що fi = е ((i). Перестановка (f0, f1, f2, …) подій із Є согласующаяся з каузальним порядком, якщо fi (= fj передбачає і (j, тобто., якщо ні події, якому передує в послідовності подія, якому він сам каузально предшествует.

Теорему 2.21 Нехай f = (f0, f1, f2, …) — перестановка подій із Є, яка цілком узгоджується з каузальним порядком виконання Є. Тоді f визначає унікальне виконання F, розпочате у початковій конфігурації з Є. F має стільки ж подій як і Є, і якщо Є звісно, то остання конфігурація з F така, як і конфігурація з Е.

Доказ. Конфігурації з F будуються одна одною, і щоб побудувати (i+1 досить показати, що fi застосовно в (і. Візьмемо (0 = (0.

Припустимо, що з всіх j < і, fj застосовно в конфігурації (j і (j+1 = fj ((j). Нехай (і = (cp1, …, cpN, M) і нехай fi =(з, x, y, d) буде події процесі р, тоді подія fi застосовно в (і, якщо сp = з і x (М.

Щоб показати, що сp = з потрібно розрізняти два випадку. У обох випадках ми повинні пам’ятати, що каузальний порядок виконання Є абсолютно впорядковує події у процесі р. Це передбачає, що події у процесі р з’являються у точно такому порядку й у f й у Е'.

Випадок 1: fi — перша подія в р з f, тоді порівн — це початкова стан р. Але тоді fi — також І події р з Є', що передбачає, що з — це початкова стан р. Отже, з = ср.

Випадок 2: fi — не перша подія в р з f. Нехай останню подію в р з f перед fi буде fi «= (з', x', y', d'), тоді порівн = d'. Але тоді fi «також останню подію в р перед fi з Є', яка передбачає, що з = d'. Отже, з = ср.

Щоб показати, що x (М ми повинні пам’ятати, що відповідні події приймання й посилки зустрічаються щодо одного порядку й у f й у Є'. Якщо fi не подія посилки, то x = (і x (М виконується тривіально. Якщо fi — це подія посилки, нехай fi буде відповідним подією посилки. Оскільки fj (fi, j < і виконується, тобто., подія посилки випереджає fi в f, отже, x (М.

Нині ми показали, що кожного і, fi застосовно в (і, і (i+1 може бути взято як fi ((i). Ми повинні, нарешті, показати, що конфігурації з F та О збігаються, якщо Є звісно. Нехай (k буде останньої конфігурацією з Є. Якщо Є' зовсім позбавлений події у р, стан р в (k одно його початковому стану. Оскільки f теж містить події у р, то стан р в (k також одно початковому стану, звідси стан р в (k дорівнює його стану в (k. Інакше, стан р в (k є стан після останнього події у р з Є'. І це останню подію в р з f, отже це теж стан р в (k.

Повідомлення процесі передачі у (k є такі повідомлення, котрим події посилки немає відповідного події отримання в Є'. Та оскільки Є' і f містять і той ж набір подій, самі сполучення процесі передачі у останньої конфігурації з F. (.

Рис. 2.2 Просторово-тимчасова діаграма еквівалентна рис. 2.1.

Виконання F та О мають один набір подій, і каузальний порядок цих подій — і той для Є. і F. Тому, й у цьому випадку Є - це перестановка подій із F, яка цілком узгоджується з каузальним порядком виконання F. Якщо умова теореми 2.21, ми можемо сказати, що Є і F — еквівалентні виконання, що позначається як E ~ F.

Рис. 2.2 показує тимчасову діаграму виконання, еквівалентного виконання, зображеному на рис. 2.1. Еквівалентні тимчасові діаграми можна отримати з допомогою «трансформацій гумової стрічки» [Mat89c]. Вважаючи, що тимчасова вісь процесу то, можливо стиснута і розтягнуто поки стрілки повідомлень продовжують вказувати направо, рис. 2.1 то, можливо деформований до рис. 2.2.

Хоча зображені виконання еквівалентні утримують однаковий набір подій, вони можуть утримувати однаковий набір конфігурацій. Рис. 2.1 містить конфігурацію ((«), у якій повідомлення, надіслане в подію е і повідомлення, надіслане в подію l, передаються одночасно. Рис. 2.2 не містить такий конфігурації, оскільки повідомлення, надіслане в подію l, отримано перед здійсненням події е.

Глобальний спостерігач, хто має доступом до дійсною послідовності подій, може розрізняти два еквівалентних виконання, тобто. можемо бачити або одна-єдина, або інше виконання. Проте, процеси не можуть розрізняти дві еквівалентних виконання, т.к. їм неможливо вирішити, який із двох виконань має місце. Це ілюструється наступним. Припустимо, що ми вирішувати чи буде посилатися сполучення подію е й у передачі одночасно. Існує булевская змінна sim в одному з процесів, які мають встановлена у істину, якщо повідомлення був у передачі одночасно, і брехня інакше. Отже, у вищій конфігурації рис. 2.1 значення sim — істина, й у останньої конфігурації на рис 2.2 значення — брехня. По теоремі 2.21, конфігурації рівні, що показує, що необхідну присвоювання sim невозможно.

Клас еквівалентності при відношенні ~ повністю характеризується набором подій і каузальним порядком цих подіях. Класи еквівалентності називаються обчисленнями алгоритма.

Визначення 2.22 Обчислення розподіленого алгоритму — це клас еквівалентності (при ~) виконань алгоритма.

Немає сенсу казати про конфігураціях обчислення, оскільки різні виконання обчислення можуть мати одним і тієї ж конфігурацій. Потрібно казати про наборі подій обчислення, оскільки всі виконання обчислення складаються вже з й того набору подій. Також, каузальний порядок подій визначено для обчислення. Ми називатимемо обчислення кінцевим, якщо її виконання кінцеві. Усі виконання обчислення починаються лише у конфігурації і, якщо обчислення звісно, завершуються лише у конфігурації (теорема 2.21). Ці конфігурації називаються початковими і кінцевими конфігураціями обчислення. Ми визначатимемо обчислення з допомогою частково упорядкованого безлічі подій, що належать ему.

Результат з теорії часткових порядків передбачає, кожен порядок може зустрічатися для пари конкуруючих подій вычислений.

Факт 2.23 Нехай (Х,, повторна передача слів з inp[0] до inp[i — lq] не нужна.

Объяснение псевдокода. Після вибору моделі неважко розробити код протоколу; див. Алгоритм 3.1. Для процесу p введена змінна ap (і aq для q), у якій зберігається найперше слово, котрій p (чи q, відповідно) ще отримав підтвердження. У Алгоритмі 3.1 дію Sp — посилка i-го слова процесом p, дію Rp — прийняття слова процесом p, і дію Lp — втрата пакета в місці призначення p. Процес p може послати будь-яке слово, індекс якого потрапляє в зазначені раніше кордону. Коли повідомлення прийнято, насамперед робиться перевірка — було ідентичне повідомлення прийнято раніше (у разі повторної передачі). Якщо ні, слово, що міститься у ньому, записується в вихід, і ap і sp коригуються. Також вводяться дії Sq, Rq і Lq, де p і q поміняні ролями.

var sp, ap: integer init 0, 0; inp: array of word (* Що Посилаються дані *); outp: array of word init udef, udef, … ", Sp: {ap (і < Sp+lp} begin send < pack, inp[i], i> to q end Rp: { < pack, w, і > (Qp } begin receive; if outp[i] = udef then begin outp[i] := w; ap := max (ap, i-lp+1) ;

Sp := min{j|outp[j]= udef} end.

(* else ігноруємо, пакет передавався повторно *) end.

Lp: {(Qp} begin Qp := Qp {} end.

Алгоритм 3.1 Протокол ковзаючого вікна (для p).

Інваріант протоколу. Підсистема зв’язку представляється двома чергами, Qp для пакетів з адресатом p і Qq, для пакетів з адресатом q. Зауважимо, що перевычисление sp в Rp будь-коли дає значення менше попереднього, тому sp будь-коли зменшується. Щоб показати, що це алгоритм задовольняє даним раніше вимогам, спочатку покажемо, що затвердження P — інваріант. (У цьому інших твердженнях і - натуральне число.) P ((і < sp: outp[i](udef (0p) / (і < sq,: outq[i] (udef (0q) / < pack, w, і > (Qp (w = inq[i] / (і < sq + lq) (lp) / < pack, w, і > (Qq (w = inp[i] / (і < sp + lp) (lq) / outp[i](udef (outp[i] = inq[i] / (ap > і— lq) (2p) / outq[i](udef (outq[i] = inp[i] / (aq > і— lp) (2q) / ap (sq, (3p) / aq (sp (3q).

удотооyоонґн4пїозс›п…снчнTж к? Ю|и6ЫMкЛЭщо2в6цrе}юўз_єи (c)[pic]иш?еpрУгШпёе8х№й?ь|н;[1]8пL›михнжСйвСбGЯЯ†Эў аЮ]жгб…н=зУт4мхх™р‹щ_х"ющУ[pic]іш+я"уЩфDмeжЩжЫЩжбУaилЦUмщбЈсYо?чёууыЎря‘лXЖзЄ xбї[pic]LЩ"щОФ?тЧ…оЯhмЁйЬлHт (нЬцІручсхнхы?пъь•жxъЯ7хѕЬFр2а†нЛемма 3.1 P — інваріант Алгоритму 3.1. Доказ. У будь-якій початковій конфігурації Qp і Qq — порожні, всім і, outp[i] і outq[i] рівні udef, і ap, ap, sp і sq рівні нулю 0; від цього слід, що P=true. Пересування протоколу розглянемо з погляду збереження значення P. По-перше, зауважимо, що значення inp і inq, ніколи не змінюються. Sp: Щоб показати, що Sp зберігає (0p), зауважимо, що Sp не збільшує sp і робить жодного з outp[i] рівним udef.

Щоб показати, що Sp зберігає (0q), зауважимо, що Sp не збільшує sq, і робить жодного з outq[i] рівним udef.

Щоб показати, що Sp зберігає (1p), зауважимо, що Sp не додає пакети в Qp і зменшує sp.

Щоб показати, що Sp зберігає (lq), зауважимо Sp додає < pack, w, і > в Qp з w = inp[i] і і < sp + lp, і змінює значення sp.

Щоб показати, що Sp зберігає (2p) і (2q), зауважимо, що Sp не змінює значення outp, outq, ap, чи aq.

Щоб показати, що Sp зберігає (3p) і (3q), зауважимо, що Sp не змінює значення ap, ap, sq, чи sp. Rp: Щоб показати, що Rp зберігає (0p), зауважимо, що Rp робить жодна outp[i] рівним udef, і коли він перевычисляет sp, воно згодом також задовольняє (0p).

Щоб показати, що Rp зберігає (0q), зауважимо, що Rp не змінює outq чи sq.

Щоб показати, що Rp зберігає (lp), зауважимо, що Rp не додає пакети в Qp і зменшує sq.

Щоб показати, що Rp зберігає (lq), зауважимо, що Rp не додає пакети в Qq і зменшує sp.

Щоб показати, що Rp зберігає (2p), зауважимо, що Rp змінює значення outp[i] на w після ухвалення < pack, w, i>. Т.к. Qp містила цей пакет доти, як выполнился Rp, з (1p) слід, що w = inp[i].

Присвоювання ap:= max (ap, і— lq+1) гарантує, що ap > і— lq зберігається після виконання. Щоб показати, що Rp зберігає (2q), зауважимо, що Rp не змінює значення outq чи aq.

Щоб показати, що Rp зберігає (3p), зауважимо, що коли і Rp присваивает.

ap:= max (ap, і— lq+1) (після ухвалення), з (lp) слід, що і < sq+lq, отже ap (sq зберігається після присвоювання. Rp не змінює sq. Щоб показати, що Rp зберігає (3q), зауважимо, що sp можна збільшити лише за виконанні Rp. Lp: Щоб показати, що Lp зберігає (0p), (0q), (2p), (2q), (3p), и.

(3q), достатньо зауважити, що Lp не змінює стану процесів. (lp) и.

(lq) зберігаються оскільки Lp лише видаляє пакети (а чи не породжує чи спотворює их).

Процеси Sq, Rq, і Lq зберігають P, що з симметрии.

(.

3.1.2 Доказ правильності протокола.

Зараз буде продемонстровано, що Алгоритм 3.1 гарантує безпечну і остаточну доставку. Безпека випливає з інваріанту, як показано в Теоремі 3.2, а жвавість продемонструвати труднее.

Теорема 3.2 Алгоритм 3.1 задовольняє вимозі безпечної доставки.

Доказательство. З (0p) і (2p) слід, що outp[0.sp —1] =inq[0.sp—1], а з (0q) і (2q) слід outp[0.Sq -1] = inp[0.Sq -1]. (.

Чтобы довести жвавість протоколу, необхідно зробити справедливих припущень припущення щодо lp і lq. Без цих припущень протокол не задовольняє властивості жвавості, може бути показано так. Неотрицательные константи lp і lq ще визначено; якщо їх вибрати рівними нулю, початкова конфігурація протоколу виявиться тупикової. Тому передбачається, що lp + lq > 0. Конфігурація протоколу то, можливо позначена (= (cp, cq, Qp, Qq), де cp і cq — стану p і q. Нехай (буде конфігурацією, у якій застосуємо Sp (для деякого і). Пусть.

(= Sp (() = (cp, cq, Qp, (Qq ({m})),.

и відзначимо, що дія Lq застосовно в (. Якщо Lq видаляє m, Lq (() = (. Ставлення Lq (Sp (()) = (дає початок необмеженим обчисленням, у яких ні sp, ні sq зменшаться. Протокол задовольняє вимозі «остаточної доставки», якщо задовольняються дві такі справедливих припущення. Fl. Якщо посилка пакета можлива протягом нескінченно довгого тимчасово, пакет посилається нескінченно часто. F2. Якщо хтось і хоча б пакет посилається нескінченно часто, він приймається нескінченно часто.

Предположение Fl гарантує, що пакет посилається знову і знову, а то й отримано підтвердження; F2 виключає обчислення, подібні описаного вище, коли повторна передача будь-коли приймається. Жоден з цих двох процесів може бути набагато попереду іншого: різниця між sp і sq залишається обмеженою. Тому протокол називається збалансованим, і навіть з цього витікає, що й вимога остаточної доставки задовольняється для sp, тоді він також задовольняється для sq, і навпаки. Зрозуміло, що протокол годі було залучити до ситуації, коли той процес має повноважень набагато більше ніж слова для пересилки, ніж другой.

Лемма 3.3 З P слід sp— lq (ap (sq (aq+ lp (sp + lp.

Доказательство. З (0p) і (2p) слід sp— lq (ap, з (3p) слід ap (sp. З (0q) і (2q) слід sp (ap + lp. З (3q) слід ap + lp (sp + lp .(.

Теорема 3.4 Алгоритм 3.1 задовольняє вимозі остаточної доставки.

Доказательство. Спочатку буде продемонстровано, що у протоколі неможливі глухі куточки. З інваріанту слід, що з двох процесів може послати пакет, у якому слово з номером, меншим, ніж очікується іншим процессом.

Утверждение 3.5 З P слід, що посилка < pack, in[sq], sq> процесом p чи посылка.

< pack, inq[sp], sp) процесом q возможна.

Доказательство. Т.к. lp + lq > 0, хоча одне з нерівностей Леми 3.3 суворе, тобто., sq < sp + lp / sp < sq+lq. З P слід ap (sq (3p) і aq (sp (3q), і навіть слід, що (ap (sq і— lq, отже і Леми 3.3). (.

[pic] Малюнок 3.2 Що Сковзають вікна протокола.

Последствия цих двох лем відбито на Малюнку 3.2. Процесу p необхідно зберігати лише слова inp[ap.sp + lp — 1] що це слова, які p може послати. Назвемо їх як посылаемое вікно p (представлено як P. S на Малюнку 3.2). Щоразу, коли ap збільшується, p відкидає слова, що більше не потрапляють у посылаемое вікно (їх подано як A на Малюнку 3.2). Щоразу, коли sp збільшується, p зчитує таке слово з що посилається вікна джерела, що проводить слова. Відповідно до Лемме 3.6, посылаемое вікно процесу p містить трохи більше L слів. У такий спосіб можна обмежити пам’ять для зберігання процесом p масиву outp. Т.к. outp[i] не змінюється для і < sp, можна припустити, що p виводить це слово вщент і більше зберігає їх (їх подано як W на Малюнку 3.2). Т.к. outp[i] = udef всім і (sp + L, цих значень outp[i] теж треба. Подмассив outp[sp.sp +L—1] назвемо прийняте вікно p. Прийняте вікно представлене Малюнку 3.2 як u для неозначенных слів і R для слів, прийняті. Тільки слова, які потрапляють у це немовбито вікно, зберігаються процесом. Леми 3.6 і 3.7 показують, що ні більш 2L слів зберігаються процесом будь-якої миті времени.

Ограничение чисел послідовності. На закінчення буде показано, що числа послідовності може бути обмежено, якщо використовуються fifoканали. З використанням fifo припущення можна показати, що номер порядковий номер пакета, який отримано процесом p завжди всередині 2Lоколиці sp. Зверніть увагу, що fifo припущення використовується перший раз.

Лемма 3.8 Твердження P ", обумовлений як P «(P / is behind in Qp (і > і «- L (4p) / is behind in Qq (і > і «- L (4q) / (Qp (і(ap — lp (5p) / (Qq (і(aq — lq (5q).

является інваріантом Алгоритму 3.1.

Доказательство. Т.к. демонструвалося, що P — інваріант, ми можемо обмежитися доказом те, що (4p), (4q), (5p) і (5q) виконуються від початку і зберігаються незалежно від переміщенні. Зауважимо, що у початковому стані черги порожні, отже (4p), (4q), (5p) і (5q) очевидно виконуються. Зараз покажемо, що переміщення зберігають істинність цих тверджень. Sp: Щоб показати, що Sp зберігає (4p) і (5p), зауважимо, що Sp не додає пакетів в Qp і змінює ap.

Щоб показати, що Sp зберігає (5q), зауважимо, що й Sp додає пакет в Qq, то і (ap, звідки слід, що і(aq — lq (из.

Леми 3.3).

Щоб показати, що Sp зберігає (4q), зауважимо, що й < pack, w ", і «> в Qq, тоді з (lq).

і «< sp + lp, отже, якщо Sp додає пакет < pack, w, і> з i.

(ap, те з Леми 3.3 слід і «Rp: Щоб показати, що Rp зберігає (4p) and (4q), зауважимо, що Rp не додає пакети в Qp чи Qq.

Щоб показати, що Rp зберігає (5p), зауважимо, що коли і ap збільшується (після ухвалення) до і «- lq +1, для кожного з решти пакетів в Qp маємо і > і «- L (из.

4р). Отже нерівність і (ap — lp зберігається після збільшення ap.

Щоб показати, що Rp зберігає (5q), зауважимо, що Rp не змінює Qq і aq. Lp: Дія Lp не додає пакетів в Qp чи Qq, і змінює значення ap чи aq; означає воно зберігає (4p), (4q), (5p) і (5q). З симетрії протоколу слід, що Sq, Rq і Lq теж зберігає P ". (.

Лемма 3.9 З P «слід, що (Qp (spL (і< sp +L і (Qq (sqL (і< sq +L.

Доказательство. Нехай (Qp. З (lp), і < sq + lq, і з Леми 3.3 і < sp + L. З (5p), і (ap— lp, і з Леми 3.3 і (sp— L. Твердження щодо пакетів в Qq доводиться як і. (Відповідно до Лемме досить посилати пакети з порядковими номерами modulo k, где.

k (2L. У насправді, маючи sp і і mod k, p може обчислити i.

Выбор параметрів. Значення констант lp і lq сильно впливають на ефективність протоколу. Їх впливом геть пропускну спроможність протоколу аналізується в [Sch91, Chapter 2]. Оптимальні значення залежить від числа системно залежних параметрів, як-от час зв’язку, тобто., час між двома послідовними операціями процесу, час затримки на обмін, тобто., середнє час передати пакета від p до q і отримання відповіді q до p, ймовірність помилки, можливість, конкретну пакет потерян.

Протокол, чередующий біт. Цікавий випадок протоколу ковзаючого вікна виходить, коли L = 1, тобто., lp = 1 і lq= 0 (навпаки). Змінні ap і aq, инициализируется значеннямиlp іlq, а чи не 0. Можна показати, що ap + lq = sp і aq + lp = sq завжди виконується, означає лише одне ap і sp (і aq і sq) треба в протоколі. Досить відомий протокол, чередующий біт [Lyn68] виходить, коли використання таймерів додатково обмежується, щоб гарантувати, що станції посилають сполучення ответ.

3.2 Протокол, заснований на таймере Теперь ми вивчимо роль таймерів в проектуванні та перевірці протоколів зв’язку, аналізуючи спрощену форму (t-протокола Флэтчера і Вотсона (Fletcher і Watson) для наскрізний передачі повідомлень. Цей протокол був запропонований [FW78], але (кілька спрощений) підхід цього розділу узятий із [Tel91b, Розділ 3.2]. Цей протокол забезпечує як механізм для передачі (як збалансований протокол ковзаючого вікна Розділу 3.1), але й відкриття і закриття сполук. Він стійкий до втрат, дублювання і переупорядочению повідомлень. Інформація про стан (передачі) протоколу зберігається у структурі даних, званої запис сполуки. (У Підрозділі 3.2.1 буде показано, яка інформація зберігається у запису сполуки). Запис сполуки може сформуватися й віддалена відкриття і нові відкриття сполуки. Отже, кажуть, що з'єднання відкрито (одній із станцій), якщо є запис сполуки. Щоб сконцентруватися на релевантних аспектах протоколу (саме, на механізмі управління з'єднанням й підвищення ролі таймерів у цьому механізмі), будемо розглядати спрощену версію протоколу. Більше практичні й ефективні розширення протоколу вдасться знайти [FW78] і [Tel91b, Розділ 3.2]. У протоколі, описаному тут, зроблено такі спрощення. One direction. Припускається, що ці передаються щодо одного напрямі, скажімо від p до q. Іноді називатимемо p відправником, а q — адресатом (приймачем). Проте, треба сказати, що протокол використовує повідомлення підтвердження, які посилаються у напрямі, тобто. від q до p. Зазвичай дані потрібно передавати їх у двох напрямах. Щоб передбачити цю ситуацію, додатково виконується другий протокол, у якому p і q поміняні ролями. Тоді можна запровадити комбіновані data/ack (данные/подтверждения) повідомлення, містять як дані (з певним порядковим номером), і інформацію, що є у пакеті підтвердження протоколу, заснованого на таймере. Вікно прийому вже з слова. Приймач не зберігає пакети даних із номером, вищим, чому він, що він очікує. Тільки, якщо наступний пакет, який прибуде — очікуваний, він береться до уваги і порадила негайно приймається. Більше інтелектуальні версії протоколу берегли які прибувають пакети з вищим порядковим номером і закон ухвалювався та їхні по тому, як прибутків і було прийнято пакети з меншими порядковими номерами. Припущення, спрощують синхронізацію. Протокол розглянутий з використанням мінімального числа таймерів. Наприклад, передбачається, що підтвердження то, можливо послано процессом-получателем у час, поки з'єднання відкрито із боку приймача. Також може бути випадок, коли підтвердження то, можливо послано лише протягом певного інтервалу часу, але ці зробив би протокол складнішим. Також, з описи протоколу були вкинуті, як і Розділі 3.1, таймерні механізми, використовувані для повторної передачі пакетів даних. Включений лише механізм, який убезпечить безпеку протоколу. Однословные пакети. Відправник може поміщати лише одиночне слово в кожен пакет даних. Протокол був більш ефективним, якби пакети даних могли утримувати блоки послідовних слів. Протокол грунтується на таймере, тобто відбуваються доступом до фізичним годинниковим пристроям. Щодо вчасно і таймерам у системі зроблено такі припущення. Глобальне час. Глобальна міра часу простирається з усіх процесами системи, тобто кожна така подія відбувається у кілька днів. Передбачається, що кожен подія має тривалість 0, та палестинці час, в що відбувається подія, не доступно процесам. Обмежене тривалість життя пакета. Час життя пакета обмежена константою ((максимальне тривалість життя пакета). Отже, якщо пакет посилається у час (і законодавців береться під час (, то.

(< (< (+ (. Якщо пакет дублюється в каналі, кожна копія має бути прийнята протягом проміжку часу (після відправлення оригіналу (або стати втраченої). Таймери. Процеси що неспроможні спостерігати абсолютне час своїх дій, але вони теж мають доступом до таймерам. Таймер — справжня змінна процесу, чиє значення безупинно зменшується згодом (за умови що їй року привласнюють значення). Точніше, якщо Xt — таймер, ми позначаємо його значення в останній момент часу t як Xt (t) і якщо Xt між t1 and t2 не присвоєно інше значення, то.

Xt (t1)-Xt (t2)=t2-t1. Зауважимо, що це таймери працюють так: протягом часу (вони зменшуються точно на (. У Підрозділі 3.2.3 ми обговоримо випадок, коли таймери страждають відхиленням. Вхідні слова для відправника моделюються, як і Розділі 3.1, необмеженим масивом inp. Знову цей масив в повному обсязі зберігається в p; p у кожний час має доступ лише у його частину. Частина inp, до якої p має доступ розширюється (у бік зростання індексів), коли p отримує таке слово від процесу, що їх генерує. Цю операцію називатимемо як ухвалення слова відправником. У розділі моделювання слів, прийнятих приймачем, відмінно від Розділу 3.1. Натомість, щоб записувати (нескінченний) масив, приймач передає слова процесу споживання операцією, званої доставка слова. У ідеалі, кожне слово inp має бути доставлено точно одного разу, і вислів повинні прагнути бути доставлені в правильному порядку. Специфікація протоколу, проте, слабше, і причина у цьому, що протокол дозволяється обробляти кожне слово inp лише протягом обмеженого інтервалу часу. Мало який протокол може гарантувати, що слово приймається за обмежений час оскільки можливо, що це пакети в цей час загубляться. Отже, специфікація протоколу враховує можливість повідомленої втрати, коли протокол відправника генерує звіт про помилку, який би, що слово можливо втрачено. (Якщо після цього протокол вищого рівня пропонує це слово p знову, то можливо дублювання; однак коли ми думати стосуватися цієї проблеми тут.) Властивості протоколу, який доведено в Підрозділі 3.2.2: Ні втрат. Кожне слово inp доставляється процесом q чи посилається звіт процесом p («можливо втрачено ») протягом обмеженого часу після прийняття слова процесом p. Впорядкування. Слова, доставляемые q приймаються у суворо зростаючу котячу порядку (як і, як вони в inp).

3.2.1 Уявлення Протокола Соединение в протоколі відкрито, якщо раніше немає ніякого з'єднання та якщо (для відправника) прийнято таке слово чи (для приймача) прибуває пакет, що може бути доставлений. Отже, в цьому протоколі, щоб відкрити з'єднання не потрібно обмінюватися певними повідомленнями управління колись, ніж може бути послані пакети даних. Це протокол відносно ефективною для прикладних програм, де у кожному поєднанні передаються лише кілька слів (маленькі пакети зв’язку). Предикат cs (чи cr, відповідно) щирий, коли відправник (чи приймач, відповідно) має відкрите з'єднання. Це, зазвичай, не явна булева змінна відправника (чи приймача, відповідно); натомість відкрите з'єднання визначається існуванням записи сполуки. Процес перевіряє, відкрито чи з'єднання, намагаючись знайти запис з'єднання перетворені на списку відкритих сполук. Коли відправник відкриває нове з'єднання, він починає нумерувати прийняті слова з 0. Кількість вже прийнятих слів у цьому поєднанні позначається High, і кількість слів, котрим вже був отриманий підтвердження позначається через Low. Це передбачає (аналогічно протоколу Розділу 3.1), що відправник може передавати пакети з порядковими номерами буде в діапазоні від Low до High —1, але є тут і своя особливість. Відправник може посилати слово лише протягом проміжку часу довжиною U, починаючи відтоді, коли відправник прийняв слово. І тому з кожним словом inp[i] асоціюється таймер Ut[i], він встановлюється в U в останній момент прийняття, і бути позитивним для переданого слова. Отже, посылаемое вікно p складається з тих слів з індексами Low… High — 1, котрим асоційований із нею таймер позитивний. Мережні константи: (: real; (* Максимальне тривалість життя пакета *) Константи протоколу: U: real; (* Довжина інтервалу відправки *) R: real; (* Значення тийм-аута приймача: R (U+(*) P. S: real; (* Значення тайм-ауту відправника: P. S (R + 2(*) Запис сполуки відправника: Low: integer; (* Підтверджені слова поточного сполуки *) High: integer; (* Прийняті слова поточного сполуки *) St: timer; (* Таймер сполуки *) Запис сполуки приймача: Exp: integer; (* Очікуваний порядковий номер *) Rt: timer; (* Таймер сполуки *) Підсистема зв’язку: Mq: channel; (* Пакети даних для q *) Mp: channel; (* Пакети підтвердження для p *) Допоміжні перемінні: B: integer init 0; (* Слова у минулому поєднанні *) cr: boolean init false; (* Існування сполуки для приймача *) cs: boolean init false; (*Існування сполуки для відправника *).

Рисунок 3.3 Змінні протоколу, заснованого на таймере.

Протокол посилає пакети даних, які з: біта (біт початкупослідовності; його значення обговорюватиметься пізніше), порядкового номери і вислів. Для аналізу протоколу кожен пакет даних містить четверте полі, зване решту часу життя пакета. Воно показує максимальне час, протягом якого пакет ще довго можуть перебувати у каналі доти, як має вступити або стати втраченим відповідно до припущенню про обмеженому часу життя. У час відправлення решту часу життя пакета завжди одно (. Пакети підтвердження протоколу складаються тільки з порядкового номери, очікуваного процесом q, але знову з метою аналізу кожне підтвердження містить решту часу життя пакета.

Ap: (* Прийняття наступного слова *) begin if not cs then begin (* Спочатку з'єднання відкривається *) create (St, High, Low); (* cs := true *) Low := High := 0; St := P. S end; Ut[B + High] := U, High := High + 1 end.

Sp: (* Відхід i-го слова поточного сполуки *) { cs / Low (і < High / Ut[B + і] > 0} begin send; St:=S end.

Rp: (* Прийняття підтвердження *) { cs / (Mp } begin receive; Low := max (Low, і) end.

Ep: (* Генерація повідомлення про помилку для можливо втраченого слова *) {cs / Ut[B + Low] (-2(-R} begin error [B + Low] := true; Low := Low + 1 end.

Cp: (* Закриття сполуки *) {cs / St < 0 / Low = High } begin B := B + High, delete (St, High, Low) end (* cs := false *).

Алгоритм 3.4 Протокол отправителя.

Закрытие сполуки контролюється таймерами, таймером St для відправника і таймером Rt для приймача. Обмежений інтервал посилки кожного слова обмежений тривалість життя пакета призводять до того, що кожен слово може бути знайдено в каналах лише у протягом інтервалу часу довжиною (+ U, починаючи моменту винесення слова. Це дозволяє приймачу відкидати інформацію про конкретне слові через (+ U одиниць часу після ухвалення слова; після цього можуть з’явитися дублікати, отже неможлива повторна доставка. Таймер Rt встановлюється в R щоразу, коли слово доставляється, константа R вибирається те щоб задовольняти нерівності R (U + (. Якщо таке слово приймається протягом R одиниць часу, то таймер Rt оновлюється, інакше з'єднання закривається. Значення таймера відправники вибирається те щоб не можна було прийняти підтвердження при закритому поєднанні; при цьому, з'єднання підтримується протягом по крайнього заходу P. S одиниць часу після відправлення пакета, де P. S — константа, выбираемая те щоб задовольняти P. S (R+2(. Таймер St встановлюється в P. S щоразу, коли посилається пакет, і поєднання може бути закритий лише якщо St < 0. Якщо на той час ще залишилися незавершені слова (тобто. слова, котрим був отримано підтвердження), це слово з’являються втраченими до закриття соединения.

Rq: (* Приймаємо пакет даних *) { (Mq } begin receive; if cr then if і = Exp then begin Rt := R; Exp := і + 1; deliver w end else if p. s = true then begin create (Rt, Exp); (* cr := true *) Rt := R; Exp := і +1; deliver w end end.

Sq: (* Посилаємо підтвердження *).

{cr} begin send end (* Закриття сполуки після закінчення часу Rt, див. У дії Time *).

Алгоритм 3.5 Протокол приемника Бит начало-последовательности використовується приймачем, якщо пакет отримано при закритому поєднанні, щоб вирішити, може бути відкрито з'єднання (і доставлено слово у пакеті). Відправник встановлює біт в true, коли всі попередні слова підтверджено чи оголошено (як можна втрачені). Коли q отримує пакет при вже відкритому поєднанні, що міститься слово доставляється тоді й тільки тоді, коли порядковий номер пакета дорівнює очікуваному порядковому номера (зберігається в Exp). Залишається обговорити значення перемінної B в протоколі відправника. Це допоміжна змінна, введена лише для докази правильності протоколу. Відправник нумерує слова у кожному поєднанні, починаючи з 0, але, щоб розрізняти слова у різних з'єднаннях, все слова індексуються послідовно зі збільшення для аналізу протоколу. Таким чином, там, де відправник індексує слово як і, «абсолютний «номер зазначеного слова B + і, де B — загальна кількість пакетів, прийнятих p в попередніх з'єднаннях. Відповідність між «внутрішніми «і «абсолютними «номерами слів показується на Малюнку 3.7. У реалізації протоколу B не зберігається, і відправник «забуває «все слова inp [0. B-1]. Loss: { m (M } (* M — або Mp, або Mq *) begin remove m from M end Dupl: { m (M } (*M — або Mp, або Mq *) begin insert m in M end Time: (* (> 0 *) begin forall і do Ut[i] := Ut[i] -(, St := St -(; Rt := Rt — (; if Rt (0 then delete (Rt, Exp); (* cr := false *) forall (Mp, Mq do begin (:= (— (; if ((0 then remove packet end end Алгоритм 3.6 Додаткові переходи Протокола.

Подсистема зв’язку представляється двома мультимножествами, Mp для пакетів з адресатом p і Mq для пакетів з адресатом q. Протокол відправника — Алгоритм 3.4, протокол приймача — Алгоритм 3.5. Є додаткові переходи системи, представлені Алгоритмом 3.6, які відповідають кроків в протоколі процесів. Ці переходи є відмови каналу та зміна часу. У переходах Loss і Dupl M означає чи Mp, чи Mq. Дія Time зменшує все таймери у системі на величину (, трапляється між двома дискретними подіями, які відрізняються на (одиниць часу. Коли таймер приймача сягає значення 0, з'єднання закрывается.

[pic] Малюнок 3.7 Порядкові номери протокола.

3.2.2 Доказ коректності протокола Требуемые властивості протоколу буде доведене у серії лем і теорем. Твердження P0, визначене нижче, показує, що з'єднання відправника залишається питанням відкритим поки системі ще є пакети, І що порядкові номери цих пакетів мають коректне значення нинішнього року поєднанні. P0 (cs (St (P.S (1) cr (0 < Rt (R (2).

(і < B+ High: Ut[i] (U (3).

((Mp, Mq: 0 (Mq (cs (St ((+(+R (5) cr (cs / St (Rt + ((6).

(Mp (cs / St>((7).

(Mq ((w = inp[B + і] / і < High) (8).

Объяснение до (3): значення High передбачається рівним нулю переважають у всіх конфігураціях, у яких із боку приймача немає соединения.

Лемма 3.10 P0 — інваріант протоколу, заснованого на таймере. Доказ. Спочатку не сполуки, немає пакетів, і B = 0, із чого слід, що P0 — true.

Ap: (1) зберігається, т.к. St завжди присвоюється значення P. S (St = S).

(3) зберігається, т.к. перед збільшенням High, Ut[B + High] присвоюється значення U. (5), (6) і (7) зберігаються, т.к. St може тільки збільшуватиметься. (8) зберігається, т.к. High може лише увеличиваться.

Sp: (1) зберігається, т.к. St завжди присвоюється значення P. S. (4) зберігається, т.к. кожен пакет посилається з які залишилися часом життя рівним ?. (5) зберігається, т.к. пакет посилається і St встановлюється в P. S, і P. S = R + 2?. (6) і (7) зберігається, т.к. St може лише збільшитися у тому дії. (8) зберігається, т.к. новий пакет задовольняє w = inp[B + і] і і < High.

Rp: Дія Rp не змінює ніяких змінних з P0, і видалення пакета зберігає (4) і (7).

Eр: Дія Eр не змінює ніяких змінних з P0.

Cp: Дія Cp робить рівним false укладання (5), (6) і (7), но.

((2), (5), (6) і (7)) застосовні тільки коли їх посилки хибні. Cp також змінює значення B, але, т.к. пакетів передачі немає, (по (5) и.

(7)), (8) сохраняется.

Rq: (2) зберігається, т.к. Rt завжди присвоюється значення R (якщо присвоюється). (6) зберігається, т.к. Rt встановлюється лише у R лише за прийнятті пакета, і з (4) і (5) слід cs? St (R +? коли це происходит.

Sq: (4) зберігається, т.к. кожен пакет посилається з які залишилися часом життя, рівним ?. (7) зберігається, т.к. пакет посилається з (=? коли cr істинно, тож із (2) і (6) St > ?.

Loss: (4), (5), (7) і (8) зберігаються, т.к. видалення пакета може фальсифікувати але їхні посылку.

Dupl: (4), (5), (7) і (8) зберігаються, т.к. введення пакета m застосовна лише якщо m вже був у каналі, отож, що висновок цієї пропозиції було істинним і для введением.

Time: (1), (2) і (3) зберігаються, т.к. St, Rt, і Ut[i] може лише зменшуватися, і поєднання приймача закривається, коли Rt стає рівним 0. (4) зберігаються, т.к. (може лише зменшитися, і пакет видаляється, що його (-полі сягає значення 0. Зауважимо, що Time зменшує все таймери (включаючи (-полі пакета) однією й саму величину, отже зберігає усі твердження виду Xt > Yt +З, де Xt и.

Ytтаймери, і З — константа. Це свідчить, що (5), (6) і (7) зберігаються. (.

Первое вимогу до протоколу у цьому, що кожен слово зрештою доставляється чи оголошується втраченим. Визначимо предикат 0k (i) як 0k (i) (error [і] = true / q доставив inp [і]. Зараз може бути показане, що протокол не втрачає ніяких слів, не оголошуючи звідси. Визначимо твердження P1 як P1(P0 / (cs ((і < B: 0k (i) (9) / cs ((і < B + Low: 0k (i) (10) / (Mq ((i. Проте, (10) зберігається, т.к. з (13) (і < B + I: 0k (i) виконується, якщо отримано це подтверждение.

Eр: Значення Low може бути збільшене, коли застосовується дію Eр, але генерація повідомлення про помилку гарантує, що (10) сохраняется.

Cp: Дія Cp звертає cs в false, але це застосовна лише якщо St <

0 і Low == High. З (10) слід, що (і < B+ High: 0k (i) виконується колись виконання Cp, отже (9) сохраняется.

Посилка (10) звертається до false у тому дії, і з (5), (6) і (7) слід, що посилки (11), (12) і (13) хибні; отже (10),.

(11), (12) і (13) сохраняются.

Rq: Спочатку розглянемо випадок, коли q приймає < data, true, l, w,(> при неіснуючому поєднанні (cr — false). Тоді (і < B+I: 0k (i) з (11), і w доставляється діє. Т.к.

w = inp[B+I] з (8), присвоювання Exp := I + 1 зберігає (12).

Тепер на випадок, коли Exp збільшується внаслідок принятия.

< data, s, Exp, w,(> при відкритому поєднанні. З (12), (і < B + Exp :

0k (i) виконувалося перед прийняттям, і слово w = Wp[B + Exp] доставляється дією, отже прирощення Exp зберігає (12).

Sq: Відхід зберігає (13) з (12).

Loss: Виконання Loss може лише фальсифікувати посилки предложений.

Dupl: Запровадження пакета m можна тільки якщо посилка відповідного пропозиції (і, отже, висновок) була істинною є ще до його введения.

Time: Таймери не згадувалися явно в (9)-(13). Виведення пакета чи закриття процесом q може лише фальсифікувати посилки (11), (12) чи (13).(.

Теперь то, можливо доведено перша частина специфікації протоколу, тільки після додаткового припущення. Без цього припущення відправник може надзвичайно ледачим в оголошенні слів можливо втраченими; в Алгоритмі 3.4 зазначено лише, що це повідомлення може і виникнути в проміжок часу 2(+ R по закінченні інтервалу для відправлення слова, але з зазначено, що його взагалі не має з’явитися. Отже, дозвольте зробити додаткове припущення, що дія Eр на виконатися процесом p і протягом розумного часу, саме колись, ніж Ut[B + Low] = —2(—R—(.

Теорема 3.12 (Ні втрат) Кожне слово inp доставляється q чи оголошується p як можна втрачене протягом U+2(+R+(після ухвалення слова процесом p.

Доказательство. Після прийняття слова inp[I], B+High > I починає виконуватися. Якщо з'єднання закривається протягом зазначеного періоду після прийняття слова inp[I], то B > I, і результати випливає з (9). Якщо з'єднання не закривається у цей проміжок часу й B + Low (I, звіт про словах з проміжку B + Low. I може бути вчасно 2(+ R після закінчення інтервалу відправлення inp[I]. З цього випливає, що це звіт мала місце 2(+ R +(по закінченні інтервалу відправлення, тобто., U+ 2(+R+(після ухвалення. На цьому слід I < B+ Low, і, отже, слово було доставлене чи оголошено (з (10)). (.

Чтобы встановити друге вимога коректності протоколу, має бути показано, що кожен прийняте слово має більший індекс (в inp), ніж своє ж слово. Означимо індекс останнього доставленого слова через pr (для зручності запишемо, що изначально.

pr =-1 and Ut[-1] = -(). Визначимо твердження P2 як: P2(P1 / (Mq (Ut[B+i] > (-((14) / i1 (i2 < B + High (Ut[i1] (Ut[i2] (15) / cr (Rt (Ut[pr] + ((16) / pr < B + High / (Ut[pr] > -((cr) (17) / cr (B + Exp = pr + 1 (18).

Лемма 3.13 P2 — інваріант протоколу, заснованого на таймере.

Доказательство. Спочатку Mq порожньо, B + High одно нулю, (cr виконується, и.

Ut[pr] < -(, звідки йдуть (14)-(18).

Ap: (15) зберігається, т.к. кожне нове прийняте слово отримує значення таймера U, що з (3) по крайнього заходу одно значенням таймерів раніше виданих слов.

Sp: (14) зберігається, т.к. Ut[B +і] > 0 і пакет вирушає з (((.

Cp: (14), (16) і (18) зберігаються, т.к. з (5) і (6) їх посилки хибні, коли Cp застосовно. (15) зберігається, т.к. B приймає значення B +.

High і таймери не змінюються. (17) зберігається, т.к. B присвоюється значення B + High і pr і cr не меняются.

Rq: (16) зберігається, т.к. коли Rt встановлюється в R (після ухвалення слова) Ut[pr] (U з (3), і R (2(+U. (17) зберігається, т.к. pr.

< B+High, що з (8), і cr стає true. (18) зберігається, т.к. Exp встановлюється в і +1 і pr в B + і, звідки слід, что.

(18) стає true.

Time: (14) зберігається, т.к. Ut[B + і] і (зменшуються одне і те число (і виведення пакета лише робить удаваної посилку). (15) зберігається, т.к. Ut[i1] і Ut[i2] зменшуються однією і тугіше величину. (16) зберігається, т.к. cr не стає достеменним у цій дії, і Rt і Ut[pr] зменшуються однією й саму величину. (17) зберігається, т.к. його висновок стає хибним лише, якщо Rt стає (0, звідки слід (по (16)), що Ut[pr] стає < -(.

(18) зберігається, т.к., якщо cr не звернувся до false, B, Exp і pr не меняются.

Действия Rp, Eр, і Sq, не змінюють ніякі перемінні в (14)-(18). Loss і Dupl зберігають (14)-(18) з тієї ж міркувань, що у попередніх доказах. (.

Лемма 3.14 З P2 слід, що < data, s, i1, w,(> (Mq ((cr / B+i1 > pr). Доказ. По (14), з (Mq слід Ut[B+i1] >(-(> -(. Якщо B +i1 (pr то, т.к. pr < B + High з (15), Ut[pr] > -(, тож із (17) cr true. (.

Теорема 3.15 (Впорядкування) Слова, доставляемые q з’являються у суворо зростаючу котячу порядку до масиві inp. Доказ. Припустимо q отримує пакет завдає w. Якщо перед отриманням був сполуки, B + i1 > pr (по Лемме 3.14), отже слова w міститься у inp після позиції pr. Якщо з'єднання було, i1 = Exp, отже B+i1 = B+Exp = pr+1 з (18), звідки слід, що w = inp[pr+1]. (.

3.2.3 Обговорення протокола Некоторые розширення протоколу вже обговорювалися у введенні у цей розділ. І ми закінчуємо розділ подальшим обговоренням протоколу, й методів, представлених і які у цьому розділі. Якість протоколу. Вимоги Ні втрат перезимувало і Впорядкування є властивостями безпеки, і вказують отримати надзвичайно просте рішення, саме протокол, який посилає чи отримує ніякі пакети, й оголошує кожне слово втраченим. Звісно ж, що такий протокол, який дає ніякої транспортування даних від відправника до приймача, перестав бути дуже «хорошим «рішенням. Хороші розв’язання проблеми як задовольняють вимогам Ні втрат перезимувало і Впорядкування, але й оголошують втраченими якнайменше слів. Для цього, протокол цього розділу може розширитися механізмом, який посилає кожне слово неодноразово (доки кінець посилки інтервалу), поки не отримає підтвердження. Інтервал посилки має бути досить довгим, щоб було повторити передачу деякого слова кілька разів, і щоб ймовірність, що слово загубиться, стало дуже маленькій. З нашого боку приймача передбачено механізм, що викликає посилку підтвердження щоразу, коли пакет доставлений чи отримано при відкритому соединении.

Ограниченные порядкові номери. Порядкові номери, використовувані в протоколі, може бути обмежено, якщо отримати для протоколу результат, аналогічний Лемме 3.9 для збалансованого протоколу ковзаючого вікна [Tel91b, Section 3.2]. Треба лише припустити, що швидкість прийняття слів (процесом p) обмежена так: слово може з’явитися лише коли перше з попередніх слів має вік по крайнього заходу U + 2(+ R одиниць часу. Треба лише до дії Ap додати сторож {(High < L) V (Ut[B + High — L] 0} begin (* Таймери в p зменшуються на («*) («:= …; (* [pic]((«((((1 + () *) forall і do Ut[i] := Ut[i] - («; St := St — («; (*Таймери в q зменшуються на («*) («:=…; (* [pic]((«» ((((1 + () *) Rt := Rt — («; if Rt < 0 then delete (Rt, Exp); (* (-полі передається явно *) forall (.,() (Mp, Mq do begin (:= (- (, if (< 0 then remove packet end end Алгоритм 3.8 Змінений дію Time.

Все інваріантні пропозиції P2 щодо пакетів мають форму (m (M: A (m) у самому справі то зрозуміло, що така пропозиція зберігається при дублювання та втрати пакетів. У подальших розділах побачимо інваріанти в більш загальній формі, наприклад [pic] чи умова ((m (M: A (m). Твердження, мають этй форму може бути фальсифіковані втратою чи дублюванням пакетів, і отже що неспроможні використовуватися в доказі коректності Алгоритмів, які мають допускати подібні дефекти. Схожі спостереження застосовні до форми інваріантів діє Time. Вже відзначалося, що це дію зберігає усі твердження форми Xt (Yt + З, де Xt і Ytтаймери і Зконстанта. P1(= cs (St (P.S (1() / cr (0 < Rt (R (2 ") / (і < B + High: Ut[i] < U (3 ") / ((Mp, Mq: 0 < ((((4 ") / (M, (cs / St ((1+()((+ (+(1+()R) (5 ") / cr (cs / St ((l+()((i+()Rt+() (6 ") / (Mp (cs / St > (1 + ()(((7 ") / (Mq, ((w = inp[B + і] / і < High) (8 ") / (cs (/і < B: 0k (i) (9 ") / cs (/і < B + Low: 0k (i) (10 ") / 1, з (Xt (r2 Yt + з) / ([pic] ((«(((r) / ([pic] ((«» (((r) слід (Xt-(«)(r2(Yt- («) + з. Отже, Time-(зберігає твердження форми Xt ((1 + ()2 Yt + з. Тепер протокол то, можливо адаптований роботи з отклоняющимися таймерами, якщо відповідним чином змінити інваріанти. А, щоб інші дії теж зберігали змінені інваріанти, константи R і P. S протоколу повинні задовольняти R ((1 + ()((1 + ()U + (I + ()2) і P. S ((1 + ()(2(+ (1 + ()R). Виключаючи змінені константи, протокол залишається настільки ж. Його інваріант наведено на Малюнку 3.9. Теорему 3.16 P2 «- інваріант протоколу, заснованого на таймере з (- обмеженим відхиленням таймера. Протокол відповідає вимогам Ні втрат перезимувало і Упорядочение.

Вправи до глави 3.

Розділ 3.1.

Упражнение 3.1 Покажіть, що збалансований протокол ковзаючого вікна не задовольняє вимозі остаточної доставки, коли з припущень Fl і FS, виконується лише F2. Вправа 3.2 Доведіть, що й L = 1 в збалансованому протоколі ковзаючого вікна і ap і aq, инициализируются значеннямиlq іlp, то завжди вірно ap+lq = sp і aq+lp = sq.

Розділ 3.2.

Упражнение 3.3 У протоколі, заснованому на таймере відправник може оголосити слово можливо втраченим, коли насправді він був коректно доставлено приймачем. (1) Опишіть виконання протоколу, за якого створюється цього прикрого феномена. (2)Можно чи спроектувати протокол, у якому відправник генерує повідомлення про помилку протягом обмеженого проміжку часу, тоді навіть тільки тоді ми, коли слово не доставлено приймачем? Вправа 3.4 Припустимо, що через вихід з експлуатації годинникового устрою, приймач неспроможна закрити з'єднання вчасно. Опишіть роботу протоколу, заснованого на таймере, коли слово втрачається без повідомлень відправника. Вправа 3.5 Опишіть роботу протоколу, заснованого на таймере, у якому приймач відкриває соелинение після ухвалення пакета з порядковим номером, великим нуля. Вправа 3.6 Дія Time-(не моделює відхилення в останньому часу життя пакетів. Почему?

Упражнение 3.7 Доведіть Теорему 3.16.

Упражнение 3.8 Інженер мережі хоче використовувати протокол, заснований на таймере, але хоче, щоб звіт про можливо втрачених словах приходив раніше, відповідно до наступній модифікацією Eр. Eр: (* Генерація повідомлення про помилку для можливо втрачених слів *) { Ut[B + Low] < 0 } begin error[B + Low] := true; Low := Low + 1 end.

Продолжает чи в такий спосіб змінений протокол задовольняти вимогам Ні втрат перезимувало і Впорядкування чи рідні мають бути зроблені певні зміни? Зазначте переваги та недоліки цих изменений.

4 Алгоритми маршрутизации.

Процес (вузол у комп’ютерній мережі), взагалі, не з'єднаний безпосередньо з кожним іншим процесом каналом. Вузол може посилати пакети інформації безпосередньо лише у подмножеству вузлів званих сусідами вузла. Маршрутизація — термін, використовуваний у тому, щоб описати вирішальну процедуру, з допомогою якої вузол вибирає один (чи, іноді, більше) сусідів для посилки пакета, рухається до кінцевого адресата. Мета в проектуванні алгоритму маршрутизації - згенерувати (кожному за вузла) процедуру прийняття рішень до виконання цієї функцію і надання гарантії кожному за пакета.

Зрозуміло, що деяка інформація щодо топології мережі мусить бути збережена у кожному вузлі як робоча основа для (локальної) вирішальної процедури; ми звернімося такий інформації, як таблиці маршрутизації. З запровадженням цих таблиць проблема маршрутизації можна розділити на два частини. 1. Обчислення таблиці. Таблиці маршрутизації повинні прагнути бути враховано, коли мережу инициализирована і бути змінена, якщо топологія мережі змінилася. 2. Пересилання пакета. Пакет може бути посланий через мережу, використовуючи таблиці маршрутизації. Критерії для «хороших «методів маршрутизації включають такі. (1) Коректність. Алгоритм повинен доставити кожен пакет, запропонований мережі остаточному адресата. (2) Комплексність. Алгоритм для обчислення таблиць повинен використовувати кілька повідомлень, час, і пам’ять (зберігання) наскільки можна. (3) Ефективність. Алгоритм повинен послати пакети через «хороші «шляху, наприклад, шляху, що доставляють лише маленьку затримку і гарантують високу продуктивність в усій мережі. Алгоритм називається оптимальним, коли він використовує «найкращі «пути.

Інші аспекти ефективності - те, як швидко рішення маршрутизації може бути зроблене, як швидко пакет то, можливо підготовлений передачі, тощо., але це аспекти отримають менше уваги цієї главі. (4) Живучість. Що стосується топологічного зміни (додавання чи видалення каналу, чи вузла) алгоритм модифікує таблиці маршрутизації до виконання функції маршрутизації в змінюваного мережі. (5) Адаптивність. Алгоритм балансує завантаження каналів та вузлів, адаптуючи таблиці, щоб уникнути маршрутів через канали чи вузли, які перевантажені, воліючи канали, і вузли з не меншою завантаженістю нині. (6) Справедливість. Алгоритм має забезпечити обслуговування кожному користувачеві однаковою мере.

Ці критерії - іноді конфліктують, більшість алгоритмів виконує добре але їхні подмножество.

Як завжди, мережу подається як граф, де вузли графа — вузли мережі, і є ребро між двома вузлами, якщо вони — сусіди (тобто, вони мають канал зв’язок між ними). Оптимальність алгоритму залежить від цього, що називається «найкращим «шляхом в графі; існує, кілька понять «найкращий », кожен із власним класом алгоритмів маршрутизації: (1)Минимальное кількість переходів. Вартість використання шляху вимірюється і кількість переходів (пройдені канали чи кроки від вузла до вузла) шляху. Мінімальний перехід, спрямовує алгоритм, використовує шлях із наймолодшим можливим числом переходів. (2)Самый найкоротший шлях. Кожен канал статично призначений (неотрицательным) вагою, і вартість шляху вимірюється як сума терезів каналів їсти дорогою. Алгоритм із дуже короткій доріжкою використовує шлях із найнижчою можливої вартістю. (3)Минимальная затримка. Кожен канал динамічно означивается вагою, залежно від трафіка у каналі. Алгоритм з мінімальним затримкою неодноразово перебудовує таблиці у такий спосіб, у якому шляху з (близькій) мінімальної загальної затримкою вибираються завжди. Інші поняття оптимальності стануть у пригоді у спеціальних прикладних програмах. Не обговорюватимуться здесь.

Наступний матеріал обговорюється у цій главі. У Розділі 4.1 буде показано, що, по крайнього заходу, для маршрутизації з мінімальним переходом і найкоротшим шляхом, можна ще спрямувати всі пакети призначені d оптимально через дерево охватов, прикладене до d. Як наслідок, відправник пакета може ігноруватися, при розрахунку маршрутизации.

Розділ 4.2 описує алгоритм, для обчислення таблиці маршрутизації для статичної мережі з каналами мають вагу. Алгоритм распределенно обчислює найкоротший шлях між кожної парою вузлів в кожному вихідному вузлі першого сусід шляху до кожного адресата. Недолік цього алгоритму у цьому, що це обчислення повинні прагнути бути повторені після зміни топології мережі: алгоритм не масштабируемый.

Алгоритм змінюваного мережі, обговорений Розділі 4.3, не страждає з цієї вади: може адаптуватися до втрати чи відновленню каналів частковим переобчисленням таблиць маршрутизації. Щоб аналіз був простим, він реалізований як мінімальний перехід, тобто число кроків приймається як вартість шляху. Можливо «змінити Netchange алгоритм, до роботи з виваженими каналами, які можуть опинитися губитися чи восстанавливаться.

Алгоритми маршрутизації Розділів 4.2 і 4.3 використовують таблиці маршрутизації (у кожному вузлі) з записами кожному за можливого адресата. Це може занадто обтяжити великих мереж із малих вузлів. У Розділі 4.4 обговорюватимуть деякі стратегії маршрутизації, які кодують топологічну інформацію в адресі вузла, щоб використовувати коротші таблиці маршрутизації чи менше таблиць. Ці звані «компактні «алгоритми маршрутизації звичайно використовують оптимальні шляху. Схема основою — деревом, интервальная маршрутизація, і префиксная маршрутизація також обсуждена.

Розділ 4.5 обговорює ієрархічні методи маршрутизації. У цих методах, мережу розбита на розділи — кластери, і розбіжності зроблено між маршрутизацією всередині кластера і маршрутизації між кластерами. Ця парадигма можна використовувати, аби знизити кількість рішень маршрутизации.

4.1 Адресат-основанная маршрутизация.

Рішення маршрутизації, зроблене, коли пересилається пакет зазвичай грунтується лише з адресаті пакета (і змістовності таблиць маршрутизації), і залежить від початкового відправника (джерела) пакета. Маршрутизація може ігнорувати джерело і використовувати оптимальні шляху, такі висновки цього розділу. Висновки не залежить від вибору приватного критерію оптимальності для шляхів. (Поклавши, шлях простий, коли він містить кожен вузол лише одного разу, і шлях — цикл, якщо перший вузол дорівнює останньому вузлу.) (1)Стоимость посилки пакета через шлях P залежить від фактичного використання шляху, зокрема використання ребер P відповідно до іншими повідомленнями. Це дозволяє нам оцінювати вартість використання шляху P як функцію шляху; в такий спосіб, позначимо вартість P як C (P) ((. (2) Вартість конкатенації двох шляхів дорівнює сумі вартостей складових шляхів, тобто, будь-кого і= 0,…, k.

C ()=C ()+C ().

Отже, вартості порожнього шляху (це — шлях від u0 до u0) задовольняє З () = 0. (3)Граф зовсім позбавлений циклів негативною стоимости.

(Цей критерій задовольняється критерієм найкоротшого шляху й критерієм мінімального переходу). Шлях від u до v, називається оптимальним, а то й існує жодної шлях від u до v з дешевше вартістю. Зауважте, що оптимальним шляхом який завжди единственен; можуть існувати різні шляху з тією ж самої (мінімальної) стоимостью.

Лемма 4.1. Нехай u, v (V. Якщо шлях з u в v існує у G, тоді навіть існує простіший шлях, який оптимален.

Доказательство. Оскільки кількість простих шляхів кінцеве число, то існує простіший шлях від u до v, назвемо його So, з найменшої вартістю, тобто., кожному за простого шляху P «з u в v C (So)(C (P'). Залишилося показати що C (So) нижню межу вартостей всіх (не простого) шляхів Запишемо V = {v1, …, vn}. Отже, видаляючи з P циклів, які включають v1, v1, v2 тощо., покажемо що кожного шляху P з u в v існує простіший шлях P «з C (P »)(C (P). Поклавши Po =P, і побудуємо для і = 1,…, N шлях Pi так. Якщо vi входить у Pi-1 тоді Pi = Pi-1. Інакше, запишемо Pi-1 =. Нехай uj1 стане і uj2 буде останнім входженням vi в Pi-1 і положим.

Pi = з побудови Pi — шлях з u до v і має все вершини з {v1, …, vn} лише один раз, отже PNпростіший шлях з u в v. Pi-1 складається з Pi і циклу Q= uo,. .. , uj2 отже C (Pi-1) = C (Pi) + C (Q). Так як не циклів негативного ваги, це означатиме C (Pi) (C (Pi- 1) і, отже, C (PN)(C (P). По вибору So, C (So) (C (PN,), із якого випливає C (So) (C (P) [].

Если G містить цикли негативного ваги, оптимальним шляхом необов’язково існує; кожен шлях то, можливо «переможений» іншим шляхом, що відбудеться через негативний цикл вкотре. Для наступній теореми, прийміть, що G зв’язний (для незв’язних графів, теорема може застосовуватися до кожного зв’язков компоненту отдельно).

Теорема4.2. До кожного d (V існує Td = (V, Ed) таке що Ed (E і таке що з кожної вершини v (V, шлях з v до d в Td — оптимальний шлях від v до d в G.

Доказательство. Нехай V = { v1, …, vN }. Ми индуктивно побудуємо послідовність дерев Ti = (Vi, Ei) (для і = 0, …, N) з такими властивостями (1) Кожне Ti — поддерево G, тобто., Vi (V, Ei (E, і Ti — дерево. (2) Кожне Ti (для і < N) поддерево Ti+1. (3) Всім і > 0, vi (Vi і d (Vi. (4) Всім w (Vi, простіший шлях від w до d в T, — оптимальним шляхом від w до d в G. Ці властивості розуміють, що TN відповідає вимогам для Td. Конструюючи послідовність дерев, між іншим Vd = {d} і Eo = (. Дерево Ti+1 побудуємо так. Виберемо оптимальний простіший шлях P= від vi+1 до d, і нехай l буде найменшим індексом таким, що ul (Ti (таке l існує, оскільки ul = d (Ti; можливо l = 0). Теперь:

Vi = Vi ({ uj: j суперечачи припущенню, що таблиці є цикл-свободными. Отже, кожен вузол входить раз, що передбачає, що ця послідовність кінцева, закінчується, скажімо, в вузлі Великобританію uk (k < N). Відповідно до процедури пересилки послідовність може закінчуватися лише у d, тобто, uk = d, і пакет досяг адресата за межі не більш ніж N — 1 кроків (.

У деяких алгоритми маршрутизації може бути, що таблиці не циклвільні течія їх обчислення. Коли таку алгоритм використовується, пакет може перетинати цикл протягом обчислення таблиць, але сягає адресата не більш ніж N — 1 кроків після завершення обчислення таблиці, якщо зміни топології припиняються. Якщо топології тривають, тобто, мережу підпорядкована безкінечною послідовності змін топології, пакети необов’язково досягають свого адресата, навіть якщо таблиці цикл-свободны під час модификаций;

Ветвящаяся маршрутизація з мінімальним затримкою. При маршрутизації через шляху з мінімальним затримкою потрібно, і затримка каналу залежить від використання (в такий спосіб, припущення (1) на початку цього розділу не діє), вартість використання шляху неспроможна просто бути оцінена як функція цього єдиного шляху. З іншого боку, трафік на канал може бути узятий до уваги. Уникати скупчення пакетів (і виникає внаслідок цього затримку) по дорозі, зазвичай необхідно посилати пакети, мають таку ж саму пару исходный-адресат через різні шляху; трафік з цією пари «розподіляється «до одного чи більше вузлів проміжної ланки як зображено в Малюнку 4.3. Методи маршрутизації, що використовують різні шляху одного адресата, називаються много-путевыми чи розгалуженим методами маршрутизації. Оскільки розгалужені методи маршрутизація є, зазвичай, дуже заплутаними, де вони буде розглядатися у цій главе.

[pic] Малюнок 4.3 Приклад буферизованной маршрутизации.

4.2 Проблема кротчайших шляхів всіх пар Этот розділ обговорює алгоритм Toueg [Tou80a] одночасного обчислення таблиці маршрутизації всім вузлів у мережі. Алгоритм обчислює кожної пари (u, v) вузлів довжину найкоротший шляху від u до v і зберігає перший канал такого шляху до u. Проблема обчислення найкоротшого шляху між будь-якими двома вузлами графа відома як проблема кротчайшего шляху всіх пар. Розподілений алгоритм Toueg з цією проблеми грунтується на централізованому алгоритмі Флойда-Уошалла [CLR90, Розділ 26.4]. Ми обговоримо алгоритм ФлойдаУошалла в Підрозділі 4.2.1, і потім алгоритм Toueg в Підрозділі 4.2.2. Короткий обговорення деяких інших алгоритмів для проблеми кротчайших шляхів всіх пар рухається у Підрозділі 4.2.3 .

4.2.1 Алгоритм Флойда-Уошала.

Нехай дано зважений граф G = (V, E), де вагу ребра uv дано wuv. Не обов’язково допускати що wuv= wvu, але скажімо, що граф зовсім позбавлений циклів із загальним негативним вагою. Вага шляху < uo, …, uk> визначається як [pic]. Дистанція від u до v, позначена d (u, v), найменший вагу будь-якого шляху від u до v ((якщо ні такого шляху). Проблема кротчайших шляхів всіх пар — обчислення d (u, v) для кожних u і v. Для обчислення всіх відстаней, алгоритм Флойда-Уошала використовує поняття S-путей; це шляху, де всі проміжні вершини належать до подмножеству P. S з V.

Определение 4.4. Нехай P. S — підмножина V. Шлях < uo …, uk> -S-путь для будь-якого і, 0 to x; num_recu := O; (* u повинен мати |Neighu| повідомлень *) while num_recu < |Neighu| do begin отримати < ys, w > чи < nys, w > повідомлення; num_recu := num_recu + 1 end; if Du[w] < (then (* бере участь у центр. обході*) begin if u (w then одержати окрайчик від Nbu[w]; forall x (Neighu do if < ys, w > було послано від x then послати < dtab, w, D>) до x;; forall v (V do (* локальний w-центр *) if Du[w] + D[v] < Du[v] then begin Du[v] := Du[w] + D[v] :

Nbu[v] := Nbu[w] end end;

Su := Su ({w} end end вD7&0?8biD;nGАаC[2]Ъ;, v4-Н-#Г!?$К#!"-9{[pic], і вибір і передбачає що d + [pic] (d (vj+1, vo).(.

Полный алгоритм також включає механізм з допомогою якого вузли можуть визначити закінчення обчислення.; порівняти з зауваженням про алгоритмі Netchange на початку частини 4.3.3. Механізм визначення завершення є варіацією алгоритму Дейкстры-Шолтена обговореного в 8.2.1. Алгоритм відрізняється від алгоритму Мерлина-Сигалла двома речами. По-перше, немає «батька «вузла u якому посилаються повідомлення на кшталт. Ця особливість алгоритму Мерлина і Сігалла гарантує що таблиці завжди не містять циклів, навіть протягом обчислень й за наявності топологічних змін. По-друге, обмін повідомленнями < mydist,.,. > не координується в раундах, але існує відстеження завершення, які впливають на складність не дуже добре. Алгоритм вимагатиме експоненціальне кількість повідомлень для обчислення шляхів до одного пункту призначення vo. Якщо вартості всіх каналів рівні (тобто., розглядається маршрутизація з мінімальним кількістю переходів) все кротчайшие шляху до vо обчислюються використовуючи O (N |E|) повідомлень (O (W) біт кожне), керуючись наступним результатом. Теорему 4.13 Алгоритм Чанди і Мизра обчислює таблиці маршрутизації з мінімальним кількістю кроків — із допомогою обмінів 0(N2) повідомленнями (N2W) біт на канал, і 0(N2|E|) повідомлень і 0(N2 |E| W) біт всего.

Преимущество алгоритму Чанди і Мизра над алгоритмом Мерлина і Сігалла в його простоті, його меншою просторової складності, та її меншою тимчасової сложности.

4.3 Алгоритм Netchange.

Алгоритм Таджибнаписа Netchange [Taj77] обчислює таблиці маршрутизації які задовольняють мері «мінімум кроків ». Алгоритм подібний до алгоритму Чанди-Мизра, але містить додаткову інформацію яка дозволяє таблицям лише частково перевычисляться після відмови чи відновлення каналу. Уявлення алгоритму щодо них дотримується Лампорта [Lam82]. Алгоритм грунтується наступних припущеннях. Nl. Вузли знають розмір мережі (N). N2. Канали задовольняють дисципліни FIFO. N3. Вузли повідомляють про відмовах і восстановлениях суміжних до них каналів. N4. Ціна шляху — кількість каналів їсти дорогою. Алгоритм може керувати відмовами і восстановлениями чи додаваннями каналів, але між іншим що вузол повідомляє коли суміжний з нею канал відмовляє чи відновлюється. Відмова та своєчасне відновлення вузлів не розглядається: насправді відмова вузла можна розглядатися його сусідами як відмова поєднує каналу. Алгоритм містить у кожному вузлі u таблицю Nbu [v], що дає кожному за пункт призначення v сусіда u через якого u пересилає пакети для v. Вимоги алгоритмів следующие:

Rl. Якщо топологія мережі залишається постійної після кінцевого числа топологічних змін, тоді алгоритм завершується після кінцевого числа кроків. R2. Коли алгоритм завершує своєї роботи таблиці Nbu[v] задовольняють якщо v = u то Nbu[v] = local; якщо шлях з u в v (u існує то Nbu[v] = w, де w перший сусід u в кротчайшем шляхи виходу з u в v, якщо ні шляхи виходу з u в v тоді Nbu[v] = udef.

4.3.1 Опис алгоритма Алгоритм Таджибнаписа Netchange дано як алгоритми 4.8 і 4.9. Кроки алгоритму будуть спочатку пояснити неформально, і потім правильність алгоритму буде доведено формально. Заради ясності моделювання топологічних змін спрощено проти [Lam82], приймемо, що повідомлення про зміну обробляється одночасно двома вузлами задіяними змінами. Це позначений в Підрозділі 4.3.3, як асинхронна обробка. Вибір сусіда через якого пакети для v будуть посилатися грунтується оцінці відстані від кожної вузла до v. Предпочитаемый сусід завжди сусід з мінімальної оцінкою відстані. Вузол u містить оцінку d (u, v) в Du[v] і оцінки d (w, v) в ndisu[w, v] кожному за сусіда u. Оцінка Du[v] обчислюється з оцінок ndisu[w, v], з оцінкою ndisu[w, v] отримані у вигляді комунікацій з новими сусідами. Обчислення оцінок Du[v] відбувається так. Якщо u = v тоді d (u, v) = 0 в такий спосіб Du[v] стає 0 у разі. Якщо u (v, кротчайший шлях від u в v (якщо цей шлях існує) складається з каналу з u до сусід, приєднаного до щонайкоротшого шляхи виходу з сусід до v, і отже d (u, v) = 1 + min d (w, v). w (Neigh u Виходячи з цього рівності, вузол u (v оцінює d (u, v) застосуванням цієї формули до оцінним значенням d (w, v), знайденим в таблицях ndisu[w, v]. Оскільки всього N вузлів, шлях із мінімальним кількістю кроків має довжину не більш як N—1. Вузол може підозрювати що така шлях немає якщо оцінене відстань одно N чи більше; значення N використовується з цією цели.

var Neighu: безліч вузлів; (* Сусіди u *).

Du: масив 0. N; (* Du[v] - оцінки d (u, v) *).

Nbu: масив вузлів; (* Nbu[v]- кращий сусід для v *) ndisu: масив 0. N; (*ndisu[w, v] - оцінки d (w. v) *).

Инициализация: begin forall w (Neighu, v (V do ndisu[w, v] := N, forall v (V do begin Du[v] := N ;

Nbu[v] := udef end ;

Du[u]: = 0; Nbu[u] := local; forall w (Neighu do послати < mydist, u, 0> до w end.

процедура Recompute (v): begin if v = u then begin Du[v]: = 0; Nbu[v] := local end else begin (* оцінка відстані до v *) d := 1 + min{ ndisu[w, v]: w (Neighu}; if d < N then begin Du[v] := d ;

Nbu[v] := w with 1 + ndisu[w, v] = d end else begin Du[v] := N; Nbu[v] := udef end end; if Du[v] змінилася then forall x (Neighu do послати < mydist, v, Du[v]> до x end Алгоритм 4.8 Алгоритм Netchange (частина I, для вузла u).

Алгоритм вимагає щоб вузол мав оцінки відстаней до v своїх сусідів. Їх вони мають від результатів цих вузлів відправивши їм повідомлення наступним чином. Якщо вузол u обчислює значення d як оцінку свого відстані до v (Du[v] = d), ця інформація посилається всім сусідам у міжнародному сполученні < mydist, v, d>. На отримання повідомлення від сусіда w, u означивает ndisu[w, v] значенням d. Через війну зміни ndisu[w, v] оцінка u відстані d (u, v) може змінитися, й отже оцінка перевычисляется щоразу за зміни таблиці ndisu. Якщо оцінку на насправді змінилася то, на d «наприклад, відбувається з'єднання з новими сусідами використовуючи повідомлення .

Алгоритм реагує на відмови і відновлення каналів зміною локальних таблиць, і посилаючи повідомлення якщо оцінка відстані змінилася. Ми припустимо що повідомлення яке вузли одержують про падінні чи підйомі каналу (припущення N3) представлено як повідомлень < fail,. > і. Канал між вузлами u1 і u2 змодельований двома чергами, Q u1 u2 для повідомлень від u1 до u1 і Q u2 u1 для повідомлень з u2 в u1. Коли канал відмовляє ці черги видаляються з конфігурації (фактично викликається втрата всіх повідомлень в обох чергах) і вузли обох кінцях каналу отримують повідомлення < fail,. >. Якщо канал між u1 і u1 відмовляє, u1 отримує повідомлення < fail, u2 > і u2 отримує повідомлення < fail, u1 >. Коли канал відновлюється (чи додається новий канал у мережі) дві порожні черги додаються в конфігурацію і двоє вузли з'єднуються через канал одержуючи повідомлення < repair,. >. Якщо канал між u1 і u2 піднявся u1 отримує повідомлення< repair, u2 > і u2 отримує повідомлення < repair, u1 > .

Обработка повідомлення від сусіда w:

{ через чергу Qwv} begin одержати окрайчик від w; ndisu[w, v] := d; Recompute (v) end.

Произошел відмова каналу uw: begin отримати < fail, w>; Neighu := Neighu {w}, forall v (V do Recompute (v) end Сталося відновлення uw: begin отримати < repair, w>, Neighu := Neighu ({w}; forall v (V do begin ndisu[w, v] := N; послати < mydist, v, Du{[v]> to w end end Алгоритм 4.9 АЛГОРИТМ NETCHANGE (частина 2, для вузла и).

Реакция алгоритму на відмови і відновлення виглядає так. Коли канал між u і w відмовляє, w видаляється з Neighu і навпаки. Оцінка відстані перевычисляется кожному за пункту призначення і, звісно, розсилається поважним усім існуючим сусідам коли вона змінилося. Це випадок, якщо найкращий маршрут був через який відмовив канал немає і іншого сусіда w «з ndisu[w », v]= ndisu[w, v]. Коли канал восстановлен (или додано новий канал) то w додається в Neighu, але u має тепер неоцінене відстань d (w, v) (і навпаки). Новий сусід w негайно інформує щодо Du[v] всім пунктів призначення v (посилаючи повідомлення). До того часу поки u отримує подібне повідомлення від w, u використовує N як оцінку для d (w, v), тобто., він встановлює ndisu[w, v] в N.

P (u, w, V)(up (u, w) (w (Neighu (1).

(up (u, w) (Qwu містить повідомлення (останнє таке повідомлення задовольнять d = Du[v] (2).

(up (u, w) (Qwu зовсім позбавлений повідомлення (ndisu[w, v] =Dw [v] (3).

L (u, v) (u = v ((Du[v] = 0 (Nbu[v] = local) (4).

((u (v)((w (Neighu: ndisu[w, v] < N — 1)(.

(Du[v] = 1 + min ndisu[w, v] = 1 + ndisu[Nbu[v], v]).

(5) w (Neigh u.

((u (v ((w (Neighu: ndisu[w, v](N—1) (.

(Du[v] = N (Nbu[v] = udef).

(6).

ХPфэЭ0х~йхых‹у9хс «|Др· Pп?єн‰юм?уък5з?йъЫcкЦ?мыХЁнeЪZмИвўй_оРисунок 4.10 Інваріанти P (u, w, v) і L (u, v).

Инварианты алгоритму Netchange. Ми доведемо що твердження є інваріантами; затвердження дано на Малюнку 4.10. Твердження P (u, w, v) констатує що й u закінчив обробку повідомлення від w то оцінка u відстані d (w, v) еквівалентна оцінці w відстані d (w, v). Нехай предикат up (u, w) щирий тоді й тільки тоді коли (двунаправленный) канал між u і w є і діє. Твердження L (u, v) констатує що оцінка u відстані d (u, v) завжди було узгоджено з локальними даними u, і Nbu[v] в такий спосіб зазначений. Виконання алгоритму закінчується коли немає більше повідомлень у кожному каналі. Ці конфігурації не терминальны для всієї системи оскільки обчислення у системі можуть продовжиться пізніше, розпочавшись відмовою чи відновленням каналу (куди алгоритм повинен зреагувати). Ми пошлемо повідомлення конфигурационной стабільності, і визначимо предикат stable як stable = (u, w: up (u, w) (Qwu зовсім позбавлений повідомлень .

Это передбачає що перемінні Neighu коректно відбивають існуючі робочі комунікаційні канали, тобто., що (1) існує спочатку. Для докази інваріантності тверджень ми повинні розглянути три типу переходів. (1) Одержання повідомлення. Перше виконання результуючого кодового фрагмента, як сьогодні, виконується автоматично і розглядається окремим переходом. Зверніть увагу що в переході приймається повідомлення може бути багато повідомлень вирушає (2) Відмова каналу та обробка повідомлення < fail.. > вузлами обох кінцях каналу. (3) Відновлення каналу та обробка повідомлення двома з'єднаними узлами.

Лемма 4.14 Всім uo, wo, і vo, P (uo, wo, vo) -- инвариант.

Доказательство. Спочатку, т.e., після виконання инициализационной процедури кожним вузлом, (1) міститься припущенням. Якщо спочатку ми маємо (up (uo, wo), (2) і (3) тривіально містяться. Якщо спочатку ми маємо up (uo, wo), тоді ndisuo[wo, vo] = N. Якщо wo = vo то Dwo[wo] = 0 але повідомлення < mydist, vo, 0> в Qw0u0, в такий спосіб (2) і (3) істинними. Якщо wo (vo то Dw0[vo]=N немає і повідомлень у черзі, що також свідчить що (2) і (3) утримуватися. Ми розглянемо три типу констатированных переходів згаданих выше.

Тип (1). Припустимо що u отримує повідомлення від w. Отже немає топологічних змін немає змін — у безлічі Neigh, отже (1) залишається істинно. Якщо v (vo це повідомлення не змінює у P (uo, wo, vo). Якщо v = vo, u =uo, і w=wo значення ndisu,[wo, vo] може зміниться. Проте, якщо повідомлення < mydist, vo, .> залишається в каналі значення цієї повідомлення продовжує задовольняти (2), оскільки (2) цілості те й (3) ще й тому що посилка помилкова. Якщо отримане повідомлення було лише останнім цього в каналі то d = Dw0[vo] по (2), яке передбачає що висновок (3) стає істинним і (3) в схоронності. Відправка (2) стає удаваної, в такий спосіб (2) в схоронності. Якщо v = vo, u = wo (і uo сусід u) висновок (2) чи (3) то, можливо брехливо якщо значення Dw0[vo] змінилося слідство виконання Recompute (v) в wo. І тут, проте, повідомлення < mydist, vo,. > з новим значенням посилається до uo, яке передбачає що посилка (3) порушена, і висновок (2) стає істинним, в такий спосіб (2) і (3) збережені. Це відбувається у разі коли повідомлення < mydist, vo,. > додається в Qw0u0, і це задовольняє d = Dw0[vo]. Якщо v = vo і u (uo, wo щось змінює в P (uo, wo, vo). Тип (2). Припустимо що канал uw відмовив. Якщо u = uo і w = wo цю відмову порушив посилку (2) і (3) в такий спосіб цих правил збережені. (1) в безпеки оскільки wo пішов з Neighu0 і навпаки. Щось станеться якщо u = wo і w = uo. Якщо u = wo але w (uo висновок (2) чи (3) може бути порушено оскільки значення Dw0 [vo] змінилося. І тут пересилання повідомлення < mydist, vo,. > вузлом wo знову порушить посилку (3) і зробить висновок (2) істинним, отже (2) і (3) безпечно. В усіх життєвих інших випадках немає змін — у P (uo, wo, vo). Тип (3). Припустимо додавання каналу uw. Якщо u = uo і w = wo то up (vo, wo) істинно, але додаванням wo в Neighu0 (і навпаки) це защищает (1). Відправка < mydist, vo, Dw0 [vo]> вузлом wo робить висновок (2) істинним і посилку (3) удаваної, в такий спосіб P (uo, wo, vo) обезопасен. У інших випадках немає змін — у P (uo, wo, vo). (.

Лема 4.15 До кожного uq і vo, L (uo, vo) -инвариант.

Доказательство. Спочатку Du0[uo] = 0 і Nbu[uo] = local. Для vo (uo, спочатку ndisu[w, vo] = N всім w (Neighu, і Du0[vo] = N і Nbu0[vo] = udef. Тип (1). Поклавши що u отримав повідомлення < mydist, v, d> від w. Якщо u (uo чи v (vo немає змінних згаданих змінах L (uo, vo). Якщо u = uo і v = vo значення ndisu[w, vo] змінюється, але Du0 [vo] і Nbu0[vo] перевычисляется точно оскільки задовольняється L (vo, vo). Тип (2). Поклавши що канал uw відмовив. Якщо u = uo чи w = uo то Neighu0 змінився, але потім знову Du0[vo] і Nbu0[vo] перевычисляются точно оскільки задовольняється L (uo, vo). Тип (3). Поклавши що додано канал uw. Якщо u = uo то изменилсяNeighu0 додаванням w, але оскільки u встановлює ndisu0[w, vo] в N це зберігає L (uo, vo). 4.3.2 Коректність алгоритму Netchange.

Должны бути доведені два вимоги корректности.

Теорема 4.16 Коли досягнуто стабільна конфігурація, таблиці Nbu[v] задовольняють: (1) якщо u = v то Nbu[v] = local; (2) якщо шлях від u до v (u існує то Nbu[v] = w, де w перший сусід u на найкоротшому шляху від u до v; (3) якщо ні шлях від u до v немає то Nbu[v] = udef.

Доказательство. Коли алгоритм перестає працювати, предикат stable додається до P (u, w, v) всім u, v, і w, і це передбачає що з всіх u, v, і w up (u, w) (ndisu[w, v] = Dw[v].

(4.2).

Применив також L (u, v) всім u і v ми получим.

(0 якщо u (v Du [v] = (1+ min Dw[v] якщо u (v ((w (Neighu: Dw[v] < N -1.

(N w (Neigh u якщо u (v ((w (Neighu: Dw[v](N -1.

(4.3).

которого достатньо докази що Du[v] = d (u, v) якщо u і v в деякому зв’язковому компоненті мережі, і Du[v] = N якщо u і v у різних зв’язкових компонентах. По-перше покажемо індукцією по d{u, v) що й u і v у певному зв’язковому компоненті то Du[v](d (u, v). Випадок d (u, v) = 0: передбачає u = v і отже Du[v] = 0. Випадок d (u, v) = k +1: це передбачає що є вузол w (Neighu з d (w, v) = k. По індукції Du[v] (k, які з (4.3) передбачає що Du[v] (k + 1. Тепер покажемо индуктивно по Du[v] що й Du[v] < N що існує шлях між u і v і d (u, v) (Du[v]. Випадок Du[v] = 0: Формула (4.3) передбачає що Du[v] = 0 лише u = v, що дозволяє порожній шлях між u і v, і d (u, v) = 0. Випадок Du[v] = k +1 < N: Формула (4.3) передбачає що є вузол w (Neighu з Dw[v] = k. По індукції існує шлях між w і v і d (w, v) (k, яка передбачає існування шляху між u і v і d (u, v) < k+ 1. Отже що й u і v у певній зв’язковому компоненті то Du[v] = d (u, v), інакше Du[v] = N. Це, Формула (4.2), і (u, v: L (u, v) і доводить теорему про Nbu[v]. [].

Докажем що стабільна ситуація у кінцевому підсумку досягається якщо топологічні зміни припиняються, норм-функция щодо stable визначено. Визначимо, для конфігурації алгоритму (, ti = (число повідомлень) +.

(число упорядкованих пар u, v таких що Du[v] = і) і функцію f f (() = (to, t1,…, tN).

f (() кортеж з (N + l) натуральних чисел, у певній лексиграфическом порядку (означеному (l). нагадаємо що ((, (l) хорошо-обоснованное безліч (Вправа 2.5).

Лемма 4.17 Обробка повідомлення < mydist,.,. > зменшує f.

Доказательство. Нехай вузол u з Du[v] = d1 отримав повідомлення < mydist, v, d2>, і після перевычислил нового значення Du[v] - d. Алгоритм передбачає що d < di + 1. Випадок d < d1: Нехай d = d1 + 1 яка передбачає що td2 зменшилося на 1 (і td1 отже), і лише td з d > d1 збільшилося. Це передбачає що значення f зменшилося. Випадок d = d1: Не нове повідомлення < mydist, ., .> надіслане u, впливає лише з f отже td2 зменшилося на 1, т.а. значення f зменшилося. Випадок d > d1: Нехай td1 зменшилося на 1 (і td2 отже), і лише td з d > d1 збільшилося. Це передбачає що значення f зменшилося. [].

Теорема 4.18 Якщо топологія мережі залишається незмінною після кінцевого числа топологічних змін, то алгоритм досягне стабільної конфігурації за кінцеве число шагов.

Доказательство. Якщо мережна топологія залишається постійної лише обробляючи повідомлення які мають місце, і з попередньої лемме, значення f зменшується з кожним таким переходом. Це випливає з хорошою обгрунтованості області f у якій може лише кінцеве число таких переходів; отже алгоритм сягає стабільної конфігурації після кінцевого числа кроків. [].

4.3.3 Обговорення алгоритму Формальні результати правильності алгоритму, гарантують відповідність для виправлення таблиць за кінцеве час після останнього топологічного зміни, трохи зле показують фактичне поведінка алгоритму. Предикат stablе то, можливо хибним практично довгий час (саме, якщо топологічні зміни часті) і коли stablе хибна, ніщо невідомо про таблиці маршрутизації. Вони можуть утримувати цикли і навіть давати помилкову інформацію щодо досяжності вузла призначення. Алгоритм тому може лише застосовується, де топологічні зміни настільки рідкісні, що час збіжності алгоритму є малим проти середнім часом між топологічних змін. Тим паче, оскільки stablе — глобальне властивість, і стійкі конфігурації алгоритму нерозрізнимі від нестійких для вузлів. Це означає, що вузол будь-коли знає, відбивають чи таблиці маршрутизації правильно топологію мережі, не може відстрочити відправлення пакетів даних, поки стійка конфігурація не достигнута.

Асинхронная обробка повідомлень. Було цієї маленької частини припустили що повідомлення про топологічних змінах обробляються автоматично разом із именением у єдиній транзакції. Обробка відбувається обох сторони віддаленого чи доданого канал одночасно. Лампорт [Lam82] виконав аналіз дрібних деталей і врахував затримки у фортепіанній обробці цих повідомлень. Комунікаційний канал від w до u змодельований об'єднанням трьох черг. (1) OQwu, вихідна чергу w, (2) TQwu, чергу повідомлень (і пакетів даних) передана (3) IQwu, вхідні чергу u. За нормального функціонуванні каналу, w посилає повідомлення до u додаванням їх у OQwu, повідомлення рухаються від OQwu до TQwu і зажадав від TQwu до IQwu, і u отримує видаляючи з IQwu. Коли канал відмовляє сполучення TQwu викидаються та шляхів сполучення в OQwu відповідно викидаються раніше ніж додалися до TQwu. Повідомлення < fail, w> стає у кінець IQwu, і коли нормальне функціонування відновилася повідомлення також стає у кінець IQwu. предикати P (u, w, v) приймають злегка складнішу форму але алгоритм залишається хоча б самый.

Маршрутизация по кротчайшему шляху. Можливо означити вагу кожного каналу та модифікувати алгоритм те щоб обраховувати найкоротшого шляху замість шляху з мінімальним кількістю кроків. Процедура Recompute алгоритму Netchange використовувати вагу каналу uw в обчисленні оцінки довжини найкоротшого шляху через w якщо константу 1 замінити на wuw. Константа N в алгоритмі повинна бути замінена верхньої кордоном діаметра мережі. Досить просто показати що коли і модифікований алгоритм досягне стабільної конфігурації таблиці маршрутизації будуть коректні й утримувати свій оптимальним шляхом (все цикли у мережі повинен мати позитивний вагу). Доказ що алгоритм справді досягає такої стану потребує більше складної нормфункции. Навіть можливо розширити алгоритм до роботи з изменяющимися вагами каналів; реакція вузла u зміну ваги каналу — перевычисление Du[v] для v. Алгоритм було б практичним, проте, лише у ситуації коли середнє час змін вартостей каналів більше часу збіжності що ні реально. У цих ситуаціях повинна алгоритм повинен віддати перевагу гарантію свободи економіки від циклів у протягом збіжності, приміром алгоритм Мерлина-Сигалла. 4.4 Маршрутизація з Компактними Таблицями маршрутизации Обсужденные алгоритми маршрутизації вимагають що кожен вузол містив таблицю маршрутизації з окремої посиланням кожному за можливого пункту призначення. Коли пакет передається через мережу ці таблиці використовуються кожному вузлі шляху (виключаючи пункту призначення). У цій частині розглядаються деякі організації таблиць маршрутизації які збереження і пошук механізмів маршрутизації. Як можна ці таблиці маршрутизації може бути враховано розподіленими алгоритмами не розглядаються. Для простоти уявлення між іншим що мережа зв’язкова. Стратегію зменшення таблиці у кожному із трьох механізмів маршрутизації, обговорюваних щодо них, просто пояснити так. Якщо таблиці маршрутизації вузла зберігають виходить канал кожному за пункту призначення окремо, таблиця маршрутизації має довжину N; отже таблиці вимагають ((N) біт, байдуже як компактно виходить канал закодований для кожного пункту призначення. Тепер на перебудову таблиці: таблиця містить кожному за каналу вузла заслання розмовляючу які пункти призначення мали бути зацікавленими смаршрутизированны через цей канал; дивися Малюнок 4.11. Таблиця тепер має «довжину «deg для вузол з deg каналами; тепер компактність залежить від цього як компактно безліч пунктів призначення для кожного каналу то, можливо представлено. [pic] Малюнок 4.11 Зменшення розміру таблиці маршрутизації. 4.4.1 Схема розмітки дерев Перший метод компактній маршрутизації було запропоновано Санторо і Кхатибом [SK85]. Метод грунтується на позначці вузлів цілими від 0 до N— I, в такий спосіб щоб безліч пунктів призначення кожному за каналу було інтервалом. Нехай ZN позначає безліч {0, 1,…, N- 1}. У цій частині все арифметичні операції з модулю N, т.e., (N— 1) + 1(0.

Определение 4.19 Циклічний інтервал [a, b) в ZN — безліч цілих певне как.

({a, a +1,…, b -1} якщо a lv то lw < Iu.

Доказательство. По-перше, розглянемо випадок (uw (lv. Вузол w не син u оскільки у цьому випадку (uw = lw > lu > lv .Якщо uw гілка то також lw = (uw < lv < lu. Якщо w батько u то lw < lu виконується у разі. Удругих, розглянемо випадок коли (uw — найбільша мітка ребра в u, немає і мітки («(lv (тобто., lv — нижню межу нелінійного інтервалу). У цьому вся разі ребро до батька u не позначений 0, однак має мітку ku (оскільки 0(lv, і немає мітки («(lv). Мітка ku — найбільша мітка у разі; ребро до синові чи галузі вниз w «має (uw' = lw' < ku, і гілка до предком w «має (uw' = lw' < lu Отже w — батько u у разі, яка передбачає 1w < lu. [].

Следующие дві леми ставляться випадку коли lu < lv. Ми виведемо що кожен v (T[u] чи lv > ku, й у цьому разі ku < N діє так що ребро до батька u позначений ku. [pic] Малюнок 4.16 МАРШРУТИЗАЦІЯ ПАКЕТІВ ДЛЯ V У СХЕМОЮ РОЗМІТКИ ILS.

Лемма 4.29 Якщо lu ku. Як у попередньої лемме, w батько u, і тому v (T[u], lca (w, v)= lca (u, v). Але тепер 1w < lu, в такий спосіб fv (w)< fv (u). [].

Может бути показано кожен пакет сягає пункту призначення. Потік пакетів для v показаний на Малюнку 4.16. Нехай пакет для v сгенерирован в вузлі u. По Лемме 4.28, мітка вузла зменшується з кожним переходом, до тих пір поки, за кінцеве число кроків, пакет отримано вузлом w з 1w (lv. Кожен вузол якого пакет пересилається після w також має мітку (lv по лемме 4.29. За кінцеве число кроків пакет отримує v, що з кожним кроком fv зменшується чи пакет прибуває в v, по Лемме 4.30. Це завершує доказ Теореми 4.25. [].

Эффективность интервальной маршрутизації: загальний випадок. Теорему 4.25 каже що коректна ILS існує кожної мережі, але з передбачає нічого про ефективності шляхів вибраних схемою. Зрозуміло що ILS з її пошуком в глибину використовується підтвердження існування схеми кожної мережі, що де вони обов’язково кращі можливі схеми. На приклад, якщо схема з обходом завглибшки застосована до кільцю з N вузлів, існують вузли u і v з d (u, v) == 2, і схема використовує N — 2 переходів передачі пакета від u до v (Вправа 4.8). Існує ILS того ж кільця що яка пересилає кожен пакет через шлях із мінімальним кількістю кроків. (Теорему 4.34).

Определение 4.31 ILS оптимальна якщо вона передає всі пакети через оптимальні шляху. ILS товариська якщо вона передає пакет від однієї вузла до сусіди даного вузла за крок. ILS линейна якщо інтервал передачі у кожному ребрі линейный.

Мы називали ILS з мінімальним кількістю кроків (чи кротчайший шлях) якщо вона оптимальна щодо оцінки шляху мірою мінімальним кількістю кроків (чи найкоротшого шляху, відповідно). Просто показати що й схема задовольняє мері мінімального кількості кроків то схема товариська. Також легко перевірити що ILS линейна тоді й тільки тоді як у кожному вузлі u з lu (0 існує ребро із позначкою 0, й у вузлі із позначкою 0 існує ребро з міткою 0 чи 1. Це свідчить що з мереж загалом якість методів маршрутизації погане, але декому класів спеціальної мережевий топології якість схеми дуже непогане. Це метод процессорных мереж з регулярної структурою, що використовуються реалізації паралельних обчислень з віртуальної загальної поділюваної пам’яті. Невідомо точнісінько як, для довільній мережі, кращі схеми интервальной розмітки порівнюються з оптимальними алгоритмами маршрутизації. Деякі нижні кордону довжин шляхів, як розуміють оптимальні ILS який завжди існують, дали Ружечкой (Ruzecka).

[pic] Малюнок 4.1T Граф-паук із трьома ногами Теорема 4.32 [Ruz88] Існує мережу G така що з кожної вірної ILS в G існують вузли u і v такі що пакет від u до v доставлений тільки після по крайнього заходу 3/2DG переходов.

Известно як кращі схеми ILC з її пошуком завглибшки порівнюються зі спільними найкращими схемами ILS тих ж мереж. Вправа 4.7 дає дуже погану схему ILS з її пошуком завглибшки для мережі що справді допускає оптимальну ILS (по Теоремі 4.37), а може існувати найкраща схема ILS з її пошуком завглибшки на таку мережі. У ситуаціях коли більшість сполук відбуваються ммежду сусідами, будучи товариськими достатні вимоги до ILS. Так показати з Малюнка 4.15 схема ILS з її пошуком завглибшки необов’язково товариська; вузол 4 передає пакети для вузла 2 через вузол 1. Це значно для застосовності методу интервальной маршрутизації, яким розглядаються циклічні інтервали. Хоча деякі мережі припустимі, і навіть оптимальні, схеми з линейноинтервальной маршрутизації, не можливо маркувати кожну мережу лінійними інтервалами. Придатність схеми линейноинтервальной розмітки була досліджували Бэккером, Ван Лиуином, і Таном [BLT91].

[pic] Малюнок 4.18 Оптимальна ILS для кольца Теорема 4.33 Існує мережу на яку немає застосовувану схеми линейноинтервальной разметки Доказательство. Розглянемо граф-паук із трьома ногами довжини 2, як намальовано на Малюнку 4.17. Найменшою матка (0) також найбільшою мітка (6) зазначені два вузла, й, оскільки всього три ноги, существует (по крайнього заходу) одна нога яка містить жодного меншу ні велику мітку. Нехай x буде першим вузлом отцентра у цій нозі. Вузол x передає пакета адресовані до 0 і шість до центру, й єдине лінійний інтервал який містить і 0 і шість це повне безліч ZN. Отже, x також пересилає пакети для своїх сусідів через центр, й інші пакети будь-коли досягнуть своїх пунктів призначення. [].

Бэккер, Ван Лиуин і Taн повністю описали клас мереж топології яких допускають лінійні схеми ILS кротчайших колій та представили результати містять класи графічних топологий що припускають адаптацію і лінійні схеми ILS з мінімальним кількістю кроків линейны.

Оптимальность интервальной маршрутизації: спеціальні топології. Було показано що є оптимальні схеми интервальной розмітки для деяких класів мереж мають регулярну структуру. Мережі таких структур використовуються, наприклад, у реалізації паралельних вычислений.

Теорема 4.34 [LT87] Існує схема ILS з мінімальним кількістю кроків для кільця з N узлов.

Доказательство. Мітки вузлів зазначені від 0 до N — І за годинниковий стрілці. Для вузла і канал по годинниковий стрілці зазначений міткою і +1 і канал проти годинниковий стрілці зазначений (і+ [N/2]) mod N, див Малюнок 4.18. З цього схемою розмітки вузол з міткою і посилає пакети для вузлів i+1, …, (і+ [N/2]) -1 через канал по годинниковий стрілкою і пакети для вузлів (і + [N/2]),. .. , і —1 через канал проти годинниковий стрілці, що оптимальным.

[].

[pic].

Рисунок 4.19 Оптимальна ILS для сітки n x n.

Так як ILS iв Доказі Теореми 4.34 оптимальна, вона товариська; вона линейна.

Теорема 4.35 [LT87] Існує схема ILS з мінімальним кількістю кроків для сітки n x n .

Доказательство. Мітки вузлів зазначені по рядах в зростаючу котячу порядку, тобто., i-ый вузол в j-ом ряду помечен (j — l) n + (і - 1). Канал вгору цього вузла помечен 0, канал наліво цього вузла помечен (j — l) n, канал направо помечен (J — l) n + і, і канал вниз помечен j n, див Малюнок 4.19. Тепер легко перевірити що коли і вузол u передає пакет до вузлу v, Випадок 1: якщо v у низці більшому ніж u, тоді u посилає пакет через свій канал нагору; Випадок 2: якщо v у низці меншому ніж u, тоді u посилає пакет через свій канал вниз; Випадок 3: якщо v у тому ряду як і u але лівіше, u посилає пакет через свій лівий канал; і Випадок 4: якщо v у тому ряду як і u але правіше, то u посилає пакет через свій канал направо. В усіх випадках, u посилає пакет до вузлу найближчому до v, як і передбачає що обраний шлях оптимальный.

[].

Так як ILS в Доказі Теореми 4.35 оптимальна, він товариська; то схема також линейна.

Теорема 4.36 Існує лінійна схема ILS з мінімальним кількістю кроків для гиперкуба.

Теорема 4.37 [FJ88] Існує схема ILS кротчайших шляхів для непланарных мереж з довільними вагами каналов.

Интервальная маршрутизація має й певні привабливі переваги, як слідства, над механізмами класичної маршрутизації заснованими на зберіганні привілейованих каналів окремо кожному за пункту призначення. (1) Мала просторова складність. Таблиці маршрутизації можуть зберігається в 0(deg • log N) біт для вузла ступенем deg. Ефективність обчислень таблиць маршрутизації. Таблиці маршрутизації для схем ILC з пошуком завглибшки може бути враховано використовуючи розподілений обхід мережі завглибшки, котрі можуть використовувати O (E) повідомлень під час 0(N); див Частина 6.4. Оптимальність. Метод маршрутизації здатний вибирати оптимальний співати у деяких класах мереж, див. Теореми з 4.34 до 4.37.

Эти переваги роблять метод застосовним для процессорных мереж з регулярної топологією. Транспьютеры часто йдуть на конструювання таких топологий, маршрутизационные чіпи Инмос 104 (дивися Розділ 1.1.5) розроблено від використання интервальной маршрутизації. На жаль, для мереж із довільною топологією, коли методи використовують схеми ILS з її пошуком завглибшки присутні кілька минусов:

(1) Погана живучість. Не можлива легка адаптація схеми ILS з її пошуком в глибину при додаванні чи видаленні вузла у мережі. Дерево ILS неспроможна довго задовольняти вимозі яким гілка є тільки між вузлом і його предком. Через війну мінімальне зміна топології мережі може зажадати повного перевычисления таблиць маршрутизації, включаючи обчислення нових адрес (міток) кожному за вузла. Не оптимальність. Схема ILS пошуку глибину може спрямовувати пакет через шляху довжиною ((N), навіть у разі мереж малим діаметром; див Вправа 4.7.

(* A пакет з адресою d було отримано чи створено вузлом u *) if d = lu then обробити пакет локально [pic] else begin (і := сама ддлинная матка каналу т. что (і (d; послати пакет через канал помеченый (і end Алгоритм 4.20 Префиксная передача (для вузла u).

4.4.3 Префиксная маршрутизация Рассмотрев недоліки интервальной маршрутизації, Бэккер, Ван Лиуин, і Taн [BLT93] розробили метод маршрутизації у якому таблиці може бути враховано використовуючи довільне дерево охоплення. Використання необмеженого дерева охоплення може збільшити як живучість і ефективність. Якщо a канал додано між двома існуючими вузлами то дерево охоплення залишається деревом охоплення, а новий канал буде гілкою. Якщо новий вузол додається разом із деяким кількістю каналів що з'єднують його з вузлами то дерево охоплення розширюється використовуючи одне із каналів і розпочнеться новий вузол. Інші канали стають гілками. Оптимальність можна поліпшити вибором дерева охоплення малої глибини (як і лемме 4.22.).

Как мітки вузлів і каналів в префиксной маршрутизації краще використовувати рядки ніж цілі числа, використовувані в интервальной маршрутизації. Нехай (- алфавіт; згодом мітка буде рядком над (, (позначає порожню рядок, і (* безліч рядків над (. Для відбору каналу передачі пакета, алгоритм розглядає все канали що є префіксами адреси пункту призначення. Вибирається найдовшу з цих міток, і обраний канал використовується передачі пакета. На приклад, припустимо що вузол має канали з знаками aabb, abba, aab, aabc, і aa, і повинен переслати пакет з адресою aabbc. Мітки каналів aabb, aab, і aa є префіксами aabbc, і найдовша з цих міток aabb, отже вузол передасть пакет через канал позначений aabb. Алгоритм передачі дано як Алгоритм 4.20. Ми пишемо (((для позначення що (префікс (.

Определение 4.38 Схема префиксной розмітки (над () для мережі G це: (1) позначення різними рядками з (* вузлів G; і До кожного вузла, означивание різними рядками каналів даного узла.

Алгоритм префиксной маршрутизація предпалагает що схема префиксной розмітки (PLS) дана, і перенаправляє пакети Алгоритмом 4.20.

Определение 4.39 Схема префиксной розмітки прийнятна коли всі пакети в кінцевому підсумку досягнуть своїх пунктів назначения.

Теорема 4.40 Для кожної зв’язковою мережі G існує прийнятна схема PLS. Доказ. Ми визначимо клас схем префиксной розмітки і доведемо, як й у Теоремі 4.25, що схеми у цьому класі прийнятні. Нехай T позначає довільне дерево охоплення в G.

Определение 4.41 Дерево Т схеми PLS для G це схема префиксной розмітки коли він виконуються такі правила. (1) Мітка кореня — (. (2) Якщо w син u то 1w розширює lu одним символом; тобто., якщо u1, …, uk син u в T то 1ui = lu (i де (1,. .. , (k — k різних символів з (. (3) Якщо uw гілка то (uw = lw (4) Якщо w син u то (uw = lw. Якщо w батько uто (uw= (якщо u немає галузі до корені: у разі, (uw = lw.

В дереві PLS кожен вузол виключаючи корінь має канал позначений (, і це канал з'єднує вузол з предком (батьком вузла чи коренем дерева). Зауважимо що кожному за каналу uw, (uw = lw чи (uw = (. Всім u і v, v предок у тоді й тільки тоді коли lv < lu. Потрібно показати що пакет будь-коли «вклинюється «в вузол відмінний від його пункту призначення, який, кожен вузол відмінний від пункт призначення може переспрямувати пакет використовуючи Алгоритм 4.20.

Лемма 4.42 Всім узлоа u і vтаких що u (v існує канал в u позначений префіксом lv.

Доказательство. Якщо u не корінь T то u має канал позначений (, який є префіксом lv. Якщо u корінь тоді v перестав бути коренем, і v (T[u]. Якщо w син u такий що v (T[w] то побудові auw (lv. [].

Следующие три леми причетні до ситуації коли вузол u передає пакет для вузла v до вузлу w (сусідові u) використовуючи Алгоритм 4.20.

Лемма 4.43 Якщо u (T[v] то w предок u.

Доказательство. Якщо auv == (то w предок u як уже згадувалося. Якщо auw = lw те, як auw (lv, також lw (lv Це передбачає що w предок v, і також u. ].

Лемма 4.44 Якщо u предок v то w предок v, ближчі один до v ніж u. Доказ. Нехай w «буде сином u таким що v (T[w «] тоді auw' =lw пустопорожній префікс lv. Оскільки auw найдовший префікс (в u) lv, то auw'.

Лемма 4.45 Якщо u (T[v], то w предок v чи dT (w, v) < dT (u, v).

Доказательство. Якщо auw =(то w батько u чи корінь; батько u ближчі один до v ніж u оскільки u (T[v], і корінь — предок v. Якщо auw = lw то, оскільки auw < lv, w — предок v. [].

Пусть depth означатиме глибину T, тобто., число переходів у самому довгому простому шляху від кореня до листям. Можливо показано кожен пакет з пункт призначення v прибуде свій пункт призначення за межі не більш як 2 — depth переходів. Якщо пакет створений предка v то v достигнется лише depth переходів по лемме 4.44. Якщо пакет створений поддереве T[v] тоді предок v достигнется за межі не більш як depth переходів по лемме 4.43, після яких v достигнется за інші depth переходів за попереднім зауваженню. (Через те шлях містить лише предків джерела у разі, його довжина обмежена також depth .) У інших випадках предок v достигнется не більше depth переходів по лемме 4.45, після якого v достигнется не більше інших depth переходів. (Отже, у тому разі довжина шляху обмежена 2 depth.) Це завершує Доказ Теореми 4.40 [].

Следствие 4.46 Для кожної мережі G з діаметром DG (обмірюваним в переходах) існує схема префиксной розмітки яка доставляє все пакети за межі не більш як 2DG переходов.

Доказательство. Скористаємося деревом PLS що гойдається дерева обраного в Лемме 4.22. [].

Мы включили обговорення схему розмітки дерев з грубим аналізом його просторових вимог. Як раніше, depth — глибина T, і нехай k буде максимальною кількістю синів дюбого вузла T. Тогдаe найдовша мітка складається з depth символів, і (мусить мати (по крайнього заходу) k символів, мітка може зберігатися в depth • log A біт. Таблиця маршрутизації a вузла з deg каналами хронится в 0(deg* depth * log k) біт. Кілька іншу схему префиксной розмітки балу запропонована Бэккером. [BLT93]. Його також характеризує клас топологий який допускає оптимальні схеми префиксной розмітки коли ваги зв’язків можуть змінюватися динамически.

4.5 Ієрархічна маршрутизація Шлях скорочення різних параметрів вартості методу маршрутизації - використання ієрархічного поділу сіті й методу асоціативної ієрархічної маршрутизації. Мета здебільшого у тому, щоб використовувати факт, що чимало зв’язку у мережах комп’ютерів є локальними, тобто, між вузлами на щодо малих відстанях друг від друга. Деякі з параметрів вартості методу маршрутизації залежить від розміру повної мережі скоріш ніж довжина обраного шляху, чому, ми тепер пояснимо (1) Довжина адрес. Оскільки кожен із N вузлів має відмінний з інших адресу, кожен адресу складається з по крайнього заходу log N біт; може знадобитися ба більше біт якщо є інформація включена в адреси, така як і префиксной маршрутизації. (2) Розмір таблиці маршрутизації. У методах маршрутизації описувані в розділах 4.2 і 4.3, таблиця містить посилання кожен вузол, отже має лінійний розмір. (3) Ціна табличного пошуку. Ціна простого табличного пошуку більше для більшої таблиці маршрутизації або заради великих адрес. Повне час табличного пошуку в обробці простого повідомлення також залежить від кількості інтерпретацій таблице.

В методі ієрархічної маршрутизації, мережу розділена на кластера, кожен кластер є чіткий підмножина вузлів. Якщо джерело і пункт призначення пакета щодо одного кластері, ціна передачі повідомлення низька, оскільки пакет маршрутизируется всередині кластера, кластер сприймається як невеличка ізольована мережу. Для методу описаної у розділі 4.5.1, у кожному кластері зафіксовано простий вузол (центр кластера) котрі можуть робити найскладніші маршрутизационные рішення необхідних пересилки пакетів до інших кластера. Отже, великі таблиці маршрутизації і маніпуляція довгими адресами потрібна лише в центрах. Кожен кластер сам може розділитися на подкластеры для багаторівневого розподілу вузлів. Не необхідно але бажано щоб кожна комутація між кластерами велася через центр; цей тип конструкції має тої недолік що все кластер стає уразливим відмовитися центру. Лентферт [LUST89] описав метод ієрархічної маршрутизації де всі вузли однаково можуть посилати повідомлення іншим кластерам. Також метод використовує лише маленькі таблиці, оскільки посилання кластери яких вузол не належить сприймається як простий вузол. Овербух [ABNLP90] використовує парадигму ієрархічної маршрутизації для конструювання класу схем маршрутизації що завжди балансують нині між ефективністю і просторовими требованиями.

4.5.1 Зменшення кількості рішень маршрутизации Все обговорені методи маршрутизації вимагають щоб рішення маршрутизації виготовлено кожному проміжному вузлі, яка передбачає що з маршруту довжиною l відбувається l інтерпретацій таблицям маршрутизації. Для стратегій мінімального кількості кроків l обмежена діаметром мережі, але загалом, стратегії маршрутизація без циклів (такі як интервальная маршрутизація) N—1 — найкраща кордон яка можна досягти. У розділі ми обговоримо метод з допомогою якого табличні пошуки може бути зменшено. Ми використовуватимемо таку лемму, яка передбачає існування підходящого розбивки мережі на зв’язкові кластера.

Лемма 4.47 До кожного p. s (N існує розбивка мережі на кластера C1,…, Cm такі що (1) кожен кластер — зв’язний подграф, (2) кожен кластер містить по крайнього заходу p. s вузлів, і (3) кожен кластер має радіус лише 2s.

Доказательство. Нехай D1, …, Dm буде максимальна колекція розділених зв’язкових подграфов таких кожен Di має радіус (p.s і має по крайнього заходу p. s вузлів. Кожен вузол не приналежний [pic] з'єднаний із одним з підмножин шляхом довжиною але лише p. s, інакше каламуть то, можливо додано як кластер. Сформируеи кластери Сi включенням кожного вузла не входить у [pic] в кластер найближчий щодо нього. Розширені кластери залишаються містять по крайнього заходу p. s вузлів кожен, вони зв’язковими і розділеними, і вони теж мають радіус лише 2s. [].

Метод маршрутизації означивает кольором кожен пакет, і є думка що використовується лише кілька квітів. Вузли тепер діють наступним чином. Залежно від кольору, пакет чи відправляє негайно по встановленому каналу (відповідному кольору) чи викликає складнішого рішенню. Це передбачає, що вузли мають різні протоколи для обробки пакетов.

Теорема 4.48 [LT86] For кожної мережі з N вузлів існує метод маршрутизації який вимагає лише 0([pic]) рішень маршрутизації кожному за пакета, і вдається до три цвета.

Доказательство. Припустимо що рішення (по Лемме 4.47) видані і зауважимо що кожен Ci містить вузол ci такий що d (v, ci) (2s кожному за v (Ci оскільки Ci має радіус лише 2s. Нехай T буде поддеревом мінімальної відстані з G з'єднуюче все ci. Оскільки T мінімально воно містить лише m листя, отже вона носить лише m- 2 вузлів розгалужень (вузли ступенем більшої ніж 2); див Вправа 4.9. Розглянемо вузла T як центри (ci), вузли розгалужень, і вузли пути.

Метод маршрутизації спочатку посилає пакет до центра ci кластера джерела (зелена фаза), потім через T до центра cj кластера пункту призначення (синя фаза), і, нарешті всередині Cj до пункту призначення (червона фаза). Зелена фаза використовує фіксованому дерево стоку для центру кожного кластера, і рішень маршрутизації. Вузли шляху до T мають два инцидентных каналу, і передають кожен синій пакет через канал ыв дереві які приймають пакет. Вузли розгалужень і центри в T враховували рішення маршрутизації. Для червоною фази використовується стратегія кротчайшего шляху всередині кластера, яка обмежує число рішень у цій фазі до 2s. Це обмежує число рішень маршрутизації до 2m — 2 + 2s, що ні більш ніж 2N/s — 2+ 2s. Вибір p. s ([pic] дає обмеження 0([pic]).

[].

Теорема 4.48 встановлює кордон загальної кількості рішень маршрутизації який буде необхідний обробці кожного пакета, але з потрібно було не будь-який практичний алгоритм з допомогою якого рішення приймаються. Метод маршрутизації використаний T то, можливо схемою маршрутизації дерев Санторо і Кхатиба, але як і можливо застосувати принцип кластеризації до T цим зменшивши число рішень маршрутизації навіть больше.

Теорема 4.49 [LT86) Для кожної мережі з N узелs і кожного позитивного цілого числа f (log N існує метод маршрутизації який вимагає не більш як O (f N1/f) рішень маршрутизації кожному за пакета, та «використовує 2f + 1 цветов.

Доказательство. Доказ подібно доведенню теореми 4.48, але замість вибору s ([pic] конструювання застосовується рекурсивно до дерева T (воно кластер розміру p. s). Дерево — зв’язкова мережу, сутнісно < 2m вузлів оскільки вузли шляху до T лише перенаправляют пакунки з одного фіксованого каналу на другий, і то, можливо ігнорований. Кластеризація повторюється f раз. Мережа G має N вузлів. Дерево містить після рівня кластеризації лише N/s центрів — і N/s вузлів розгалуження, тобто., N.(2/s) необхідних вузлів. Якщо дерево отримане після і рівнів кластеризації має mi необхідних вузлів, тоді дерево отримане після і +1 рівнів кластеризації має більш як mi/s центрів — і mi/s вузлів розгалужень, тобто., mi.(2/s) необхідних вузлів. Дерево отримане після f рівнів кластеризації має більш як mf = N.(2/s)f необхідних вузлів. Кожен рівень кластеризації збільшує кількість квітів на два, отже з f рівнями кластеризації використовуватимуться 2f+1 квітів. Не більш як 2mf рішень необхідно у найвищому рівні, і p. s рішень необхідно нв кожному рівні кластеризації в кластері пункту призначення, звідси кількість рішень маршрутизації 2mf + fs. Обираючи p. s (2N1/f одержимо mf = O (1), отже число рішень маршрутизації обмежена f p. s = O (f N1/f). [].

Использование приблизно logN квітів призводить до методу маршрутизації які прагнуть O (logN) рішень маршрутизации.

Упражнения до Частини 4 Розділ 4.1 Вправа 4.1 Припустимо що таблиці маршрутизації оновлюються після кожного топологічного зміни в такий спосіб щоб були без циклів під час оновлень. Чи дає це гарантію що пакети завжди обработаются коли мережу піддається нескінченного числа топологічних змін? Доведіть що алгоритм маршрутизації може гарантувати доставку пакетів при триваючих топологічних змінах. Розділ 4.2 Вправа 4.2 Студент запропонував знехтувати посилкою повідомлення < nys, w > з алгоритму 4.6; він аргументував це тим, що вузол знає свого сусіду й не син в Tw, якщо ні повідомлення прийнятого від прийняття цього сусіда. Чи можна модифікувати алгоритм в такий спосіб? Що статися складністю алгоритма?

Упражнение 4.3 Доведіть таке твердження є інваріантом алгоритму Чанди-Мизра для обчислення шляхів до vo (Алгоритм 4.7). (u, w: (Mwu (d (w, vo) (d ((u: d (u, vo) (Du[vo] Дайте приклад котрій число повідомлень експоненціально щодо числа каналів мережі. Розділ 4.3 Вправа 4.4 Дайте значення всіх змінних термінального стану алгоритму Netchange коли алгоритм застосовується до неї з такою топологией:

[pic] Коли термінальне стан досягнуто, додається канал між A і F. Яке повідомлення F пошле до A коли обробить повідомлення? Які повідомлення A пошле після отримання повідомлень від F?

Раздел 4.4.

Упражнение 4.5 Дайте приклад демонструє що Лема 4.22 немає силу для мереж з асиметричною вартістю каналов.

Упражнение 4.6 Чи є ILS що використовує в повному обсязі канали для маршрутизації? Вона застосовна? Вона оптимальна?

Упражнение 4.7 Дайте граф G і дерево T пошуку глибину графа G такі що G має N = n2 вузлів, діаметр G та глибина T — 0(n), і є вузли u і v такі що пакет від u до v доставляється за N — 1 переходів схемою ILS пошуку глибину. (Граф може бути обраний в такий спосіб що G непланарный, що передбачає (по Теоремі 4.37) що G справді має оптимальну ILS.).

Упражнение 4.8 Дайте схему ILS пошуку глибину для кільця з N вузлів. Знайдіть вузли u і v такі що d (u, v) = 2, і схема використовує N — 2 переходів передачі пакета від u до v. Розділ 4.5 Вправа 4.9 Доведіть що мінімальність дерева T в доказі Теореми 4.48 передбачає що має лише m листя. Доведіть що будь-який дерево з m листям має більш як m — 2 вузлів ветвления.

5 Беступиковая комутація пакетов Сообщения (пакети), що подорожують через мережу з комутацією пакетів повинні зберігатися у кожному вузлі до того, відправленням ось до чого вузлу по дорозі до адресата. Кожен вузол мережі цієї мети резервує певний буфер. Оскільки кількість буферного місця звісно у кожному вузлі, можуть виникнути ситуації, коли ніякої пакет може бути посланий оскільки все буферы наступного вузлі зайняті, як ілюструється Малюнком 5.1. Кожен з чотирьох вузлів має буфера B, кожен із яких може містити точно один пакет. Вузол p. s послав t B пакетів з адресатом v, і вузол v послав u B пакетів з адресатом p. s. Усі буфера в u і v тепер зайняті, і, отже, жодного з пакетів, збережених в t і u може бути посланий до адресата. Ситуації, коли групу пакетів будь-коли може сягнути їх адресата, оскільки вони всі чекають буфера, нині зайнятого іншим пакетом в групі, називаються як глухі куточки з проміжним накопиченням. (Інші типи глухого кута будуть коротко розглянуті наприкінці цього глави.) Важлива проблема в проектуванні мереж з пакетної комутацією — що робити з безвиходями з проміжним накопиченням. У цьому главі ми розберемо кілька методів, званих контролерами, які можуть використовуватися у тому, щоб уникнути можливості глухих кутів з проміжним накопиченням, вводячи обмеження те що, коли пакет то, можливо сгенерирован чи посланий. Методи запобігання глухих кутів з проміжним накопиченням знайдено в мережному рівні моделі OSI (Підрозділ 1.2.2). [pic] Figure 5.1 Приклад глухого кута з проміжним накопиченням. Два виду методів, які ми розглянемо, базуються на структурованих і неструктурированных буферних накопичувачах. Методи, використовують структуровані буферні нагромаджувачі (Розділ 5.2) ідентифікують для вузла і пакета специфічний буфер, що має бути використаний, якщо пакет генерується чи приймається. Якщо це буфер зайнятий, пакет може бути прийнято. У методах, використовують неструктурные буферні нагромаджувачі (Розділ 5.3) все буфера рівні; метод лише наказує, може ні пакет вступити, але з визначає, куди буфер повинен бути поміщений. Деякі нотації та засобами визначення видаються в Розділі 5.1, і завершити главу обговоренням подальших негараздів у Розділі 5.4.

5.1 Запровадження Як завжди, мережу моделюється графом G = (V, E); відстань між вузлами вимірюється в переходах. Кожна вершина має B буферів для тимчасового зберігання пакетів. Безліч всіх буферів позначається B, і символи b, з, bu, тощо., йдуть на позначення буферів. Обробка пакетів вузлами описується з допомогою трьох типів переміщень, що відбуватимуться у мережі. Генерація. Вершина u «створює «новий пакет p (насправді, приймаючи пакет від протоколу вищого рівня) і розміщає їх у порожньому буфері в u. Вершина u у разі називається джерелом пакета p. Просування. Пакет p просувається від вершини u у чиїйсь порожній буфер яка дотримується при його маршруті вершини w (маршрут визначається, використовуючи алгоритми маршрутизації). Через війну пересування буфер, колись зайнятий p стає порожнім. Хоча контролери, які ми визначимо, можуть заборонити пересування, передбачається, що мережа дозволяє рух, тобто., якщо контролер їх забороняє, воно застосовно. У системах з синхронної передачею повідомлень це переміщення, як видно, є одиночним переходом, як і Визначенні 2.7. У системах з асинхронної передачею повідомлень, переміщення — чимало перехід, як і Визначенні 2.6, але це може бути здійснене, наприклад, так. Вузол u неодноразово передає p до w, але з відкидає пакет з буфера, поки ніхто не почув підтвердження. Коли вузол w отримує пакет, він вирішує, прийме він пакет у одному з буферів. Якщо прийме, пакет міститься у буфер, і посилається підтвердження u, інакше пакет просто ігнорується. Звісно, можуть розроблені ефективніші протоколи до виконання таких переміщень, приміром, ті, де u не передає p, поки u невпевнений, що w прийме p. У кожному разі переміщення складається з кількох переходів типу згаданих у Визначенні 2.6, але у цілях цієї глави він буде розглядатися як одиночний крок. (3) Виведення. Пакет p, котрий обіймає буфер в вершині призначення, видаляється з буфера. Передбачається, що мережа дозволяє це пересування. Означимо через P безліч всіх шляхів, якими йдуть пакети. Це безліч визначається алгоритмами маршрутизації (див. Главу 4); як і робиться, нас не цікавить. Нехай k — кількість переходів у самому довгому шляху до P. Не передбачає, що k дорівнює діаметру G; k може перевершувати діаметр, якщо алгоритм маршрутизації не вибирає найкоротші шляху, і k може бути меншою діаметра, коли всі комунікації між вузлами відбуваються на обмежених дистанціях. Як очевидно з прикладу, даного на початку цього глави, глухі куточки виникатимуть, якщо дозволені довільні переміщення (виключаючи тривіальне обмеження, що u повинен мати порожній буфер, тоді як u генерується пакет і w повинна мати порожній буфер, якщо пакет просувається в w). Нині ми визначимо контролер як алгоритм, що дозволяє чи який забороняє різні руху на мережі відповідно до такими вимогами. (1) Виведення пакета (на місці його призначення) завжди дозволяється. (2) Генерація пакета в вершині, коли всі буферы порожні, завжди дозволяється. (3) Контролер використовує лише локальну інформацію, тобто., рішення, може чи пакет вступити в вершині u, залежить від інформації, відомої u чи котра міститься у пакеті. Друге вимога виключає тривіальне рішення запобігання заблокованих пакетів (див. Визначення 5.2), відмовляючись приймати будь-які пакети в мережі. Як у Главі 2, нехай Zu позначає безліч станів вершини u, і M — безліч можливих повідомлень (пакетів). Визначення 5.1 Контролер для мережі G = (V, E)-набор пар con={Genu, Foru}u (V, де Genu (Zu (M і Foru (Zu (M. Якщо cu (Zu — стан u, де всі буферы порожні, то тут для всіх p (M, (cu, p) (Genu. Контролер con дозволяє генерацію пакета p в вершині u, де стан u — cu, тоді й тільки тоді, коли (cu, p) (Genu, і дозволяє просування пакета p з u в w тоді й тільки тоді, коли (cw, p) (Forw. Формальне визначення контролера не включає умови виведення пакетів, тому що виведення пакета (у його місці призначення) завжди дозволено. Маневри мережі під керівництвом контролера con — це тільки ті пересування мережі, дозволені con. Пакет у мережі у тупику, коли він будь-коли може сягнути свого місця призначення у жодній послідовності передвижений.

Определение 5.2 Дана мережу G, контролер con для G, і конфігурація (G, пакет p (що виникає в конфігурації () у тупику, а то й існує послідовності пересувань під керівництвом con, застосовувану в (, в якої p виводиться. Конфігурація називається тупикової, якщо вони містять пакети в тупике.

Как свідчить приклад на Малюнку 5.1, тупикова ситуація існує для всіх контролерів. Завдання контролера у цьому, ніж дозволити мережі ввійти у таку конфігурацію. Початкова конфігурація мережі - конфігурація, як у мережі немає пакетов.

Определение 5.3 Контролер беступиковый, коли під проводом того контролера з початковій ситуації не досяжним жодна тупиковая.

5.2 Структуровані рішення Сьогодні ми обговоримо клас контролерів, які покладаються, звані, буферні графи, представлені Merlin і Schweitzer [MS80a]. Ідея цих буферних графів виходить з спостереженні, що (за відсутності контролера) глухий кут обумовлений ситуацією циклічного очікування. У ситуації циклічного очікування є послідовність p0, …, p. s -1 пакетів, таких, що з кожного і, pi хоче пересунутися в буфер, зайнятий pi+1 (індекси вважаються modulo p. s). Циклічне очікування избегается просуванням пакетів вздовж шляхів в ациклическом графі (буферном графі). У Підрозділі 5.2.1 буде визначено буферні графи і пов’язані з ними клас контролерів, і навіть представлені два простих прикладу буферних графів. У підрозділі 5.2.2 буде дана більш заплутана конструкція буферного графа, знову з цими двома примерами.

5.2.1 Буферні Графи Нехай дана мережу G з безліччю буферів B. Визначення 5.4 Буферний граф (для G, B) — спрямований граф BG на буферах мережі, тобто., BG = (B, [pic]), отже (1) BG — ациклический (зовсім позбавлений прямих циклів); (2) З bc ([pic] слід, що b і з — буферы одному й тому ж вершини, чи буферы двох вершин, з'єднаних каналом в G; і (3) кожному за шляху P (P існує шлях у BG, чий спосіб (див. ниже)-P.

Второе вимога визначає відображення шляхів в BG шляху до G; если.

b0, b1, …, bs — шлях у BG, то, якщо uвершина, у якій розташовується буфер bi, u0, u1,…, us — послідовність вершин таких, що кожного і < p. s або uiui+1 (E, або ui = ui+1. Шлях в G, який з цього послідовності пропусканием послідовних повторень, називається чином вихідного шляху b0, b1,…, bs в BG. Пакет може бути поміщений у довільно обраний буфер; повинен бути поміщений у буфер, із якої він ще довго можуть досягти свого місця призначення через шлях у BG, тобто., буфер, придатний пакета в відповідність до определением.

Определение 5.5 Нехай p — пакет в вершині u з пунктом призначення v. Буфер b в u адресований p, якщо є шлях у BG з b в буфер з в v, чий спосіб — шлях, якому p може вийти в G. Одне з таких шляхів в BG називатиметься гарантованим шляхом і nb (p, b) позначає наступний буфер на гарантованому шляху. До кожного знову згенерованого пакета p в u Існує підходящий буфер fb (p) в u. Тут fb і nb — абревіатура першого буфера (first buffer) і наступного буфера (next buffer). Зауважимо, що буфер nb (p, b) підходить для p. У всіх буферних графів, які у цьому розділі, nb (p, b) міститься у вершині, відмінній від тієї, де міститься b. Використання «внутрішніх «ребер в BG, тобто., ребер між двома буферами однієї вершини, обговоримо позже.

Контроллер буферного графа. Буферний граф BG можна використовувати для розробки беступикового контролера bgcBG, який записує у кожний пакет буфер nb (p, b) і/або стан вершини, де міститься p.

Определение 5.6 Контролер bgcBG визначається так. Генерація пакета p в u дозволяється тоді й тільки тоді, коли буфер fb (p) вільний. Сгенерированный пакет міститься у цей буфер. Просування пакета p з буфера в u в буфер в w (можливо u = w) дозволяється тоді й тільки тоді, коли nb (p, b) (в w) вільний. Якщо просування має місце, то пакет p міститься у nb (p, b).

Theorem 5.7 Контролер bgcBG — беступиковый контроллер.

Доказательство. Якщо в вершини все буферы порожні, генерація будь-якого пакета дозволяється, звідки слід, що bgcBG — контролер. До кожного b (B, визначимо клас буфера b як довжину найдовшого шляху в BG, який закінчується b. Зауважимо, що класи буферів шляху до BG (а точніше, на гарантованому шляху) суворо зростаючі, тобто., клас буфера nb (p, b) більше, ніж клас буфера b. Т.к. контролер дозволяє розміщення пакетів лише у підхожих буферах і т.к. відпочатку ні пакетів, кожна досяжною є конфігурація мережі під управлінням bgcBG містить пакети лише у підхожих буферах. З допомогою індукції «згори донизу «за класами буферів можна легко показати, що один буфер класу r зовсім позбавлений у такому конфігурації тупикових пакетів. Нехай R — найбільший клас буфера. Випадок r = R: Буфер b вершини u, має найбільший із можливих класів, немає вихідних ребер в BG. Отже, пакет, котрій b — підходящий буфер, має пункт призначення u і то, можливо виведений, коли він потрапляє у буфер b. Отже, жоден буфер класу R зовсім позбавлений тупикових пакетів. Випадок r < R: Висунемо гіпотезу, що з всіх r «таких, що r < r «(R, ні один буфер класу r «зовсім позбавлений тупиковий пакет (в досяжною конфигурации).

Пусть (- досяжною є конфігурація з пакетом p в буфері b класу r < R вершини u. Якщо u — місце призначення p, то p то, можливо виведений і, отже, не у тупику. Інакше, нехай nb (p, b) = з — наступний буфер на гарантованому шляху b, зауважимо, що клас r «буфера з перевершує r. По гіпотезі індукції, з зовсім позбавлений тупикових пакетів, отже існує конфігурація (, досяжною є з (, у якій з — порожній. З (p може просунутися в з, і з гіпотезі індукції, p не тупиковий в результуючої конфігурації («. Отже, p в конфігурації (над глухому куті. З докази видно, що й гарантований шлях містить «внутрішні «ребра буферного графа (ребра між двома буферами однієї вершини), то контролер повинен дозволяти додаткові пересування, з допомогою яких пакет міститься у буфер тієї ж вершини. Зазвичай гарантований шлях зовсім позбавлений таких ребер. Їх використовують лише збільшення ефективності просування, наприклад, у наступному ситуації. Пакет p розміщається в буфері b1 вершини u і буфер nb (p, b1) в вершині w зайнятий. Але існує вільний буфер b2 в u, який адресований p; більше, nb (p, b2) в вершині w вільний. У разі, пакет то, можливо переміщений через b2 і nb (p, b2). Зараз розглянемо два прикладу використання буферних графів, саме, схема адресата (destination scheme) і схема сколько-было-переходов (hops-sofar scheme).

Схема адресата. Схема адресата використовує N буферів у кожному вершині u, з буфером bu[v] кожному за можливого адресата v. Вершина v називається мета буфера bu[v]. З цією схеми потрібно припустити, що алгоритми маршрутизації просувають все пакети з адресатом v по поданого дереву Tv, орієнтованому у напрямку до v. (Насправді це припущення то, можливо ослаблене; досить, щоб канали, використовувані для підвищення на до v, формували ациклический подграф G.) Буферний граф окреслюється BGd = (B, [pic]), де bu[v1]bw[v2] ([pic]тогда і тільки тоді ми, коли v1 = v2 і uw — ребро в Tv1. Щоб показати, що BGd — ациклический, зауважимо, що немає ребер між буферами з різними цілями І що буферы, з однаковим метою v формують дерево, изоморфное Tv. Кожен шлях P (P до точки призначення v — шлях у Tv, і з побудові існує шлях у BGd з буферів із єдиною метою v, чий спосіб — P. Цей шлях вибирається в якості гарантованого. Це означає, що з пакета p з адресатом v, згенерованого в вершині u, fb (p) = bu[v], і, коли цей пакет повинен просунутися в w, то nb (p, b) = bw[v].

Определение 5.8 Контролер dest окреслюється bgcBG, з fb і nb певними як у минулому параграфе.

Theorem 5.9 Існує беступиковый контролер для мережі довільній топології, який використовує N буферів у кожному вершині та дозволяє проводити пакети через довільно обрані дерева стоку. Доказ. dest — беступиковый контролер, використовує таке кількість буферів. (.

Как відзначалося раніше, вимога маршрутизації по деревах стоку може бути ослаблене до вимоги те, що пакети з пунктами призначення посилаються через канали, які формують ациклический граф. Не досить, щоб P містив лише шляху, як і показано на прикладі, даному на Малюнку 5.2. Тут пакунки з u1 в v направляються через простий путь.

(u1, w1, u2,.. ., v (, і пакеті з u2 в v посилаються через простіший шлях (u2, w2, u1,.. ., v (. [pic] Малюнок 5.2 маршрутизація, заборонена для контролера dest. Кожен шлях у P простий; набір всіх каналів, що використовуються маршрутизації пакетів в v містить цикл (u1, w1, u2, w2, u1, v (. Див. Вправа 5.2. Контролер dest дуже проста використання, однак має недолік — для кожної вершини потрібно дуже багато буферів, саме N.

Схема сколько-было-переходов. У цій схемі вершина u містить k +1 буфер

bu[0],.. ., bu[k]. Передбачається, кожен пакет містить лічильник переходів, що складає, скільки переходів джерела зробив пакет. Буферний граф окреслюється BGh = (B, [pic]), де bu[i] bw[j] ([pic]тогда і тільки тоді ми, коли [pic] і uw (E. Щоб показати, що BGh ациклический, зауважимо, що індекси буферів суворо зростають вздовж ребер BGh. Т.к. довжина кожного шляху до P трохи більше k переходів, що існує відповідний шлях у буферном графі; якщо P = u0,. ., ul (l (k), то bu0[0], bu1 [1],…, bul[l]-путь в BGh з чином P. Цей гарантований шлях описується так: fb (p) = bu[0] (для p, згенерованого в u) і (p, bu[i]) = bw[i +1] для пакетів, що їх просунуті з u в w.

Определение 5.10 Контролер hsf окреслюється bgcBGh, з fb і nb певними у минулому параграфе.

Theorem 5.11 Існує беступиковый контролер для мереж довільній топології, який використовує D + 1 буфер у кожному вершині (де D — діаметр мережі), і вимагає, щоб пакети пересилалися дорогами з мінімальним числом переходов.

Доказательство. Використання колій із мінімальним числом переходів дає k = D. Тоді hsf — беступиковый контролер, використовує D +1 буфер у кожному вершині. (Кількість буферів навіть може бути меншою, якщо вузли, розташовані далеко друг від друга, не обмінюються пакетами.) (.

В схемою сколько-было-переходов буферы з індексом і йдуть на зберігання пакетів, які зробили і переходів. Можна спректировать двоїста схема сколько-будет-переходов (hops-to-go), у якій буферы з індексом і йдуть на зберігання пакетів, яким потрібно зробити ще і переходів до місця призначення; див. Вправа 5.3. 5.2.2 Орієнтації G У цьому вся підрозділі розглядатиметься метод для побудови складних буферних графів, потребують лише кілька буферів на вузол,. У контролері hsf індекс буфера, у якому зберігався пакет, збільшувався з кожним переходом. Нині ми сповільнимо зростання індексу буфера (в такий спосіб економлячи на загальній кількості буферів у кожному вузлі), припускаючи зростання індексу буфера (не плутати з класом буфера) з декотрими, але усіма, переходами. Щоб уникнути циклів у буферном графі, канали, які можуть опинитися бути пересечены без збільшення індексу буфера, формують ациклический граф.

[pic] Малюнок 5.3 Граф і ациклическая ориентация.

Определение 5.12 Ациклическая орієнтація G — спрямований ациклический граф, який орієнтацією всіх ребер G; див. Малюнок 5.3. Послідовність G1, …, GB ациклических орієнтацій G є покриттям з ациклических орієнтацій розміру B для набору P шляхів, якщо кожне шлях P (P то, можливо записано як конкатенація B шляхів P1, …, PB, де Pi — шлях у Gi.

Когда можливо покриття з ациклических орієнтацій розміру B, то, можливо сконструйовано контролер, використовує лише B буферів на її вершину. Пакет завжди генерується в буфері bu[l] вершини u. Пакет з буфера bu[i], що має бути просунутий в вершину w міститься у буфер bw [і], якщо дуга між u і w спрямована до w в Gi, й у буфер bw[i + 1], якщо дуга спрямована до u в Gi.

Теорема 5.13 Якщо покриття з ациклических орієнтацій для P розміру B існує, що існує беступиковый контролер, використовує лише B буферів кожну вершину.

Доказательство. Нехай G1.. ., GB — покриття, і bu[1], …, bu[B] - буферы вершини u. Будемо писати uw ([pic], есди дуга uw спрямована до w в Gi, і wu ([pic], якщо дуга uw спрямована до u в Gi. Буферний граф окреслюється BGa = (B, [pic]), де bu[i]bw[j] ([pic] тоді й тільки тоді, коли uw (E і (і = j / uw ([pic]) чи (і + 1 = j / wu ([pic]). Щоб показати, що це граф ациклический, відзначимо, що немає циклів, містять буферы з різними індексами, бо немає дуг від цього буфера до іншому із меншим індексом. Ні циклів з з буферів з однією і тим самим індексом і, бо ці буферы призначаються відповідно до ациклическим графом Gi. Залишаємо читачеві (див. Вправа 5.4) продемонструвати, що кожного P (P існує гарантований шлях із чином P, і такий шлях описується так: [pic] Контролер acoc = bgcBGa — беступиковый контролер, використовує B буферів у кожному вершині, що доводить теорему. (.

Коммутация пакетів в кільці. Покриття з ациклических орієнтацій можна використані при побудові беступиковых контролерів для кількох класів мереж. Ми спочатку уявімо контролер для кілець, використовує лише три буфера на її вершину. Для наступній теореми передбачається, що ваги каналів симетричні, тобто., wuw =wwu.

Теорема 5.14 Існує беступиковый контролер для кільцевої мережі, який використовує всього три буфера на її вершину і дозволяє маршрутизировать пакети через найкоротші шляху. Доказ. З Теореми 5.13 досить дати покриття з ациклических орієнтацій розміром 3 для набору шляхів, що включає найкоротші шляху поміж усіма парами вершин. Використовуватимемо таку нотацію. Для вершин u і v, dc (u, v) позначає довжину шляхи виходу з u в v по годинниковий стрілкою і da (u, v) — довжина шляху проти годинниковий стрілки; dc (v, u) = da (u, v) і d (u, v) = min (dc (u, v), da (u, v)) виконується. Сума вагою всіх каналів називається З (периметр кільця) і очевидно dc (u, v) + da (u, v) = З всім u, v, отже d (u, v)(C/2.

[pic] Малюнок 5.4 покриття з ациклических орієнтацій для кольца.

Во-первых розглянемо простий випадок, коли Існують вершини u і v з d (u, v) = C/2. G1 і G3 виходять орієнтацією всіх ребер у напрямку до v, і G2 виходить орієнтацією всіх ребер у напрямку до u: див. Малюнок 5.4. Найкоротший шлях з u в v міститься у G1 чи G3, і найменший шлях з v в u міститься у G2. Нехай x, y — пара вершин, яка від пари u, v. Тоді, т.к.

d (x, y) (C/2, що існує найкоротший шлях P між x і y, який містить відразу й u, і v. Якщо P не стримає ні u, ні v, він повністю міститься або у G1, або у G2. Якщо P містить v, це конкатенація шляху в G1 та шляхи в G2; якщо P містить u, це конкатенація шляху до G2 та шляхи в G3. Якщо існує пари u, v з d (u, v) = C/2, виберемо пару, на яку d (u, v) якнайближче до З /2. Тепер може бути показане, що й існує пара x, y така, що не можна знайти найкоротший як конкатенацію шляхів в орієнтаціях покриття, то d (x, y) ближчі один до З /2, ніж d (u, v). (.

Пакетная комутація в дереві. Покриття з ациклических орієнтацій можуть бути використовуватимуться побудови контролера, котрий використовує лише 2 буфера на її вершину, для мережі як дерева. Теорему 5.15 Існує беступиковый контролер для мережі як дерева, який використовує лише 2 буфера на її вершину. Доказ. З Теореми 5.13, досить дати ациклическую орієнтацію для дерева, що покриває все прості шляху. Виберемо довільну вершину r, й одержимо T1 орієнтацією всіх ребер у напрямку до r і T2 орієнтацією всіх ребер від r; див. Малюнок 5.5. [pic] Малюнок 5.5 Покриття з ациклических орієнтацій для дерева. Простий шлях з u в v — конкатенація шляхи виходу з u до самого нижньому загальному предку, який T1, та шляхи від самої меншого загального предка до v, що у T2. (5.3 Неструктуровані рішення Нині ми обговоримо клас контролерів, запропонованих Toueg і Ullman [TU81]. Ці контролери не наказують, у якому буфері може бути поміщений пакет й використовують лише просту локальну інформацію типу лічильника переходів чи числа зайнятих буферів в узле.

5.3.1 Контролери з прямим і зворотним рахунком Контролер з прямим рахунком (forward-count controller). Нехай (для пакета p) spкількість переходів, що йому необхідно зробити до місця призначення; ясна річ 0 (sp (k виконується. Не завжди необхідно зберігати sp у пакеті, т.к. багато алгоритми маршрутизації зберігають цю інформацію в кожної вершині; див. наприклад алгоритм Netchange Розділу 4.3. Для вершини u, fu позначає число порожніх буферів в u. Звісно, 0 (fu (B завжди виконується. Визначення 5.16 Контролер FC (Forward-count) приймає пакет p в вершині u тоді й тільки тоді, коли sp < fu. Контролер приймає пакет, якщо порожніх буферів в вершині більше, ніж кількість переходів, потрібно зробити пакету. Теорему 5.17 Якщо B > k, то FC — беступиковый контролер. Доказ. Щоб показати, що у порожній вершині дозволяється генерація пакета, зауважимо, якщо всі буферы вершини u порожні, fu = B. Новому пакету потрібно зробити більш k переходів, тож із B > k слід, що пакет приймається. Відсутність глухих кутів FC буде показано методом від протилежного: нехай (- досяжною є конфігурація контролера. Одержимо конфігурацію (, застосовуючи до (максимальну послідовністю пересувань і виведення. У (жоден пакет неспроможна рухатися, і, т.к. (- тупикова конфігурація, що існує по крайнього заходу один пакет, залишений у мережі в конфігурації. Нехай p — пакет в (з мінімальним відстанню до пункту призначення, тобто., sp — найменше значення всім пакетів в (. Нехай u — вершина, у якій розміщається p. Т.к. u перестав бути пунктом призначення p (інакше p міг бути виведений), що існує сусід w вершини u, куди просунути p. Т. до. це пересування не дозволяється FC, то sp-1(fw З sp (k і з припущення k < B слід, що fu < B, що означає, що в вершині w розташовується як мінімум пакет (в конфігурації (). З пакетів в w, нехай q буде останнім пакетом, прийнятим вершиною w, і нехай f «w позначає кількість порожніх буферів в w прямо перед прийняттям q вершиною w. Т.к. пакет q тепер цікавить одне з цих f «w буферів і (з вибору q) все пакети, прийняті вершиною w після q виведені з w, то f «w (fw +1 З прийняття q вершиною w слід sq < f «w, і, комбінуючи три отриманих нерівності, отримуємо sq < f «w (fw +1(sp, що суперечить вибору p. (Контролер зі зворотним рахунком (backward-count controller). Контролер, «двоїстий «FC, виходить, коли рішення, приймати пакет, грунтується кількості кроків, які пакет зробив. Нехай, для пакета p, tp — кількість переходів, що він зробив джерела. Звісно, 0 (tp < k завжди вірно. Визначення 5.18 Контролер BC (Backward-Count) приймає пакет p в вершині u тоді й тільки тоді, коли tp > k—fu. Доказ те, що BC — беступиковый (Вправа 5.6) дуже схожі на доказ Теореми 5.17.

5.3.2 Контролери з випереджаючим і відстаючим станом Використовуючи детальнішу інформацію щодо пакетів, що у вузлі, може бути даний контролер, схожого на контролеру з прямим рахунком, але дозволяє дуже багато передвижений.

Контроллер з випереджаючим станом (forward-state controller). Використовуємо позначення sp як у минулому розділі. Для вершини u визначимо (як функцію стану u) вектор стану [pic], де j — кількість пакетів p в u з sp = p. s. Визначення 5.19 Контролер FS (Forward-State) приймає пакет p в вершині u з вектором стану [pic] тоді й тільки тоді, коли [pic]. Теорему 5.20 Якщо B > k, то FS — беступиковый. Доказ. Залишаємо читачеві показати, що порожня вершина приймає все пакети. Припустимо, що є досяжною є тупикова конфігурація (, й одержимо конфігурацію (, застосовуючи максимальну послідовність з рухів і виведення. Жоден пакет неспроможна пересуватися і з крайньої мері один пакет залишився у (. Виберемо пакет p з мінімальним значенням sp, і нехай uвершина, у якій розташовується p і w — вершина, у якому p повинен просунутися. Нехай [pic] - вектор стану вершини w в (. Якщо w зовсім позбавлений пакетом, то [pic], звідки слід, що w може взяти p, що організувати неможливо. Отже, w містить по крайнього заходу один пакет; з пакетів в w, нехай q — пакет, розташований найближче пункту призначення, тобто., sq = min{s: js > 0}. Покажемо, що sq < sp, що протиріччям. З пакетів в w, нехай r — той, який було прийнято w пізніше всіх, звісно, sq (sr виконується. Нехай [pic] - вектор стану w прямо перед прийняттям r. З прийняття r слід [pic] Коли [pic] був вектором стану w, r було прийнято вершиною w. Після цього пакети могли пересуватися з w, але не всі пакети, прийняті w пізніше, ніж r опинився (з вибору r). З цього випливає [pic] Але це, що [pic] Отже, приймаючи і = sq, [pic] Тепер використовуємо факт, що p не прийнята w, тобто., [pic] Це дає нерівність sp>sp-1 [pic] що є протиріччям. (.

Контроллер з відстаючим станом (backward-state controller.) Існує ще й контролер, «двоїстий «FS, який використано більш детальну інформацію, ніж контролер BC, і дозволяє більше пересувань. Нехай tp вибрано як раніше, і визначимо вектор стану як [pic], де it одно кількості пакетів в вершині u, які зробили t переходів. Визначення 5.21 Контролер BS (Backward-State) приймає пакет p в вершині u з вектором стану [pic] тоді й тільки тоді, коли [pic] Доказ те, що BS беступиковый дуже схожі на доказ Теореми 5.20. Порівняння контролерів. Контролер з випереджаючим майном вище ліберальний, ніж контролер з прямим рахунком, тому, що вона дозволяє більше пересувань: Лема 5.22 Кожне пересування, позволяемое FC також дозволяється FS. Доказ. Припустимо, що прийняття p вершиною u позвляется контролером FC. Тоді [pic], отож у і(sp, слід [pic], звідки видно, що FS дозволяє передвижение.

D У [TU81] засвідчили, що FC ліберальніший, ніж BC. FS — більш ліберальний, ніж BS, і BS ліберальніший, ніж BC. Також засвідчили, що це контролери найліберальніші із усіх, використовують ті ж самі інформацію. 5.4 Подальші проблеми У результатах цієї глави відзначимо, що кількість буферів, необхідних контролеру, завжди відігравало великій ролі. Пропускна здатність зазвичай збільшується, якщо доступно дуже багато буферів. У неструктурированных рішеннях дано лише нижню межу числа буферів; більше можна використовувати без будь-який модифікації. У структурованих рішеннях додаткові буфера повинні однак бути вставлені в буферний граф, може бути виконано чи статично чи динамічно. Якщо виконано статично, кожен буфер має фіксований розташування в буферном графі, тобто., створюється «більш широкий «буферний граф, ніж у прикладах, які у Розділі 5.2. Замість буфера fb (p) чи nb (p, b) зазвичай кілька буферів визначаються як можливе початок чи продовження шляху через буферний граф. Якщо вставка додаткових буферів виконується динамічно, то буферний граф спочатку створюється що містить можна менше буферів; буфера в графі ми називаємо логічними буферами, під час операції кожен фактичний буфер (званий фізичним буфером) придатна як кожній із логічних буферів, але завжди має гарантуватися, що з кожного логічного буфера є по крайнього заходу один фізичний буферний нагромаджувач. За такої схеми, може бути зарезервоване лише невеличке число буферів, щоб уникнути глухих кутів, тоді як решта буферів можна використовувати вільно. У цьому главі було винесено, що пакети мають фіксований розмір: буфера однаково великі наклади і кожен буфер може містити точно один пакет. Проблему може також розглядати, припустивши, що пакети може мати різні розміри. Рішення Розділу 5.3 було адаптовано до цього припущенню Bodlaender; див. [Bod86].

5.4.1 Топологічні зміни Доти ми року розглядали можливість топологічних змін — у мережі протягом подорожі пакета джерела до адресата. Після виникнення такої зміни таблиці маршрутизації кожного вузла будуть модифікуватися, і далі пакет буде посланий, використовуючи змінені значення цих таблиць. Через війну модифікації таблиць, пакет може слідувати за шляхом, яким не дотримувався, якщо ніяких змін або не мали б місце; навіть може бути випадок, що остаточний маршрут пакета тепер містить цикли. Вплив цього методи запобігання глухих кутів, аналізовані у цій главі досить не інтуїтивні. контролер Dest, чия правильність заснована на властивості, що P містить лише шляху, можна використовувати без будь-яких модифікацій. Контролери, які розглядають лише верхню кордон числа переходів, вимагають додаткових запобіжних заходів при використанні у разі. Контролер dest. За кінцеве час після останнього топологічного зміни, таблиці маршрутизації зводяться до таблицям вільний від циклів. Навіть дивлячись те що, що ситуація циклічного очікування може існувати під час обчислення таблиць, після завершення обчислень буферний граф знову стає ациклическим, і всі пакети зберігаються у підхожих буферах. Отже, коли таблиці маршрутизації враховано, що виникла результаті конфігурація зовсім позбавлений ніяких тупикових пакетів. Контролери, подсчитывающие переходи. Розглянемо контролер, який потрібно було на припущення, що пакет повинен зробити максимум k переходів. Можна вибрати k досить великою, щоб гарантувати з великою ймовірністю, кожен пакет сягає адресата за k переходів, навіть якщо протягом подорожі джерела до адресата відбуваються деякі топологічні зміни. Всім пакетів, які досягають своїх адресатів за k переходів, контролери сколько-было-переходов, зі зворотним рахунком і з відстаючим станом можна використовувати було без будь-якої модифікації. Проте, можливо, що пакет не досяг адресата після k переходів через невдалого зразка топологічних змін модифікацій таблиць. Якщо виглядає так, пакет зберігається у непідходящому буфері, і він назавжди блокований в вузлі, відмінному від адресата. Такі ситуації можна вирішити лише у кооперування з протоколами більш високого рівня. Найпростіше рішення, у тому, щоб відкинути пакет. З погляду наскрізного транспортного протоколу, пакет тепер втрачено; але з цієї втратою можна впоратися з допомогою протоколу транспортного рівня, як засвідчили в Розділі 3.2. Відкидання пакетів також потрібен до виконання припущення Розділу 3.2 у тому, що максимальне тривалість життя пакета (. Якщо пересилання пакета займає трохи більше (0 одиниць часу, те з обмеження часу життя пакета p слід обмеження k =(/(0 на число переходів, що може пройти пакет.

5.4.2 Інші види глухих кутів У цьому главі розглядалося лише глухі куточки з проміжним накопиченням. Якщо припущення, зроблені на Розділі 5.1 мають силу, глухі куточки з проміжним накопиченням — єдино можливі види глухих кутів. У практичних мережах, проте, ці припущення який завжди виконуються, і, як показали Merlin і Schweitzer [MS80b], можливі інші типи глухих кутів. Merlin і Schweitzer розглядають чотири типи, саме: глухий кут потомства, тупиком випуску копії, глухий кут покрокового просування, і глухий кут перетрансляции, і показують, як і уникнути ці типи глухих кутів розширенням методу буферних графів. Безвихідь потомства може виникнути, коли пакет p може створення у мережі інший пакет q, наприклад, звіт про відмову від, якщо сталося зіткнення з зіпсованим каналом. Це запровадило б причинно-наслідкові ставлення між породженням нового пакета (q) і пересилкою чи виведенням вже не існуючого (p), що порушує припущення Розділу 5.1, що мережа дозволяє пересилку і виведення пакета. Глухого Кута потомства можна запобігти, маючи дві копій буферного графа: одну для початкових повідомлень й одне для вторинних повідомлень. Якщо нащадки можуть знову створити наступне покоління, потрібно використовувати багаторазові рівні буферного графа. Безвихідь випуску копії може виникнути, коли джерело затримує копію пакета, поки для пакета ніхто не почув (наскрізне) підтвердження адресата. (Порівняйте з протоколом заснованому на таймере з Розділу 3.2, і припустімо, що послідовність inp зберігається у тому самому просторі пам’яті, що використовується механізмом маршрутизації для тимчасового зберігання пакетів.) Це порушує наше припущення (в Розділі 5.1), що буфер стає порожнім, коли пакет, котрий обіймає його, просувається. Дани два розширення принципу буферного графа, з допомогою яких можна уникнути глухого кута випуску копії. Перше рішення потрібно було на припущення, що глухий кут випуску копії завжди виникає через циклічного очікування оригінальних і підтверджують повідомлень. Рішення у тому, щоб обробляти підтвердження як потомство й берегти в окремої копії буферного графа. У другому рішенні, що у вона найчастіше вимагає меншої кількості буферів, недавно згенеровані пакети вкладаються у спеціалізовані вихідні буфера, у яких неможливо знайти можна побачити посылаемы пакети. Безвихідь покрокового просування може виникнути, коли мережу містить вузли з обмеженою внутрішньої пам’яттю, які можуть опинитися відмовлятися виводити повідомлення, поки деяких інших повідомлення були сгенерированы. Наприклад, термінал телетайпа повинен вивести деякі символи колись, що вона зможе приймати такі символи для відображення. Це порушує наше припущення, що пакет в адресаті може бути виведений. Глухого Кута покрокового просування можна запобігти, роблячи різницю між продвигаемыми пакетами і пошаговыми відповідями, такими, що пакет першого типу може бути виведений, поки пакет другого типу ні сгенерирован. Для різних типів повідомлень використовуються різні копії буферного графа. Безвихідь перетрансляции може виникнути у мережах, де великі повідомлення для передачі поділяються більш дрібні пакети, і жоден пакет може бути вивели із мережі, доки всі пакети повідомлення не досягли адресата. (Порівняйте з протоколом ковзаючого вікна Розділу 3.1, де слова видаляються з outp лише якщо отримано все слова із меншим індексом.) Це порушує наше припущення, що виведення пакета в адресаті можливо. Тупиков перетрансляции можна запобігти, використовуючи окремі групи буферів для пересилки пакета і перетрансляции. 5.4.3 Лайфлок (livelock) З визначення тупикових пакетів (Визначення 5.2) слід, під управлінням беступикового контролера кожному за пакета існує у крайнього заходу одне обчислення, у якому пакет виводиться. Т.к. загалом разі можливо багато різноманітних обчислень, це від цього не слід, кожен пакет зрештою сягає адресата, навіть у нескінченному обчисленні, як ілюструється Малюнок 5.6. Припустимо, що u надсилає у v нескінченного потоку пакетів, і щоразу, щойно буфер в w стає порожнім, приймається наступний пакет з u. Вузол p. s має пакет для t, який заходить у безвихідь, бо кожен раз, коли буфер в w стає порожнім, є можливе продовження обчислення, у якому пакет приймається вершиною w і посилається до t. Це можна, але з обов’язково, і пакет може залишитися у p. s назавжди. Ситуація цього виду називається лайфлок. Контролер, обговорюваний у цій главі, може розширитися те щоб взагалі уникнути лайфлоков. Визначення 5.23 Дана мережу, контролер con, і конфігурація (, пакет p заблокований (лайфлок), якщо є нескінченна послідовність пересувань, застосовних в (, у яких p не виводиться. Конфігурація (- конфігурація лайфлока, якщо вони містять заблоковані пакети. [pic] Малюнок 5.6 Приклад лайфлока.

Контроллер вільний від лайфлока, якщо жодна конфігурація лайфлока не досяжним з конфігурації, де немає пакетів. У залишеній частини цієї підрозділу буде доведено свобода контролера буферних графів від лайфлока; наприкінці будуть згадані розширення неструктурированных рішень. Контролер буферного графа. Можна продемонструвати, що контролери Розділу 5.2 лайфлок-свободны без будь-яких модифікацій, якщо їх пересування у нескінченному послідовності задовольняють ряду справедливих припущень. Fl і F2 — сильні предположеня і F3 — слабке припущення. Fl. Якщо породження пакета p робиться безупинно, то кожне нескінченне обчислення, у якому fb (p) вільний нескінченно великому кількості конфігурацій, містить породження p. F2. Якщо конфігурації (пакет p може бути посланий від u до w, то кожне нескінченне обчислення, розпочате в (, у якому nb (p, b) є вільним, у нескінченно велику кількість конфігурацій, містить пересилку p. F3. Якщо пакет p перебуває у своєму пункт призначення в конфігурації (, то кожне нескінченне обчислення, розпочате в (, містить виведення p.

Лемма 5.24 Якщо справедливі припущення F2 і F3 задовольняються у кожному нескінченному обчисленні bgc, то кожен буфер вільний нескінченно часто. Доказ. Доводити будемо індукцією згори донизу за класами буферів. Як у доказі Теореми 5.7, нехай R — найбільший буферний клас. Нагадаємо, що у конфігураціях, досяжних під керівництвом bgc, все пакети містяться у підхожих буферах. Випадок r = R: Буфер класу R немає вихідних ребер, і, отже, пакет з такої буфера сягає пункту призначення. Отже, по припущенню F3, після кожної конфігурації, у якій такий буфер зайнятий, буде конфігурація, у якій буфер вільний. Звідси випливає, що він порожній в нескінченно велику кількість конфігурацій. Випадок r < R: Нехай (- конфігурація, у якій буфер b класу r < R зайнятий пакетом p. Якщо p досяг би свого пункту призначення, то згодом буде конфігурація, у якій b буде порожнім з F3. Інакше, p може бути просунутий в буфер nb (p, b) класу r «> r. По індукції, у кожному нескінченному обчисленні, нинішньому в (, цей буфер порожній нескінченно часто. На цьому слід (по F2), що p буде передано і, отже, буде конфігурація (, після якого b буде пуст.

Теорема 5.25 Якщо справедливі припущення F1, F2 і F3 задовольняються, то кожному нескінченному обчисленні кожен пакет, запропонований мережі, буде виведено з свого пункту призначення. Доказ. По Лемме 5.24 все буферы порожні в нескінченно великому кількості конфігурацій. Отже (по Fl) кожен паке, що продовжує пропонуватися мережі, буде сгенерирован. По F2 він просуватися, доки досягне свого пункту призначення. (Легко припустити, що механізм недетерминированного вибору розподіленої системі гарантує, що це три припущення задовольняються. Альтернативно, припущення можуть бути запущені додаванням до контролеру механізму, що гарантує, що, коли буфер стає порожнім, більш старим пакетів дозволяється входити з більшими на приоритетами.

Неструктурированные рішення. Контролери Розділу 5.3 потрібно модифікувати, щоб стати лайфлок-свободными. Це може бути показане моделюванням нескінченного обчислення, у якому безперервний потік пакетів змушує контролер забороняти пересилку деякого пакета. Toueg [TouSOb] представляє таке обчислення (для FC) і становить модифікацію FS (таку представленої тут для контролерів буферних графів), яка є лайфлок-свободной.

Упражнения до Главі 5 Розділ 5.1 Вправа 5.1 Покажіть, що немає беступикового контролера, який використовує лише одне буфер на її вершину і дозволяє кожної вершині посилати пакети по крайнього заходу жодній іншій вершині. Розділ 5.2 Вправа 5.2 Покажіть, що dest перестав бути беступиковым, якщо маршрутизація пакетів здійснюється виключно як на Малюнку 5.2. Вправа 5.3 (Схема сколько-будет-переходов) Дайте буферний граф і функції fb і nb для контролера, який використовує буфер bu[i] для зберігання пакетів, яких потрібно зробити ще і переходів у напрямку до своїм пунктах призначення. Який буферний клас bu [і]? Чи потрібно зберігати лічильник переходів у кожному пакеті? Вправа 5.4 Закінчите доказ те, що граф BGa (певний в доказі Теореми 5.13) — справді буферний граф, тобто., кожному за шляху P (P існує гарантований шлях із чином P. Покажіть, що, як стверджувалося, fb і nb справді описують шлях у BGa. Проект 5.5 Доведіть, що є беступиковый контролер, для комутації пакетів в гиперкубе, який використовує усього дві буфера на її вершину і дозволяє маршрутизировать пакети через мінімальні шляху. Чи можна отримати набір використовуваних шляхів у вигляді алгоритму интервальной маршрутизації (Підрозділ 4.4.2)? Чи можна використовувати схему лінійної интервальной розмітки? Розділ 5.3 Вправа 5.6 Доведіть, що BC і BS — беступиковые контролери. Вправа 5.7 Доведіть, кожне пересування, позволяемое BC, також дозволяється FC.

Часть 2 Фундаментальні алгоритмы.

6 Хвильові алгоритми і алгоритми обхода При розробці розподілених алгоритмів щодо різноманітних додатків часто в ролі подзадач виникає кілька загальних проблем для мереж процесів. Ці елементарні завдання містять у собі широкомовну розсилку інформації - broadcasting (наприклад, посилка початкового чи заключного повідомлення), досягнення глобальної синхронізації між процесами, запуск виконання деякого події у кожному процесі, чи обчислення функції, вхідні дані якої розподілені між процесами. Ці завдання завжди вирішуються шляхом пересилки повідомлень відповідно до деякою, яка від топології схемою, що гарантує участь всіх процесів. Ці завдання настільки фундаментальні, які можна дати рішення складніших завдань, таких як вибір (Глава 7), виявлення завершення (Глава 8), чи взаємне виняток, у яких зв’язок між процесами відбувається лише через б ці схеми передачі повідомлень. Важливість схем передачі повідомлень, званих далі хвилевими алгоритмами, виправдовує розгляд окремо від конкретного прикладного алгоритму, куди є підстави включені. У цьому главі формально визначаються хвильові алгоритми (Підрозділ 6.1.1) і доводяться деякі загальні результати про неї (Підрозділ 6.1.2). Зауваження у тому, що ті ж самі алгоритми можна використовувати всім основних цілей, наведених, тобто. широкомовлення, синхронізація і обчислення глобальних функцій, буде формалізована (Підрозділи 6.1.3−5). У Розділі 6.2 представлені деякі широко використовувані хвильові алгоритми. У Розділі 6.3 розглядаються алгоритми обходу; це хвильові алгоритми, де всі події обчислення алгоритму цілком упорядковані каузальним ставленням. У Розділі 6.4 представлені кілька алгоритмів для розподіленого пошуку глибину. Попри те що, що хвильові алгоритми зазвичай використовують як подзадачи в складніших алгоритми, їх корисно розглядати окремо. По-перше, запровадження новопонять полегшує наступне розгляд складніших алгоритмів, т.к. властивості їх подзадач вже вивчені. По-друге, певні завдання у розподілених обчисленнях можна вирішити з допомогою універсальних конструкцій, як параметрів яких можуть використовуватися конкретні хвильові алгоритми. Той-таки метод може використовуватися щоб одержати алгоритмів щодо різноманітних мережевих топологий чи щодо різноманітних припущень про початковому знанні процесів. Ця глава полягає в [Tel91b, Розділ 4.2], де поняття хвильових алгоритмів вивчається під назвою загальні алгоритмы.

6.1 Визначення й використання хвильових алгоритмів У межах цієї глави вважається, а то й зазначено зворотне, що мережна топологія фіксована (немає топологічних змін), не орієнтована (кожен канал передає сполучення обох напрямках) і связна (існує шлях між будь-якими двома процесами). Безліч всіх процесів позначений через P, а безліч каналів — через E. Як і попередніх розділах, передбачається, що систему використовує асинхронну передачу повідомлень і немає поняття глобального чи реального часу. Алгоритми з цього глави також можна використовувати у разі синхронної передачі повідомлень (можливе з деякими змінами у запобігання глухих кутів) чи з годинниками глобального часу, якщо вони доступні. Утім, деякі загальніші теореми у випадках неправильні; див. Вправа 6.1.

6.1.1 Визначення хвильових алгоритмів Як у Главі 2, розподілені алгоритми зазвичай допускають великий набір можливих обчислень завдяки недетерминированности як і процесах, і у підсистемі передачі. Обчислення — це набір подій, частково упорядкованих ставленням каузального (причинно-наслідкового) предшествования ?; див. Визначення 2.20. Кількість подій у обчисленні З позначається через |З|, а підмножина подій, які у процесі p, позначається через Cp. Вважається, що є особливий тип внутрішніх подій, званий decide (прийняти зважене рішення); в алгоритми цієї глави таке подія представляється просто твердженням decide. Хвильової алгоритм обмінюється кінцевим числом повідомлень і далі приймають рішення, яке каузально залежить від деякого події у кожному процесі. Визначення 6.1 Хвильової алгоритм — це розподілений алгоритм, який задовольняє наступним трьом вимогам: Завершення. Кожне обчислення конечно:

? З: |З| <? Прийняття рішення. Кожне обчислення містить хоча одне подія decide:

? З: ? e? З: e — подія decide. Залежність. У кожному обчисленні кожному події decide каузально передує якесь події кожному процессе:

? З: ? e? З: (e — подія decide? ? q? P? f? Cq: f? e). Обчислення хвильового алгоритму називається хвилею. З іншого боку, в обчисленні алгоритму різняться ініціатори, також звані стартерами, іініціатори, звані послідовниками. Процес є ініціатором, якщо він починає виконання свого локального алгоритму спонтанно, тобто. і під час деякого умови, внутрішнього стосовно процесу. Неініціатор входить у алгоритм тільки коли прибуває повідомлення викликає виконання локального алгоритму процесу. Початкова подія ініціатора — внутрішнє подія чи подія посилки повідомлення, початкова подія неініціатора — подія одержання повідомлення. Існує безліч хвильових алгоритмів, оскільки можуть різнитися у багатьох відносинах. Для обгрунтування великої кількості алгоритмів у цій главі і як допомоги у виборі однієї з них для конкретної мети тут наведено список аспектів, які відрізняють хвильові алгоритми друг від друга; див. також Таблицю 6.19. Централізація. Алгоритм називається централізованим, тоді як кожному обчисленні може бути рівно один ініціатор, і децентралізованим, якщо алгоритм то, можливо запущено довільним підмножиною процесів. Централізовані алгоритми також називають алгоритмами одного джерела, а децентралізовані - алгоритмами багатьох джерел. Як очевидно з Таблиці 6.20, централізація серйозно впливає на складність хвильових алгоритмів. Топологія. Алгоритм може бути розроблений для конкретної топології, такий як кільце, дерево, кліка тощо.; див. Підрозділ 2.4.1 і Розділ B.2. Початкова знання. Алгоритм може припускати доступність різних типів початкового знання на процесах; див. Підрозділ 2.4.4. Приклади необхідних заздалегідь знань: (a) Ідентифікація процесів. Кожному процесу спочатку відомо своє власне унікальне ім'я. (b) Ідентифікація сусідів. Кожному процесу спочатку відомі імена його сусідів. (з) Відчуття напрями (sense of direction). Див. Розділ B.3. Кількість рішень. В усіх життєвих хвильових алгоритми цієї глави у кожному процесі відбувається більше рішення. Кількість процесів, які виконують подія decide, не завжди однаковий; у деяких алгоритми рішення бере лише один процес, за іншими — всі. У древовидном алгоритмі (Підрозділ 6.2.2) вирішують лише двоє процесу. Складність. Заходи складності, аналізовані у цій главі, на цю кількість переданих повідомлень (message complexity), кількість переданих біт (bit complexity) та палестинці час, необхідне одного обчислення (склала Розділі 6.4). Див. також Підрозділ 2.4.5. Кожен хвильової алгоритм у цій главі буде надано разом із використовуваними перемінними у разі необхідності, з туристичною інформацією, переданої в повідомленнях. Більшість цих алгоритмів посилають «порожні повідомлення», без будь-якої реальної інформації: повідомлення передають причинную зв’язок, а чи не інформацію. Алгоритми 6.9, 6.11, 6.12 і 6.18 використовують повідомлення для передачі нетривіальною інформації. Алгоритми 6.15 і 6.16/6.17 використовують різні типи повідомлень; у своїй потрібно, щоб кожне повідомлення містив 1−2 біта для вказівки типу повідомлення. Зазвичай при застосуванні хвильових алгоритмів в повідомлення можуть бути включені додаткові перемінні й інша інформація. Багато докладання використовують одночасне чи послідовне поширення кількох хвиль; у тому разі повідомлення мусить бути включена інформацію про хвилі, якою вона належить. З іншого боку, процес може зберігати додаткові перемінні керувати хвилею, чи хвилями, у яких нині активний. Важливий підклас хвильових алгоритмів становлять централізовані хвильові алгоритми, які мають двома додатковими якостями: ініціатор є єдиним процесом, який приймає рішення; і всі події цілком упорядковані каузальными відносинами. Такі хвильові алгоритми називаються алгоритмами обходу і розглядаються в Розділі 6.3.

6.1.2 Елементарні результати про хвильових алгоритми У цьому вся підрозділі доводяться деякі леми, які допомагають краще зрозуміти структуру хвильових обчислень, й приведено дві тривіальні нижні кордону складності повідомлень хвильових алгоритмів. Структурні властивості хвиль. По-перше, кожному події в обчисленні передує події инициаторе. Лема 6.2 Для будь-якого події e? З існує ініціатор p і подію f в Cp таке, що f? e. Доказ. Виберемо як f мінімальний елемент в передісторії e, тобто. такий, що f? e і немає f "? f. Таке f існує, оскільки передісторія кожного події кінцева. Залишається показати, що p, в яку повергнута f, є ініціатором. Спочатку, зауважимо, що f — це перша подія p, інакше більш ранніх подія p передувало б f. Перше подія не-инициатора — всі ці події одержання повідомлення, якому передувало б відповідне подія посилки повідомлення, що суперечить мінімальності f. Отже, p є ініціатором. Хвиля з однією ініціатором визначає остовное дерево мережі, де кожному за не-инициатора вибирається канал, з якого отримають перше повідомлення. Лема 6.3 Нехай З — хвиля з однією ініціатором p; і нехай кожному за неініціатора q fatherq — це сусід q, від якої q отримує повідомлення своєму першому подію. Тоді граф T = (P, ET), де ET = {qr: q? p & r = fatherq } - остовное дерево, спрямоване до p. Доказ. Т.к. кількість вершин T перевищує кількість ребер на 1, досить показати, що T зовсім позбавлений циклів. Це виконується, т.к. якщо eq — перша подія в q, речей, що qr? ET слід, що er? eq, а? — ставлення часткового порядку. Як події f у пункті (3) Визначення 6.1 то, можливо вибрано подія посилки повідомлення усіма процесами q, ще, де відбувається подія decide. Лема 6.4 Нехай З — хвиля, а dp? З — подія decide у процесі p. Тогда.

? q? p:? f? Cq: (f? dp & f — подія send) Доказ. Т.к. З — це хвиля, існує подія f? Cq, яке каузально передує dp; виберемо як f останню подію Cq, яке передує dp. Щоб показати, що f — подія send, відзначимо, що з визначення каузальності (Визначення 2.20) слід, що є послідовність (каузальна ланцюжок) f = e0, e1, …, ek = dp, така, що з будь-якого і < k, ei і ei+1 — або послідовні події у одному процесі, або пара відповідних подій send-receive. Т.к. f — останню подію в q, яке передує dp, e1 проходить у процесі, відмінному від q, отже f — подія send.

[pic] Рис. 6.1 Включення процесу у невикористовуваний канал.

Нижние кордону складності хвиль. З леми 6.4 безпосередньо слід, що нижню межу кількості повідомлень, які у хвилі, дорівнює N-1. Якщо подія decide відбувається у єдиному инициаторе хвилі (що виконується завжди у разі алгоритмів обходу), кордон дорівнює N повідомленням, а хвильові алгоритми для мереж довільній топології використовують щонайменше |E| повідомлень. Теорему 6.5 Нехай З — хвиля з однією ініціатором p, причому подія decide dp відбувається у p. Тоді, у З передається щонайменше N повідомлень. Доказ. По лемме 6.2 кожному події в З передує події p, і, використовуючи каузальную послідовність, як і доказі леми 6.4, неважко показати, що у p відбувається хоча одне подія send. По лемме 6.4 подія send також відбувається в від інших процесах, звідки кількість посылаемых повідомлень становить менше N. Теорему 6.6 Нехай A — хвильової алгоритм для мереж довільній топології без початкового знання про ідентифікації сусідів. Тоді A передає щонайменше |E| повідомлень у кожному обчисленні. Доказ. Припустимо, A містить обчислення З, у якому передається менш |E| повідомлень; тоді існує канал xy, яким у З не передаються повідомлення; див. Рис. 6.1. Розглянемо мережу G ", отриману шляхом включення одного вузла z в канал між x і y. Т.к. вузли немає знання про сусідів, початкова стан x і y в G «збігається з їхніми початковим станом в G. Це правда і всіх інших вузлів G. Отже, усі події З можна буде застосувати у тому порядку, починаючи із вихідною конфігурації G », але тепер події decide не передує події z. У Главі 7 буде доведено поліпшена нижню межу кількості повідомлень децентралізованих хвильових алгоритмів для кілець та мереж довільній топології не повідомляючи про інших сусідів; див. Укладання 7.14 і 7.16.

6.1.3 Поширення інформації із другого зв’язком У цьому вся підрозділі буде продемонстровано застосування хвильових алгоритмів для випадку, коли деяка інформація мусить бути передано всім процесам і певні процеси повинні прагнути бути сповіщені про завершення передачі. Ця завдання поширення інформації із другого зв’язком (PIF — propagation of information with feedback) формулюється так [Seg83]. Формується підмножина процесів з тих, хто знає повідомлення M (одне і те всім процесів), що має бути поширене, тобто. все процеси повинні прийняти M. Певні процеси би мало бути сповіщені про завершенні передачі; тобто. має виконати спеціальне подія notify, причому може бути виконано тільки коли всі вже отримали повідомлення M. Алгоритм повинен використовувати кінцеве кількість повідомлень. Оповіщення в PIF-алгоритме можна як подія decide. Теорему 6.7 Кожен PIF-алгоритм є хвилевим алгоритмом. Доказ. Нехай P — PIF-алгоритм. З формулювання завдання кожне обчислення P має бути кінцевим в кожному обчисленні має відбуватися подія оповіщення (decide). Якщо деякому обчисленні P відбувається оповіщення dp, якому передує ніяке події процесі q, тоді з Теореми 2.21 і Аксіоми 2.23 слід, що є виконання P, в якому оповіщення відбувається доти, як q приймає якесь повідомлення, що суперечить вимогам. Ми повинен мати у вигляді, що теорема 2.21 виконується лише систем з асинхронної передачею повідомлень; див. Вправа 6.1. Теорему 6.8 Будь-який хвильової алгоритм придатна як PIF-алгоритм. Доказ. Нехай A — хвильової алгоритм. Щоб використовувати A як PIFалгоритм, візьмемо як процесів, спочатку знають M, стартеры (ініціатори) A. Інформація M додається до кожного повідомленню A. Це можливо, оскільки з побудові стартеры A знають M спочатку, а послідовники не посилають повідомлень, доки отримають хоча одне повідомлення, тобто. доки отримають M. Події decide в хвилі передують події у кожному процесі; отже, як його відбувається, кожен процес знає M, і подію decide вважатимуться потрібним подією notify в PIF-алгоритме. Збудований PIF-алгоритм має ті ж самі складність повідомлень, як і алгоритм A й володіє іншими якостями A, описаними в Підрозділі 6.1.1, крім битовой складності. Бітова складність може бути зменшена шляхом додавання M лише у першого повідомлення, пересылаемому через кожен канал. Якщо w — кількість біт в M, бітова складність отриманого алгоритму перевищує битовую складність A на w*|E|.

6.1.4 Синхронізація У розділі буде розглянуто застосування хвильових алгоритмів для випадків, коли мусить бути досягнуто глобальна синхронізація процесів. Завдання синхронізації (SYN) формулюється так [Fin79]. У кожному процесі q має виконати подія aq, й у деяких процесах потрібно виконати події bp, причому всі події aq мали бути зацікавленими виконані за часом раніше, чому виконано якесь подія bp. Алгоритм повинен використовувати кінцеве кількість повідомлень. У SYN-алгоритмах події bp розглядатимуться як події decide. Теорему 6.9 Кожен SYN-алгоритм є хвильовим алгоритмом. Доказ. Нехай P. S — SYN-алгоритм. З формулювання завдання кожне обчислення P. S має бути кінцевим в кожному обчисленні має відбуватися подія bp (decide). Якщо деякому обчисленні P. S відбувається подія bp, якому каузально не передує aq, тоді (по Теоремі 2.21 і Аксіомі 2.23) існує виконання P. S, у якому bp відбувається раніше aq. Теорему 6.10 Будь-який хвильової алгоритм придатна як SYN-алгоритм. Доказ. Нехай A — хвильової алгоритм. Щоб перетворити A в SYNалгоритм, зажадаємо, щоб кожен процес q виконував aq доти, як q пошле повідомлення A чи прийме рішення, у A. Подія bp відбувається після події decide в p. З леми 6.4, кожному події decide каузально передує aq нічого для будь-якого q. Збудований SYN-алгоритм має ті ж самі складність повідомлень, як і A, і має іншими властивостями A, описаними в Підрозділі 6.1.1.

6.1.5 Обчислення функцій инфимума У цьому главі буде продемонстровано застосування хвильових алгоритмів для обчислення функцій, значення яких залежить від входів кожного процесу. У ролі представників таких функцій розглядатимуться алгоритми, вычисляющие инфимум за всі входам, що їх вилучено з частково упорядкованого безлічі. Якщо (X, ?) — частковий порядок, то з називають инфимумом a і b, якщо з? a, з? b, і? d: (d? a & d? b? d? з). Припустимо, що X таке, що инфимум завжди існує; у разі инфимум єдиний і позначається як a? b. Т.к.? — бінарний оператор, коммутативный (a? b = b? a) і асоціативний (тобто. a? (b? з) = (a? b)? з), операція може бути узагальнена на кінцеві безлічі: inf { j1, …, j k} = j1? …? j k. Завдання обчислення инфимума формулюється так. Кожен процес q містить вхід jq, є елементом частково упорядкованого безлічі X. Зажадаємо, щоб певні процеси вираховували значення inf {jq: q? P} і щоб ці процеси знали, коли обчислення завершується. Вони записують результат обчислення в зміну out і після цього можуть змінювати її значення. Подія write, яке заносить значення в out, у INFалгоритмі як подія decide. Теорему 6.11 Кожен INF-алгоритм є хвилевим алгоритмом. Доказ. Нехай I — INF-алгоритм. Припустимо, що є обчислення З алгоритму I з початковій конфігурацією ?, у якому p записує значення J в outp і до цього події write не передує ніяке події q. Розглянемо початкову конфігурацію? ", яка аналогічна? за винятком те, що q має вхід jq ", обраний отже jq " ?< J. Оскільки ніяке застосування входу q не передує каузально події write процесу p в З, усі події З, попередні події write, застосовні в такому самому порядку, починаючи з? ". У отриманому обчисленні p записує помилковий результат J, як і в З. Теорему 6.12 Будь-який хвильової алгоритм можна використовувати для обчислення инфимума. Доказ. Припустимо, що дано хвильової алгоритм A. Призначимо кожному процесу q додаткову зміну vq, якої надамо початкова значення jq. Під час хвилі ці перемінні переприсваиваются наступним чином. Щоразу, коли процес q посилає повідомлення, поточне значення vq входить у повідомлення. Щоразу, коли процес q отримує повідомлення багатозначно v, vq присвоюється значення vq? v. Коли процесі p відбувається подія decide, поточне значення vp заноситься в outp. Тепер потрібно, що у результат заноситься правильне значення. Означимо пошук правильної відповіді через J, тобто. J = inf { jq: q? P}. Для події a у процесі q позначимо через v (a) значення vq відразу після виконання a. Т.к. початкова значення vq одно jq, і протягом хвилі він лише зменшується, нерівність v (a)? jq зберігається кожному за події a в q. З присвоювання v слід, що з подій a і b, a? b? v (a)? v (b). З іншого боку, т.к. v завжди обчислюється як инфимум двох вже існуючих величин, нерівність J? v виконується всім величин протягом хвилі. Отже, якщо d — подія decide в p, значення v (d) задовольняє нерівності J? v (d) і, т.к. події d передує хоча одне події кожному процесі q, v (d)? jq всім q. Звідси випливає, що J = v (d). Збудований INF-алгоритм має усіма властивостями A, крім битовой складності, оскільки до кожного повідомленню A додається елемент X. Поняття функції инфимума може бути досить абстрактним, але вони багато функції можуть бути виражені через функцію инфимума, як показано в [Tel91b, Теорему 4.1.1.2]. Аксіома 6.13 (Теорему про инфимуме) Якщо * - бінарний оператор на безлічі X, причому він: коммутативен, тобто. a * b = b * a, асоціативний, тобто. (a * b) * з = a * (b * з), і идемпотентен, тобто. a * a = a що існує ставлення часткового порядку? на X таке, що * - функція инфимума. Серед операторів, які відповідають цим трьом критеріям — логічна, а і диз’юнкція, мінімум і максимум цілих чисел, найбільший загальний дільник і найменше загальне кратну цілих чисел, те що й «об'єднання множин. Укладання 6.14 &, ?, min, max, НОД, НОК,? і? величин, локальних по відношення до процесам, може бути враховано за хвилю. Обчислення операторів, що є коммутативными і асоціативними, але не идемпотентны, у Підрозділі 6.5.2.

6.2 Хвильові алгоритми У наступних трьох розділах буде подано кілька хвильових алгоритмів і алгоритмів обходу. Усі тексти алгоритмів дано для процесу p.

6.2.1 Кольцевой алгоритм У розділі буде приведено алгоритм для кільцевої мережі. Той самий алгоритм може бути застосований для Гамильтоновых мереж, де один фіксований Гамільтонів цикл проходить крізь ці процеси. Припустимо, що кожного процесу p заданий сусід Nextp такий, що це канали, обрані таким чином, становлять Гамільтонів цикл. Алгоритм є централізованим; ініціатор посилає повідомлення (зване маркером) вздовж циклу, кожен процес передає його далі і як його повертається до ініціатору, ініціатор приймають рішення; див. Алгоритм 6.2.

Для ініціатора: begin send to Nextp; receive; decide end Для не-инициатора: begin receive; send to Nextp end.

Алгоритм 6.2 Кольцевой алгоритм.

Теорема 6.15 Кольцевой алгоритм (Алгоритм 6.2) є хвилевим алгоритмом. Доказ. Означимо ініціатор через p0. Оскільки кожен процес посилає трохи більше одного повідомлення, алгоритм передає загалом максимум N повідомлень. За обмежене число кроків алгоритм сягає заключній конфігурації. У цьому конфігурації p0 вже переслав маркер, тобто. виконав оператор send у своїй програмі. З іншого боку, жодна повідомлення не передається з жодного каналу, інакше він то, можливо отримано і конфігурація нічого очікувати заключній. Також, жоден процес, крім p0, не «затримує» маркер (тобто. отримав, але з передав далі), інакше процес може послати і конфігурація нічого очікувати кінцевої. Отже, (1) p0 відправив маркер, (2) нічого для будь-якого p, пославшего маркер, Nextp отримав маркер, і (3) кожен p? p0, який одержав маркер, відправив маркер. Звідси й властивості Next слід, кожен процес відправив і отримав маркер. Т.к. p0 отримав маркер і конфігурація кінцева, p0 виконав оператор decide. Набуття та відправка кожним процесом p? p0 передує отриманню маркера процесом p0, отже, умова залежності выполнено.

6.2.2 Деревоподібний алгоритм У розділі представлений алгоритм для деревоподібної мережі. Той самий алгоритм можна використовувати для мереж довільній топології, якщо доступно остовное дерево мережі. Передбачається, що алгоритм ініціюють все листя дерева. Кожен процес у алгоритмі посилає рівно одне повідомлення. Якщо процес отримав сполучення всім инцидентным каналам, окрім однієї (це умова спочатку виконується для листя), процес відправляє повідомлення по що залишився каналу. Якщо процес отримав повідомлення крізь ці инцидентные канали, приймає рішення; див. Алгоритм 6.3.

var recp[q] for each q? Neighp: boolean init false ;

(* recp[q] = true, якщо p отримав повідомлення від q *).

begin while # {q: recp[q] is false} > 1 do begin receive from q; recp[q] := true end ;

(* Тепер залишилася сама q0, котрій recp[q0] = false *) send to q0 with recp[q0] is false; x: receive from q0; recp[q0] := true; decide.

(* Повідомити іншим процесам про рішення: forall q? Neighp, q? q0 do send to q *) end.

Алгоритм 6.3 Деревоподібний алгоритм. Щоб показати, що це алгоритм є хвильовим, введемо деякі позначення. Нехай fpq — подія, де p посилає повідомлення q, а gpq — подія, де q отримує повідомлення від p. Через Tpq позначимо підмножина процесів, які реальні з p без проходження дузі pq (процеси на боці p дуги pq); див. Рис. 6.4. З связности мережі слід, що (див. Рис. 6.4) Tpq = [pic] і (= [pic].

[pic] Рис. 6.4 Поддеревья Tpq.

Оператор forall коментарів в Алгоритмі 6.3 обговорюватиметься наприкінці цього підрозділу; у наступному теоремі йдеться про алгоритмі самотужки оператора. Теорему 6.16 Деревоподібний алгоритм (Алгоритм 6.3) є хвильовим алгоритмом. Доказ. Т.к. кожен процес посилає трохи більше одного повідомлення, в цілому алгоритм використовує трохи більше N повідомлень. Звідси випливає, що алгоритм сягає заключній конфігурації? за кінцеве число кроків; ми покажемо, що у? хоча б тільки процес виконує подія decide. Нехай F — кількість бітов rec багатозначно false в ?, а K — кількість процесів, у яких послали сполучення ?. Т.к. в? не передається ні одне повідомлення (інакше? б не була заключній), F = (2N-2) — K; загальне число бітов rec одно 2N-2, а K їх рівні true. Припустимо, що жодного процес у? прийняв рішення. N-K процесів, котрі послали повідомлення ?, містять хоча би за два біта rec, рівних false; інакше вони могли послати повідомлення, що суперечить тому, що? — заключна конфігурація. K процесів, які послали повідомлення в ?, містять хоча б тільки біт rec, рівний false; інакше: вони міг би прийняти зважене рішення, що суперечить з того що? — заключна конфігурація. Отже, F? 2(N-K) + K, та якщо з (2N-2) — K? 2(N-K) + K слід, що -2? 0; домовилися до протиріччю, отже, хоча б тільки процес у? приймають рішення. Див. Вправа 6.5. Нарешті, потрібно, що рішенню передує події кожному процесі. Нехай fpq — подія, де p посилає повідомлення q, а gpq — подія, де q отримує повідомлення від p. Застосовуючи індукцію щодо подій отримання повідомлень, можна довести, що? p. s? Tpq? e? Cs: e? gpq. Припустимо, що це виконується всім подій отримання повідомлень, попередніх gpq. З те, що події gpq передує fpq (у процесі p), і з алгоритму p слід, що з всіх r? Neighp при r? q, grp передує fpq. З гіпотези індукції слід, що з всіх таких r й у всіх p. s? Trp існує подія e? Cs, де e? grp, отже, e? gpq. Рішенню dp в p передують grp всім r? Neighp, звідки слід, що? p. s? P? e? Cs: e? dp. Читач може змоделювати обчислення алгоритму у невеликому дереві (наприклад, див. дерево на Рис. 6.4) та самостійно переконатися у справедливості наступних зауважень. У Алгоритмі 6.3 існує два процесу, які отримують повідомлення крізь ці канали і приймають рішення; й інші тим часом очікують повідомлення з лічильником команд, встановленим на x, в заключній конфігурації. Якщо до програми додати оператор forall (в дужках коментарю в Алгоритмі 6.3), усі процеси вирішили й у кінцевої конфігурації кожен процес перебуває у кінцевому стані. Модифікована програма використовує 2N-2 сообщений.

6.2.3 Эхо-алгоритм Эхо-алгоритм — це централізований хвильової алгоритм для мереж довільній топології. Вперше він було представлено Чангом [Chang; Cha82] і тому іноді називається эхо-алгоритмом Чанга. Більше ефективна версія, що й представлена тут, було запропоновано Сегаллом [Segall; Seg83]. Алгоритм поширює повідомлення за всі процесам, в такий спосіб визначаючи остовное дерево, як склала Лемме 6.3. Маркери «відбиваються» назад через ребра цього дерева аналогічно потоку повідомлень в древовидном алгоритмі. Алгоритм означене як Алгоритм 6.5. Ініціатор посилає повідомлення всіх своїх сусідів. Після набуття першого повідомлення не-инициатор пересилає повідомлення всіх своїх сусідів, ще, від якої отримали повідомлення. Коли не-инициатор отримує повідомлення від своїх сусідів, відлуння пересилається батькові чи матері (father). Коли ініціатор отримує повідомлення від своїх сусідів, він швидко приймає решение.

var recp: integer init 0; (* Лічильник отриманих повідомлень *) fatherp: P init udef ;

Для ініціатора: begin forall q? Neighp do send to q; while recp < # Neighp do begin receive; recp := recp + 1 end; decide end; Для не-инициатора: begin receive from neighbor q; fatherp := q; recp := recp + 1; forall q? Neighp, q? fatherp do send to q; while recp < # Neighp do begin receive; recp := recp + 1 end; send to fatherp end.

Алгоритм 6.5 Эхо-алгоритм. Теорему 6.17 Эхо-алгоритм (Алгоритм 6.5) є хвильовим алгоритмом. Доказ. Т.к. кожен процес посилає трохи більше одного повідомлення по кожному инцидентному каналу, кількість повідомлень, пересланих за кожне обчислення, звісно. Нехай? — кінцева конфігурація, яка в обчисленні З з ініціатором p0. З цією конфігурації визначимо (подібно визначенню в лемме 6.3) граф T = (P, ET), де pq? ET? fatherp = q. Щоб показати, що це граф є деревом, потрібно, що його ребер на одиницю менше, ніж кількість вершин (Лема 6.3 стверджує, що T — дерево, але передбачається, що алгоритм є хвилевим, що ми ще потрібно довести). Зазначимо, що кожен процес, що у З, посилає повідомлення всіх своїх сусідів, крім сусіда, від якої він отримав перше повідомлення (якщо процес — неініціатор). Звідси випливає, що його сусіди отримують хоча одне повідомлення З і беруть участь у З. З цього випливає, що fatherp? udef всім p? p0. Що T зовсім позбавлений циклів, можна показати, як і доказі Леми 6.3. Рішуче дерева перебуває p0; позначимо через Tp безліч вершин в поддереве p. Ребра мережі, не належать T, називаються листовыми ребрами (frond edges). У? кожен процес p, по крайнього заходу, послав повідомлення всім своїх сусідів, крім батька fatherp, отже, кожне листове ребро передавало в З сполучення обох напрямках. Нехай fp — подія, в якому p посилає повідомлення своєму батькові чи матері (тоді як З це відбувається), а gp — подія, у якому батько p отримує повідомлення від p (якщо це відбувається). З допомогою індукції за вершинами дерева можна показати, що З містить подія fp нічого для будь-якого p? p0; всім p. s? Tp існує подія e? Cs таке, що e? gp. Ми розглянемо такі два випадку. p — лист. p одержав у З повідомлення від своєї батька і від усіх інших сусідів (т.к. решту каналів — листові). Отже, посилка батькові чи матері p була можлива, і, т.к.? — кінцева конфігурація, це сталося. Tp містить лише p, й вочевидь, fp? gp. p — не лист. p одержав у З повідомлення від своєї батька і крізь все листові ребра. По індукції, З містить fp «кожної дочірньою вершини p «вершини p, і, т.к.? — кінцева конфігурація, З також має gp ». Отже, посилка батькові чи матері p була можлива, і, т.к.? — кінцева конфігурація, справа зрушила. Tp складається з об'єднання Tp «за всі дочірнім вершин p і із найбільш p. З допомогою індукції можна показати, що у кожному процесі цього безлічі існує подія, попереднє gp. Звідси випливає, також, що p0 отримав повідомлення від кожної сусіду й виконав подія decide, якому передують події у кожному процесі. Остовное дерево, що будується в обчисленні Алгоритму 6.5, іноді використав послідовно виконуваних алгоритми. (Наприклад, алгоритм Мерлина-Сегалла (Merlin-Segall) для обчислення таблиць найкоротших маршрутів передбачає, що явно дано остовное дерево з коренем в v0; див. Підрозділ 4.2.3. Початкова остовное дерево то, можливо обчислено з використанням эхо-алгоритма). Останній конфігурації алгоритму кожен процес (крім p0) запам’ятав, який сусід в дереві є його батьком, але з запам’ятав дочірніх вершин. У алгоритмі однакові повідомлення приймаються від батька, через листові ребра, і південь від дочірніх вершин. Якщо потрібно знання дочірніх вершин в дереві, алгоритм то, можливо злегка змінено, те щоб відправляти батькові чи матері повідомлення, які від інших (в останньої операції відправлення повідомлення для не-инициаторов). Дочірніми вершинами процесу тоді є ті сусіди, яких отримано ці сообщения.

6.2.4 Алгоритм опитування У мережах із топологією кліка між кожної парою процесів існує канал. Процес може, чи отримав він повідомлення від кожної сусіда. У алгоритмі опитування, означеному як Алгоритм 6.6, ініціатор затребувана у кожного сусіда у відповідь повідомлення приймають рішення після всіх відповідних повідомлень. Теорему 6.18 Алгоритм опитування (Алгоритм 6.6) є хвильовим алгоритмом. Доказ. Алгоритм пересилає дві повідомлення через кожен канал, суміжний з ініціатором. Кожен сусід ініціатора відповідає одного разу на початковий опитування, отже, ініціатор отримує N-1 відповідь. Цього досить, щоб взяти рішення, отже, ініціатор приймає рішення і його передує події кожному процесі. Опитування можна використовувати й у мережі з топологією зірка, у якій ініціатор перебуває у центре.

var recp: integer init 0; (* лише ініціатора *).

Для ініціатора: begin forall q? Neighp do send to q; while recp < # Neighp do begin receive; recp := recp + 1 end; decide end; Для не-инициатора: begin receive from q; send to q end.

Алгоритм 6.6 Алгоритм опроса.

6.2.5 Фазовий алгоритм У розділі представлять фазовий алгоритм, що є децентралізованим алгоритмом для мереж із довільною топологією. Алгоритм дано в [Tel91b, Розділ 4.2.3]. Алгоритм придатна як хвильової для орієнтованих мереж. Алгоритм вимагає, щоб процесам був відомий діаметр мережі, позначений у тексті алгоритму як D. Алгоритм залишається коректним (хоча й такий ефективним), якщо процеси замість D використовують константу D «> D. Таким чином, до застосування алгоритму необов’язково точно знати діаметр мережі; досить, якщо відома верхня межа діаметра (наприклад, N-1). Усі процеси повинні йти те ж константу D ». Пелег [Peleg; Pel90] доповнив алгоритм в такий спосіб, щоб діаметр обчислювався під час виконання, але ці розширення вимагає унікальної ідентифікації. Загальний випадок. Алгоритм можна використовувати в орієнтованих мережах довільній топології, де канали можуть передавати повідомлення лише у одному напрямку. І тут, сусіди p є сусідами по входу (процеси, що потенційно можуть посилати повідомлення p) і сусідами після виходу (процеси, яким p може посилати повідомлення). Сусіди із входу p зберігають у безлічі Inp, а сусіди з виходу — в безлічі Outp. У фазовому алгоритмі кожен процес посилає рівно D повідомлень кожному сусідові після виходу. Тільки по тому, як і повідомлень було від кожного сусіда по входу, (i+1)-ое повідомлення посилається кожному сусідові по виходу; див. алгоритм 6.7.

cons D: integer = діаметр мережі; var recp[q]: 0. D init 0, кожному за q? Inp ;

(* Кількість повідомлень, отримані від q *).

Sentp: 0. D init 0 ;

(* Кількість повідомлень, посланих кожному сусідові після виходу *).

begin if p — ініціатор then begin forall r? Outp do send to r ;

Sentp := Sentp + 1 end; while minq Recp[q] < D do begin receive (від сусіда q0) ;

Recp[q0] := Recp[q0] + 1; if minq Recp[q]? Sentp and Sentp < D then begin forall r? Outp do send to r ;

Sentp := Sentp + 1 end end; decide end.

Алгоритм 6.7 Фазовий алгоритм. Справді, з тексту алгоритму очевидно, що за кожен канал проходить трохи більше D повідомлень (нижче показано, що за кожен канал проходить щонайменше D повідомлень). Якщо існує ребро pq, то fpq (i) — i-е подія, у якому p передає повідомлення q, а gpq (i) — i-е подія, в якому q отримує повідомлення від p. Якщо канал між p і q задовольняє дисципліни FIFO, ці події відповідають одне одному і нерівність fpq (i)? gpq (i) виконується. Каузальні відносини між fpq (i) і gpq (i) зберігаються й у разі, якщо канал перестав бути FIFO, що доводиться в наступній лемме. Лема 6.19 Нерівність fpq (i)? gpq (i) виконується, навіть якщо канал не є каналом FIFO. Доказ. Визначимо mh так: fpq (mh) — подія відправлення повідомлення, відповідне gpq (h), тобто. у своїй h-м подію отримання q отримує mh-е повідомлення p. З визначення каузальності fpq (mh)? gpq (h). Т.к. кожне повідомлення З можна лише одного разу, все mh різні, звідки слід, що тільки одна з чисел m1, …, mi більше або одно і. Виберемо j? і те щоб mj? і. Тоді fpq (i)? fpq (mj)? gpq (j)? gpq (i). Теорему 6.20 Фазовий алгоритм (Алгоритм 6.7) є хвилевим алгоритмом. Доказ. Т.к. кожен процес посилає трохи більше D повідомлень по кожному каналу, алгоритм завершується за кінцеве число кроків. Нехай? — заключна конфігурація обчислення З алгоритму, і припустимо, що у З існує, по крайнього заходу, один ініціатор (їх може більше). Щоб продемонструвати, що у? кожен процес прийняв рішення, покажемо спочатку, кожен процес, хоч колись послав повідомлення. Т.к. в? по каналам не передається жодна повідомлення, кожному за каналу qp Recp[q] = Sentpq. Також, т.к. кожен процес посилає повідомлення, коли одержить повідомлення сам, Recp[q] > 0? Sentp > 0. З припущення, що є хоча б тільки ініціатор p0, котрій Sentp0 > 0, слід, що Sentp > 0 кожному за p. Згодом буде показано, кожен процес прийняв рішення. Нехай p — процес з мінімальним значенням перемінної Sent в ?, тобто. всім q Sentq? Sentp в ?. Зокрема, це виконується, якщо q — сусід по входу p, і з Recp[q] = Sentq слід, що minq Recp[q]? Sentp. Але це означає, що Sentp = D; інакше p б надіслав додаткові повідомлення, коли він одержав останнє повідомлення. Отже, Sentp = D всім p, і Recp[q] = D для всіх qp, звідки справді варто, кожен процес прийняв рішення. Залишається показати, кожному рішенню передує події кожному процесі. Якщо P = p0, p1, …, pl (l? D) — маршрут у мережі, тоді, по Лемме 6.19, [pic].

для 0? і < l і з алгоритму, [pic] для 0? і < l — 1. Отже, [pic]. Т.к. діаметр мережі дорівнює D, для будь-яких q і p існує маршрут q = p0, p1, …, pl = p довжини трохи більше D. Отже, нічого для будь-якого q існує l? D і сусід по входу r процесу p, такі, що [pic]; виходячи з алгоритму, [pic]предшествует dp. Алгоритм пересилає D повідомлень через кожен канал, викликаючи складності повідомлень, рівної |E|*D. Але треба помітити, що |E| позначає кількість спрямованих каналів. Якщо алгоритм використовується для неориентированной мережі, кожен канал вважається протягом двох спрямованих каналу, і складність повідомлень дорівнює 2|E|*D.

var recp: 0. N — 1 init 0 ;

(* Кількість отриманих повідомлень *).

Sentp: 0.1 init 0 ;

(* Кількість повідомлень, посланих кожному сусідові *).

begin if p — ініціатор then begin forall r? Neighp do send to r ;

Sentp := Sentp + 1 end; while Recp < # Neighp do begin receive ;

Recp := Recp + 1; if Sentp = 0 then begin forall r? Neighp do send to r ;

Sentp := Sentp + 1 end end; decide end.

Алгоритм 6.8 Фазовий алгоритм для клики.

Фазовый алгоритм для кліки. Якщо мережу має топологію кліка, її діаметр дорівнює 1; у разі від кожної сусіда має бути отримано рівно одне повідомлення, й у кожного процесу досить вважати загальна кількість отриманих повідомлень натомість, щоб можна вважати повідомлення від кожної сусіда по входу окремо; див. Алгоритм 6.8. Складність повідомлень у разі дорівнює N (N-1) і алгоритм використовує лише O (log N) біт оперативної памяти.

6.2.6 Алгоритм Фінна Алгоритм Фінна [Fin79] - іще одна хвильової алгоритм, що можна залучити до орієнтованих мережах довільній топології. Він вимагає здобуття права діаметр мережі був відомий заздалегідь, але передбачає наявність унікальних ідентифікаторів процесів. У повідомленнях передаються безлічі ідентифікаторів процесів, що зумовлює досить високою битовой складності алгоритму. Процес p містить два безлічі ідентифікаторів процесів, Incp і NIncp. Неформально кажучи, Incp — це безліч процесів q таких, що події q передує останньому тому що відбувається події в p, а NIncp — безліч процесів q таких, що з всіх сусідів r процесу q події r передує останньому подій події в p. Ця залежність підтримується так. Спочатку Incp = {p}, а NIncp = ?. Щоразу, коли одна з множин поповнюється, процес p посилає повідомлення, включаючи до нього Incp і NIncp. Коли p отримує повідомлення, у тому числі безлічі Inc і NInc, отримані ідентифікатори входять у версії цих множин у процесі p. Коли p отримає повідомлення від усіх сусідів по входу, p входить у NIncp. Коли два безлічі стають рівні, p приймають рішення; див. Алгоритм 6.9. З неформального сенсу двох множин слід, що кожного процесу q такого, що події q передує dp, виконується таке: кожному за сусіда r процесу q події r також передує dp, звідки слід залежність алгоритму. У доказі коректності демонструється, що це виконується для кожного p, й з рівності двох множин слід, що рішенню передує події кожному процесі. Теорему 6.21 Алгоритм Фінна (Алгоритм 6.9) є хвилевим алгоритмом. Доказ. Зауважимо, що дві безлічі, підтримувані кожним процесом, можуть використовуватися лише розширюватися. Т.к. розмір двох множин у сумі становить менше 1 у першому повідомленні, посылаемом в кожному каналу, і трохи більше 2N у тому повідомленні, те спільне кількість повідомлень обмежена 2N*|E|. Нехай З — обчислення, у якому існує хоча б тільки ініціатор, і нехай? — заключна конфігурація. Можна показати, як і доказі Теореми 6.20, що й процес p відправив повідомлення хоча колись (кожному сусідові), а q — сусід p після виходу, то q теж відправив повідомлення хоча колись. Звідси випливає, кожен процес переслав хоча одне повідомлення (через кожен канал).

var Incp: set of processes init {p} ;

NIncp: set of processes init?; recp[q]: boolean for q? Inp init false ;

(* ознака того, отримав p повідомлення від q *).

begin if p — ініціатор then forall r? Outp do send to r; while Incp? NIncp do begin receive from q0 ;

Incp := Incp? Inc; NIncp := NIncp? NInc; recp[q0] := true; if? q? Inp: recp[q] then NIncp := NIncp? {p}; if Incp чи NIncp змінилися then forall r? Outp do send to r end; decide end.

Алгоритм 6.9 Алгоритм Фінна. Сьогодні ми покажемо, що у? кожен процес прийняв рішення. По-перше, якщо існує ребро pq, то Incp? Incq в ?. Справді, після останнього зміни Incp процес p посилає повідомлення, і після його одержання в q виконується Incq := Incq? Incp. З сильної связности мережі слід, що Incp = Incq всім p і q. Т.к. виконується p? Incp і кожне безліч Inc містить лише ідентифікатори процесів, кожному за p Incp = P. По-друге, аналогічним чином може бути показане, що NIncp = Nincq для будь-яких p і q. Т.к. кожен процес відправив хоча одне сполучення кожному каналу, кожному за процесу p виконується:? q? Inp: recp[q], і отже, кожному за p виконується: p? NIncp. Сили-силенної NInc утримують тільки ідентифікатори процесів, звідки слід, що NIncp = P для кожного p. З Incp = P і NIncp = P слід, що Incp = NIncp, отже, кожен процес p в? прийняв рішення. Тепер потрібно, що рішенню dp у процесі p передують події у кожному процесі. Для події e у процесі p позначимо через Inc (e) (чи, відповідно, NInc (e)) значення Incp (NIncp) відразу після виконання e (порівняйте з доказом Теореми 6.12). Наступні два затвердження формалізують неформальні описи множин на початку цього розділу. Твердження 6.22 Якщо існує подія e? Cq: e? f, то q? Inc (f). Доказ. Як у доказі Теореми 6.12, можна показати, що e? f? Inc (e)? Inc (f), а при e? Cq? q? Inc (e), що потрібно було довести. Твердження 6.23 Якщо q? NInc (f), для всіх r? Inq існує подія e? Cr: e? f. Доказ. Нехай aq — внутрішнє подія q, у якому вперше у q виконується присвоювання NIncq := NIncq? {q}. Подія aq — єдине подія з q? NInc (aq), якому передує жоден інший подія a ", що задовольнить умові q? NInc (a "); в такий спосіб, q? NInc (f)? aq? f. З алгоритму слід, що з будь-якого r? Inq існує подія e? Cr, попереднє aq. Звідси випливає результат. Процес p приймають рішення тільки коли Incp = NIncp; можна записати, що Inc (dp) = NInc (dp). І тут p? Inc (dp); і з q? Inc (dp) слід, що q? NInc (dp), звідки слід, що Inq? Inc (dp). З сильної связности мережі слід необхідний результат: Inc (dp) = P.

6.3 Алгоритми обходу У розділі представлять особливий клас хвильових алгоритмів, а саме, хвильові алгоритми, де всі події хвилі цілком упорядковані каузальним ставленням, й у який останню подію відбувається у тому процесі, що й перше. Визначення 6.24 Алгоритмом обходу називається алгоритм, у якого такими трьома властивостями. У кожному обчисленні один ініціатор, який починає виконання алгоритму, посилаючи рівно одне повідомлення. Процес, одержуючи повідомлення, або посилає одне повідомлення далі, або приймають рішення. З у перших двох властивостей слід, що у кожному кінцевому обчисленні рішення приймає рівно один процес. Кажуть, що алгоритм спливає цьому процесі. Алгоритм спливає инициаторе і на той час, коли це відбувається, кожен процес посилає повідомлення хоча колись. У кожній досяжною конфігурації алгоритму обходу або передається рівно одне повідомлення, або рівно один процес отримав повідомлення ще послав у відповідь повідомлення. З більш абстрактної погляду, сполучення обчисленні, взяті разом, можна як єдиний об'єкт (маркер), який передається від процесу процесу отже, «відвідує» все процеси. У Розділі 7.4 алгоритми обходу йдуть на побудови алгоритмів вибору і цього важливо знати як загальна кількість переходів маркера лише у хвилі, а й скільки переходів необхідне здобуття права відвідати перші x процесів. Визначення 6.25 Алгоритм називається алгоритмом f-обхода (для класу мереж), якщо якого є алгоритмом обходу (при цьому класу); і у кожному обчисленні після f (x) переходів маркера посещено щонайменше min (N, x+1) процесів. Кольцевой алгоритм (Алгоритм 6.2) є алгоритмом обходу, і те що x+1 процес отримав маркер після x кроків (для x < N), проте процеси отримають після N кроків, це алгоритм x-обхода для кільцевої сети.

6.3.1 Обхід клік Кліку можна обминути шляхом послідовного опитування; алгоритм дуже нагадує Алгоритм 6.6, але воднораз тестується лише одне сусід ініціатора. Тільки коли отримано відповідь від однієї сусіда, тестується наступний; див. Алгоритм 6.10.

var recp: integer init 0; (* лише ініціатора *) Для инициатора:

(* позначимо Neighp = {q1, q2, ., qN-1} *) begin while recp < # Neighp do begin send to qrecp+1; receive; recp := recp + 1 end; decide end Для не-инициатора: begin receive from q; send to q end.

Алгоритм 6.10 Послідовний алгоритм опитування. Теорему 6.26 Послідовний алгоритм опитування (Алгоритм 6.10) є алгоритмом 2x-обхода для клік. Доказ. Легко помітити, що до того часу, коли алгоритм завершується, кожен процес послав ініціатору відповідь. (2x-1)-е повідомлення — це опитування для qx, а (2x)-е — це її відповідь. Отже, коли було передано 2x повідомлень, був посещен x+1 процес p, q1, …, qx.

6.3.2 Обхід торів Тором nЧn називається граф G = (V, E), где.

V = Zn Ч Zn = { (і, j): 0? і, j < n} и.

E = {(і, j)(i ", j "): (і = і «& j = j «±1)? (і = і «±1 & j = j ») }; див. Розділ B.2.4. (Складання і віднімання тут по модулю n.) Передбачається, що тор має почуття напрями (див. Розділ B.3), тобто. в вершині (і, j) канал до (і, j+1) має мітку Up, канал до (і, j-1) — мітку Down, канал до (i+1, j) — мітку Right, і канал до (i-1, j) — мітку Left. Координатна пара (і, j) зручна визначення топології сіті й її почуття напрями, але поки ми припускаємо, що згадані процеси не знають цих координат; топологічне знання обмежена знаками каналов.

Для ініціатора (виконується один раз): send to Up До кожного процесу і при отриманні маркера: begin if k=n2 then decide else if n|k then send to Up else send to Right end.

Алгоритм 6.11 Алгоритм обходу для торів. Тор є Гамильтоновым графом, тобто. в торі (довільного розміру) існує Гамільтонів цикл і маркер передається по циклу з допомогою Алгоритму 6.11. Після k-го переходу маркера він пересилається вгору, якщо n|k (k ділиться на n), він передається направо. Теорему 6.27 Алгоритм для тору (Алгоритм 6.11) є алгоритмом xобходу для торів. Доказ. Як неважко помітити з алгоритму, рішення приймається після того, як маркер передали n2 раз. Якщо маркер переходить від процесу p до процесу q з допомогою U переходів вгору й за R переходів вправо, то p = q тоді і тільки тоді ми, коли (n|U & n|R). Означимо через p0 ініціатор, а ще через pk — процес, котра отримує маркер. З n2 переходів маркера n — переходи вгору, а решта n2-n — переходи вправо. Т.к. і n, і n2-n кратні n, то pn2 = p0, отже, алгоритм спливає инициаторе. Далі буде показано, що це процеси з p0 по pn2 -1 різні; т.к. всього n2 процесів, то це означає, кожен процес пройдено. Припустимо, що pa = pb для 0? a < b < n2. Між pa і pb маркер зробив кілька переходів вгору й за вправо, і т.к. pa = pb, кількість переходів кратно n. Вивчивши алгоритм, помітні, що це означає, що # {k: a? k < b & n|k} кратно n, і # {k: a? k < b & n не |k} кратно n. Розміри двох множин у сумі становлять b-a, звідки слід, що n|(b-a). Означимо (b-a) = l*n, тоді безліч {k: a? k < b} містить l кратних n. Звідси випливає, що n|l, отже n2|(b-a), що зумовлює протиріччю. Т.к. всі з p0 по pn2 -1 різні, після x переходів маркера буде посещен x+1 процесс.

6.3.3 Обхід гиперкубов N-мерным гиперкубом називається граф G = (V, E), где.

V = { (b0,…, bn-1): bi = 0, 1} и.

E = { (b0,…, bn-1); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (c0,…, cn-1): b і з відрізняються на 1 біт}; див. Підрозділ B.2.5. Передбачається, що гіперкуб має почуття напрями (див. Розділ B.3), тобто. канал між вершинами b і з, де b і з різняться битому з номером і, позначається «і» на обох вершинах. Передбачається, що мітки вершин невідомі процесам; їх топологічне знання обмежена знаками каналів. Як багато і тор, гіперкуб є Гамильтоновым графом, і Гамільтонів цикл поводиться з використанням Алгоритму 6.12. Доказ коректності алгоритму схоже доказ для Алгоритму 6.11.

Для ініціатора (виконується одного разу): send на каналі n -1 До кожного процесу і при отриманні маркера: begin if k=2n then decide else begin нехай l — найбільший номер: 2l|k; send на каналі l end end.

Алгоритм 6.12 Алгоритм обходу для гиперкубов.

Теорема 6.28 Алгоритм для гиперкуба (Алгоритм 6.12) є алгоритмом xобходу для гиперкуба. Доказ. З алгоритму видно, що ухвалено рішення приймається після 2N пересилань маркера. Нехай p0 — ініціатор, а pk — процес, котра отримує маркер. Для будь-якого k < 2N, позначення pk і pk+1 відрізняються на 1 біт, індекс якого позначимо як l (k), задовольняє наступному умові: [pic] Т.к. нічого для будь-якого і < n існує однакову кількість k? {0, …, 2N} з l (k) = і, то p0 = p2n і рішення приймається в инициаторе. Аналогічно доведенню Теореми 6.27, можна показати, що з pa = pb слід, що 2n|(b-a), звідки слід, що це p0, …, p2n-1 різні. З усієї цього треба, що, коли відбувається завершення, всі пройдено, і після x переходів маркера буде посещен x+1 процесс.

6.3.4 Обхід зв’язкових мереж Алгоритм обходу для довільних зв’язкових мереж дали Тарри в 1895 [Tarry; T1895]. Алгоритм сформульований на таких двох правилах; див. Алгоритм 6.13. R1. Процес будь-коли передає маркер двічі за одним й тому каналу. R2. Не-инициатор передає маркер своєму батькові чи матері (сусідові, від якої він уперше отримав маркер), лише коли неможлива передача на інших каналах, відповідно до правилом R1.

var usedp[q]: boolean init false всім q? Neighp ;

(* Ознака того, відправив чи p повідомлення q *) fatherp: process init udef ;

Для ініціатора (виконується одного разу): begin fatherp := p; вибір q? Neighp; usedp[q] := true; send to q; end.

Для кожного процесу і при отриманні від q0: begin if fatherp = udef then fatherp := q0; if? q? Neighp: usedp[q] then decide else if? q? Neighp: (q? fatherp & usedp[q]) then begin вибір q? Neighp {fatherp} з usedp[q]; usedp[q] := true; send to q end else begin usedp[fatherp] := true; send to fatherp end end.

Алгоритм 6.13 Алгоритм обходу Тарри.

Теорема 6.29 Алгоритм Тарри (Алгоритм 6.13) є алгоритмом обходу. Доказ. Т.к. маркер передається трохи більше разу на обох напрямах через кожен канал, всього він передається трохи більше 2|E| раз до завершення алгоритму. Т.к. кожен процес передає маркер через кожен канал трохи більше один раз, то кожен процес отримує маркер через кожен канал трохи більше один раз. Щоразу, коли маркер захоплюється неініціатором p, виходить, що p отримав маркер однією разів більше, ніж послав його. Звідси випливає, що його каналів, инцидентных p, перевищує кількість каналів, використаних p, по крайнього заходу, на 1. Отже, p так само рішення, а передає маркер далі. Отже, рішення приймається в инициаторе. Далі, за 3 кроку доведуть, що коли і алгоритм завершується, кожен процес передав маркер. Усі канали, инцидентные ініціатору, було пройдено раз на обох напрямах. Ініціатором маркер прийшов на всіх каналах, інакше алгоритм не завершився б. Ініціатор отримав маркер стільки ж раз, скільки відправив його; т.к. ініціатор отримував маркер щоразу через інший канал, то маркер пересилався через кожен канал за одним разу. До кожного відвідуваного процесу p все канали, инцидентные p було пройдено раз на кожному напрямі. Припустивши, що тут інше, виберемо в ролі p перший зустрівся процес, котрій це виконується, і зауважимо, що із (1) p перестав бути ініціатором. З вибору p, все канали, инцидентные fatherp було пройдено раз на обох напрямках, звідки слід, що p переслав маркер своєму батькові чи матері. Отже, p використав инцидентные канали, щоб переслати маркер; але, т.к. маркер наприкінці залишається в инициаторе, p отримав маркер стільки ж раз, скільки відправив його, тобто. p отримав маркер за одним разу через кожен инцидентный канал. Ми дійшли протиріччю. Усі були посещены й у канал пройдено за одним разу в обох напрямках. Якщо є непосещенные процеси, це вони мають сусіди p і q такі, що p був посещен, а q ні. Це суперечить з того що все канали p було пройдено в обох напрямках. Отже, із (2), всі були посещены і всі канали пройдено раз на обох напрямах. Кожне обчислення алгоритму Тарри визначає остовное дерево мережі, як показано в Лемме 6.3. Рішуче дерева перебуває ініціатор, а кожен неініціатор p наприкінці обчислення заніс свого батька в дереві в зміну fatherp. Бажано, щоб кожен процес також знав (наприкінці обчислення), які з його сусідів є її синами в дереві. Цього досягти, посилаючи батькові чи матері fatherp спеціальне сообщение.

6.4 Тимчасова складність: пошук завглибшки Процеси в алгоритмі Тарри досить вільні у виборі сусіда, якому передається маркер, у результаті виникає великий клас остовных дерев. У розділі обговорюватимуться алгоритми, які обчислюють остовные дерева з додатковим властивістю: кожне листове ребро з'єднує дві вершини, одній із яких предок інший. Листове ребро — це ребро, не те що остовному дереву. У цьому кореневому остовном дереві T мережі G кожному за p T[p] позначає безліч процесів в поддереве p, а A[p] позначає предків p, тобто. вершини шляху до T від кореня до p. Зауважимо, що q? T[p]? p? A[q]. Визначення 6.30 Остовное дерево T мережі G називається деревом пошуку глибину, для кожного листового ребра pq q? T[p]? q? A[p]. Дерева пошуку глибину, чи DFS-деревья (DFS — Depth-First Search), використовують у багатьох алгоритми на графах, як-от перевірка планарности, перевірка двусвязности, й у побудови интервальных схем маркування (див. Підрозділ 4.4.2). У Розділі 6.4.1 буде показано, що незначна модифікація алгоритму Тарри (саме, обмеження свободи вибору процесів) дозволяє алгоритму обраховувати дерева пошуку глибину. Отриманий алгоритм називатимемо класичним алгоритмом пошуку глибину. У Підрозділі 6.4.2 буде представлено два алгоритму, які обчислюють дерева пошуку глибину за менше час, ніж класичний алгоритм. Поняття тимчасової складності розподілених алгоритмів буде визначено нижче. У Підрозділі 6.4.3 представлять алгоритм пошуку глибину для мереж з початковим знанням ідентифікації сусідів. І тут Теорему 6.6 неприйнятна, і буде може бути даний алгоритм, використовує лише 2N-2 повідомлень. Тимчасова складність розподілених алгоритмів. Тільки вже цілях аналізу розподілених алгоритмів, буде зроблено деякі ідеалізовані тимчасові припущення. Коректність алгоритмів не залежить з посади цих припущень. Визначення 6.31 Тимчасова складність розподіленого алгоритму — це максимальне час, необхідну на обчислення алгоритму при наступних припущеннях: T1. Процес може виконати будь-яке кінцеве кількість подій за нульовий час. T2. Проміжок часу між відправленням та придбанням повідомлення — трохи більше однієї одиниці часу. Тимчасові складності всіх хвильових алгоритмів цієї глави викладені у Таблиці 6.19. Перевірка величин з цього таблиці, не доведених у цій главі, залишено читачеві як вправи. Альтернативні визначення тимчасової складності обговорюються в Підрозділі 6.5.3. Лема 6.32 Для алгоритмів обходу тимчасова складність дорівнює складності повідомлень. Доказ. Повідомлення пересилаються послідовно, і кожен може зайняти одну одиницю времени.

6.4.1 Розподілений пошук завглибшки Класичний алгоритм пошуку глибину виходить, коли свободу вибору сусіда передачі маркера в алгоритмі Тарри обмежується наступним, третім правилом; див. Алгоритм 6.14. R3. Коли процес отримує маркер, він надсилає його назад через хоча б самий канал, якщо це дозволяється правилами R1 і R2. Теорему 6.33 Класичний алгоритм пошуку глибину (Алгоритм 6.14) обчислює остовное дерево пошуку глибину, використовуючи 2|E| повідомлень і 2|E| одиниць часу. Доказ. Т.к. алгоритм реалізує алгоритм Тарри, це алгоритм обходу і він обчислює остовное дерево T. Вже засвідчили, кожен канал передає два повідомлення (за одним в обох напрямках), що доводить оцінку складності повідомлень, а оцінка для тимчасової складності випливає з те, що 2|E| повідомлень передаються одне одним, причому кожне займає трохи більше однієї одиниці часу. Залишається показати, що з правила R3 слід, що получающееся дерево — дерево пошуку глибину. По-перше, з R3 слід, що з першим проходом по листовому ребру негайно слід другий, у напрямі. Нехай pq — листове ребро і p першим використовує ребро. Коли q отримує маркер від p, q вже посещен (інакше q присвоїть fatherq p і ребро нічого очікувати листовим) і usedp[q] = false (т.к. за припущенням p перший із двох процесів використовував ребро). Отже, за правилом R3, q негайно відправляє маркер назад p. Нині можна показати, що й pq — листове ребро, що використовується спочатку p, то q? A[p]. Розглянемо шлях, пройдений маркером, що він ні пересланий через pq. Т.к. pq — листове ребро, q був посещен доти, як маркер потрапив у q цю ребро:

…, q, …, p, q Одержимо від цього шляху максимально найкоротший шлях, замінивши все комбінації r1, r2, r1, де r1r2 — листове ребро, на r1. З попередніх спостережень, все листові ребра тепер зібрано, звідки слід, що що вийшов шлях — це шлях у T, який складається тільки з ребер, пройдених до першого проходження pq. Якщо q перестав бути предком p, то це означає, що ребро від q до fatherq було пройдено доти, як було зазначено пройдено ребро qp, що суперечить правилу R2 алгоритма.

var usedp[q]: boolean init false всім q? Neighp ;

(* Ознака того, відправив чи p повідомлення q *) fatherp: process init udef ;

Для ініціатора (виконується одного разу): begin fatherp := p; вибір q? Neighp; usedp[q] := true; send to q; end.

Для кожного процесу і при отриманні від q0: begin if fatherp = udef then fatherp := q0; if? q? Neighp: usedp[q] then decide else if? q? Neighp: (q? fatherp & usedp[q]) then begin if fatherp? q0 & usedp[q0] then q := q0 else вибір q? Neighp {fatherp}.

з usedp[q]; usedp[q] := true; send to q end else begin usedp[fatherp] := true; send to fatherp end end.

Алгоритм 6.14 Класичний алгоритм пошуку глибину. Складність повідомлень класичного розподіленого пошуку глибину дорівнює 2|E|, по Теоремі 6.6 це найкраща складність (крім множника 2), якщо ідентифікація сусідів невідома спочатку. Тимчасова складність також становить 2|E|, що у Лемме 6.32, є найкращою складністю для алгоритмів обходу у разі. Розподілена версія пошуку глибину була вперше представлена Cheung [Che83]. У Підрозділі 6.4.2 розглядатимуться два алгоритму, що їх дерево пошуку глибину у мережі не повідомляючи ідентифікації сусідів за O (N) одиниць часу. Отже, ці алгоритми є алгоритмами обходу. У Підрозділі 6.4.3 знання про інших сусідів буде використано щоб одержати алгоритму з тимчасової складністю і складністю повідомлень O (N).

6.4.2 Алгоритми пошуку глибину за лінійне час Причина високої тимчасової складності класичного алгоритму пошуку глибину у тому, що це ребра, як належать дереву, і листові, обходяться послідовно. Сообщение-маркер відбувається за всім листовим ребрах і вирішив негайно повертається назад, як показано в доказі Теореми 6.33. Усі рішення з не меншою тимчасової складністю засновані у тому, що маркер відбувається лише по ребрах дерева. Вочевидь, на це потрібно лінійне час, т.к. є тільки N-1 ребро дерева. Рішення Авербаха. У алгоритм включається механізм, який запобігає передачу маркера через листове ребро. У алгоритмі Авербаха [Awerbuch; Awe85b] гарантується, кожен процес у момент, що він повинен передати маркер, знає, які з його сусідів вже було пройдено. Потім процес вибирає непройденного сусіда, чи, якщо немає, посилає маркер своєму батькові чи матері. Коли процес p вперше відвідується маркером (для ініціатора це відбувається на початку алгоритму), p повідомляє це всім сусідам r, крім його батька, посилаючи повідомлення. Передача маркера відкладається, поки p не отримає повідомлення від усіх сусідів. У цьому гарантується, кожен сусід r процесу p в останній момент, коли p передає маркер, знає, що p був посещен. Коли маркер прибуває в r, r не передасть маркер p, за умови що p не його батько; див. Алгоритм 6.15. Через передачі повідомлень здебільшого usedp[fatherp] = true, навіть якщо p ще послав маркер своєму батькові чи матері. Тож у алгоритмі має бути явно запрограмовано, що тільки ініціатор може приймати рішення; а не-инициатор p, котрій usedp[q] = true всім сусідів q, передає маркер своєму батькові чи матері. Теорему 6.34 Алгоритм Авербаха (Алгоритм 6.15) обчислює дерево пошуку глибину за 4N-2 одиниць часу й використовує 4|E| повідомлень. Доказ. Фактично, маркер передається за тими самими самим каналам, як й у Алгоритмі 6.14, крім те, що пропускається передача по листовим каналам. Т.к. передача по листовим каналам впливає на кінцеве значення fatherp нічого для будь-якого процесу p, то результаті виходить дерево, що може вийти й в Алгоритмі 6.14. Маркер послідовно проходить двічі через кожен із N-1 каналів дерева, куди витрачається 2N-2 одиниць часу. У кожній вершині маркер простоює до того, що робити переданим, трохи більше один раз через обміну повідомленнями /, що зумовлює затримки лише на 2 одиниці часу у кожної вершині. Кожне листове ребро передає два повідомлення й два повідомлення. Кожне ребро в дереві передає два повідомлення, одне (посылаемое від батька нащадку), родовищ і одне (від нащадка батькові чи матері). Отже, передається 4|E| сообщений.

var usedp[q]: boolean init false всім q? Neighp ;

(* Ознака того, відправив чи p повідомлення q *) fatherp: process init udef ;

Для ініціатора (виконується одного разу): begin fatherp := p; вибір q? Neighp; forall r? Neighp do send to r; forall r? Neighp do receive from r; usedp[q] := true; send to q; end.

Для кожного процесу і при отриманні від q0: begin if fatherp = udef then begin fatherp := q0; forall r? Neighp {fatherp} do send to r; forall r? Neighp {fatherp} do receive from r; end; if p — ініціатор and? q? Neighp: usedp[q] then decide else if? q? Neighp: (q? fatherp & usedp[q]) then begin if fatherp? q0 & usedp[q0] then q := q0 else вибір q? Neighp {fatherp}.

з usedp[q]; usedp[q] := true; send to q end else begin usedp[fatherp] := true; send to fatherp end end.

Для кожного процесу і при отриманні від q0: begin usedp[q0] := true; send to q0 end.

Алгоритм 6.15 Алгоритм пошуку глибину Авербаха.

Передачу повідомлення сусідові, якому процес передає маркер, можна опустити. Це вдосконалення (не яке виконує в Алгоритмі 6.15) зберігає дві повідомлення кожному за ребра дерева і, отже, зменшує складність повідомлень на 2N-2 сообщения.

Решение Сайдона. Алгоритм Сайдона [Cidon; Cid88] покращує тимчасову складність алгоритму Авербаха, не посилаючи повідомлення. У модифікації Сайдона маркер передається негайно, тобто. без затримки на 2 одиниці часу, внесеної в алгоритм Авербаха очікуванням підтвердження. Той самий алгоритм було запропоновано Лакшмананом та інших. [Lakshmanan; LMT87]. У алгоритмі Сайдона може виникнути така ситуація. Процес p отримав маркер і послав повідомлення свого сусіда r. Маркер пізніше потрапляє у r, але у момент, коли r отримує маркер, повідомлення процесу p ще досягло r. І тут r може передати маркер p, фактично посилаючи його через листове ребро. (Зауважимо, що сполучення алгоритмі Авербаха запобігають виникнення цій ситуації.) Щоб обійти цю ситуацію процес p запам’ятовує (в перемінної mrsp), якому сусідові він переслав маркер востаннє. Коли маркер відбувається лише по ребрах дерева, p одержує її в наступного разу того ж таки сусіда mrsp. У ситуації, описаної вище, p отримує повідомлення від іншого сусіда, а саме, від r; у разі маркер ігнорується, але p позначає ребро rp, як пройдене, коли б від r отримали повідомлення. Процес r отримує повідомлення від p після пересилки маркера p, тобто. r отримує повідомлення від сусіда mrsr. І тут r діє бо коли б вона послав маркер p; r вибирає наступного сусіду й передає маркер; див. Алгоритм 6.16/6.17. Теорему 6.35 Алгоритм Сайдона (Алгоритм 6.16/6.17) обчислює DFS-дерево за 2N-2 одиниць часу, використовуючи 4|E| повідомлень. Доказ. Маршрут маркера подібний до маршруту в Алгоритмі 6.14. Проходження по листовим ребрах або пропускається (як і Алгоритмі 6.15), або у у відповідь маркер через листове ребро посилається повідомлення. У цьому разі, процес, одержуючи повідомлення, продовжує передавати маркер, коли б маркер повернули через листове ребро негайно. Час між двома успішними передачами маркера з дерева обмежена однієї одиницею часу. Якщо маркер послали по ребру дерева процесу p в останній момент часу t, то момент t все повідомлення раніше відвіданих сусідів q процесу p були, і, отже, цих повідомлень прибудуть не пізніше моменту часу t+1. Отже, хоча p міг кілька разів послати маркер по листовим ребрах до t+1, пізніше t+1 p відновився після всіх таких помилок, і передав маркер по ребру, приналежному дереву. Т.к. повинні прагнути бути пройдено 2N-2 ребра дерева, алгоритм завершується за 2N-2 одиниць часу. Через кожен канал передається трохи більше двох повідомлень і двох, звідки кордон складності повідомлень дорівнює 4|E|.

var usedp[q]: boolean init false всім q? Neighp; fatherp: process init udef; mrsp: process init udef ;

Для ініціатора (виконується одного разу): begin fatherp := p; вибір q? Neighp; forall r? Neighp do send to r; usedp[q] := true; mrsp := q; send to q; end.

Для кожного процесу і при отриманні від q0: begin usedp[q0] := true; if q0 = mrsp then (* інтерпретувати, як *) передати повідомлення як із отриманні end.

Алгоритм 6.16 Алгоритм пошуку глибину Сайдона (Частина 1).

До кожного процесу і при отриманні від q0: begin if mrsp? udef and mrsp? q0.

(* це листове ребро, інтерпретуємо як повідомлення *) then usedp[q0] := true else (* діяти, як у минулому алгоритмі *) begin if fatherp = udef then begin fatherp := q0; forall r? Neighp {fatherp} do send to r; end; if p — ініціатор and? q? Neighp: usedp[q] then decide else if? q? Neighp: (q? fatherp & usedp[q]) then begin if fatherp? q0 & usedp[q0] then q := q0 else вибір q? Neighp {fatherp} з usedp[q]; usedp[q] := true; mrsp := q; send to q end else begin usedp[fatherp] := true; send to fatherp end end end.

Алгоритм 6.17 Алгоритм пошуку глибину Сайдона (Частина 2). В багатьох випадках цей алгоритм буде пересилати менше повідомлень, ніж алгоритм Авербаха. Оцінка кількості повідомлень в алгоритмі Сайдона передбачає найгірший випадок, саме, коли маркер пересилається через кожне листове ребро в обох напрямках. Очікується, що повідомлення допоможуть уникнути багатьох небажаних пересилань, тоді через кожен канал передають лише дві чи три повідомлення. Сайдон помічає, хоча алгоритм може передати маркер у вже посещенную вершину, він має кращої тимчасової складністю (і складністю повідомлень), ніж Алгоритм 6.15, який запобігає такі небажані передачі. Це означає, що у відновлення після непотрібних дій то, можливо витрачено менше і повідомлень, ніж їх запобігання. Сайдон залишає відкритим питання, може бути DFS-алгоритм, який сягає складності повідомлень класичного алгоритму, тобто. 2|E|, і який витрачає O (N) одиниць времени.

6.4.3 Пошук завглибшки зі знанням сусідів Якщо процесам відомі ідентифікатори їх сусідів, прохід листових ребер можна запобігти, включивши до маркер список відвіданих процесів. Процес p, одержуючи маркер з включеною у нього списком L, не передає маркер процесам з L. Змінна usedp[q] непотрібна, т.к. якщо p раніше передав маркер q, то q? L; див. Алгоритм 6.18. Теорему 6.36 DFS-алгоритм зі знанням сусідів є алгоритмом обходу і обчислює дерево пошуку глибину, використовуючи 2N-2 повідомлень за 2N-2 одиниць часу. Це алгоритму висока бітова складність; якщо w — кількість біт, необхідні уявлення одного ідентифікатора, список L триватиме до Nw біт; див. Вправа 6.14.

var fatherp: process init udef ;

Для ініціатора (виконується одного разу): begin fatherp := p; вибір q? Neighp; send to q end.

Для кожного процесу і при отриманні від q0: begin if fatherp = udef then fatherp := q0; if (q? Neighp L then begin вибір q? Neighp L; send < tlist, L?{p} > to q end else if p — ініціатор then decide else send < tlist, L?{p} > to fatherp end.

Алгоритм 6.18 Алгоритм пошуку глибину зі знанням соседей.

6.5 Усі питання 6.5.1 Огляд хвильових алгоритмів У Таблиці 6.19 дано список хвильових алгоритмів, розглянутих цієї главі. У стовпці «Номер» дана нумерація алгоритмів у розділі; в стовпці «C/D» зазначено, чи є алгоритм централізованим (З) чи децентралізованим (D); стовпець «T» визначає, чи є алгоритм алгоритмом обходу; в стовпці «Повідомлення» дана складність повідомлень; в стовпці «Час» дана тимчасова складність. У цих шпальтах N — кількість процесів, |E| - кількість каналів, D — діаметр мережі (в переходах).

|Алгоритм |Номер|Топология |C/D|T |Сообщения|Время | |Розділ 6.2: Загальні алгоритми | |Кольцевой |6.2 |кільце |З |так |N |N | |Деревоподібний |6.3 |дерево |D |немає |N |O (D) | |Эхо-алгоритм |6.5 |произвольная|C |немає |2|E| |O (N) | |Алгоритм |6.6 |кліка |З |немає |2N-2 |2 | |опитування | | | | | | | |Фазовий |6.7 |произвольная|D |немає |2D|E| |2D | |Фазовий на |6.8 |кліка |D |немає |N (N-1) |2 | |кліках | | | | | | | |Фінна |6.9 |произвольная|D |немає |?4N|E| |O (D) | |Розділ 6.3: Алгоритми обходу | |Последовательн|6.10 |кліка |З |так |2N-2 |2N-2 | |ый опитування | | | | | | | |Для торів |6.11 |тор |З |так |N |N | |Для гиперкубов|6.12 |гіперкуб |З |так |N |N | |Тарри |6.13 |произвольная|C |так |2|E| |2|E| | |Розділ 6.4: Алгоритми пошуку глибину | |Класичний |6.14 |произвольная|C |так |2|E| |2|E| | |Авербаха |6.15 |произвольная|C |немає |4|E| |4N-2 | |Сайдона |6.16/|произвольная|C |немає |4|E| |2N-2 | | |6.17 | | | | | | |З знанням |6.18 |произвольная|C |так |2N-2 |2N-2 | |сусідів | | | | | | |.

Замечание: фазовий алгоритм (6.7) і алгоритм Фінна (6.9) підходять для орієнтованих сетей.

Таблица 6.19 Хвильові алгоритми цієї глави. Складність поширення хвиль у мережах більшості топологий значно залежить від цього, централізований алгоритм чи ні. У Таблиці 6.20 приведено складність повідомлень централізованих і децентралізованих хвильових алгоритмів для кілець, довільних мереж, і дерев. Так само чином можна проаналізувати залежність складності з інших параметрів, як-от знання сусідів чи почуття напрями (Розділ B.3).

|Топология |C/D |Складність |Посилання | |Кільце |З |N |Алгоритм 6.2 | | |D |O (N logN) |Алгоритм 7.7 | |Произвольная|C |2|E| |Алгоритм 6.5 | | |D |O (N logN + |E|)|Раздел 7.3 | |Дерево |З |2(N-1) |Алгоритм 6.5 | | |D |O (N) |Алгоритм 6.3 |.

Таблица 6.20 Вплив централізації на складність сообщений.

6.5.2 Обчислення сум У Підрозділі 6.1.5 засвідчили, що з одну хвилю можна визначити инфимум по входам всіх процесів. Обчислення инфимума можна використовувати для обчислення коммутативного, асоціативного і идемпотентного оператора, узагальненого на входи, такого принаймні, максимум, та інших. (див. Укладання 6.14). Багато функцій не вычислимо в такий спосіб, у тому числі - сума за всі входам, т.к. оператор підсумовування не идемпотентен. Підсумовування входів можна використовувати для підрахунку процесів з певним властивістю (шляхом присвоювання входу 1, якщо процес має властивістю, і 0 інакше), й одержують результати цього підрозділу можуть бути поширені інші оператори, є коммутативными і асоціативними, такі як твір цілих чисел чи об'єднання мультимножеств. Виявляється, немає загального методу обчислення сум з допомогою хвильового алгоритму, але у окремих випадках обчислення суми можливо. Наприклад, у разі алгоритму обходу, чи коли відбуваються ідентифікатори, чи коли алгоритм породжує остовное дерево, що може бути використана для обчислення. Неможливість існування загального методу. Неможливо дати загальний метод обчислення сум з допомогою довільного хвильового алгоритму, подібного методу, застосованому в Теоремі 6.12 для обчислення инфимумов. Це може бути показане так. Існує хвильової алгоритм для класу мереж, що включає все неорієнтовані анонімні (anonymous) мережі діаметра два, саме, фазовий алгоритм (з параметром D=2). Немає алгоритму, котрі можуть обчислити суму за всі входам, і що є правильним всім неориентированных анонімних (anonymous) мереж діаметра два. Цей клас мереж включає дві мережі, зображені на Рис. 6.21. Якщо припустити, кожен процес має вхід 1, відповідь буде 6 для лівої мережі і побачили 8-го — для правої. Скориставшись технологією, представленої у Главі 9, можна показати, що кожен алгоритм дасть для обох мереж і той ж результат, отже, працюватиме неправильно. Детальний доказ залишено читачеві в Вправі 9.7. [pic] Рис. 6.21 Дві мережі діаметра дві голови і ступеня три. Обчислення сум з допомогою алгоритму обходу. Якщо A — алгоритм обходу, сума за всі входам то, можливо обчислена так. Процес p містить зміну jp, инициализированную значенням входу p. Маркер містить додаткове полі p. s. Щоразу, коли p передає маркер, p виконує таке: p. s := p. s + jp; jp := 0 і далі можна показати, що у час кожному за раніше пройденого процесу p jp = 0 і p. s дорівнює сумі допомоги входів всіх пройдених процесів. Отже, коли алгоритм завершується, p. s дорівнює сумі допомоги за всі входам. Обчислення суми з допомогою остовного дерева. Деякі хвильові алгоритми надають кожному за події прийняття рішень dp у процесі p остовное дерево з коренем в p, яким повідомлення передаються по до p. Фактично, кожне обчислення будь-якого хвильового алгоритму містить такі остовные дерева. Проте, може виникнути ситуація, коли процес q посилає кілька повідомлень не знає, які з його вихідних ребер належать до такого дереву. Якщо процеси знають, яке що йде ребро був частиною їхнього батьком у тому дереві, дерево можна використовуватиме обчислення сум. Кожен процес посилає своєму батькові чи матері в дереві суму всіх входів його поддерева. Цей принцип може бути застосований для деревоподібного алгоритму, эхо-алгоритма і фазового алгоритму для клік. Деревоподібний алгоритм легко то, можливо змінено те щоб включати суму входів Tpq в повідомлення, посылаемое від p до q. Процес, який приймає рішення, обчислює оцінку, складаючи величини з цих двох повідомлень, що зустрічаються однією рубі. Фазовий алгоритм змінюється те щоб у кожному повідомленні від q до p пересилався вхід q. Процес p складає усі отримані розміру й свій власний вхід, і результати є правильною відповіддю, коли p приймають рішення. У эхо-алгоритме входи можуть суммироваться з використанням остовного дерева T, побудованого явно під час обчислення; див. Вправа 6.15. Обчислення суми з допомогою ідентифікації. Припустимо, кожен процес має унікальний ідентифікатор. Сума за всі входам то, можливо обчислена так. Кожен процес позначає свій вхід ідентифікатором, формуючи пару (p, jp); зауважимо, що ніякі процеси не формують однакові пари. Алгоритм гарантує, що, коли процес приймають рішення, він знає окремий вхід; P. S = {(p, jp): p? P} - об'єднання за всі p множин Sp = {(p, jp)}, що може бути обчислено за хвилю. Необхідний результат обчислюється з допомогою локальних операцій у цьому безлічі. Таке рішення вимагає доступності унікальних ідентифікаторів кожному за процесу, значно збільшує битовую складність. Кожне повідомлення хвильового алгоритму включає у собі підмножина P. S, який посів N*w біт, для уявлення ідентифікатора і входу потрібно w біт; див. Вправа 6.16.

6.5.3 Альтернативні визначення тимчасової складності Тимчасову складність розподіленого алгоритму можна визначити кількома способами. У цій книзі під час розгляду тимчасової складності завжди є у вигляді Визначення 6.31, але тут обговорюються інші можливі визначення. Визначення, заснований більш суворих тимчасових припущеннях. Час, споживане розподіленими обчисленнями, можна оцінити, використовуючи більш суворі часові припущення у системі. Визначення 6.37 Одинична складність алгоритму (one-time complexity) — це максимальне час обчислення алгоритму при наступних припущеннях. O1. Процес може виконати будь-яке кінцеве кількість подій за нульовий час. O2. Проміжок часу між відправленням та придбанням повідомлення — рівно одна одиниця часу. Порівняємо визначення з Визначенням 6.31 зауважимо, що припущення O1 збігаються з T1. Т.к. час передачі повідомлення, прийняте T2, менше, або одно часу, ухваленого O2, можна подумати, що одинична складність більше чи дорівнює тимчасової складності. Далі можна подумати, що кожне обчислення при припущенні T2 виконується не довше, аніж за O2, і, отже, обчислення з максимальним часом також займе при T2 не більше часу, аніж за O2. Недогляд цього аргументу у цьому, що відхилення у часі передачі повідомлення, допустимі при T2, породжують великий клас можливих обчислень, включаючи обчислення із поганим часом. Це ілюструється нижче для эхо-алгоритма. Фактично, вірно зворотне: тимчасова складність алгоритму більше або дорівнює одиничної складності цього алгоритму. Будь-яке обчислення, дозволене при припущеннях O1 і O2, також припустимо при T1 і T2 і у своїй стільки ж часу. Отже, найгірше поведінка алгоритму при O1 і O2 включено в Визначення 6.31 і є нижньою межею тимчасової складності. Теорему 6.38 Одинична складність эхо-алгоритма дорівнює O (D). Тимчасова складність эхо-алгоритма дорівнює ?(N), навіть у мережах із діаметром 1. Доказ. Для аналізу одиничної складності зробимо припущення O1 і O2. Процес з відривом d переходів від ініціатора отримує перше повідомлення за d одиниць часу від початку обчислення і має глибину d в що спливає у результаті дереві T. (Це можна довести індукцією по d.) Нехай DT — глибина T; тоді DT (D та інформаційний процес глибини d в T посилає повідомлення своєму батькові чи матері пізніше (2DT + 1) — d одиниць часу від початку обчислення. (Це можна показати зворотної індукцією по d.) Звідси випливає, що ініціатор приймають рішення пізніше 2DT + 1 одиниць часу від початку обчислення. Для аналізу тимчасової складності зробимо припущення T1 і T2. Процес на відстані d переходів від ініціатора отримує перше повідомлення не пізніше d одиниць часу від початку обчислення. (Це можна довести індукцією по d.) Припустимо, що остовное дерево побудовано через F одиниць часу від початку обчислення, тоді F (D. І тут глибина остовного дерева DT необов’язково обмежена діаметром (як буде показано в обчисленні нижче), але т.к. всього N процесів, глибина обмежена N-1. Процес глибини d в T посилає повідомлення своєму батькові чи матері пізніше (F+1)+(DT-d) одиниць часу від початку обчислення. (Це можна показати зворотної індукцією по d.) Звідси випливає, що ініціатор приймають рішення пізніше (F+1)+DT одиниць часу від початку обчислення, тобто. O (N). Щоб показати, що ?(N) — нижню межу тимчасової складності, побудуємо на кліці з N процесів обчислення, яке витрачає час N. Зафіксуємо в кліці остовное дерево глибини N-1 (насправді, лінійну ланцюжок вершин). Припустимо, що це повідомлення, послані вниз по ребрах дерева, отримають через 1/N одиниць часу після їх відправлення, а повідомлення через листові ребра отримають через одну одиницю часу. Ці затримки припустимі, за припущенням T2, й у обчисленні дерево повністю формується протягом одного одиниці часу, однак має глибину N- 1. Припустимо тепер, що це повідомлення, що посилаються вгору по ребрах дерева також відчувають затримку до однієї одиницю часу; у разі рішення приймається за N одиниць часу початку обчислення. Є підстави сперечатися у тому, який із двох визначень краще при обговоренні складності розподіленого алгоритму. Недолік одиничної складності у цьому, деякі обчислення не враховуються, хоча які й допускаються алгоритмом. Серед ігнорованих обчислень можуть бути такі, які споживають дуже чимало часу. Припущення в Визначенні 6.31 не виключають жодного обчислення; визначення лише встановлює міру часу кожному за обчислення. Недолік тимчасової складності у цьому, що результат визначено обчисленнями (як і доказі Теореми 6.38), що хоч і можливо, але вважається вкрай малоймовірним. Справді, у тому обчисленні одне повідомлення «обгоняется» ланцюжком з N-1 послідовно переданого повідомлення. За компроміс між двома визначеннями можна розгледіти ?- тимчасову складність, що визначається за припущенням, що затримка кожного повідомлення — величина між? і одну (? — константа ?1). До жалю, ця поступка має вадами обох визначень. Читач може спробувати показати, що ?-тимчасова складність эхо-алгоритма дорівнює O (min (N, D/?)). Найбільш точна оцінка тимчасової складності виходить, коли можна поставити розподіл ймовірностей затримок повідомлень, звідки то, можливо обчислено очікуване час обчислення алгоритму. Це варіанта є основні нестачі. По-перше, аналіз алгоритму занадто залежить не від системи, т.к. в кожної розподіленої системі розподіл затримок повідомлень різна. Удругих, здебільшого аналіз заскладний до виконання. Визначення, заснований на ланцюжках повідомлень. Витрати часу на розподілене обчислення можуть визначити з допомогою структурних властивостей обчислення, а чи не ідеалізованих тимчасових припущень. Нехай З — обчислення. Визначення 6.39 Ланцюжок повідомлень в З — це послідовність повідомлень m1, m2, …, mk така, що з будь-якого і (0? і? k) отримання mi каузально передує відправленню mi+1. Цепочечная складність розподіленого алгоритму (chain-time complexity) — це довжина найдовшої ланцюжка повідомлень переважають у всіх обчисленнях алгоритму. Цю ухвалу, як і Визначення 6.31, розглядає різноманітні виконання алгоритму визначення його тимчасової складності, але визначає іншу міру складності для обчислень. Розглянемо ситуацію (яка відбувається в обчисленні, певному в доказі теореми 6.38), коли одна повідомлення «обгоняется» ланцюжком з k повідомлень. Тимчасова складність цього (под)вычисления дорівнює 1, тоді, як цепочечная складність тієї самої самого (под)вычисления дорівнює k. У системах, де гарантується існування верхньої межі затримок повідомлень (як очікується у визначенні тимчасової складності), тимчасова складність є правильною вибором. У системах, де більшість повідомлень доставляється зі «середньої» затримкою, але невелику частину повідомлень може відчувати значно більшу затримку, краще вибрати цепочечную сложность.

Упражнения до Главі 6 Розділ 6.1 Вправа 6.1 Наведіть приклад PIF-алгоритма для систем з синхронної передачею повідомлень, який дозволяє обраховувати функцію инфимума (див. Теореми 6.7 і 6.12). Приклад може підходити лише конкретної топології. Вправа 6.2 У частковому порядку (X, ?) елемент b називається дном, якщо всім з? X, b? з. У доказі Теореми 6.11 використовується те, що частковий порядок (X,?) зовсім позбавлений дна. Де саме? Ви можете привести алгоритм, який обчислює функцію инфимума в частковому установленому порядку з дном не є хвильовим алгоритмом? Вправа 6.3 Наведіть два часткових порядку на натуральних числах, для яких функція инфимума є (1) найбільшим загальним делителем, і (2) найменшим загальним кратним (the least common ancestor). Наведіть часткові порядки на наборах підмножин області U, котрим функція инфимума є (1) перетином множин, і (2) об'єднанням множин. Вправа 6.4 Доведіть теорему про инфимуме (Теорему 6.13). Розділ 6.2 Вправа 6.5 Покажіть, що у кожному обчисленні деревоподібного алгоритму (Алгоритм 6.3) рішення приймають лише двоє процесу. Вправа 6.6 Використовуючи эхо-алгоритм (Алгоритм 6.5), складіть алгоритм, який обчислює префиксную схему маркування (див. Підрозділ 4.4.3) для довільній мережі з допомогою 2|E| повідомлень і O (N) одиниць часу. Ви можете привести алгоритм, вычисляющий схему маркування під час O (D)? (D — діаметр мережі.) Вправа 6.7 Покажіть, що співвідношення в Лемме 6.19 виконується, якщо повідомлення загубилося в каналі pq, але з виконується, якщо повідомлення можуть дублюватися. Який крок докази не діє, якщо повідомлення можуть дублюватися? Вправа 6.8 Застосуєте побудова в Теоремі 6.12 до фазовому алгоритму те щоб отримати алгоритм, вычисляющий максимум по целочисленным входам всіх процесів. Які складність повідомлень, тимчасова і бітова складність вашого алгоритма?

Упражнение 6.9 Припустимо, ви бажаєте використовувати хвильової алгоритм в мережі, де може відбутися дублювання повідомлень. Які зміни мають бути зроблені в эхо-алгоритме? Які зміни мають бути зроблені в алгоритмі Фінна? Розділ 6.3 Вправа 6.10 Повний двочастковий граф — це граф G = (V, E), де V = V1? V2 при V1? V2 =? і E = V1 Ч V2. Наведіть алгоритм 2x-обхода для повних двочасткових мереж. Вправа 6.11 Доведіть чи опровергните: Обхід гиперкуба без напрями вимагає ?(N logN) повідомлень. Розділ 6.4 Вправа 6.12 Наведіть приклад обчислення алгоритму Тарри, у якому результаті виходить DFS-дерево. Вправа 6.13 Складіть алгоритм, який обчислює интервальные схеми маркування пошуку глибину (див. Підрозділ 4.4.2) для довільних зв’язкових мереж. Чи може це можуть бути зроблено за O (N) одиниць часу? Чи може це можуть бути зроблено з допомогою O (N) повідомлень? Вправа 6.14 Припустимо, що алгоритм пошуку глибину зі знанням сусідів використовують у системі, де кожен процес знає як ідентифікатори своїх сусідів, а й безліч ідентифікаторів всіх процесів (P). Покажіть, у цьому випадку досить повідомлень, які з N бит.

Раздел 6.5 Вправа 6.15 Адаптируйте эхо-алгоритм (Алгоритм 6.5) для обчислення суми по входам всіх процесів. Вправа 6.16 Припустимо, що згадані процеси у мережах, зображених на Рис. 6.21, мають унікальні ідентифікатори, й у процес має целочисленный вхід. Смоделируйте обох мережах обчислення фазового алгоритму, вираховуючи безліч P. S = {(p, jp): p? P} суму по входам. Вправа 6.17 Яка цепочечная складність фазового алгоритму для клік (Алгоритм 6.8) ?

7 Алгоритми вибору У цьому главі обговорюватимуться проблеми вибору, також званого перебуванням лідера. Завдання вибору уперше було викладено ЛеЛанном [LeLann; LeL77], який запропонував і перше рішення; див. Підрозділ 7.2.1. Завдання починається у конфігурації, де всі процеси перебувають у однаковому стані, і входить у конфігурацію, де рівно один процес перебуває у стані лідера (leader), проте інші - може переможених (lost). Вибір серед процесів потрібно проводити, якщо винен бути виконано централізований алгоритм і немає заздалегідь відомого кандидата на роль ініціатора алгоритму. Наприклад, у разі процедури ініціалізації системи, що має бути виконано початку чи помирають після збою системи. Т.к. безліч активних процесів то, можливо невідомо заздалегідь, неможливо призначити один процес назавжди і безповоротно в ролі лідера. Існує велика кількість результатів про завданню вибору (як алгоритми, і загальніші теореми). Результати для включення до цей розділ вибиралися за такими критеріями. Синхронні системи, анонімні процеси, і отказоустойчивые алгоритми обговорюються за іншими розділах. У цьому главі завжди передбачається, що процеси та канали надійні, система повністю асинхронна, і процеси різняться унікальними ідентифікаторами. Ми зосередимо увагу до результатах, що стосуються складності повідомлень. Алгоритми з поліпшеною тимчасової складністю чи результати, які передбачають компроміс між тимчасової складністю і складністю повідомлень, не обговорюються. Ми приділятимемо увагу порядку величини складності повідомлень, не будемо розглядати результати, вносять в складність лише постійний множник. Т.к. результати Кораха та інших. (Розділ 7.4) розуміють існування O (N logN)-алгоритмов для кількох класів мереж, алгоритм для кліки з цим складністю нічого очікувати розглядатися отдельно.

7.1 Введение Задача вибору вимагає, що з конфігурації, де всі процеси перебувають у однаковому стані, система прийшла б у конфігурацію, де рівно один процес перебуває у особливому стані лідер (leader), проте решта процесів — в стані переможених (lost). Процес, що у стані пріоритет у кінці обчислення, називається лідером і хлопці кажуть, що він обраний алгоритмом. Визначення 7.1 Алгоритм вибору — це алгоритм, задовольняє наступним вимогам. Кожен процес має і той ж локальний алгоритм. Алгоритм є децентралізованим, тобто. обчислення можна починати довільним непустым підмножиною процесів. Алгоритм сягає заключній конфігурації у кожному обчисленні, й у кожної досяжною заключній конфігурації існує рівно один процес може лідера, проте решта процесів — може переможених. Іноді останнє вимога послаблюється і потрібно лише, щоб рівно один процес був у стані лідера. І тут обраний процес знає, що він переміг, але переможені (ще) не знають, що вони програли. Якщо дано алгоритм, задовольняє цим ослабленим діям, його можна легко розширити, додавши инициируемую лідером розсилку повідомлень всім процесам, коли всі процеси інформуються про результати вибору. У деяких алгоритми цієї глави це додаткове оповіщення опущений. В усіх життєвих алгоритми цієї глави процес p має зміну statep з можливими значеннями leader (лідер) і lost (програв). Деколи ми ще будемо припускати, що statep має значення sleep (сплячий), коли p ще виконав жодного кроку алгоритму, і значення cand (кандидат), якщо p вступив у обчислення, але ще знає, переміг він чи програв. Деякі алгоритми використовують додаткові стану, такі як active, passive і ін., які зазначені у самому алгоритме.

7.1.1 Припущення, використовувані у цій главі Розглянемо припущення, у яких завдання вибору вивчалася у цій главі. Система повністю асинхронна. Передбачається, що процесам недоступні загальні годинник, І що час передачі повідомлення може бути насильно довгим чи коротким. Виявляється, що припущення щодо синхронної передачі повідомлень (тобто. коли відправлення й одержання повідомлення вважається єдиної передачею) незначно впливає результати, отримані для завдання вибору. Читач може сам переконатися, що алгоритми, дані у цій главі, можна застосовувати в системах з синхронної передачею повідомлень, І що отримані нижні кордону також застосовні у разі. Припущення про існування глобального часу, як і те, що процесам доступно реальне час І що затримка повідомлень обмежена, мають важливе впливом геть виконання завдання вибору. Кожен процес ідентифікується унікальним ім'ям, своїм ідентифікатором, що процесу спочатку. Для простоти передбачається, що ідентифікатор процесу p — просто p. Ідентифікатори беруться з цілком упорядкованого безлічі P, тобто. для ідентифікаторів визначено ставлення ?. Кількість біт, які мають ідентифікатор, одно w. Важливість унікальних ідентифікаторів в завданню вибору у тому, що вони можна використовувати як для адресації повідомлень, але й порушення симетрії між процесами. Під час розробки алгоритму вибору можна, наприклад, зажадати, що з найменшою (навпаки, з найбільшим) ідентифікатором повинен перемогти. Тоді завдання у пошуках найменшого ідентифікатора з допомогою децентралізованого алгоритму. У цьому вся разі завдання вибору називають завданням пошуку экстремума. Хоча що з алгоритмів, обговорюваних у цій главі, відпочатку були викладено перебування найбільшого процесу, ми викладаємо більшість алгоритмів для вибору найменшого процесу. В усіх випадках алгоритм для вибору найбільшого процесу можна було одержати, змінивши порядок порівняння ідентифікаторів. Деякі результати цієї глави ставляться до алгоритмам порівняння. Алгоритми порівняння — це алгоритми, що використовують порівняння як операцію над ідентифікаторами. Як побачимо, все алгоритми, представлені у цій главі, є алгоритмами порівняння. Щоразу, коли дається оцінка нижньої межі, ми явно відзначаємо, стосується вона алгоритмів порівняння. Було показано (наприклад, Бодлендером [Bodlaender, Bod91b] для випадку кільцевих мереж), що у асинхронних мережах довільні алгоритми не досягають кращої складності, ніж алгоритми порівняння. Не це у разі синхронних систем, як буде показано в Главі 11; у тих системах довільні алгоритми можуть досягати кращої складності, ніж алгоритми порівняння. Кожне повідомлення може містити O (w) біт. Кожне повідомлення може містити трохи більше постійного числа ідентифікаторів процесів. Це зроблено, аби дозволити справедливе порівняння складності повідомлень різних алгоритмов.

7.1.2 Вибір і хвилі Вже зазначалося, що ідентифікатори процесів можна використовувати для порушення симетрії між процесами. Можна розробити алгоритм вибору те щоб вибирався процес з найменшою ідентифікатором. Відповідно до результатам в Підрозділі 6.1.5, найменший ідентифікатор то, можливо вирахувано за хвилю. Це означає, що вибір можна навести, виконуючи хвилю, у якій обчислюється найменший ідентифікатор, після чого процес з цим ідентифікатором стає лідером. Т.к. алгоритм вибору може бути децентралізованим, Україні цього принципу може бути застосований лише у децентралізованим хвильовим алгоритмам (див. Таблицю 6.19). Вибір з допомогою деревоподібного алгоритму. Якщо топологія мережі - дерево чи доступно остовное дерево мережі, вибір можна навести з допомогою деревоподібного алгоритму (Підрозділ 6.2.2). У древовидном алгоритмі потрібно, аби хоча б, усе листя були ініціаторами алгоритму. Щоб самому отримати розвиток алгоритму у разі, коли деякі процеси також є ініціаторами, додається фаза wake-up. Процеси, які хочуть розпочати вибір, розсилають повідомлення всім процесам. Логічний змінна ws використовується, щоб кожен процес послав повідомлення трохи більше один раз, а змінна wr використовується для підрахунку кількості повідомлень, отриманих процесом. Коли процес отримає повідомлення через кожен канал, він починає виконувати Алгоритм 6.3, який розширено (як і Теоремі 6.12) в такий спосіб, щоб вираховуватимуть найменший ідентифікатор і щоб кожен процес ухвалював рішення. Коли процес приймають рішення, він знає ідентифікатор лідера; коли цей ідентифікатор збігаються з ідентифікатором процесу, він працює лідером, і якщо немає - переможеним; див. Алгоритм 7.1.

var wsp: boolean init false; wrp: integer init 0; recp[q]: boolean всім q? Neighp init false; vp: P init p; statep: (sleep, leader, lost) init sleep ;

begin if p — ініціатор then begin wsp := true; forall q? Neighp do send to q end; while wrp < # Neighp do begin receive; wrp := wrp + 1; if not wsp then begin wsp := true; forall q? Neighp do send to q end end ;

(* Початок деревоподібного алгоритму *) while # {q: recp[q]} > 1 do begin receive from q; recp[q] := true; vp := min (vp, r) end; send to q0 with recp[q0]; receive from q0; vp := min (vp, r); (* decide з відповіддю vp *) if vp = p then statep := leader else statep := lost; forall q? Neighp, q? q0 do send to q end.

Алгоритм 7.1 Алгоритм виборів для дерев. Теорему 7.2 Алгоритм 7.1 переймається тим вибору на деревах, використовуючи O (N) повідомлень і O (D) одиниць часу. Доказ. Коли хоча б тільки процес ініціює виконання алгоритму, всі посилають повідомлення всіх своїх сусідів, й у процес починає виконання деревоподібного алгоритму після отримання повідомлення від кожної сусіда. Усі завершують деревоподібний алгоритм з однією і тим самим значенням v, саме, найменшим ідентифікатором процесу. Єдиний процес з цим ідентифікатором закінчить виконання в стані лідер, проте решта процесів — може програв. Через кожен канал пересилається дві повідомлення й дві повідомлення, звідки складність повідомлень дорівнює 4N-4. Протягом D одиниць часу по тому, як процес почав алгоритм, кожен процес послав повідомлення, отже, протягом D+1 одиниць часу кожен процес почав хвилю. Легко помітити, перше рішення приймається пізніше, як за D одиниць часу від початку хвилі, а останнє рішення приймається пізніше D одиниць часу після першого, звідки повне час одно 3D+1. Ретельніший аналіз показує, що алгоритм завжди завершується за 2D одиниць часу, але доказ цього залишено читачеві; див. Вправа 7.2. Якщо порядок повідомлень в каналі можна змінити (тобто. канал — не FIFO), процес може мати простий повідомлення від сусіда перш ніж отримав повідомлення від імені цієї сусіда. І тут повідомлення може бути тимчасово збережено чи оброблено як повідомлення, які прибувають пізніше. Кількість повідомлень то, можливо зменшено від допомогою двох модифікацій. Уперших, можна влаштувати те щоб не-инициатор не посилав повідомлення процесу, від якої він отримав перше повідомлення. Удругих, повідомлення, посылаемое листом, то, можливо поєднано з повідомленням, посылаемым цим листом. Із цією змінами кількість повідомлень, необхідну алгоритмом, зменшується до 3N-4+k, де k — кількість нелистовых стартерів [Tel91b, с.139]. Вибір з допомогою фазового алгоритму. Фазовий алгоритм можна використовуватиме вибору, надавши їй можливість вираховуватимуть найменший ідентифікатор за хвилю, як в Теоремі 6.12. Теорему 7.3 З допомогою фазового алгоритму (Алгоритм 6.7) можна навести вибір в довільних мережах, використовуючи O (D*|E|) повідомлень і O (D) одиниць часу. Алгоритм Пелега [Peleg; Pel90] грунтується на фазовому алгоритмі; він використовує O (D*|E|) повідомлень і O (D) часу, але з вимагає знання D, т.к. включає в себе обчислення діаметра. Вибір з допомогою алгоритму Фінна. Алгоритм Фінна (Алгоритм 6.9) не вимагає, щоб діаметр мережі був відомий заздалегідь. Довжина O (N*|E|) повідомлень, які у алгоритмі Фінна, вулицю значно більше, ніж допускаемая припущеннями у цій главі. Отже, кожне повідомлення алгоритмі Фінна має вважатися за O (N) повідомлень, звідки складність повідомлень становить O (N2|E|).

7.2 Кільцеві мережі У розділі розглядаються деякі алгоритми вибору односпрямованих кілець. Завдання вибору контексті кільцевих мереж була вперше викладено ЛеЛанном [LeLann; LeL77], також дав рішення з складністю повідомлень O (N2). Це було поліпшено Чангом (Chang) і Робертсом (Roberts) [CR79], що призвели алгоритм з найгіршою складністю O (N2), але з середньої складністю лише O (N logN). Рішення ЛеЛанна і ЧангаРобертса обговорюються в Підрозділі 7.2.1. Питання існуванні алгоритму з найгіршою складністю O (N logN) залишався відкритим до 1980 р., коли така алгоритм було наведено Hirschberg і Sinclair [HS80]. На відміну з більш ранніх рішень, у вирішенні Hirschberg-Sinclair потрібно, щоб канали були двунаправленными. Передбачалося, що нижню межу для односпрямованих кілець дорівнює ?(N2), але Petersen [Pet82] і Dolev, Klawe і Rodeh [DKR82] незалежно друг від друга запропонували рішення, що становить O (N log N) для односпрямованого кільця. Таке рішення у Підрозділі 7.2.2. Алгоритми були доповнені відповідними нижніми межами приблизно тоді водночас. Нижню межу для найгіршого випадку для двунаправленных кілець, рівна? 0.34N logN повідомлень, було доведено Бодлендером [Bodlaender; Bod88]. Pachl, Korach і Rotem [PKR84] довели нижні межі у ?(N logN) для середньої складності, як двунаправленных так односпрямованих кілець. Отримані результати цих по нижнім кордонів розгляне Підрозділі 7.2.3.

7.2.1 Алгоритми ЛеЛанна і Чанга-Робертса У алгоритмі ЛеЛанна [LeL77] кожен ініціатор обчислює список ідентифікаторів всіх ініціаторів, після чого вибирається ініціатор з найменшим ідентифікатором. Кожен ініціатор посилає маркер, у якому його ідентифікатор, по кільцю, і це маркер передається усіма процесами. Передбачається, що канали підпорядковуються дисципліни FIFO, І що ініціатор повинен згенерувати свій маркер доти, як і отримає маркер іншого ініціатора. (Коли процес отримує маркер, він після цього ініціює алгоритм.) Коли ініціатор p отримує свій власний маркер, маркери всіх ініціаторів пережили p, і p вибирається лише тому випадку, якщо p — найменший серед ініціаторів; див. Алгоритм 7.2.

var Listp: set of P init {p}; statep ;

begin if p — ініціатор then begin statep := cand; send to Nextp; receive; while q? p do begin Listp := Listp? {q}; send to Nextp; receive; end; if p = min (Listp) then statep := leader else statep := lost end else repeat receive; send to Nextp; if statep = sleep then statep := lost until false end.

Алгоритм 7.2 Алгоритм вибору ЛеЛанна. Теорему 7.4 Алгоритм ЛеЛанна (Алгоритм 7.2) переймається тим вибору кілець, використовуючи O (N2) повідомлень і O (N) одиниць часу. Доказ. Оскільки порядок маркерів в кільці зберігається (з припущення каналах FIFO), і ініціатор q відправляє перш ніж отримає, то ініціатор p отримує колись, ніж повернеться. Звідси випливає, кожен ініціатор p закінчується з переліком Listp, співпадаючим з безліччю всіх ініціаторів, і єдиним обираним процесом стає ініціатор з найменшою ідентифікатором. Усього виходить більше N маркерів й у робить N кроків, що зумовлює складності повідомлень в O (N2). Не пізніше як за N-1 одиницю часу після того, як ініціатор відправив свій маркер, зробили все ініціатори. Кожен ініціатор отримує свій маркер назад пізніше, ніж через N одиниць часу з генерації цього маркера. Звідси випливає, що алгоритм спливає протягом 2N-1 одиниць часу. Усі не-инициаторы майже остаточно дійшли стан програв, але назавжди залишаються у очікуванні повідомлень. Чекання то, можливо перервано, якщо лідер посилає по кільцю спеціальний маркер, щоб оголосити про закінчення вибору. Алгоритм Чанга-Робертса [CR79] покращує алгоритм ЛеЛанна, усуваючи з кільця маркери тих процесів, котрим очевидно, що вони програють вибори. Тобто. ініціатор p видаляє з кільця маркер, якщо q > p. Ініціатор p стає переможеним, коли отримує маркер з ідентифікатором q < p, чи лідером, що він отримує маркер з ідентифікатором p; див. Алгоритм 7.3.

var statep ;

begin if p — ініціатор then begin statep := cand; send to Nextp; repeat receive; if q = p then statep := leader else if q < p then begin if statep = cand then statep := lost; send to Nextp end until statep = leader end else repeat receive; send to Nextp; if statep = sleep then statep := lost until false end — «?[pic]. Алгоритм Чанга-Робертса не покращує алгоритм ЛеЛанна щодо тимчасової складність або найгіршого випадку складності повідомлень. Поліпшення стосується лише середнього випадку, де усереднення ведеться за усіляким расположениям ідентифікаторів вздовж кільця. Теорему 7.6 Алгоритм Чанга-Робертса загалом разі, коли всі процеси є ініціаторами, вимагає лише O (N logN) пересилань повідомлень. Доказ. (Це доказ грунтується на пропозиції Friedemann Mattern.) Припустивши, що це процеси ініціаторами, обчислимо середнє кількість пересилань маркера за всі круговим расположениям N різних ідентифікаторів. Розглянемо фіксований безліч з N ідентифікаторів, і нехай p. s буде найменшим ідентифікатором. Існує (N-1)! різних кругових розташувань ідентифікаторів; у цьому круговому розташуванні нехай pi — ідентифікатор, які перебувають за і кроків до p. s; див. Рис. 7.5. [pic] Рис. 7.5 Розташування ідентифікаторів на кільці. Щоб обчислити сумарне кількість пересилань маркера за всі расположениям, обчислимо спочатку сумарне кількість пересилань маркера за всі расположениям, і потім просуммируем по і. Маркер незалежно від розташуванні передається N раз, отже, він пересилається всього N (N-1)! раз. Маркер передається трохи більше і отже як і буде винесений з кільця, якщо досягне p. s. Нехай Ai, k — кількість циклічних розташувань, у яких передається рівно k раз. Тоді сумарна кількість пересилань одно [pic]. Маркер передається рівно і раз, якщо pi є найменшим з ідентифікаторів від p1 до pi, що відбувається в (1/i)*(N-1)! розташуваннях; тож [pic] Маркер передається щонайменше k раз (тут k? і), якщо на процесом pi слід k-1 процес з ідентифікаторами, великими pi. Кількість розташувань, у яких pi — найменший із k ідентифікаторів pi-k+1, …, pi, становить 1/k частина всіх розташувань, тобто. (1/k)*(N-1)!. Тепер, для k1) активними процесами, і всі мають різні ci, то колі залишаються незгірш від 1 і більше k/2 процесів. Наприкінці кола знову усі наші поточні ідентифікатори активних процесів різняться включають найменший ідентифікатор. Доказ. Шляхом обміну повідомленнями, які пропускаються пасивними процесами, кожен активний процес отримує поточний ідентифікатор свого активного сусіда проти годинниковий стрілки, який завжди відрізняється від її власної ідентифікатора. Далі, кожен активний процес продовжує обхід кола, передаючи повідомлення, внаслідок чого кожен активний процес отримує поточний ідентифікатор свого другого активного сусіда проти годинниковий стрілки. Тепер усі активні відбуваються різні значення acn, звідки слід, що наприкінці кола всі по колу ідентифікатори різні. По крайнього заходу, залишається ідентифікатор, який був найменшим на початку кола, тобто. залишається хоча б один процес. Ідентифікатор поруч із локальним мінімумом перестав бути локальним мінімумом, звідки слід, що його хто залишився колі не перевищує k/2. З Твердження 7.8 слід, що є коло з номером??? logN?+1, який починається рівно з однією активним ідентифікатором, саме, з найменшим серед ідентифікаторів ініціаторів. Твердження 7.9 Якщо коло починається рівно з однією активним процесом p з поточним ідентифікатором cip, то алгоритм завершується після цього кола з winq = cip всім q. Доказ. Повідомлення пропускається усіма процесами й у результаті розширення зрештою, його отримує p. Процес p виявляє, що acnp = cip і посилає по кільцю повідомлення, унаслідок чого всі процеси виходять із основного циклу з winp = acnp. Алгоритм спливає кожному процесі голосування та всі узгоджують ідентифікатор лідера (в перемінної winp); той процес перебуває у стані лідер, інші ж — може програв. Усього відбувається більш ?logN?+1 обходів кола, у кожному у тому числі передається рівно 2N повідомлень, що доводить, що складність повідомлень обмежена 2N logN + O (N). Теорему 7.7 доведено. Dolev та інших. вдалося поліпшити свій алгоритм до 1.5N logN, після чого Petersen отримав алгоритм, використовує лише 1.44N logN повідомлень. Цей алгоритм знову було поліпшився Dolev та інших. до 1.356N logN. Верхня кордон у 1.356N logN вважалася найкращою для вибору на кільцях понад десять років, але поліпшено до 1.271N logN Higham і Przytycka [HP93].

7.2.3 Висновок нижньої межі У цьому вся підрозділі буде доведено нижню межу складності вибору на односпрямованих кільцях. Т.к. вибір можна навести впродовж одного виконання децентралізованого хвильового алгоритму, нижню межу складності децентралізованих хвильових алгоритмів для кілець буде отримана як висновок. Результат отримано Pachl, Korach і Rotem [PKR84] при наступних припущеннях. Кордон доводиться для алгоритмів, вычисляющих найменший ідентифікатор. Якщо існує лідер, найменший ідентифікатор то, можливо вирахувано з допомогою N повідомлень, і якщо найменший ідентифікатор відомий хоча б одному процесу, процес з цим ідентифікатором може бути обраний знов-таки за N повідомлень. Отже, складність завдань вибору і обчислення найменшого ідентифікатора різняться лише на N повідомлень. Кільце є однонаправленим. Процесам ніхто не знає розмір кільця. Передбачається, що канали FIFO. Це не послаблює результат, оскільки складність не-FIFO алгоритмів не краще складності FIFO алгоритмів. Передбачається, що це процеси ініціаторами. Це не послаблює результат, оскільки вона описує ситуацію, можливу для кожного децентралізованого алгоритму. Передбачається, що алгоритми управляються повідомленнями; тобто. після відправлення повідомлень при ініціалізації алгоритму, процес посилає сполучення подальшому лише після отримання чергового повідомлення. Т.к. розглядаються асинхронні системи, загальні алгоритми не досягають кращої складності, ніж алгоритми, керовані повідомленнями. Справді, якщо A — асинхронний алгоритм, то керований повідомленнями алгоритм B то, можливо побудований так. Після ініціалізації і після отримання будь-якого повідомлення B посилає якомога більше повідомлень, що можна надіслати A, без у своїй повідомлень, і лише для того отримує таке повідомлення. Алгоритм B як управляється повідомленнями, але крім того, кожне обчислення B є можливим обчисленням A (можливо, при досить песимістичний розподілі затримок передачі повідомлень). Три останніх припущення усувають недетерминизм системи. За цих припущеннях кожне обчислення, розпочате з цією початковій конфігурації, містить один і той ж безліч подій. У розділі через p. s = (s1, …, sN), t тощо. позначаються послідовності різних ідентифікаторів процесів. Безліч всіх таких послідовностей позначений через D, тобто. D = {(s1, …, sk): si? P і і? j? si? sj}. Довжина послідовності p. s позначається через len (s), а конкатенація послідовностей p. s і t позначається st. Циклічним зрушенням p. s називається послідовність p. s «p.s „“, де p. s = p. s „“ p. s »; вона має вигляд si, …, sN, s1, …, si-1. Через CS (s) (cyclic shift — циклічний зрушення) позначений безліч циклічних зрушень p. s, і природно |CS (s)| = len (s). Кажуть, що кільце позначений послідовністю (s1, …, sN), якщо ідентифікатори процесів з s1 по sN розташовані на півметровій кільці (розміру N) в такого порядку. Кільце, датоване p. s також називають s-кольцом. Якщо t — циклічний зрушення p. s, то t-кольцо збігаються з s-кольцом. Із кожним повідомленням, посылаемым в алгоритмі, зв’яжемо послідовність ідентифікаторів процесів, звану слідом (trace) повідомлення. Якщо повідомлення m було послано процесом p доти, як p отримав якесь повідомлення, слід m дорівнює (p). Якщо m було послано процесом p по тому, як і отримав повідомлення зі слідом p. s = (s1, …, sk), тоді слід m дорівнює (s1, …, sk, p). Повідомлення зі слідом p. s називається s-сообщением. Нижня кордон буде виведено із властивостей безлічі всіх слідів повідомлень, які може бути послані алгоритмом. Нехай E — підмножина D. Безліч E повно (exhaustive), якщо E префиксно замкнуто, тобто. tu? E? t? E; і E циклічно покриває D, тобто.? p. s? D: CS (s)? E? ?. Далі буде показано, що безліч всіх слідів алгоритму повно. А, щоб вивести ринок із цього факту нижню межу складності алгоритму, визначено два заходи безлічі E. Послідовність t є послідовної ланцюжком ідентифікаторів в s-кольце, якщо t — префікс будь-якого r (CS (s). Означимо через M (s, E) кількість послідовностей в E, які задовольняють цій умові в s-кольце, а ще через Mk (s, E) — кількість таких ланцюжків довжини k; M (s, E) = |{ t? E: t — префікс деякого r? CS (s) }| і Mk (s, E) = |{ t? E: t — префікс деякого r? CS (s) і len (t) = k}|. Надалі, скажімо, що A — алгоритм, який обчислює найменший ідентифікатор, а EA — безліч послідовностей p. s таких, що p. sповідомлення посилається, коли алгоритм A виконується на s-кольце. Лема 7.10 Якщо послідовності t і u містять подстроку p. s і p. sповідомлення посилається, коли алгоритм A виконується на t-кольце, то p. sповідомлення також посилається, коли A виконується на u-кольце. Доказ. Посилка процесом sk s-сообщения, де p. s = (s1, …, sk), каузально залежить від процесів з s1 по sk. Їх початкова статки у u-кольце збігаються з станом в t-кольце (нагадуємо, що розмір кільця невідомий), і отже сукупність подій, попередніх посилці повідомлення, також виконано й у u-кольце. Лема 7.11 EA — повне безліч. Доказ. Щоб показати, що EA циклічно замкнуто, зауважимо, що якщо A посилає s-сообщение і під час на s-кольце, для будь-якого префікса t послідовності p. s A спочатку посилає t-сообщение на p. sкільці. По Лемме 7.10 A посилає t-сообщение на t-кольце, отже t? EA. Щоб показати, що EA циклічно покриває D, розглянемо обчислення A на p. sкільці. Хоча б процес вибирає найменший ідентифікатор, звідки слід (аналогічно доведенню Теореми 6.11), що цей процес отримав повідомлення зі слідом довжини len (s). Цей слід є циклічним зрушенням p. s й належить E. Лема 7.12 У обчисленні на s-кольце алгоритм A посилає щонайменше M (s, EA) повідомлень. Доказ. Нехай t? EA — префікс циклічного зсуву r послідовності p. s. З визначення EA, A посилає t-сообщение в обчисленні на t-кольце, отже ще й на r-кольце, яке збігаються з s-кольцом. Звідси, кожному за t з {t? E: t — префікс деякого r? CS (s)} в обчисленні на s-кольце посилається хоча одне tповідомлення, що доводить, що його повідомлень у тому обчисленні становить менше M (s, E). Для кінцевого безлічі I ідентифікаторів процесів позначимо через Per (I) безліч всіх перестановок I. Означимо через aveA (I) середня кількість повідомлень, використовуваних A переважають у всіх кільцях, помічених ідентифікаторами з I, а ще через worA (I) — кількість повідомлень у випадку. З попередньої леми слід, що й I містить N елементів, то [pic]; і [pic]. Тепер нижню межу можна вивести шляхом аналізу довільних повних множин. Теорему 7.13 Середня складність односпрямованого алгоритму пошуку найменшого ідентифікатора становить менше N*?N. Доказ. Усредняя за всі початковим конфігураціям, позначеним безліччю I, ми бачимо [pic] Зафіксуємо k і відзначимо, що з будь-якого p. s (Per (I) існує N префіксів циклічних зрушень p. s довжини k. N! перестановок в Per (I) збільшують кількість таких префіксів до N*N! Їх можна згрупувати в N*N!/k груп, кожна з яких містить по k циклічних зрушень однієї послідовності. Т.к. EA циклічно покриває D, EA перетинає кожну групу, отже [pic]. Звідси следует[pic][pic]. Цей результат означає, що алгоритм Чанга-Робертса оптимальний, коли розглядається середній випадок. Складність у випадку більше або дорівнює складності загалом разі, звідки слід, що найкраща досяжною є складність для найгіршого випадку перебуває між N*?N? 0.69N logN і? 0.356N logN. Доказ, дану у цьому розділі, значною мірою потрібно було на припущення, що кільце односпрямоване та її розмір невідомий. Нижню межу, рівна 0.5N*?N було доведено Bodlaender [Bod88] для середньої складності алгоритмів вибору на двунаправленных кільцях, де розмір кільця невідомий. Щоб усунути недетерминизм з двунаправленного кільця, розглядаються обчислення, у яких кожен процес починається у один і той водночас і всі повідомлення мають однакову затримку передачі. Для випадку, коли розмір кільця відомий, Bodlaender [Bod91a] вивів нижню межу, рівну 0.5N logN для односпрямованих кілець і (¼-?)N*?N для двунаправленных кілець (обидві кордону для середнього випадку). У результаті виявляється, що складність вибору на кільці не уразлива практично всім припущенням. Незалежно від цього, відомий чи ні розмір кільця, односпрямоване воно чи двунаправленное, розглядається чи середній чи найгірший випадок, — у разі складність становить ?(N logN). Істотно важливо, що кільце асинхронно; для мереж, де доступно глобальне час, складність повідомлень нижче, як буде показано в Главі 11. Т.к. лідер може бути обраний впродовж одного виконання децентралізованого хвильового алгоритму, з нижньої межі для вибору слід нижню межу для хвильових алгоритмів. Укладання 7.14 Будь-який децентралізований хвильової алгоритм для кільцевих мереж передає щонайменше ?(N logN) повідомлень, як у середньому, і у найгіршому случае.

[pic] Рис. 7.8.

7.3 Самовільні Мережі Тепер вивчимо проблему вибору мереж довільній, невідомої топології не повідомляючи про інших сусідів. Нижню межу ?(N logN+(E () повідомлень буде показано нижче. Доказ об'єднує ідею Теореми 6.6 і результати попереднього підрозділу. У Підрозділі 7.3.1 представлять простий алгоритм, який має низьку складність за часом, але високу складність за повідомленням у разі. У Підрозділі 7.3.2 буде представлений оптимальний алгоритм для гіршого случая.

Теорема 7.15 Будь-який порівняльний алгоритму вибору довільних мереж має (у найгіршому і середньому разі) складність по повідомлення по крайнього заходу ?(Nlog N + (E ().

Рисунок 7.8 обчислення з цими двома ЛИДЕРАМИ.

Доказательство. Кордон ?(N log N + (E () є нижньої, оскільки довільні мережі включають кільця, котрим нижню межу ?(N logN). Щоб бачити, що (E (повідомлень є нижньою межею, навіть у найкращому зі всіх обчислень, припустимо що, алгоритм вибору має обчислення З на мережі G, у якому обмінюється менш як (E (повідомлень; див. Малюнок 7.8. Побудуємо мережу G ", поєднуючи дві копії G одним руба між вузлами, пов’язаними руба, яке використовують у З. Тотожні частини мережі мають той самий відносний порядок як й у G. Обчислення З може моделюватись одночасно у обох частинах G ", видаючи обчислення, в якому процеси стануть обраними. (.

Укладання 7.16 Децентралізований хвильової алгоритм для довільних мереж не повідомляючи про інших сусідів має складність по повідомлення по крайнього заходу ?(NlogN + (E ().

7.3.1 Виродження і Швидкий Алгоритм Алгоритм для вибору лідера можна отримати з довільного централізованого хвильового алгоритму застосуванням перетворення званого виродженням. У отриманому алгоритмі вибору кожен ініціатор починає окрему хвилю; все повідомлення хвилі, розпочатої процесом p повинні бути позначені ідентифікатором p, щоб відрізнити їхню відмінність від повідомлень різних хвиль. Алгоритм гарантує, що, незалежно від цього, скільки хвиль розпочато, лише одне хвиля буде бігти до вирішення, саме, хвиля найменшого ініціатора. Всі інші хвилі будуть перервані колись, ніж розв’язання може мати місце. Для хвильового алгоритму A, алгоритм вибору Ex (A) наступний. Кожного моменту часу кожен процес активний лише лише у хвилі; ця хвиля — поточна активна хвиля, позначена caw, з початковим значенням udef. Ініціатори вибору діють, нібито вони починають хвилю і привласнюють caw їхній власний ідентифікатор. Якщо повідомлення деякою хвилі, скажімо хвилі, розпочату q, сягає p, p обробляє повідомлення наступним образом.

var cawp: P init udef; (* поточна активна хвиля *) recp: integer init 0; (* число отриманих (tok, cawp (*) fatherp: P init udef; (* батька хвилі cawp *) lrecp: integer init 0; (* число отриманих (ldr,. (*) winp: P init udef; (* ідентифікатор лідера*) begin if p is initiator then begin cawp := p; forall q (Neighp do send (tok, p (to q end; while lrecp < #Neighp do begin receive msg from q; if msg = (ldr, r (then begin if lrecp = 0 then forall q (. Neighp do send (ldr, r (to q; lrecp := lrecp + 1; winp := r end else (*—9Y (=ЈS?У «ѕ?Ў.??Ѕ2~>3K cawp, повідомлення просто ігнорується, ефективно наводячи хвилю q до невдачі. Якщо з q = cawp, з повідомленням вступають у відповідність до хвилевим алгоритмом. Якщо q < cawp чи cawp = udef, p приєднується до виконання хвилі q, повторно привласнюючи змінним їх початкові значення й привласнюючи cawp значення q. Коли хвиля, розпочата q виконує подія рішення (переважно хвильових алгоритмів, це рішення має місце в q), q оберуть. Якщо хвильової алгоритм такий, що вирішальний вузол не обов’язково дорівнює ініціатору, то вирішальний вузол інформує ініціатора через дерево охватов (остовное дерево) як склала Lemma 6.3. У цьому потрібно більш N — 1 повідомлень; ми ігноруємо в наступній теореме.

Теорема 7.17. Якщо, А — централізований хвильової алгоритм, використовує М повідомлень однією хвилю, алгоритм Ex (A), вибирає лідера використовую трохи більше NM сообщений.

Доказательство. Нехай p0 найменший ініціатор. До хвилі, розпочатої p0 негайно приєднуються всі, які отримують повідомлення цієї хвилі, й у процес закінчує цю хвилю, бо немає хвилі з меншим ідентифікатором, на яку процес перервав б виконання хвилі p0. Отже, хвиля p0 біжить до завершення, рішення матиме місце, і p0 стає лідером. Якщо p не ініціатор, ніяка хвиля з ідентифікатором p не розпочнеться, отже p стане лідером. Якщо p (p0 — ініціатор, хвиля з ідентифікатором p буде розпочато, але рішенню у цій хвилі буде передувати подія посилки від p0 (з цією хвилі), чи имееть місце у p0 (Lemma 6.4). Оскільки p0 будь-коли виконує подія посилки чи внутрішнє подія хвилі з ідентифікатором p, таке рішення немає місце, і p не обраний. Не більш N хвиль розпочато, й кожна хвиля використовує по крайнього заходу М повідомлень, що зумовлює повної складності до NM. (.

Более тонким питанням є оцінка складності за часом алгоритму Ex (A). В багатьох випадках це завжди буде величина тієї самої лада, як і складність по часу алгоритму A, але у деяких невдалих випадках, може статися, що ініціатор із цілком маленьким ідентифікатором починає хвилю дуже пізно. У загальному разі можна показати складність за часом O (Nt) (де t — складність за часом хвильового алгоритму), оскільки у межах t одиниць часу по тому, ініціатором p починає хвилю, хвиля p дійшов рішенню чи починається інша. Якщо виродження застосовується до кільцевому алгоритму, отримуємо алгоритм ChangPoberts; див. Вправа 7.9. Алгоритм 7.9 є алгоритмом вибору отриманими із алгоритму відлуння. Щоб спростити опис, приймається що udef > q всім q (P. При дослідженні коду, читач повинна звернути увагу, після одержання повідомлення (tok, r (з r < cawpp, оператор If з вимогою r = cawp також виконується, внаслідок більш раннього присвоювання cawp. Коли вибирається процес p (отримує (tok, p (від кожного сусіда), p посилає повідомлення (ldr, p (всім процесам, повідомляючи їм, що p — лідер і примушуючи їх завершити алгоритм.

7.3.2 Алгоритм Gallager-Humblet-Spira Проблема вибору довільних мережах міцно пов’язана з проблемою обчислення дерева охватов з децентралізованим алгоритмом, як выдно із наступного міркування. Нехай CE складність за повідомленням проблеми вибору і CТ складність обчислення дерева охватов. Теорему 7.2 передбачає, що CE (CT+O (N), і якщо лідер доступний, дерево охватов, то, можливо обчислено використовуючи 2(((повідомлень в алгоритмі відлуння, який передбачає що CT (CE + 2(((. Нижню межу CE (теорема 7.15) передбачає, дві проблеми всі мають однакову порядок сдожности, саме, що вони вимагають по крайньої мері ?(N log N + E) повідомлень. Цей підрозділ представляє Gallager-Humblet-Spira (GHS), алгоритм для обчислення (мінімального) дерева охватов, використовуючи 2(((+ 5N log N повідомлень. Це свідчить, що CE і CТ величини ((N log N + E). Цей алгоритм опублікований [GHS83]. Алгоритм то, можливо легко змінено (як буде показано наприкінці цього підрозділу) аби вибрати лідера під час обчислення, те щоб окремий вибір як показано в вище ні необхідний. GHS алгоритм потрібно було ми такі припущення. (1) Кожне ребро e має унікальний вагу w (e). Припустимо тут, що w (e) — реальну кількість, а й цілі числа також можливі як ваги ребер. Якщо унікальні ваги ребер не доступні априоре, кожному краю можна давати вагу, який сформований із меншого з цих двох перших ідентифікаторів вузлів, що з руба. Обчислення ваги краю в такий спосіб вимагає, щоб вузол знав ідентифікатори сусідів, що потребує додатково 2(((повідомлень при ініціалізації алгоритму. (2) Усі вузли спочатку перебувають у сплячому безпечному стані й прокидаються колись, що вони починають виконання алгоритму. Деякі вузли прокидаються спонтанно (якщо виконання алгоритму викликано обставинами, зустрічаються у тих вузлах), інші може бути повідомлення алгоритму, в нас саме вони ще сплять. У разі вузол який одержує повідомлення спочатку виконує локалбную процедуру ініціалізації, та був обробляє сообщение.

Минимальное дерево охватов. Нехай G = (V, E) зважений граф, де w {e) позначає вагу ребра e. Вага дерева охватов T графа G дорівнює сумі терезів N-1 ребер, які у T, і T називається мінімальним деревом охватов, чи MST, (іноді мінімальним на вагу що охоплюють деревом) якщо ніяке дерево немає менше значення ніж T. У цьому вся підрозділі припускаємо, що кожне ребро має унікальний вагу, тобто, різні ребра мають різні ваги, і це — відомий факт у цьому випадку є унікальне мінімальне дерево охватов.

Утверждение 7.18 Якщо всі ваги ребер різні, що існує лише одна MST.

Доказательство. Припустимо зворотне, тобто. що T1 і T2 (де T1 (T2) — мінімальні дерева охватов. Нехай e ребро із цілком малою вагою, що у одному з дерев, але не обох; такий край існує оскільки T1 (T2. Припустимо, без втрати спільності, що e перебуває у T1, але не T2. Граф T2 ({e} містить цикл, і те що T1 зовсім позбавлений ніякої цикл, по крайнього заходу одне ребро циклу, скажімо e ", не належить T1. Вибір e передбачає що w (e) < w (e "), але давайте тоді дерево T2 ({e} {e «} має менше значення ніж T2, що суперечить з того що T2 — MST. (.

Твердження 7.18 — важливе засіб розподіленого побудови мінімального дерева охватов, бо ні потрібно робити акценти выбор (распределенно) з багатьох законних відповідей. Навпаки кожен вузол, який локально вибирає ребра, які належать кожному мінімального дереву охватов в такий спосіб, вносить внесок у розбудову глобально унікального MST. Усі алгоритми, для обчислення мінімальне дерево охватов засновані на понятті фрагмента, що є поддеревом MST. Ребро e — що йде ребро фрагмента F, якщо одне кінець e перебуває у F, і той — немає. Алгоритми починають із фрагментів, які з єдиного вузла і збільшують фрагменти, поки MST неповний, покладаючись наступний наблюдение.

Утверждение 7.19 Якщо F — фрагмент і e — найменше на вагу що йде ребро F, то F ({e} - фрагмент Доказательство. Припустімо, що F ({e} - не частина MST; тоді е формує цикл з декотрими ребрами MST, і з ребер MST у тому циклі, скажімо f, — що йде ребро F. З вибору e — w (e) < w (f), але давайте тоді видаляючи f з MST і вставляючи e одержимо дерево із меншим вагою ніж MST, що протиріччям. (.

Известные послідовні алгоритми для обчислення MST — алгоритми Prim і Kruskal. Алгоритм Prim [CLR90, Розділ 24.2] починається з однієї фрагмента і збільшує її кожному кроці включаючи що йде ребротекущего фрагмента з найменшим вагою. Алгоритм Kruskal [CLR90, Розділ 24.2] починається з безлічі фрагментів, які з одного вузла, і зливає фрагменти, додаючи що йде ребро деякого фрагмента з найменшою вагою. Т.к. алгоритм Kruskal дозволяє кільком фрагментами діяти незалежно, він більш адресований виконання в розподіленому алгоритме.

7.3.3 Глобальне Опис GHS Алгоритму. Спочатку ми опишемо як алгоритм працює глобальним способом, тобто, з погляду фрагмента. Тоді ми опишемо локальний алгоритм, який має виконати кожен вузол, щоб отримати це глобальне перетворення фрагментів. Обчислення GHS алгоритму відбувається відповідно до таких кроків. (1) Безліч фрагментів підтримується таким, що всіх фрагментів містить все вершини. (2) Спочатку це безліч містить кожен вузол як фраґмент з одного вузла. (3) Вузли у фрагменті співпрацюють, щоб знайти що йде ребро фрагмента з із вагою. (4) Коли що йде ребро фрагмента з найменшою вагою відомо, фрагмент об'єднується з іншим фрагментом додаванням вихідного ребра, разом із іншим фрагментом. (5) Алгоритм закінчується, коли залишається тільки один фрагмент. Ефективне виконання цих кроків вимагає уявлення деякого примітки та правових механізмів. (1) Ім'я фрагмента. Щоб співаку визначити що йде ребро з найменшою вагою, потрібно видеть, является чи ребро що виходить чи веде до вузлу у тому самому фрагменті. І тому кожен фрагмент матиме ім'я, що буде відомо процесів у цьому фрагменті. Процес перевіряє чи є ребро внутрішнім чи що виходить сравненивая імена фрагментів. (2) Об'єднання великих та малих фрагментів. Коли об'єднуються два фрагмента, ім'я фрагмента змінюється по крайнього заходу у одному з фрагментів, що потребує зробити зміни у кожному вузлі по крайнього заходу однієї з двох фрагментів. Щоб це й зміна було ефективним, стратегія об'єднання полягає в ідеї, за якою менший з цих двох фрагментів об'єднується в більший з цих двох, приймаючи ім'я фрагмента більшого фрагмента. (3) Рівні фрагментів. Невеликий міркування показує, що ухвалено рішення, хто з цих двох фрагментів є великим, на повинен зависить від кількості вузлів в двох фрагментах. І тому треба змінювати розмір фрагмента у кожному процесі, і більшого і меншого фрагментів, в такий спосіб портя бажану властивість, зміна необхідно лише у меншому. Замість цього, кожному фрагмента призначений рівень, що є 0 для початкового фрагмента з однією вузлам. Це дозволяється, що фрагмент F1 об'єднується у фрагмент F2 з вищий рівень, після чого новий фрагмент F1 (F2 має рівень F2. Новий фрагмент також має ім'я фрагмента F2, отже ніяких змін задля вузлів в F2 зайві. Таке об'єднання також можливо обох фрагментів однакового рівня; в цьому випадку новий фрагмент має ім'я, і культурний рівень — на одиницю вища, аніж рівень об'єднувалися фрагментів. Нове ім'я фрагмента — вагу ребра, яким об'єднані два фрагмента, і це ребро називається основним руба нового фрагмента. Два вузла, пов’язані основним руба називаються основними узлами.

Lemma 7.20. Якщо такі правила об'єднання виконуються, процес змінює ім'я фрагмента, або рівень трохи більше N log N раз.

Доказательство. Рівень процесу будь-коли зменшується, і лише, що він збільшується процес змінює имя) фрагмента. Фрагмент рівня L містить по крайнього заходу 2L процесів, отже максимальний рівень — logN, що означає, кожен індивідуальний процес збільшує рівень фрагментів лише log N раз. Отже, повне загальна кількість змін імені фрагмента та підвищення рівня обмежена величиною N log N. (.

Резюме стратегії об'єднання. Фрагмент F безпосередньо з ім'ям FN і їх рівнем L позначаємо як F = (FN, L); нехай eF позначає що йде ребро з найменшою вагою F.

Правило A. Якщо eF веде до фрагмента F «= (FN », L ") з L < L ", F об'єднується в F ", після чого новий фрагмент має ім'я FN «і культурний рівень L ». Нові значення посилаються всім процесів у F. Правило B. Якщо eF веде до фрагмента F «= (FN », L ") з L = L «і eF «= eF, два фрагмента об'єднують у новий фрагмент з рівнем L + 1 і називають w (eр). Нові значення послаются всім процесів у F і F ». Правило З. У інших випадках (тобто, L > L «чи L = L «і eF «(e F) фрагмент F, повинен чекати, поки применится правило, А чи B .

var statep: (sleep, find, found); stachp [q]: (basic, branch, reject) for each q (Neighp; namep, bestwtp: real; levelp: integer; testchp, bestchp, fatherp: Neighp; recp: integer;

ПCчѕР…уaНЦн^З?йнВ¦кжА‚рґАGяХjф dе?"ШэуПшЕЛ—хКак перше дію кожного процесу, алгоритм може бути инициализирован: begin нехай pq канал процесу p з найменшою вагою; stachp [q] := branch; levelp := 0; statep := found; recp := 0; send (connect, 0 (to q end.

При отриманні (connect, L (від q: begin if L < levelp then (* Об'єднання за правилом, А *) begin stachp[q] := branch; send (initiate, levelp, namep, statep (to q.

end else if stachp[q] = basic then (* Правило З *) обробити повідомлення пізніше else (* Правило B *) send (initiate, levelp +1 ,((pq), find (to q end.

При отриманні (initiate, L, F, S (від q: begin level p := L; name p := F; state p := P. S, father p :== q; bestch p := udef; bestwt p :.= (; forall r (Neigh p: stach p [r] = branch (r (q do send (initiate, L, F, P. S (to r; if state p = find then begin rec p := 0; test end end.

Алгоритм 7.10 gallager-humblet-spira алгоритм (частина 1).

7.3.4 Детальний описи GHS алгоритму Вузол і титул зв’язку. Вузол p обслуговує перемінні як показано в Алгоритмі 7.10, зокрема щодо статусу каналу stach p [q] кожному за каналу pq. Цей статус — branch, якщо ребра, як відомо, належить MST, reject, якщо відомо, що його не належить MST, і basic, якщо ребро ще використовувалося. Зв’язок у фрагменті визначення вихідного ребра з найменшим вагою відбувається після ребра branch у фрагменті. Для процесу p у фрагменті, отецом є ребро що призводить до основному ребру фрагмента. Cостояние вузла p, state p, — find, еcли p нині бере участь у пошуку вихідного ребра фрагмента з найменшою вагою і found у протилежному разі. Алгоритм дається як алгоритми 7.10/7.11/7.12. Іноді обробка повідомлення мусить бути відстрочено, поки локальне умова не удовлетворено.

(4) procedure test: begin if (q (e Neigh p: stach p [q] = basic then begin testch p := q with stach p [q] = basic and ((pq) minimal; send (test, level p, name p (to testch p end else begin testch p := udef; report end end (5)Т—э;Х~шCЯ[pic]ц л•уYхUсиь6рЎяЁп |я}сья щ? R@Ґ ?Ёx[pic]?#ь? щк[3]mшoэ*шfш>ч-фІчZущщЪф=эчч-[pic] ьeяNё |m[4]W ‚я1 у? |%‡"-яY wыў.

TыZ Рю?"[5]/мO8 |:ґ «.їуЄ l) |?3[pic]^ўь± |Јчч Dт.

tоP ‚оУрАр±плL иЈи Шз (c)еЎ VаУяЬ· чRЫЕфkЭцbаэшПри отриманні (test, L, F (від q: begin if L > level p then (* Відповідальний повинен почекати! *) обробити повідомлення пізніше else if F = name p then (* внутрішнє ребро *) begin if stach p [q] = basic then stach p [q] := reject; if q (testch p then send (reject (to q else test end else send (accept (to q end (6) З отриманням (accept (від q: begin testch p := udef; if ((pq) < bestwt p then begin bestwt p := ((pq); bestch p := q end; report end (7) Ін отриманні (reject (від q: begin if stach p [q] = basic then stach p [q] := reject; test end.

Алгоритм 7.11 the gallager-humblet-spira алгоритм (частина 2).

Приймається, у цьому разі повідомлення зберігається, і потім відновлюється і із нею поводяться, начебто він був отримано лише що. Якщо процес отримує повідомлення, тоді як і досі на стані sleep, алгоритм инициализируется у цьому вузлі (виконуючи дію (1)) колись, ніж повідомлення оброблено. Перебування исходящго ребра з найменшою вагою. Вузли у фрагменті співпрацюють, щоб знайти що йде ребро фрагмента з найменшою вагою, і коли ребро знайдено нього посилається повідомлення (connect, L (; L — рівень фрагмента. Якщо фрагмент складається з єдиного вузла, як має місці після ініціалізації цього вузла, необхідну ребро — просто ребро з найменшим вагою суміжне з цим узлом. Смотри (1). Повідомлення A (connect, 0 (посилається цю ребро.

(8) procedure report: begin if rec p = #{q: stach p [q] = branch (q (father p } and testch p = udef then begin state p := found; send (report, bestwt p) to father p end end.

(9) З отриманням (report, ((від g: begin if q (father p then (* reply for initiate message *) begin if (< bestwt p then begin bestwt p := (; bestch p := q end; rec p := rec p + 1; report end else (* pq є основним руба *) if state p = find then обробити це повідомлення пізніше else if (> bestwt p then changeroot else if (= bestwt p = (then stop end.

(10) procedure changeroot; begin if stach p [bestch p] = branch then send (changeroot (to bestch p else begin send (connect, level p (to bestch p; stach p [bestch p] := branch end end.

(11) ¦[6]цьGqЎ |† Ьw.

‘му8лл"^f"в?X2"э?коa)При отриманні (changeroot (: begin changeroot end.

Алгоритм 7.12 gallager-humblet-spira алгоритм (частина 3).

Затем розгляньте випадок, коли нове фрагмент сформований, об'єднуючи два фрагмента, поєднуючи руба e = pq. Якщо два об'єднаних фрагмента мали однаковий рівень, L, p і q пошлють повідомлення (connect, 1(через e, і одержать збитки у відповідь повідомлення (connect, L (, тоді як статус e — branch, див. дію (2). Ребро pq стає основним руба фрагмента, p і q обмінюють повідомленням (initiate, L + 1, N, P. S (, привласнюючи новий рівень ім'я фрагмента. Ім'я — w (pq), і титул find призводить до того, кожен процес починає шукати що йде ребро з найменшою вагою; див. дію (3). Повідомлення (initiate, L + 1, N, P. S (посилається кожному вузлу з нового фрагменті. Якщо рівень p був за ніж рівень q, p пошле повідомлення (connect, L (через e, і отримає повідомлення (initiate, L ", N, P. S (у відповідь від q; див. дію (2). І тут, L «і N — поточний рівень добробуту й ім'я фрагмента q, а ім'я і культурний рівень вузлів за q ребра не змінюється. На боці p ребра повідомлення ініціалізації вирушає до всім вузлам (див. дію (3)), примушуючи кожен процес змінювати ім'я фрагмента і культурний рівень. Якщо q нині шукає що йде ребро з найменшою вагою (P.S = find) процеси у фрагменті p приєднуються для пошуку з допомогою виклику test. Кожен процес у фрагменті здійснює пошук по усі його ребрах (якщо такі існують, див. (4), (5), (6), і (7)) у тому, визначити чи є ребра що виходять із фрагмента, і коли такі є, вибирає найменше на вагу. Що Йде ребро з найменшою вагою повідомляється всім поддеревьям, з допомогою повідомлення (report, ((; див. (8). Вузол p підраховує число повідомлень (report, ((, які вона отримує, використовуючи зміну recp, якої присвоюється значення 0 при початку пошуку (див. (3)) і поповнюється одиницю і при отриманні повідомлення (report, ((; див. (9). Кожен процес посилає повідомлення (report, ((батькові, що він отримує таке повідомлення від кожної зі своїх синів й ними закінчує локальний пошук вихідного ребра. Повідомлення (report, ((посилаються у напрямку до основному ребру кожним процесом, та шляхів сполучення двох основних вузлів перетинаються на рубі; обидва отримують повідомлення від своїх батька; див. (9). Кожен основний вузол чекає, що він не пошле повідомлення (report, ((сам що він обробляє повідомлення іншого процесу. Коли два повідомлення (report, ((основних вузлів перетнулися, основні вузли знають вагу найменшого вихідного ребра. Алгоритм закінчився б у цій точці, якщо ніяке що йде ребро було б передано (обидва повідомлення передають значення (). Якщо що йде ребро передали, краще ребро перебуває слідуючи покажчикам bestch у кожному вузлі, починаючи з основного вузла протилежного боку, з якого було передано краще ребро. Повідомлення (connect, L (має бути послано цю ребро, і всі покажчики батька у фрагменті мусять чесно вказати в цьому напрямі; це виконується з допомогою посилки повідомлення (changeroot (. Основний вузол, на чиєму боці розміщено що йде ребро з найменшою вагою, посилає повідомлення (changeroot (, яке посилається через дерево до що виходить ребру з найменшою вагою; див. (10) і (11). Коли повідомлення (changeroot (сягає вузла инцидентнорго що виходить ребру з найменшою вагою, цей вузол посилає сообщение (connect, L (через що йде ребро з найменшим весом.

Проверка граней. Для перебування найменшого вихідного ребра вузол p оглядає основні ребра одне одним гаразд збільшення ваги; див. (4). Локальний пошук ребра закінчується коли або залишається ребер (все межі - reject чи branch), див. (4), або один край ідентифікований як вихідний; див. (6). Через порядку, у якому p оглядає межі, якщо p пізнає одне ребро як що йде, вона повинна мати найменший вагу. Для осметра ребра pq, p посилає повідомлення (test, levelp, namep (до q і чекає, котрі можуть повідомленнями (reject (, (accept (чи (test, L, F (. Повідомлення (reject (, посилається процесом q (див. (5)) якщо q виявляє, що ім'я фрагмента p, як і повідомленні test, збігаються з ім'ям фрагмента q; вузол q також відхиляє ребро у разі. З отриманням повідомлення (reject (p відхиляє ребро pq і продовжує локальний пошук; див. (7). Повідомлення (reject (пропускається, якщо ребро pq хіба що використовувалося q також, щоб послати повідомлення (test, L, F (; у разі повідомлення (test, L, F (від q служить як на повідомлення p; див. (5). Якщо ім'я фрагмента q відрізняється від p, посилається повідомлення (accept (. По отриманні цих слів p закінчує локальний пошук вихідних ребер руба pq як найкращим локальним вибором; див. (6). Обробка повідомлення (test, L, F (p відстрочено якщо L> levelp. Причина — те, що p і q може фактично належати одному й тому фрагмента, але повідомлення (initiate, L, F, P. S (ще досяг p. Вузол p міг би помилково відповідати q повідомленням (accept (.

Объединение фрагментів. Коли що йде ребро з найменшою вагою фрагмента F = (name, level) було встановлено, повідомлення (connect, level (посилається цю ребро, виходить вузлом, належить до фрагмента F «- = (name », level "). Назвемо процес, надсилає повідомлення (connect, level (p та інформаційний процес, який одержує його q. Вузол q раніше послав повідомлення (accept (до p у відповідь повідомлення (test, level, name (, оскільки пошук кращого исходящегоребра у фрагменті p закінчився. Чекання, організоване перед відповіддю на повідомлення test (див. (5)) дає level «(level. Відповідно до правил об'єднання, обсужденным раніше, відповідь (connect, level (на повідомлення (initiate, L, F, P. S (має местов такому разі. Випадок A: якщо level „> level, фрагмент p поглинається; вузлам у тому фрагменті повідомляється ім'я фрагмента і культурний рівень з допомогою повідомлення (initiate, level “, name », P. S (, яке вирушає всім вузлам у фрагменті F. Повний цілком зайнятий фрагмент F стає поддеревом q в дереві охватов фрагмента F «і якщо q нині зайнятий у пошуках кращого вихідного ребра фрагмента F », всі в F повинні брати участь. Саме тому q включає стан (find чи found) в повідомлення (initiate, level ", name ", P. S (. Випадок B: якщо два фрагмента мають і той ж рівень і той краще що йде ребро фрагмента F «також pq, новий фрагмент формується з рівнем наимбольшим з цих двох і ім'ям — вагу ребра pq: див. (2). Цей випадок відбувається, якщо два рівня рівні, і повідомлення connect отримано через ребро branch: зауважте, що статус ребра стає branch, якщо повідомлення connect послано через него.

Если жодного з цих двох випадків немає, фрагмент F повинен чекати, поки q посилає повідомлення (connect, L (, або рівень фрагмента q збільшився досить, роблячи Випадок применимым.

Правильность і складність. З детального описи алгоритму має бути ясно, що ребро крізь який фрагмент посилає повідомлення (connect, L (насправді є що виходить руба фрагмента з найменшою вагою. Разом з Судженням 7.19 це, що MST вирахувано правильно, якщо кожен фрагмент справді посилає таке повідомлення приєднується до іншому фрагмента, попри очікування, викликаного алгоритмом. Найбільш складне повідомлення містить вагу одного ребра, рівня (до logN) і постійне числа біт, аби вказати тип повідомлення й стан вузла. Теорему 7.21 Gallager-Humblet-Spira алгоритм (7.11/7.12 7.10/ Алгоритму) обчислює мінімальне дерево охватов, використовуючи трохи більше 5 N log N + 2(E (повідомлень. Доказ. Безвихідь потенційно виникає у ситуаціях, де вузли чи фрагменти повинні чекати, поки деяке умова немає й інші вузлі чи фрагменті. Чекання, вставляное для повідомлення (report, ((на основному рубі не веде до тупику, бо кожен основний вузол зрештою отримує повідомлення від усіх синів (якщо фрагмент загалом не чекає інший фрагмент), після чого повідомлення буде оброблено. Розгляньте випадок коли повідомлення фрагмента F1 = (level1, name1) сягає вузла фрагмента F2 = (level2, name2). Повідомлення (connect, level1) має чекати, якщо level1 (level2 і повідомлення (connect, level2) не було послано через той самий ребро фрагментом F2, див. (2). Повідомлення (test, level1, narne1) має чекати, якщо level1 > level2, див. (5). В усіх життєвих випадках, де F1 чекає F2, вірно один з наступних тверджень. (1) level 1 > level2, (2) level1 = level2 (((eF1(> ((eF2(; (3) level1 = level2 (((eF1(= ((eF2(і F2 досі шукає що йде ребро з найменшим вагою. (Т.к. eF1 — що йде ребро F2, неможливо щоб w (eF2) > w (eF1).) Отже ніякої тупиковий цикл неспроможна виникнути. Кожне ребро відхиляється трохи більше один раз, і це вимагатиме двох повідомлень, яке обмежує число повідомлень reject і повідомлень test як наслідків відхилень до 2(E (. На рівні, вузол отримує трохи більше одного повідомлення initiate і accept, і посилає трохи більше одного повідомлення report, родовищ і одне changeroot чи connect повідомлення, родовищ і одне test повідомлення, не що призводить до відхилення. На нульовому уровнени одне повідомлення accept не виходить і одне повідомлення report чи test посилається. На вищому рівні кожен вузол лише посилає повідомлення report і він здобуває одне повідомлення initiate. Загальна кількість повідомлень тому обмежена 2(E (+ 5N log N. (.

7.3.5 Обговорення і Варіанти GHS Алгоритму Gallager-Humblet-Spira алгоритм — одне з найбільш складних хвильових алгоритмів, вимагає лише локальне знання і має оптимальну складність за повідомленням. Алгоритм може легко розширитися те щоб він вибрав лідера, використовуючи лише з два більше повідомлень. Алгоритм закінчує в двох вузлах, саме основних вузлах останнього фрагмента (куди входять повну мережу). Замість виконання зупинки, основні вузли обмінюють їх ідентифікаторами, і менший їх стає лідером. Було опубліковано безліч різновидів і родинних алгоритмів. GHS алгоритм може вимагати час ?(N2), коли деякі вузли починають алгоритм дуже пізно. Якщо використовується додаткова процедура пробудження (потребує трохи більше (E (повідомлень) складність алгоритму за часом 5N log N; див. Вправа 7.11. Awerbuch [Awe87] показав, що складність алгоритму по часу можна поліпшити од 0 (N), при збереження оптимального порядку складності за повідомленням, тобто 0 ((E (+ N log N). Afek та інші [ALSY90] пристосували алгоритм, для обчислення лісу охоплення з сприятливими властивостями, саме, що діаметр кожного дерева і кількість дерев — 0 (N½). Їх алгоритм распределенно обчислює кластеризацию мережі як показано в Lemma 4.47 і дерево охоплення і центр кожного кластера. Читач може спрасить, чи можуть довільні деревя охватов бути побудовано ефективніше ніж мінімальні деревя охватов, але Теорему 7.15 також дає низьку кордон ?(NlogN +(E () на побудова довільних дерев охватов. Johansen та інші [JJN ^ 87] дають алгоритм для обчислення довільного дерева охватов, який использует3N log N + 2(E (+0(N) повідомлень, в такий спосіб поліпшуючи GHS алгоритмі на постійний множник, якщо мережу рідкісна. Barllan і Zernik [BIZ89] представили алгоритм, який обчислює випадкові дерева охватов, де кожна можливе дерево охватов вибрано із однаковою ймовірністю. Алгоритм — рандомизирован та «використовує очікуване число повідомлень, яке у межах між 0 (NlogN +(E ()) і 0 (N3), залежно від топології мережі. Тоді як будівництво свавільних і мінімальних дерев охватов має рівну складність в довільних мережах, тут інше в кліках. Korach, Moran і Zaks [KMZ85] показали, що це будівництво мінімального дерева охватов в виваженої кліці вимагає обміну ?(N2) повідомленнями. Цей результат вказує, що знання топології не допомагає зменшувати складність виявлення MST нижче кордону з Теореми 7.15. Довільне дерево охватов кліки можуть спорудити в 0 (N log N) повідомлення, як ми покажемо в наступному розділі; див. також [KMZ84].

7.4 Алгоритм Korach-Kutten-Moran Багато результатів отримано для проблеми вибору, як для випадку кільцевих мереж, і довільних мереж, але й для випадку інший спеціалізованої топології, типу мереж клік, тощо. У кількох випадках кращі відомі алгоритми мають складність за повідомленням 0(N log N) й у окремих випадках цей результат сягає ?(NlogN). Korach, Kutten, і Moran [KKM90] показали, що є тісний зв’язок між сетеми вибору і обходу. Їхній головний результат — загальне будівництво ефективного алгоритму вибору класу мереж, враховуючи алгоритм обходу при цьому класу. Вони показують, що коли і будівництво снабжено найкращим алгоритмом обходу, відомим для класу мереж, результуючий алгоритм сприятливо порівняти з найкращим алгоритмом вибору, відомим у тому класу здебільшого. Річ виглядає негаразд для складності за часом; Складність часу алгоритму дорівнює складності за повідомленням, й у окремих випадках відомі інші алгоритми з тією ж самої складністю за повідомленням і перевагу нижчої складністю времени.

7.4.1 Модульна Будівництво Korach-Kutten-Moran алгоритм використовує ідеї перетворення виродження (Підрозділ 7.3.1) і ідеї Peterson/Dolev-Klawe-Rodeh алгоритму (Підрозділ 7.2.2). Подібно перетворенню виродження ініціатори вибору починають обхід мережі з маркера, позначеного їх ідентифікатором. Якщо обхід закінчується (дозволяється), ініціатор обходу стає обраним; алгоритм передбачає, що трапляється для точно одного обходу. У цьому вся підрозділі алгоритм описаний для випадку, де канали задовольняють fifo припущення, але, підтримуючи значно більше інформацією кожному маркере в кожному процесі алгоритм, то, можливо пристосована до не — fifo випадок; див. [KKM90]. Щоб поводитися з ситуацією більш ніж одного ініціатора, алгоритм дбає про рівнях, які можна зрівняні з раундами Peterson/DolevKlawe-Rodeh алгоритму. Якщо з крайнього заходу два обходу розпочато, маркери досягнуть процесу, що був посещен іншим маркером. Якщо це ситуація виникає, обхід прибулого маркера буде перерваний. Мета алгоритму тепер стає, аби разом два маркера щодо одного процесі, де вони вбито й новий обхід буде розпочато. Порівняйте це з Peterson/Dolev і іншими алгоритмами, де за крайнього заходу одне із кожних двох ідентифікаторів проходить коло і продовжує проходити наступний. Поняття раундів замінено в Korach-Kutten-Moran алгоритмі поняттям рівнів; два маркера викличуть новий обхід лише коли вони теж мають і той ж рівень, і знову вироблений маркер має рівень на одиницю більше. Якщо маркер зустрічається з маркером вищого рівня, чи сягає вузла, вже посещенного маркером вищого рівня, прибуваючий маркер просто убитий так, аби впливати на маркер більш рівні. Алгоритм дається як Алгоритм 7.13. Щоб звести докупи маркери один і тієї самої рівня одному процесі, кожен маркер можливо, у одному із трьох режимів: annexing, chasing, чи waiting. Маркер представляється (q, l), де q — ініціатор маркера і l — рівень. Змінна levp дає рівень процесу p, і змінна catp дає ініціатора останнього маркера annexing, відправленого p (нині активний обхід p). Змінна waitp — udef, якщо ніякої маркер не чекає p, та її значення q, якщо маркер (q, levp) чекає p. Змінна lastp використовується для маркерів як chasing: вона дає сусіда, якому p відправив маркер annexing рівня levp, якщо маркер chasing ні посланий відразу після цього; у разі lastp = udef. Алгоритм взаємодіє зі алгоритмом обходу запитом до функції trav: цю функцію повертає сусіда, якому маркер має бути відправлений чи decide, якщо обхід закінчується. Маркер (q, l) вводять у режимі annexing й у режимі він починає виконувати алгоритм обходу (у разі IV Алгоритму 7.13) доки станеться одне з наступних ситуацій. (1) Алгоритм обходу закінчується: q стає лідером у разі (див. Випадок IV в Алгоритмі 7.13). (2) Маркер сягає вузла p рівня levp > l: маркер убитий у цьому випадку, (Цей випадок неявен в Алгоритмі 7.13; всі умови у цьому алгоритмі вимагають l> levp чи l = levp.) (3) Маркер прибуває в вузол, де очікує маркер рівня l: два маркера вбиті у разі, і розпочнеться новий обхід починається сіло вузла (див. Випадок ІІ Алгоритмі 7.13). (4) Маркер сягає вузла з рівнем l, який був найбільш недавно посещен маркером з ідентифікатором catp > q (див. Випадок VI) чи маркером chasing (див. Випадок III): маркер чекає тому вузлі. (5) Маркер сягає вузла рівня l, який був найбільш недавно посещен маркером annexing з ідентифікатором catp < q: маркер стає маркером chasing у разі і посилається через той самий канал як і попередній маркер (див. Випадок V). Маркер chasing (g, l) вирушає до кожному вузлі через канал, з якого найбільш недавно переданий маркер прийшов, поки одне з наступних ситуацій немає. (1) Маркер прибуває у процес рівня levp > l: маркер убитий цьому випадку. (2) Маркер прибуває у процес з маркером waiting рівня l: два маркера віддалені, і розпочнеться новий обхід розпочато цим процесом (див. Випадок II). (3) Маркер сягає процесу рівня l, у найбільш недавно переданий маркер chasing: маркер стає waiting (див. Випадок III). Маркер waiting перебуває у процесі, поки одне з наступних ситуацій не відбувається. (1) Маркер вищого рівня сягає того самого процесу: маркер waiting убитий (див. Випадок 1). (2) Маркер рівного рівня прибуває: два маркера віддалені, і обхід більш високого рівня розпочато (див. Випадок II). У Алгоритмі 7.13 перемінні й інформація маркерів, використовувана алгоритмом обходу ігноруються. Зауважте, що й p отримує маркер рівня вища, аніж levp, це маркер annexing, ініціатор якого p. Якщо обхід закінчується p, p стає лідером і відправляє повідомлення всім процесам, примушуючи їх закінчитися. Правильність і складність. Щоб продемонструвати правильність Korach-Kutten-Moran алгоритму, покажемо, що кількість маркерів, вироблених кожному рівні зменшується до одного, на деякому рівні чий ініціатор оберуть. Lemma 7.22 Якщо зроблено k> 1 маркерів лише на рівні l, по крайнього заходу один і k/2 маркерів зроблено лише на рівні l + 1. var levp: integer init — 1; catp, waitp: P init udef ", lastp: Neighp init udef: begin if p is initiator then begin levp := levp + 1; lastp := trav (p. levp); catp := p; send (annex, p, levp) to lastp end; while. .. (* Умова завершення, дивися текст *) do begin receive token (q, l); if token is annexing then t := A else t := З; if l > levp then (* Case I *) begin levp := l; catp := q; waitp := udef; lastp := trav (q, l); send (annex, q, l) to lastp end else if l == levp and waitp (udef then (* жпюжюмеэЎжЖьшзчь¶йvьMкzъµыHЁb «Є Е, n «0бЫ0М/A,~-8(Фo$‰І «Є-.$ — «H P*Йг*Ю‡)ґ)&[pic] Ъы%`рЛ Эз"[7]ХгнъдчRжсц/имщgй мЄ ~р3ВхШ rъУ*Правило B *) end.

Алгоритм 8.8 виявлення завершення, використовують подтверждения.

Правило A. При посилці повідомлення, p збільшує unackp, при отримання повідомлення від q, p посилає підтвердження q; і при отриманні підтвердження, p зменшує на 1 unackp. Вимоги для quiet (саме, що з quiet (p) слід, що p пасивний і ніяке основне повідомлення, надіслане p не в процесі передачі) задовольняться, якщо quiet з’ясувати, як quiet (p) ((statep= passive (unackp = 0). Початок алгоритму виявлення схоже початок алгоритму Dijkstra-Feijea-Van Gasteren. Починаємо з розгляду твердження P0, певного як P0 ((і (N > і> t): quiet (p). Уявлення P1 потрібно вибирати обережно, оскільки активація процесу pj з j> t процесом pi з і (t немає місце у те ж саме событии, что і посилка повідомлення процесом pi. Це має місце, проте, що, коли pj активізований (в такий спосіб, що P0 брехня), unackPi > 0. Отже, якщо твердження Pb певне як Pb ((p: (unackp > 0 (colorp = black), Підтримується наглядом Правило B. Коли процес посилає повідомлення, він працює чорним; процес стає білим лише, що він quiet. Укладання знову подтветждает, що коли і P0 звертається до брехня, P1 зберігається, отже (P0 (P1) не звертається до брехня. Результируещий алгоритм дається як Алгоритм 8.8, і інваріанту — Pa (Pb ((P0 (P1 (P2), де Pa ((p: (unackp =: #(передається повідомлення надіслане p).

+ #(передається підтвердження для p)) Pb ((p: (unackp > 0 (colorp = black) P0 ((і (N > і> t): quiet (p) P1 ((і (t (і (O): colorPi, = black P2 (маркер чорний. Теорему 8.10 Алгоритму 8.8 — правильний алгоритм виявлення завершення для обчислень з асинхронним проходженням повідомлень. Доказ. Завершення оголошується, коли p0 quiet і опрацьовує білий маркер. З положень цих умов слід, що (P2 і (P1, отже Pa (Pb (P0 зберігаються. Разом з quiet (p0) (p0) це, що це процеси quiet, отже зберігається term. Коли основне обчислення закінчується, кілька днів отримані все підтвердження, і всі процеси стають quiet. Коли закінчується перша хвиля, що починається, коли всі процеси quiet, все процессыокрашены в білий колір, також завершення оголошується наприкінці наступній хвилі. (Рішення, заснований на обмеженою затримки повідомлень. У [Tel91b, Розділ 4.1,3] класі рішень виявлення завершення (та інших негараздів) описується рішення заснований на припущенні, що затримка повідомлень обмежена постійної (. (Див. також Розділ 3.2). У цих рішеннях, процес перестав бути quiet проміжок времяни (після відправлення останнього повідомлення, також процес залишається чорним, що він не quiet, як описано у вирішенні заснованому на використанні підтверджень. Процес p стає quiet якщо (1) минуло по крайнього заходу (времяни коли прцесс p посилав востаннє повідомлення й р пасивний. Повний формальний висновок алгоритму предоствлен читателю.

8.3.4 Виявлення завершення з допомогою хвиль Усі алгоритми виявлення завершення, обговорені поки цьому розділі використовують кільцеву подтопологию для управляючих комунікацій; все алгоритми засновані на алгоритмі хвилі для кілець. Такі рішення було запропоновані іншої топології; наприклад, Francez і Rodeh [FR82] і Topor [Top84] запропонували алгоритм, використовує кореневе дерево охватов управляючих соммуникаций. Tan і Van Leeuwen [TL86] запропонували децентралізовані рішення до кільцевим мереж, для мереж дерев, й у довільних мереж. Вивчення цих рішень показує, що вони схожі друг на друга, за исклющением алгоритму хвилі, який вони спираються. У цьому вся підрозділі робиться начерк висновку алгоритму виявлення завершення (і інваріанту), заснованого на довільному алгоритмі хвилі, а не так на спеціально певному алгоритмі (кільцевому алгоритмі). Для кожної хвилі, перша подія, у якому процес посилає повідомлення для хвилі чи приймають рішення, називається відвіданням процесу. Передбачається, що, якщо потрібно, процес може відкласти відвідання, доки задоволено локальне умова процесу. Проте події тієї ж самої хвилі большє нє припиняються. Цей підрозділ представляє висновок лише випадку синхронного проходження повідомлень основного обчислення (як виведення в Підрозділі 8.3.1). Цей висновок можна узагальнити для асинхронного випадку, аналогічно як це зроблено в Підрозділі 8.3.2 і 8.3.3. Інваріант алгоритму повинен дозволити знайти завершення, коли хвиля приймають рішення; тому, спочатку ми встановлюємо P = P0, де P0 (все посещенные процеси пасивні. Справді, бо всі процеси були посещены, після ухвалення рішення, це твердження дозволяє виявлення завершення, коли хвиля приймають рішення. З іншого боку, P0 встановлюється коли хвиля починається (ще немає відвіданих процесів). Працюючи алгоритму хвилі P0 зберігається за правилом 1, поданому нижче. Правило 1. Тільки пасивні процеси відвідуються хвилею. На жаль, P0 приймає значення брехня, коли посещенный процес активізується непосещенным процесом. Тому, кожен процес забезпечується кольором, і P ослаблляется до (P0 (P1), де P1 (є непосещенный чорний процес. Більше слабкий інваріант зберігається відповідно до правилу 2. Правило 2. Процес надсилає повідомлення стає чорним. Хвиля може змінитися значення слабшого твердження, якщо посещен єдиний непосещенной чорний процес. Ситуація виправляється подальшим ослабленням P. Кожен процес представляє колір, білий чи чорний, як вхідний дане для хвилю. Хвиля измененяется те щоб обчислити самий темний з поданих квітів; пригадаємо, що хвилі можуть обраховувати infirna, і «самий темний «є infirnum. Коли хвиля приймає рішення, буде вирахувано самий темний із усіх представлених квітів; це буде білий колір, коли всі процеси представляють білий і чорний, коли з крайнього заходу один процес представляє чорний. Найближчим часом хвилі, хвиля буде називатися білої, якщо жоден процес ще представляє чорний колір; і чорної, коли з крайнього заходу один процес вже представляє чорний колір. Отже процес, що він відвідується, або представляє білий колір, що ні змінює колір хвилі, або представляє чорний цвет, что забарвлює хвилю в чорний колір. P послаблюється до (P0 (P1 (P2), де P2 (хвиля чорна. Це твердження зберігається з такого правилу. Правило 3. Посещенный процес представляє хвилі свій поточний колір. Справді, все основні комунікації як і діяльність хвилі зберігають це твердження, що є тому інваріантом. Хвиля закінчується невдало, якщо процеси вирішили для чорної хвилі, але нинішнього разі просто починається нову хвилю. Нова хвиля то, можливо успішної, лише коли процеси можуть бути білими, і трапляється відразу після відвідин хвилі. Правило 4. Вирішальний вузол у чорній хвилі розпочинає нове хвилю. Правило 5. Процеси негайно стають білими після кожного відвідин хвилі. Ці правила гарантують можливий успіх хвилі після завершення основного обчислення. Справді, якщо основне обчислення закінчилося, перша хвиля, розпочата після завершення, забарвлює всі в білий колір, і наступна хвиля закінчується успішно. У цьому вся алгоритмі лише одне хвиля може бігти у будь-якій час. Якщо дві хвилі, скажімо Проте й B, біжать одночасно, забарвлення процесу у білий колір після відвідин хвилею B може порушити інваріант для хвилі A. Тому, якщо алгоритм виявлення може бути децентралізований, повинен також використовуватися децентралізований алгоритм хвилі, щоб усе ініціатори алгоритму виявлення співпрацювали у тій самої хвилі. Також можливо використовувати інший принцип виявлення, у якому різні хвилі можуть обраховувати одночасно так, щоб порушити правильне дію алгоритму виявлення; див. Підрозділ 8.4.2.

8.4 Інші Рішення Ще двоє розв’язання проблеми виявлення завершення обговорюватимуть у тому розділі: алгоритм відновлення кредиту та алгоритм тимчасових пометок.

8.4.1 Алгоритм відновлення кредиту Mattern [Mat89a] запропонував алгоритм, який виявляє завершення дуже швидко, саме, за одиницю часу після виникнення (після ухвалення припущень ідеалізації часу з Визначення 6.31). Алгоритм виявляє завершення централізованого обчислення і передбачає, що кожен процес може послати повідомлення ініціатору обчислення безпосередньо (тобто, мережу містить зірку з ініціатором у центрі). У алгоритмі кожному повідомленню і кожному процесу призначається значення кредиту, що завжди перебуває між 0 і одну (включаючи кордону), і алгоритм підтримує такі затвердження як інваріанти. S1. Сума всіх кредитів (в повідомленнях і процесах) дорівнює 1. S2. Основне повідомлення має позитивний кредит. S3. Активний процес має позитивний кредит. Процеси мають позитивний кредит, коли правилами не наказано (то є, пасивним процесам) посилати їх кредити ініціатору. Ініціатор діє і як банк, збираючи все кредити, послані йому, в перемінної ret. Коли ініціатор має всі кредити, вимога для активних процесів і основних повідомлень мати позитивний кредит означає, що немає ніяких таких процесів і жодних таких повідомлень; отже term зберігається. Правило 1. Коли ret = 1, ініціатор викликає алгоритм оголошення. На виконання вимоги жвавості, все кредити — у кінцевому підсумку повинні прагнути бути передані ініціатору у разі виникнення завершення. Якщо основне обчислення закінчилося, більше немає основних повідомлень, і цікавлять лише кредити, підтримувані процессами.

var statep: (active, passive) init if p = p0 then active else passive; credp: fraction init if p = p0 then I else 0; ret: fraction init 0; for p0 only.

Sp: { statep = active } (* Праволо 3 *) begin send (mes, credp / 2): credp := credp / 2 end.

Rp: { Повідомлення (mes, c) прибуло в p } begin receive (mes, c); statep := active; credp := credp + з (* Правила 4 and 5b *) end.

Ip: { statep = active } begin statep := passive; send (ret, credp) to p0; credp :== 0 (* Правило 2 *) end.

AP0: { Повідомлення (ret, з) прибуло в p0 } begin receive (ret, з); ret := ret + з; if ret = 1 then Announce (* Правило I *) end.

Алгоритм 8.9 Алгоритм відновлення кредита.

Правило 2. Коли процес стає пасивним, він посилає свій кредит ініціатору. У початковій конфігурації лише ініціатор активний і має позитивний кредит, саме 1, і ret = 0, що означає, що S1- S3 удовлетворz.ncz. Інваріант повинен поддержаться протягом обчислення; цим переймаються такі правила. Спочатку, кожному основному повідомленню при посилці потрібно дати позитивний кредит; на щастя, відправник активний, і отже має позитивний кредит. Правило 3. Коли активний процес p посилає повідомлення, кредит поділяється між p і повідомленням. Процесу за його активізації треба дати позитивний кредит; на щастя, повідомлення, яку він у своїй, містить позитивний кредит. Правило 4. При активізації процесу вона засвоює майже кредит активизирующего повідомлення. Єдина ситуація, не охоплена цими правилами — отримання основного повідомлення вже активним процесом. Процес вже позитивний кредит, отже вже не потребує кредиті повідомлення, щоб задовольнити S3; проте, кредит може бути зруйнований, оскільки це привела би до вів до порушення S1. Процес який одержує повідомлення може поводження з кредитом двома у різний спосіб, обидва породжують правильні алгоритми. Правило 5a. Коли активний процес отримує основне повідомлення, кредит цього повідомлення посилається ініціатору. Правило 5b. Коли активний процес отримує основне повідомлення, кредит того повідомлення додається до кредиту процесу. Алгоритм дається як Алгоритм 8.9. У цьому вся алгоритмі, приймається, кожен процес знає ім'я ініціатора (по крайнього заходу, що він спочатку стає пасивним) і алгоритм використовує правило 5b. Коли ініціатор стає пасивним, він посилає повідомлення себе. Теорему 8.11 Алгоритм відновлення кредиту (Алгоритм 8.9) — правильний алгоритм виявлення завершення. Доказ. Алгоритм здійснює правила 1−5, отож, що S1 (S2 (S3 інваріант, де S1 ((((((((mes, з) з)+ ((p (P credp)+ (((ret, з) з)+ret S2 (((mes, з) у процесі передачі: з > 0 S3 ((p (P: (statep = passive (credp = 0) ((statep = active (credp > 0).

Завершение виявлено, коли ret = 1, що з інваріантом означає, що term виконується. Щоб показати живучість, зауважимо що по завершенні не відбуваються ніякі основні дії, отже відбуваються лише отримання повідомлень (ret, з), і кожен отримання зменшує на 1 число повідомлень що у процесі передачі. Отже, алгоритм сягає кінцевої конфігурації. У такій конфігурації немає ніяких основних повідомлень (соглачно term), credp = 0 всім p (відповідно до term і S3), і є ніякого повідомлення (ret, з) (конфігурація кінцева). Отже, ret = 1(из S1), також завершення виявлено. (Якщо здійснюється правило 5a, число управляючих повідомлень дорівнює кількості основних повідомлень плюс один. (Тут ми також вважаємо повідомлення, надіслане p0 себе по тому, і почав пасивним.) Якщо здійснюється правило 5b, число управляючих повідомлень дорівнює кількості внутрішніх подій переважно обчисленні плюс один, максимум числа основних повідомлень плюс один. Здається, що правило 5b краще з погляду складності за повідомленням управляючого алгоритму. Інша ситуація виникає при розгляді битовой складності. Відповідно до правила 5a, кожне значення кредиту на системі крім ret — негативна ступінь 2 (i.e ., 2-i для деякого цілого числа і). Уявлення кредиту негативним логарифмом зменшує число переданих біт. Алгоритм відновлення кредиту — єдиний алгоритм у цій главі, який вимагає включення додаткової інформації (саме, кредиту) в основні повідомлення. Додавання інформації до основним повідомленням називається piggybacking. Якщо piggybacking не бажаний, кредит повідомлення то, можливо у управляючому повідомленні, надісланому відразу після основного повідомлення. (Алгоритм наступного підрозділу також вимагає piggybacking, якщо це здійснено, використовуючи логічні годинник Лампорта.) Проблема може виникнути, якщо кредити (повідомлень і процесів) зберігаються у встановленому числі біт. І тут існує найменший позитивний кредит, і можливо розділити на цю кількість кредиту на два. Коли кредиту із найменшим можливим значенням потрібно розділити, основне обчислення припиняється тимчасово поки що процес не придбає додатковий кредит від ініціатора. Ініціатор віднімає цей кредит з ret (ret, може получиься внаслідок негативним) і передає його процесу, який відновлює основне обчислення після отримання. Це збільшення кредиту викликає блокування основного обчислення, що суперечить вимозі невтручання алгоритму виявлення закінчення основне обчислення. На щастя, такі дії редки.

8.4.2 Рішення, використовують тимчасові позначки Цей підрозділ обговорює розв’язання проблеми виявлення завершення, заснованої на використанні тимчасових позначок. Передбачається, чтопроцессы обладнані цієї мети годинами (Підрозділ 2.3.3); можна використовувати годинник апаратних коштів ЕОМ як і логічні годинник Лампорта (Підрозділ 2.3.3). Принцип виявлення було запропоновано Rana [Ran83]. Подібно рішенням Підрозділу 8.3.3, рішення Рана грунтується на локальному предикаті quiet (p) кожному за процесу p, де quiet (p) (statep = passive (не передаються соощения послані процесом p, що означаетс, что ((p quiet (p)) (term. Як і раніше, quiet визначається як quiet (p) ((statep = passive (unackp = 0). Алгоритм прагне перевірити для певного моменту часу t, чи всі процеси quiet; за позитивної відповіді слід висновок про завершення. Реалізується це хвилею, яка запитує кожен процес був він quiet в той час чи пізніше; процес, який був quiet, і не відповідає на повідомлення хвилі, ефективно гасячи волну.

var statep: (active, passive) ;

?p: integer init 0; (* Логічні годинник *).

unackp: integer init 0; (* Кількість повідомлень решти без відповіді*) qtp: integer init 0; (* Час останнього переходу на quiet *).

Sp: { statep = active } begin? p := ?p + 1; send (mes, ?p) ", unack p := unack p + 1 end.

Rp: { Повідомлення (mes, ?) з q прибуло в p } begin receive (mes, ?); ?p := max (?p, ?) + 1; send (ack, ?p) to q; statep := active end.

Ip: { statep = active } begin? p := ?p + 1; statep := passive; if unackp = 0 then (* p стає quiet *) begin qtp := ?p; send (tok, ?p, qtp, p) to Nextp end.

end.

Ap: { Підтвердження (ack, ?) прибуло в p } begin receive (ack, ?); ?p :== max (?p, ?) + 1; unackp := unackp — 1; if unackp = 0 and statep = passive then (* p сиановится quiet *) begin qtp := ?p; send (tok, ?p, qtp, p) to Nextp end end.

Tp: { Маркер (tok, ?, qt, q) прибуває в p } begin receive (tok, ?, qt, q}; ?p := max (?p, ?) + 1; if quiet (p) then if p = q then Announce else if qt (qtp then send (tok, ?p, qt, q) to Nextp end.

Алгоритм 8.10 алгоритм rana.

В на відміну від рішень на Розділі 8.3 відвідання хвилею процесу р не зачіпає перемінні процесу p, використовувані щоб виявити завершення. (Відвідання хвилі може торкатися перемінні алгоритму хвилі і, якщо використовуються логічні годинник Лампорта, годинник процесу.) У слідстві цього правильне дію алгоритму не порушується паралельним виконанням кількох хвиль. Алгоритм Рана децентралізований; всі виконують і той ж алгоритм виявлення. Децентралізований алгоритм теж можна отримати забезпечивши алгоритм Підрозділу 8.3.4 децентралізованим алгоритмом хвилі. У рішенні Рана процеси можуть починати приватні хвилі, що біжать одночасно. Процес p, коли стає quiet, зберігає час qtp, у якому це може бути, й починає хвилю, щоб перевірити, чи всі процеси quiet зі времяни qtp. Якщо виглядає так, завершення виявлено. Інакше, буде матись процес, що стає quiet пізніше, і нове хвиля буде розпочато. Алгоритм 8.10 исполльзует Україні цього принципу, використовуючи годинник Лампорта і використовуючи кільцевої алгоритм як хвильової алгоритм. Теорему 8.12 Алгоритм Рана (Алгоритм 8.10) — правильний алгоритм виявлення завершення. Доказ. Щоб доводити живучість алгоритму, припустимо що term зберігається у конфігурації (, коли всі ще передаеются підтвердження. Тоді відбуваються лише дії Ap and Tp. Оскільки кожна дія Ap зменшує на 1 число повідомлень (ack, () що у процесі передачі, відбувається кінцеве кількість цих кроків. Кожен процес стає quiet трохи більше один раз; отже маркер генерується трохи більше N разів, і кожен маркер передається трохи більше N раз. Отже за a + N2 кроків алгоритм виявлення завершення сягає когнечной конфігурації (, в якої term ще є. Нехай p0 процес з максимальним значенням qt в (, тобто, в кінцевої конфігурації qtP0 (qtP кожному за процесу p. Коли p0 став quiet в востаннє (тобто, під час qtP0), він передає маркер (tok, qtP0, qtP0, p0).Цей маркер проходить повний коло по кільцю і повертається до до p0. Справді, кожен процес p може бути quiet і задовольняти qtP (qtP0, що він отримує цей маркер. Якщо ні, p встановив б годинник на значення більше ніж qtP0 після отримання маркера і був би quiet пізніше ніж p0, суперечачи вибору p0. Тоді маркер повернувся p0, p0 є ще quiet, і отже викликав алгоритм оголошення. Щоб доказавать безпеку алгоритму, припустимо що p0 викликав алгоритм оголошення; це буде, коли p0 quiet і навіть отримує тому макер (tok, qtP0, qtP0, p0), який відправили усіма процесами. Доказ призводить до суперечності. Припустимо, що term не зберігається, коли p0 виявляє завершення; це, що є процес p такий, що p не quiet. І тут p став не quiet після відправлення маркера p0; справді, p був quiet, що він відправив цей маркер. Нехай q перший процес, який став не quiet після відправлення маркера (tok, ?, qt, p0). Це означає, що q був активізований при отриманні повідомлення від процесу, скажімо r, який ще відправив маркер процесу p0. (Інакше r був би не quiet після відправлення маркера, але, перш, ніж q став не quiet, що суперечить вибору q.) Тепер після відправлення маркера? q > qtP0 далі. Це означає, що підтвердження для повідомлення, який зробив q не quiet, послается r з тимчасової позначкою ?0 > qtP0. Отже, коли r став quiet, після отримання цього підтвердження, ?r > qtP0 зберігається, і отже qtr > qtP0 зберігається, коли r отримує маркер. Відповідно до алгоритму r не відправляє маркер; т.а. домовилися до протиріччю. (Опис цього алгоритму, який покладався на кільцеву топологію, було представлено Huang [Hua88].

Упражнения до Главі 8.

Раздел 8.1 Вправа 8.1 Оаарактеризуйте активні і пасивні стану Алгоритму А.2. Де ці стану перебувають у Алгоритмі A.1?

Раздел 8.2 Складність за часом алгоритму виявлення завершення визначено і кількість одиниць часу у щонайгіршому разі (відповідно до идиализационным припущенням Визначення 6.31) між завершенням основного обчислення і виклику алгоритмя оголошення. Вправа 8.2. Що складністю за часом Dijkstra-Scholten алгоритму? Вправа 8.3. Shavit-Francez алгоритм застосовується у довільній мережі з унікальними ідентифікаторами, і, аби максимально зменшити накладні Витрати управляючі повідомлення Gallager-Humblet-Spira алгоритм використовують як алгоритм хвилі. Складність часу виявлення — ?(NlogN). Можите ви поліпшити складність за часом до 0 (N) з допомогою обміну 0 (N) додаткових управляючих сообщений?

Раздел 8.3 Вправа 8.4. Чому предикат P0 у Висновку алгоритму Dijkstra-Feijen-Van Gasteren, так само значення брехня, якщо pj активізований pi, де j (t чи і > t?

Упражнение 8.5 Покажіть, що кожного m існує основне обчислення, яке використовує m повідомлень і це змушує алгоритм Dijkstra-Feijen-Van Gasteren використовувати m (N — 1) управляючих сообщений.

Раздел 8.4 Вправа 8.6. Які модифікації мають бути зроблені в Алгоритмі 8.9, щоб зробити правило 5a алгоритму відновлення кредиту, замість правила 5b? Вправа 8.7 У алгоритмі Рана прийнято, що згадані процеси мають ідентифікатори. Тепер прийміть натомість, що згадані процеси анонімні, але мають кошти посилки повідомлень їх наступникам в кільці, І що число процесів відомий. Змініть Алгоритм 8.10, щоб працювати до цього припущення. Вправа 8.8 Покажіть правильність алгоритму Рана (Алгоритм 8.10) з інваріанту алгоритма.

13 Отказоустойчивость в Асинхронних Системах Эта глава розглядає разрешимость проблем рішення на асинхронних розподілених системах. Результати організовані навколо фундаментального результату Фішера, Лінча і Патерсона [FLP85], поданого до Розділі 13.1. Сформульований як доказ неможливості для класу алгоритмів рішення, результат можна також ознайомитися трактувати як список припущень, які спільно виключають розв’язати проблеми рішення. Пом’якшення цих припущень дозволяє їм отримати практичні рішення різних проблем, як показано у наступних розділах. Подальше обговорення див. в Підрозділі 13.1.3.

13.1 Неможливість згоди У розділі доводиться фундаментальна теорема Фішера, Лінча і Патерсона [FLP85] про відсутність асинхронних, детермінованих 1-аварийно стійких протоколів згоди. Результат показаний міркуванням, які мають у собі законні послідовності виконання алгоритмів. Спочатку введемо позначення (на додачу до запровадженим в Розділі 2.1) і зазначимо елементарні результати, які будуть корисними далее.

13.1.1 позначення, Визначення, Елементарні Результати Послідовність подій [pic] застосовна в конфігурації [pic], якщо [pic] застосовна в [pic], [pic]- в [pic], тощо. Якщо [pic] - результуюча конфігурація, те що явно вказати події, які від [pic] до [pic], ми пишемо [pic] чи [pic]. Якщо [pic] і [pic] містить тільки події в процесах з [pic], ми також пишемо [pic]. Твердження 13.1 Нехай последовательности[pic] і [pic] застосовні в конфігурації [pic], і нехай жоден процес не бере участь одночасно у [pic] і [pic], тоді [pic] застосовна в [pic], [pic] застосовна в [pic], і [pic]. Доказ. Слід з використати Теореми 2.19. (.

Процесс [pic] має вхідну зміну [pic], доступну лише читання, і вихідний регістр однократної записи [pic] з початковим значенням [pic]. Вхідні конфігурація повністю визначається значенням [pic] кожному за процесу [pic]. Процес [pic] може затвердити рішення про значення (зазвичай 1 чи 0) записом їх у [pic]; початкова значення [pic] перестав бути значенням рішення. Передбачається, що коректний процес виконує нескінченно багато подій при законному виконанні; в у крайньому випадку, процес може виконувати (можливо порожній) внутрішнє событие.

Определение 13.2 t-аварийное законне виконання — виконання, у якому по меншою мірою N-t процесів виконують нескінченно в нашій країні, і кожен повідомлення, посылаемое коректному процесу, виходить. (Процес коректний, якщо виконує нескінченно в нашій країні.) Максимальне число збійних процесів, з яких може впоратися алгоритм, називається здатністю відновлення алгоритму, і завжди позначається [pic]. У розділі демонструється неможливість існування асинхронного, детермінованого алгоритму ось щодо здатності відновлення 1.

Определение 13.3 1-аварийно-устойчивый алгоритм згоди — алгоритм, задовольняє наступним трьом вимогам. Завершення. У кожному 1-аварийном законному виконанні, все коректні процеси вирішили. Узгодженість. Якщо досяжною конфігурації [pic] і [pic] для коректних процесів [pic] і [pic], то [pic]. Нетривіальність. Для [pic] й у [pic] існують досяжні конфігурації, у яких для деякого [pic] [pic]. Для [pic] конфігурація називається v-решенной, для деякого [pic] [pic]; конфігурація називається розв’язаною, якщо вона 0-решенная чи 1- вирішена. У [pic]-решенной конфігурації який-небудь процес прийняв рішення [pic]. Конфігурація називається v-валентной, коли всі вирішені конфігурації, досяжні з її, v-решенны. Конфігурація називається бивалентной, коли з неї реальні як 0-валентные, і 1-валентные конфігурації, і унивалентной, якщо вони або 1-валентная, або 0-валентная. У унивалентной конфігурації, хоча ніяке рішення був обов’язково прийнято ніяким процесом, остаточне рішення вже неявно визначено. Конфігурація [pic] [pic]-устойчивого протоколу називається розвилкою, якщо є безліч [pic] (найбільше) з [pic] процесів і конфігурації [pic] і [pic] такі, що [pic], [pic], і [pic] [pic]-валентна. Неформально, [pic]- Розвилка, якщо підмножина з [pic] процесів може домогтися 0-решенности як і, як і 1-решенности. Наступне твердження формально фіксує, що у будь-яку момент решта процеси має винести аварію найбільше [pic] процессов.

Утверждение 13.4 Для кожної досяжною конфігурації t-устойчивого алгоритму і кожного підмножини P. S по меншою мірою з N-t процесів існує вирішена конфігурація [pic] така, що [pic]. Доказ. Нехай [pic] і [pic] задовольняють умові і розглянемо виконання, яке сягає конфігурації [pic] і має нескінченно в нашій країні у кожному процесі з [pic] згодом (і жодних кроків процесів ні з [pic]). Це виконання — t-аварийное законне, і процеси в [pic] коректні; отже вони досягають рішення (.

Лемма 13.5 Досяжною розвилки немає. Доказ. Нехай [pic] - досяжною є конфігурація і [pic] - підмножина найбільше з [pic] процесів. Нехай [pic] буде доповненням [pic], тобто., [pic]. У [pic] по меншою мірою Nt процесів, отже існує вирішена конфігурація [pic] така, що [pic] (Твердження 13.4). Конфігурація [pic] або 0-, або 1-решенная; між іншим, що вона 0-решенная. Зараз буде показано, що [pic] ні на який 1-валентной [pic]; нехай [pic] - будь-яка така конфігурація, що [pic]. Оскільки кроки в [pic] і [pic] замінюються (Твердження 13.1), є конфігурація [pic], яка досяжним і з [pic], і из[pic]. Оскільки [pic] - 0-решенна, то и[pic]- теж, що показує не 1-валентность [pic]. (.

13.1.2 Доказ неможливості Спочатку, використовуючи нетривіальність проблеми, покажемо що є бивалентная початкова конфігурація (Лема 13.6). Вполедствии буде показано, що з бивалентной конфігурації, кожен доступний крок можна виконувати без переходу в унивалентную конфігурацію (Лема 13.7). Цього часу досить, щоб показати неможливість алгоритмів згоди (Теорему 13.8). Надалі, нехай, А — 1-аварийно-устойчивый алгоритм согласия.

Лемма 13.6 Для, А існує бивалентная початкова конфігурація. Доказ. Оскільки, А нетривіальний (Визначення 13.3), тобто досяжні 0- і 1-решенные конфігурації; нехай [pic] і [pic] - початкові конфігурації такі, що [pic]-решенная конфігурація досяжним з [pic]. Якщо [pic], ця початкова конфігурація бивалентна і результати діє. Інакше, є початкові конфігурації [pic] і [pic] такі, що [pic]-решенная конфігурація досяжним з [pic], і [pic] і [pic] різняться входом одного процесу. Справді, розглянемо послідовність початкових конфігурацій, що починається з [pic] і завершену [pic], у якій кожна така початкова конфігурація відрізняється від попередньої щодо одного процесі. (Ця послідовність виходить инвертированием вхідних бітов одного одним.) З першої конфігурації в послідовності, [pic], досяжним 0-решенная конфігурація, і з останнього, [pic], досяжним 1- вирішена конфігурація. Оскільки вирішена конфігурація досяжним з кожної початковій конфігурації, описані [pic] і [pic] можна знайти у послідовності. Нехай [pic] - процес, у якому [pic] і [pic] різні. Розглянемо законне виконання, розпочате з [pic], у якій [pic] не робить кроків; це виконання 1-аварийно законне і отже сягає розв’язаною конфігурації [pic]. Якщо [pic] 1-решенная, [pic] бивалентна. Якщо [pic] 0-решенная, зауважте, що [pic] відрізняється від [pic] лише у [pic], а [pic] робить кроків у виконанні; отже [pic] досяжним з [pic], що бивалентность [pic]. (Більше точно, конфігурація [pic] досяжним з [pic], де [pic] відрізняється від [pic] тільки здатна [pic]; отже [pic] 0-решенная.) (Щоб побудувати законне виконання без прийняття рішень ми повинні показати, кожен процес може й кроку зробити, І що кожне повідомлення то, можливо отримано не обумовлюючи ухвалення рішення. Нехай крок p. s позначає здобуття влади та обробку окремого повідомлення чи спонтанне дію (внутрішнє чи посилки) окремого процесу. Стан процесу, що робить крок, можуть призвести до різним подій. Прийом повідомлення застосуємо, коли вона їсти дорогою, і спонтанний крок завжди применим.

Лемма 13.7 Нехай [pic]- досяжною є бивалентная конфігурація і p. s — який можна застосовувати крок для процесу p в [pic]. Існує послідовність подій [pic] така, що p. s застосуємо в [pic], і [pic] бивалентна. Доказ. Нехай З — безліч конфігурацій, досяжних з [pic] без застосування p. s, тобто., З = {[pic]: p. s немає в [pic]}; p. s застосуємо в кожної конфігурації З (нагадаємо, що p. s — крок, а чи не окреме подія). У З є конфігурації [pic] і [pic] такі, що з [pic] досяжним vвирішена конфігурація. Щоб переконається у тому, зауважимо, що, т.к. [pic] бивалентна, з її реальні v-решенные конфігурації [pic] для v =0,1. Якщо [pic] (тобто. задля досягнення розв’язаною конфігурації p. s не застосовувався), зауважимо, що [pic], тим щонайменше, v-решенная, тому виберемо [pic]. Якщо [pic] (тобто. задля досягнення розв’язаною конфігурації p. s застосовувався), виберемо [pic] як конфігурацію, з якої застосовувався p. s. Якщо [pic], [pic] - бажана бивалентная конфігурація. Припустимо, що [pic], і розглянемо конфігурації шляхах від [pic] до [pic] і [pic]. Дві конфігурації цих шляхах називаються сусідніми, якщо одна виходить з інший за крок. Оскільки 0-решенная конфігурація достижимаа з [pic] і однувирішена конфігурація досяжним з [pic], то шляхах є конфігурація [pic] така, що [pic] бивалентна; чи є сусіди [pic] і [pic] такі, що [pic] 0-валентна і [pic] - 1-валентна. У першому випадку [pic] - бажана бивалентная конфігурація і лема доведено. У другий випадок, одна конфігурація з [pic] і [pic] - розвилкою, що є протиріччям. Справді, припустимо, що [pic] отримана за крок з [pic], тобто., [pic] для події e у процесі q. Тепер [pic] - це [pic] і, отже, 1-валентна, але [pic] не 1-валентна, т.к. [pic] вже 0-валентна. Отже, е і p. s не замінюються, яка передбачає (Теорему 2.19), що p = q, але давайте тоді досяжною є конфігурація [pic] задовольняє [pic] і [pic]. Оскільки перша 0-валентна, а остання 1-валенттна, [pic] - Розвилка, що протиріччям. (.

Теорема 13.8 Асинхронного, детермінованого, 1-аварийно-устойчивого алгоритму згоди немає. Доказ. Якщо припустити, що така алгоритм існує, можна побудувати законне виконання без прийняття рішень, починаючи з бивалентной початковій конфігурації [pic]. Коли побудова сягне конфігурації [pic], виберемо як [pic] який можна застосовувати крок, який був застосуємо найбільша кількість раз. По попередньої лемме, виконання можна розширити отже виповнюється [pic] і досягається бивалентная конфігурація [pic]. Таке побудова дає нескінченне законне виконання, де всі процеси коректні, але рішення ніколи прийнято. (.

13.1.3 Обговорення Висновок стверджує, що немає асинхронних, детермінованих, 1- аварийно-устойчивых алгоритмів рішення проблеми згоди; це виключає алгоритми для класу нетривіальних проблем. (див. Підрозділ 12.2.2). На щастя, деякі припущення, які у основі результату Фішера, Лінча і Патерсона, можна сформулювати явно, і результати, як з’ясувалося, очеть чутливий до послаблення кожного з них. Попри висновок про неможливість, багато нетривіальні проблеми мають рішення, навіть у асинхронних системах і де процеси можуть відмовляти. Ослаблена модель відмов. Розділ 13.2 розглядає модель відмов изначально-мертвых процесів, яка слабше, ніж модель аварій, у цій моделі злагоду і вибори детерминированно реальні. Ослаблена координація. Розділ 13.3 розглядає проблеми, які вимагають не таким тісним координації між процесами, ніж згоду, і показує, що з них, включаючи перейменування, можна розв’язати в моделі аварій. Рандомизация. Розділ 13.4 розглядає протоколів із уравненными імовірностями, де вимога завершення досить ослаблене, щоб забезпечити рішення навіть за присутності Візантійських відмов. Слабка вимога завершення. Розділ 13.5 розглядає інше ослаблення вимоги завершення, саме де дозвіл потрібно тільки коли цей процес коректний; тут також можливі Византийско-устойчивые рішення. Синхронність. Вплив синхронності вивчається далі в Главі 14.

Возможны досить тривіальні рішення, якщо 1 із 3 вимог Визначення 13.3 просто опущений; див. Вправа 13.1. Виняток припущення (неявно використаного в доказі Леми 13.6) у тому, що можливі все комбінації входів, вивчається в Вправі 13.2.

13.2 Изначально-мертвые Процеси У моделі изначально-мертвых процесів, жоден процес неспроможна відмовити після виконання події, отже, при законному виконанні кожен процес виконує або 0, або нескінченно багато событий.

Определение 13.9 t-изначально-мертвых законне виконання — виконання, в якому за крайнього заходу N-t процесів активні, кожен активний процес виконує нескінченно в нашій країні, і кожен повідомлення, посылаемое коректному процесу, приймається. У t-изначально-мертвых-устойчивом алгоритмі згоди, кожен коректний процес приймають рішення у кожному t-изначально-мертвых законному виконанні. Узгодженість і нетривіальність визначаються ж, як і моделі аварий.

var [pic], [pic], [pic]: sets of processes init 0; begin shour ;

(* тобто.: forall [pic] do send to [pic] *) while [pic] < L do begin receive; [pic] end; shout;

[pic]; while [pic] do begin receive;

[pic];

[pic]; end;

¤?ҐЙ¤П¦(c)ФкЇfµрј6 В.Т"СWдЄЬјйМвЖвужюЧFйНРвжЭНaгnПP,#з0ИК*1?иА с?8ьЧУш‚5/Ш26hІ-' «jп§.

Ў Є ?

5[pic], знаючи, що [pic] вже надіслав меншою мірою одне повідомлення. Буде показано, що проблеми злагоди і виборів можна розв’язати в моделі спочаткумертвих, поки відмовляє меншість процесів (t < N/2). Більша число изначально-мертвых процесів заборонена (див. Вправа 13.3).

Соглашение про підмножині коректних процесів. Спочатку представляється алгоритм Фішера, Лінча і Патерсона [FLP], з допомогою якого кожен із коректних процесів обчислює те ж сукупність коректних процесів. Здатність відновлення цього алгоритму [pic]; нехай [pic] одно [pic], зауважимо, що коректних процесів по меншою мірою [pic]. Алгоритм працює у два етапу; див. Алгоритм 13.1. Зауважимо, що згадані процеси посилають повідомлення самі собі; зроблено в багатьох стійких алгоритми і полегшує аналіз. Тут й надалі, операція «shout» означає forall [pic] do send to [pic]. Ці процеси будують орієнтований граф [pic], «вигукуючи» свій ідентифікатор (у міжнародному сполученні) та чекаючи прийому [pic] повідомлень. Оскільки коректних процесів по меншою мірою [pic], кожен коректний процес отримує досить багато повідомлень завершення цієї маленької частини. Наступники [pic] в графі [pic] - вершини [pic], у тому числі [pic] отримав повідомлення. Изначально-мертвый процес не отримував, і не посилав ніяких повідомлень, отже він формує ізольовану вершину в [pic]; у коректного процесу є [pic] наступників, отже, не ізольований. Вузол — це сильносвязный компонент без вихідних дуг, у якому по меншою мірою дві вершини. У [pic] є вузол, у якому коректні процеси, й, оскільки кожен коректний процес має ступінь виходу [pic], цей вузол має розмір по меншою мірою [pic]. Через війну, оскільки [pic], існує рівно один вузол; назвемо його [pic]. У кінцевому підсумку, оскільки коректний процес [pic] має [pic] наступників, по меншою мірою них належить [pic], що означає, що це процеси в [pic] - нащадки [pic]. Отже, другого етапу алгоритму, процеси утворюють індукований подграф графа [pic], у якому по меншою мірою їх нащадків, одержуючи безліч наступників від кожної процесу, який, як вони знають, коректний. Оскільки процеси не отказвыают після посилки повідомлення, у цьому етапі немає глухого кута. Справді, [pic] чекає повідомлення від [pic] лише коли першому етапі певний процес отримав повідомлення, що показує на коректність [pic]. Після закінчення Алгоритму 13.1 кожен коректний процес отримав набір наступників кожного зі своїх нащадків, дозволяючи в такий спосіб обчислити унікальний вузол в G. Згода і вибір. Оскільки всі коректні процеси домовляються про вузлі коректних процесів, обрати процес тепер тривіально; обирається процес з найбільшою ідентифікатором в K. Тепер як і просто досягти згоди. Кожен процес вістить, разом із наступниками, свій вхід (x). Після обчислення K, процеси вирішили про значення, яке є функцією сукупності входів в K (наприклад, значення, яке зустрічається найчастіше, нуль у разі нічиєї). Алгоритми узел-соглашения, згоди, і вибору обмінюють [pic] повідомленнями, де повідомлення може містити список з L імен процесів. Було запропоновано ефективніші алгоритми вибору. Итаи та інші [IKWZ90] привели алгоритм, використовує [pic] повідомлення й показали, що це є нижньої кордоном. Масузава та інші [MNHT89] розглянули проблему для клік з почуттям напряму, і запропонували алгоритм [pic] повідомлень, також є оптимальним. Будь-який алгоритм вибору, обираючи коректний процес у ролі лідера також розв’язує проблеми згоди; лідер вістить свій вхід і всі коректні процеси приймає рішення у ній. Отже, вищезгадані верхня межа залишаються також і проблеми згоди для изначально-мертвых процесів. У моделі аварій, проте, наявність лідера не у рішенні проблеми згоди; сам лідер може відмовити до мовлення свого входу. Крім того, проблема вибору не можна залагодити в моделі аварійного відмови, що показано наступного разделе.

13.3 Детерминированно Досяжні Випадки Проблема згоди, яка вивчалася досі, вимагає, щоб кожен процес прийняв рішення про одне і тому самому значенні; цей розділ вивчає разрешимость завдань, які прагнуть менш близькій координації між процесами. У Підрозділі 13.3.1 представлено рішення практичної проблеми, саме, перейменування сукупності процесів у малих просторі імен. У Підрозділі 13.3.2 виведені раніше результати про неможливість розширюються, щоб охопити більший клас проблем рішення. Розподілена завдання описується множинами можливих вхідних і вихідних значень X і D, і (можливо частковим) відображенням [pic]. Інтерпретація відображення T: якщо вектор [pic] описує вхід процесів, то [pic] - набір допустимих виходів алгоритму, описаний як вектор рішення [pic]. Якщо T — часткова функція, припустима не кожна комбінація вхідних значений.

Определение 13.10 Алгоритм є t-аварийно стійким рішенням для завдання T коли він задовольняє наступним твердженням. Завершення. У кожному t-аварийно законному виконанні, все коректні процеси вирішили. Несуперечність. Якщо всі процеси коректні, вектор рішення [pic] перебуває у [pic]. Умова несуперечливості передбачає, що у виконанні, де підмножина процесів приймають рішення, частковий вектор рішень завжди можна розширити до вектора в [pic]. Безліч [pic] позначає сукупність всіх векторів виходу, тобто, діапазон T. Приклад: згоду. Проблема згоди вимагає, щоб усе рішення було рівні, тобто., [pic]. Приклад: вибір. Проблема вибору вимагає, щоб один процес прийняв рішення 1, інші 0, тобто., [pic]. Приклад: приблизне угоду. У проблемі [pic]-приблизительного угоди кожен процес має дійсне вхідний значення та приймає постанову по дійсному вихідному значенні. Максимальне різницю між двома значеннями виходу найбільше e, і виходи би мало бути укладено між двома входами. [pic]. Приклад: перейменування. У проблемі перейменування кожен процес має окремий ідентифікатор, котрі можуть братися з довільно великий області. Кожен процес має ухвалити рішення про нове ім'я, з меншою області 1, …, K, те щоб дедалі нові імена розрізнялися. [pic]. У зберігає порядок версії проблеми перейменування, нові імена повинні зберігати порядок старих імен, тобто, [pic].

13.3.1 Розв’язна Проблема: Перейменування У цьому вся підрозділі представлять алгоритм для перейменування Аттийи і інших [ABND+90]. Алгоритм допускає до [pic] аварій (t — параметр алгоритму) та здійснює перейменування на просторі імен розміру [pic].

Верхняя кордон t. Ми спочатку покажемо, що жоден алгоритм перейменування зможе витримати N/2 чи більше збоїв; фактично, майже всі аварийно-устойчивые алгоритми мають обмеження t N, тобто за крайнього заходу один процес, скажімо p, від якого q одержав, і r отримав. Отже, як [pic] і [pic] - значення [pic], що означає, що сама включено в інше. (.

Лемма 13.13 Кожен коректний процес по крайнього заходу якось сягає стійкого безлічі у кожному законному t-аварийном виконанні. Доказ. Нехай p — коректний процес; безліч [pic] може лише розширюватися, і має найбільше N вхідних імен. Отже, для [pic] досягається максимальне значення [pic]. Процес p «вигукує» це значення, і повідомлення виходить кожним коректним процесом, що, кожен коректний процес у кінцевому підсумку має надмножество [pic]. Проте, це надмножество не суворе; інакше коректний процес б надіслав суворе надмножество [pic] до p, що суперечить вибору [pic] (як найбільш великого безлічі коли-небудь який побував у p). Отже, кожен коректний процес q має значення [pic] по крайнього заходу одного разу при виконанні, і отже кожен коректний процес посилає p повідомлення протягом виконання. Усі ці повідомлення виходять при виконанні, і те що [pic] будь-коли збільшується межі [pic], вони всі підраховуються і зовсім змушують [pic] стати стійким в p. (.

После досягнення стійкого безлічі V вперше, процес p зупиняється на парі (p.s, r), де p. s — розмір V, і r — становище [pic] в V. Стійкий безліч було від N-t процесів, і отже містить по крайнього заходу N-t вхідних імен, що [pic]. Становище в безлічі розміру p. s задовольняє [pic]. Кількість можливих рішень, отже, [pic], що дорівнює [pic]; коли потрібно, можна використовувати фіксований відображення пар на цілі вересня діапазоні 1,…, K (Вправа 13.5).

Теорема 13.14 Алгоритм 13.2 розв’язує проблеми перейменування з вихідним простором імен розміру [pic]. Доказ. Оскільки, у кожному законному t-аварийном виконанні кожен коректний процес сягає стійкого безлічі, кожен коректний процес стає в нове ім'я. Щоб показати, що нові імена різні, розглянемо стійкі безлічі [pic] і [pic], що досягаються процесами q і r відповідно. Якщо такі безлічі мають різні розміри, рішення q і r різні, оскільки розмір входить у рішення. Якщо безлічі мають і той ж розмір, то Лемме 13.12, вони рівні; тоді q і r мають різний ранг в безлічі, що — знову показує, що й рішення різні. (.

Обсуждение. Зауважте, що не завершує Алгоритм 13.2 після ухвалення рішення про своє імені; він продовжує алгоритм, щоб «допомогти «іншим процесам теж ухвалити будь-яке рішення. Aттийя та інші [ABND+90] показують, що це потрібно, оскільки алгоритм повинен справитися з ситуацією, коли деякі процеси настільки повільні, що виконують перший крок було по тому, як інших процесів вже вирішили. Простий алгоритм, представлений не найкращий у відношенні розміру простору імен, використовуваного для перейменування. Aттийя та інші [ABND+90] привели складніший алгоритм, що призначає імена на діапазоні від 1 до N + t. Результати наступного підрозділу припускають нижню межу розміру нового простору імен для аварийно-устойчивого перейменування N + 1. Aттийя та інші запропонували також алгоритм для перейменування, сохраняющего порядок. Він здійснює перейменування на цілі вересня діапазоні від 1 до [pic], що, як було зазначено показано, є маленьким розміром простору імен, що дозволяє t-аварийно-устойчивое перейменування, що зберігає порядок.

13.3.2 Розширення Результатів Неможливості Результат про неможливість згоди (Теорему 13.8) був узагальнено Мораном і Вольфшталом [MW87] ще загальних проблем рішення. Граф виконання завдання T — граф [pic], де [pic] і E = {([pic], [pic]): [pic] і [pic] відрізняються точно щодо одного компоненті}. Завдання T називається зв’язковою, якщо [pic]- зв’язний граф, і незв’язною інакше. Моран і Вольфштал припустили, що вхідний граф завдання T (певний аналогічно графу рішення) зв’язний, тобто, як і доказі Леми 13.6 ми можемо рухатися між будь-якими двома вхідними конфігураціями, змінюючи по порядку входи процесу. З іншого боку, результат неможливості було доведено для не-тривиальных алгоритмів, тобто, алгоритмів, які задовольняють, в доповнення до (1) завершення і (2) несуперечливості, Нетривіальність. До кожного [pic] є досяжною є конфігурація, в якої процеси зупинилися на (вирішили) [pic].

Теорема 13.15 Нетривіального 1-аварийно-устойчивого алгоритму рішення незв’язною завдання T немає. Доказ. Припустимо, навпаки, що така алгоритм, A, існує; нього можна отримати алгоритм згоди, А ", що суперечить Теоремі 13.8. Щоб спростити аргументацію, ми вважаємо, що [pic] містить два зв’язкових компонента, «0 «і «1 ». Алгоритм А' спочатку моделює A, але натомість, щоб зупинитися на значенні d, процес «вигукує» і чекає отримання N-1 повідомлень голосування. Глухого Кута немає, оскільки всі коректні процеси вирішили в A; отже по крайнього заходу N-1 процесів «вигукують» повідомлення голосування. Після набуття повідомлень, має процес p є N-l компонентів вектора в [pic]. Цей вектор можна розширити значенням процесу, від якої голос не було отримано те щоб весь вектор був у [pic]. (Справді, несуперечливе рішення прийняте цим процесом, чи досі можливо.) Тепер зауважимо, що різні процеси можуть обраховувати різні розширення, але це розширення належать одному й тому зв’язков компоненту графа [pic]. Кожен процес, який одержав N-1 голосів, стає в (приймають рішення) імені пов’язаного компонента, якому належить розширений вектор. Залишається показати, що, А «є алгоритмом згоди. Завершення. Вище вже обговорювалося, кожен коректний процес отримує по крайнього заходу N-1 голосів. Угоду. Ми спочатку доведемо, що є вектор [pic] такий, що кожен коректний процес отримує N-1 компонентів [pic]. Випадок 1: Усі знайшли рішення, у A. Нехай [pic] буде вектором досягнутих рішень; кожен процес отримує N-1 компонентів [pic], хоча «що цей «компонент не завжди однаковий кожному за процесу. Випадок 2: Усі крім одного, скажімо r, знайшли рішення, у A. Усі коректні процеси отримують одні й самі N-1 рішень, саме розв’язання усіх процесів крім r. Можливо, що r зазнав аварії, але, оскільки можливо, що r просто дуже повільний, усе ж таки зможе досягти рішення, тобто, існує вектор [pic], який розширює рішення, усталені сьогодні. З існування [pic] слід, кожен процес приймають рішення про зв’язковому компоненті цього вектора. Нетривіальність. З нетривіальності A, можна досягнути вектори рішення як і компоненті 0, і у компоненті 1; з побудови А' обидва рішення можливі. Отже, А «є асинхронним, детермінованим, 1-аварийностійким алгоритмом згоди. Алгоритму, А існує у Теоремі 13.8. (.

Обсуждение. Вимога нетривіальності, яка затверджує, кожен вектор рішення на [pic] можна досягти, є досить сильним. Можна запитати, можуть деякі з них алгоритми, що є тривіальними у сенсі тим не менш бути цікавими. Як приклад, розглянемо Алгоритм 13.2 для перейменування; відразу ж немає, що він нетривіальний, тобто, кожен вектор з окремим ім'ям можна досягти (так, можна досягти); ще менше зрозуміло чому нетривіальність може бути цікавою у разі. Дослідження докази Теореми 13.15 показує, що у доказі можна використовувати більш слабке вимога нетривіальності, саме, що вектори рішення реальні по крайнього заходу у різних зв’язкових компонентах [pic]. Таку ослаблену нетривіальність можна іноді вивести з формулювання проблеми. Фундаментальна робота про завданнях рішення, що є розв’язуються і нерозв’язними за наявності одного сбойного процесора, було виконано Бираном, Мораном і Заксом [BMZ90]. Вони дали повну комбинаторную характеристику розв’язаних завдань решения.

13.4 Імовірнісні Алгоритми Злагоди У доказі Теореми 13.8 показано, кожен асинхронний алгоритм згоди має нескінченні виконання, у яких ніяке рішення не приймається. На щастя, для добре підібраних алгоритмів такі виконання можуть бути досить рідкість й мати ймовірність 0, що робить алгоритми дуже корисними в вероятностном сенсі; див. Главу 9. У розділі ми уявляємо два ймовірнісних алгоритму згоди, один для моделі аварій, інший для Візантійської моделі; алгоритми було запропоновано Брахой і Туэгом [BT85]. У обох випадках спочатку доводиться верхня межа для здібності відновлення (t < N/2 і t < N/3, відповідно) та про що обидва алгоритму задовольняють відповідної кордоні. У вимогах правильності тих ймовірнісних алгоритмів згоди, вимога завершення зроблено вірогіднісним, тобто, замінено слабшим вимогою збіжності. Відповідність. Для кожної початковій конфігурації, [pic][корректный процес прийняв рішення після k кроків] = 0. Часткова правильність (Угоду) повинна задовольнятися при кожному виконанні; що у результаті імовірнісні алгоритми мають клас Las Vegas (Підрозділ 9.1.2). Можливість приймається усіма выполнениями, які починаються часткою у цій початковій конфігурації. Щоб ймовірності були значимими, має бути поставлено розподіл ймовірності над цими выполнениями. Це можна зробити використанням рандомизации у процесах (як і Главі 9), але тут замість цього визначається розподіл ймовірності на прибытиях повідомлень. Розподіл ймовірності на виконаннях, які починаються у цій початковій конфігурації, визначається припущенням про законному плануванні. Обидва алгоритму функціонують в раундах; в раунді процес «вигукує» повідомлення і чекає отримання N-t повідомлень. Визначимо R (q, p, k) як подія, як у раунді k процес p отримує (раунд-k) повідомлення q серед перших N-t повідомлень. Законне планування означає, що [pic] [pic]. Всім k і різних процесів p, q, r, події R (q, p, k) і R (q, r, k) незалежні. Зауважте, що Твердження 13.4 також виконується для ймовірнісних алгоритмів, коли потрібно відповідність (завершення з імовірністю один). Справді, оскільки досяжною є конфігурація досягається з позитивною ймовірністю, вирішена конфігурація мусить бути досяжним з кожної досяжною конфігурації (хоча обов’язково достигаемой у кожному выполнении).

13.4.1 Аварийно-устойчивые Протоколи Злагоди У цьому вся підрозділі вивчається проблема згоди у моделі аварійного відмови. Спочатку доводиться верхня межа t < N/2 здібності відновлення, потім наводиться алгоритм ось щодо здатності відновлення t < N/2. Теорему 13.16 t-аварийно-устойчивого протоколу згоди для [pic]не існує. Доказ. Існування такого протоколу, скажімо P, передбачає наступний три вимоги. Вимога 13.17 P має бивалентную початкову конфігурацію. Доказ. Аналогічно доведенню Леми 13.6; деталі залишені читачеві. (Для підмножини процесів P. S, конфігурація [pic] називається S-валентной, як і 0- і 1-решенные конфігурації реальні з [pic] з допомогою лише кроків в P. S. [pic]называется S-0-валентной якщо, роблячи кроки лише у P. S, 0- вирішена конфігурація, й взагалі ніяка 1-решенная конфігурації, то, можливо досягнуто, S-1-валентная конфігурація визначається аналогічно. Розділимо процеси на дві групи, P. S і T, розміру [pic] і [pic]. Вимога 13.18 Досяжною Є конфігурація [pic]является чи S-0-валентной і T-0-валентной, чи S-1-валентной і T-1-валентной. Доказ. Справді, висока здатність відновлення протоколу передбачає, як і P. S і T можуть досягати рішення незалежно; якщо можливі різні рішення, можна досягнути суперечливою конфігурації, об'єднуючи плани. (Вимога 13.19 P немає досяжною бивалентной конфігурації. Доказ. Нехай дана досяжною є бивалентная конфігурація [pic] і припустимо, що це [pic] S-l-валентна і T-1-валентна (використовуємо Вимога 13.18). Проте, [pic] бивалентна, тому (зрозуміло з зв’язок між групами) 0-решенная конфігурація [pic] також досяжним з [pic]. У послідовності конфігурацій від [pic]до [pic] є дві наступних конфігурації [pic] і [pic], де [pic] є і S-v-валентной і T-vвалентною. Нехай p — процес, викликає перехід із [pic] в [pic]. Тепер невиконуваним [pic], оскільки [pic] S-1-валентна і [pic] S-0-валентна; аналогічно невиконуваним [pic]. Ми дійшли протиріччю. (Протиріччя існуванню протоколу P є наслідком Вимог 13.17 і 13.19; в такий спосіб Теорему 13.16 доведено. (.

Аварийно-устойчивый алгоритм згоди Брахи і Туэга. Аварийно-устойчивый алгоритм згоди, запропонований Брахой і Туэгом [BT85] функціонує в раундах: в раунді k процес посилає повідомлення всім процесам (включаючи себе) і чекає отримання N-t повідомлень раунду k. Чекання такого числа повідомлень технічно нескладне можливість глухого кута (див. Вправа 13.10). У кожному раунді, процес p «вигукує» голос за 0 чи 1 разом із вагою. Вага — число голосів, отриманих при цьому значення попередньому раунді (1 у першому раунді); голос із, перевищують N/2, називається свідком. Хоча різні процеси в раунді можуть голосувати по-різному, в одному раунді ніколи немає свідків різних значень, як буде показано нижче. Якщо процес p отримує свідка в раунді k, p голосує за своє значення в раунді k+1; інакше p голосує за більшість отриманих голосів. Рішення приймається, тоді як раунді отримано більше, ніж t свідків; рішучий процес виходить основний цикл і свідки криків протягом наступних двох раундів, щоб дати можливість іншим процесам вирішити. Протокол дано як Алгоритм 13.3.

var [pic]: (0, 1) init [pic] (*голос p*).

[pic]: integer init 0 (*номер раунда*).

[pic]: integer init 1 (*Вага голоси p*).

[pic]: integer init 0 (*Лічильник отриманих голосов*).

[pic]: integer init 0 (*Лічильник отриманих свідків *) begin while [pic] do begin [pic](*сброс лічильників*) shout; while [pic] do begin receive; if r > [pic] then (*Майбутній раунд…*) send< vote, r, v, w> to p (*…обробити пізніше*) else if r = [pic] then begin [pic] if w > N/2 then (*Свидетель*).

[pic] end else (*r < [pic], ignore*) skip end;

(*Вибрати нового значення: голосу і вагу наступного раунді*) if [pic] then [pic]: = 0 else if [pic] then [pic]: = 1 else if [pic] then [pic]: = 0 else [pic]: = 1;

[pic];

(*Прийняти рішення, якщо більш t свідків*) if [pic] then [pic];

[pic] end;

(*Допомогти іншим процесам прийняти зважене рішення*) shout; shout end Алгоритм 13.3 Аварийно-устойчивый алгоритм согласия Голоса, які прибувають ще пізніх раундів би мало бути оброблені в відповідному раунді; це моделюється в алгоритмі з допомогою посилки повідомлення самому процесу в обробці пізніше. Зауважте, що у будь-якій раунді процес отримує найбільше вони одностайно від кожної процесу, загальним кількістю до N-t голосів; оскільки більш, ніж N-t процесів можуть «викрикувати» голос, процеси можуть приймати відвідувачів до уваги різні підмножини «выкрикиваемых» голосів. Ми згодом покажемо кілька властивостей алгоритму, які спільно означають, що це — імовірнісний аварийно-устойчивый протокол згоди (Теорему 13.24).

Лемма 13.20 У кожному раунді ніякі процеси не свідчать за різні значення. Доказ. Припустимо, що у раунді k, процес p свідчить за v, та інформаційний процес q свідчить за w; k > 1, оскільки у раунді 1 ніякі процеси не свідчать. Припущення передбачає, що у раунді k-1, p отримав більш ніж N/2 голосів за v, і q отримав більш ніж N/2 голосів за w. Разом задіяно більш N голосів; отже, процеси від яких p і q отримали голоси перекриваються, тобто, є r, який послав v-голос процесу p і w-голос процесу q. Це означає, що v =w. (.

Лемма 13.21 Якщо процес приймають рішення, то ми все коректні процеси вирішили про одне і тому самому значенні, і найбільше два раунду через. Доказ. Нехай k це раундом, у якому приймається рішення, p — процес, приймає рішення, у раунді k, і v — значення рішення p. Рішення передбачає, що у раунді k були v-свидетели; отже, по Лемме 13.20 не було свідків інших значень, так чого жодне інше рішення не приймається в раунді k. У раунді k було більш t свідків v (це з рішення p), отже, все коректні процеси здійснюють за крайнього заходу одного vсвідка в раунді k. Через війну, всі, що в раунді k + 1, голосують за v (зауважте також, що p досі «вигукує» голос в раунді k + 1). Це означає, що, якщо рішення взагалі приймається в раунді k + 1, це рішення v. У раунді k + 1 пропонуються лише v-голоса, отже всі, що в раунді k + 2 свідчать за v у тому раунді (p теж). Через війну, в раунді k + 2 все коректні процеси, які прийняли рішення на попередніх раундах, отримують N-t v-свидетелей і зупиняються на v. (.

Лемма 13.22 [pic][никакого рішення немає звичаю в раунде[pic]] = 0. Доказ. Нехай P. S — безліч N-t коректних процесів (таке безліч існує) і припустимо, щодо раунду [pic] немає звичаю ніякого рішення. Припущення законного планування передбачає, що, для деякого [pic], у кожному раунді можливість, кожен процес у P. S отримує точно N-t голосів процесів в P. S, по крайнього заходу [pic]. Це відбувається у трьох наступних раундах [pic], [pic] і [pic] з імовірністю по крайнього заходу [pic]. Якщо це відбувається, процеси в P. S отримують одні й самі голосу у раунді [pic] і отже вибирають один і той ж значення, скажімо [pic] в раунді [pic]. Усі в P. S голосують за [pic] в раунді [pic], що означає, кожен процес у P. S отримує N-t голосів за [pic] в раунді [pic]. Це означає, що згадані процеси в P. S за [pic] в раунді [pic]; отже вони всі отримують N-t > t свідків [pic] в раунді [pic], і всі приймають рішення [pic] у тому раунді. Звідси Pr [Процеси в P. S відмовили рішення на раунді k + 2].

[pic]Pr [Процеси в P. S не відмовили рішення до раунду k], що підтверджує результат. (.

Лемма 13.23 Якщо всі процеси починають алгоритм з входом v, усі вони вирішили v в раунді 2. Доказ. Усі можна лише голоси за v в раунді 1, так що це процеси свідчать за v в раунді 2. Це означає, що вони беруть рішення, у цьому раунді. (.

Теорема 13.24 Алгоритм 13.3 — імовірнісний, t-аварийно-устойчивый протокол згоди при t < N/2. Доказ. Відповідність показано Лемме 13.22, а угоду — в Лемме 13.21; нетривіальність випливає з Леми 13.23. (Залежність рішення від вхідних значеннях аналізується далі в Вправі 13.11.

13.4.2 Византийско-устойчивые Протоколи Злагоди Візантійська модель збоїв більш недоброжелательна, ніж модель аварій, оскільки Візантійські процеси можуть виконувати довільні переклади станів і може посилати повідомлення, які розходяться з алгоритмом. У подальшому ми будемо використовувати запис [pic] (чи [pic]) для позначення те, що є послідовність коректних кроків, тобто, переходів протоколу (у процесах P. S), провідних систему з [pic] в [pic]. Аналогічно, [pic] досяжним, якщо є послідовність коректних кроків, провідних з початковій конфігурації в [pic]. Зловмисність Візантійської моделі передбачає нижчий максимум здібності відновлення, ніж для моделі аварійного отказа.

Теорема 13.25 t-Византийско-устойчивого протоколу згоди при [pic] не існує. Доказ. Припустимо, навпаки, що така протокол існує. Читачеві знову надається показати існування бивалентной початковій конфігурації будь-якого такого протоколу (використовуйте, звісно ж, нетривіальність). Висока здатність відновлення протоколу означає, які можна вибрати два безлічі P. S і T таких, що [pic], [pic], і [pic]. Одне слово, і P. S і T досить великі, щоб вижити незалежно, та їх те що то, можливо повністю злонамеренно. Це використовується підтвердження те, що ніякі бивалентные конфігурації є достижимыми.

Заявление 13.26 Досяжною Є конфігурація [pic] є чи S-0-валентной і T-0-валентной, чи S-1- валентної і T-1-валентной. Доказ. Оскільки [pic] досягається послідовністю коректних кроків, всі можливості вибору безлічі t процесів, що дають збій, досі відкриті. Припустимо, навпаки, що P. S і T можуть досягти різних рішень, тобто, [pic] і [pic], де [pic] - конфігурація, де всі процеси в P. S (в T) зупинилися на v ([pic]). Можна досягти суперечливого стану, припускаючи, що згадані процеси в [pic] зловмисні, і об'єднуючи плани так. Починаючи з конфігурації [pic], процеси в [pic] співробітничають із іншими процесами в P. S в послідовності, що призводить до vрішенню в P. S. Коли це рішення не ухвалили процесами в P. S, зловмисні процеси відновлюють свій стан як і конфігурації [pic] і згодом співробітничають із процесами в T в послідовності, що призводить до [pic] рішенню в T. На цьому виходить конфігурація, у якій коректні процеси вирішили по-різному, що у суперечності з вимогою угоди. (.

Заявление 13.27 Досяжною бивалентной конфігурації немає. Доказ. Нехай дана досяжною є бивалентная конфігурація [pic] і припустимо, що [pic] є, і S-1-валентной і T-1-валентной (Заява 13.26). Проте, [pic] бивалентна, тому з [pic] також досяжним 0- вирішена конфігурація [pic] (очевидним, що співробітництві між P. S і T). У послідовності конфігурацій з [pic]в [pic] є дві належних конфігурації [pic] і [pic], причому [pic] і S-v-валентна і T-v-валентна. Нехай p — процес, викликає перехід із [pic] в [pic]. Тепер виконується [pic], оскільки [pic] S-1-валентна і [pic] S-0-валентна; аналогічно не виконується [pic]. Прийшли до протиріччю. (Остання заява суперечить існуванню бивалентных початкових конфігурацій. Отже Теорему 13.25 доведено. (.

Рисунок 13.4 Візантійський процес, моделюючий інші процессы.

Византийско-устойчивый алгоритм згоди Брахи і Туэга. При t < N/3, tВизантийско-устойчивые протоколи згоди існують. Необхідно, щоб система зв’язку дозволяла процесу визначати, яким процесом було послано отримане повідомлення. Якщо Візантійський процес p може послати коректному процесу r повідомлення успішно симулювати отримання процесом r повідомлення від q (див Малюнок 13.4), проблема стає нерозв’язною. Справді, процес p може моделювати досить багато коректних процесів, щоб нав’язати неправильне рішення, у процесі r. Подібно аварийно-устойчивому протоколу, Византийско-устойчивый протокол (Алгоритм 13.5) функціонує в раундах. У середньому кожен раунді кожен процес може становити в руки голоси, і рішення приймається, коли досить багато процесів голосують впродовж одного і те значення. Нижчий здатність відновлення (t < N/3) усуває потреба у розрізненні свідків і не-свидетелей; процес приймають рішення після ухвалення більш (N + t) /2 голосів впродовж одного і те значення. Зловмисність цієї моделі відмов вимагає, проте, запровадження механізму перевірки голоси, що труднощами протоколу. Без такий механізм Візантійський процес може порушувати голосування серед коректних процесів, посилаючи різні голоси різним коректним процесам. Таке зловмисне поведінка неможливо в моделі аварійного відмови. Механізм перевірки гарантує, що, хоча Візантійський процес r може посилати різні голоси коректним процесам p і q, вона може обдурити p і q, що вони прийняли різні голоси за r (у певній раунді). Механізм перевірки грунтується на відображенні повідомлень. Процес «вигукує» свого голосу (як initial, in), й у процес, після отримання першого голоси за певний процес у деякому раунді, відбиває луною голос (як echo, ec). Процес прийме голос, для нього було прийнято більш (N+t)/2 що проглядали повідомлень. Механізм перевірки зберігає (часткову) правильність комунікації між коректними процесами (Лема 13.28), і коректні процеси будь-коли сприймають різні голоси за і хоча б процес (Лема 13.29). Тупиков немає (Лема 13.30). Ми говоримо, що p приймає v-голос за процес r в раунді k, якщо p збільшує [pic] після одержання повідомлення голоси. Алгоритм гарантує, що p проходить раунд k тільки після прийняття N-t голосів, І що p приймає також найбільше вони одностайно кожний процес у кожному раунде.

var [pic]: (0, 1) init [pic];

[pic]: integer init 0;

[pic]: integer init 0;

[pic]: integer init 0; repeat forall [pic]do begin [pic]; [pic] end; shout;

(*Тепер прийняти N-t голосів для поточного раунду*) while [pic] do begin receive from q; if вже було отримано від q then skip (*q повторює, має бути, Візантійський*) else if t=in and [pic] then skip (*q бреше, має бути, Візантійський *) else if [pic] then (*обробити повідомлення пізнішому раунді*) send to p else (*Обробити чи відбити повідомлення голоси*) case t of in: shout ec: if [pic] then begin [pic] if [pic] then [pic] end else skip (*старе повідомлення*) esac end;

(*Вибрати значення наступного раунду*) if [pic] then [pic] else [pic]; if [pic] then [pic];

[pic] until false.

Алгоритм 13.5 Византийско-устойчивый алгоритм согласия.

Лемма 13.28 Якщо коректний процес p приймає в раунді k голос v за коректний процес r, то r голосував за v в раунді k. Доказ. Процес p приймає голос після одержання повідомлення з більш (N+t)/2 (різних) процесів; по крайнього заходу один коректний процес p. s послав таке повідомлення p. Процес p. s посилає відлуння p після одержання повідомлення від r, що означає, оскільки r коректний, що r голосує за v в раунді k. (.

Лемма 13.29 Якщо коректні процеси p і q приймають голос за процес r в раунді k, беруть той самий голос. Доказ. Припустимо, що у раунді k процес p приймає v-голос за r, а процес q приймає w-голос. Отже, p дістав листа від більш (N+t)/2 процесів, і q дістав листа від більш (N+t)/2 процесів. Оскільки є лише N процесів, те має бути, більш t процесів послали процесу p і процесу q. Це означає, що у крайнього заходу один коректний процес зробив і отже v = w. (.

Лемма 13.30 Якщо всі коректні процеси починають раунд k, всі вони приймають досить багато голосів на цьому раунді, щоб завершити його. Доказ. Коректний процес r, початкуючий раунд k з [pic], «вигукує» початковий голос при цьому раунду, який відбивається усіма коректними процесами. Отже, для коректних процесів p і r, посилається p по крайнього заходу N-t процесами, дозволяючи p прийняти v-голос за r в раунді k, а то й прийнято раніше N-t інших голосів. Звідси випливає, що p приймає N-t голосів на цьому раунді. (Тепер доказ правильності протоколу схоже доказ правильності аварийно-устойчивого протокола.

Лемма 13.31 Якщо коректний процес приймають рішення (стає в) v в раунді k, усі коректні процеси вибирають v в раунді k і аналіз усіх більш пізніх раундах. Доказ. Нехай P. S — безліч по крайнього заходу (N + t)/2 процесів, котрим p приймає v-голос в раунді k. Коректний процес q приймає в раунді k N-t голосів, включаючи по крайнього заходу [pic] голосів за процеси в P. S. По Лемме 13.29, q відвідують понад (N-t)/2 v-голоса, що означає, що q вибирає v в раунді k. Щоб показати, що це коректні процеси вибирають v на більш пізніх раундах, припустимо, що це коректні процеси вибирають v у певній раунді l; отже, все коректні процеси голосують за v в раунді l+1. У раунді l+1 кожен коректний процес приймає N-t голосів, включаючи більш (N-t)/2 голосів за коректні процеси. По Лемме 13.28, коректний процес приймає по крайнього заходу (N-t)/2 v-голоса, і, отже, знову вибирає v в раунді l+1. (.

Лемма 13.32 [pic] Pr [Коректний процес p прийняв рішення до раунду k] = 0. Доказ. Нехай P. S — безліч по крайнього заходу N-t коректних процесів і припустимо, що p прийняв рішення до раунду k. З ймовірністю [pic] > 0 всі в P. S беруть у раунді k голоси за й саму сукупність N-t процесів й у раунді k + 1, лише голоси за процеси в P. S. Якщо це відбувається, процеси в P. S голосують однакова у раунді k + 1 і вирішили в раунді k + 1. Звідси Pr [Коректний процес p прийняв рішення до раунду k + 2].

[pic]Pr [Коректний процес p прийняв рішення до раунду k], що підтверджує результат. (.

Лемма 13.33 Якщо всі коректні процеси починають алгоритм з входом v, в кінцевому підсумку приймають рішення v. Доказ. Як у доказі Леми 13.31 можна показати, що це коректні процеси вибирають v знову у кожному раунді. (.

Теорема 13.34 Алгоритм 13.5 — імовірнісний, t-Византийско-устойчивый протокол згоди при t < N/3. Доказ. Відповідність показано Лемме 13.32 і Шенгенська угода — в Лемме 13.31; нетривіальність випливає з Леми 13.33. (.

Зависимость рішення від вхідних значень проаналізовано далі в Вправі 13.12. Алгоритм 13.5 описується, як нескінченний цикл для простоти уявлення; ми висновок описуємо, як і модифікувати алгоритм, що він завершувався у кожному вирішальному процесі. Після прийняття рішення v в раунді k процес p виходить із циклу і «вигукує» «множинні «голосу і відбиває. Ці повідомлення інтерпретуються як початковий і відбиваний голоси для всіх раундів після k. Справді, p голосує за v у всіх пізніх раундах, і всі коректні процеси голосуватимуть як і (Лема 13.31). Отже, множинні повідомлення — такі, які б послані процесом p при продовженні алгоритму, із можливим винятком для відображень зловмисних початкових голосов.

13.5 Слабка Завершення У розділі вивчається проблема асинхронного Візантійського мовлення. Мета мовлення у тому, щоб cделать значення, що щодо одного процесі g, командуючому, відомим всім процесам. Формально, вимога нетривіальності для протоколу згоди посилено завданням те, що значення рішення є входом командуючого, коли він коректний: Залежність. Якщо командувач коректний, все коректні процеси зупиняються на (вирішили про) його вході. За такої уточненні, проте, командувач стає одиничної точкою відмови, що означає, що проблему не можна залагодити, як виражено у наступному теореме.

Теорема 13.35 1-Византийско-устойчивого алгоритму, задовольняючого збіжності, угоді, і залежності, навіть якщо відповідність потрібно лише, якщо командувач надіслав крайнього заходу одне повідомлення, не існує. Доказ. Розглянемо два сценарію. У першому командувач вважається Візантійським; сценарій служить, щоб визначити досяжну конфігурацію [pic]. Потім виходить протиріччя у другому сценарії. Припустимо, що колишній командувач — Візантійський що він посилає повідомлення, щоб форматувати мовлення «0 «процесу [pic] і повідомлення, щоб форматувати мовлення «1 «процесу [pic]. Потім командувач зупиняється. Назвемо виникає внаслідок конфігурацію [pic]. З збіжності слід, що вирішена конфігурація можна досягти навіть якщо відмовляє командувач; нехай P. S = P {g}, і припустимо, що [pic], де [pic] 0-решенная. Для другого сценарію, припустимо, що колишній командувач коректний і має вхід 1, що він посилає повідомлення, щоб форматувати мовлення 1 процесам [pic] і [pic], після що його повідомлення затримуються протягом дуже багато часу. Тепер припустимо, що [pic]- Візантійський, і, після одержання повідомлення, змінює свою стан на статки у [pic], тобто, прикидається, що отримав 0-сообщение від командуючого. Оскільки [pic], то тепер можна досягнути 0-решения без взаємодії з командуючим, що ні дозволяється, оскільки командувач коректний і має вхід 1.

(Неможливість випливає з можливості те, що командувач инициализирует мовлення зупиняється (перший сценарій) без надання достатньої інформації про своє вході (що використовується у другому сценарії). Тепер покажемо, що (детерминированное) рішення можливо, якщо завершення потрібно лише тоді, коли командувач коректний. Визначення 13.36 t-Византийско-устойчивый алгоритм мовлення — алгоритм, зрозумілу наступним трьом вимогам. Слабка завершення. Усі коректні процеси вирішили, чи ніякої коректний процес не приймає рішення. Якщо командувач коректний, все коректні процеси вирішили. Угоду. Якщо коректні процеси вирішили, вони зупиняються однією й тому самому значенні. Залежність. Якщо командувач коректний, все коректні процеси зупиняються з його вході. Можна показати, користуючись аргументами, що використовує в доказі Теореми 13.25, що здатність відновлення асинхронного Візантійського алгоритму мовлення обмежена t < N/3. Алгоритм мовлення Брахи і Туэга [BT85], даний як Алгоритм 13.6, використовує три типу повідомлень голосів: початкові (initial) повідомлення (тип in), відбиті (echo) повідомлення (тип ec), і готові (ready) повідомлення (тип re). Кожен процес підраховує кожному за типу, і значення, скільки повідомлень отримано, вважаючи найбільше одне повідомлення, одержаний кожного процесу. Командувач инициализирует мовлення, «вигукуючи» початковий голос. Після отримання початкового голоси від командуючого, процес «вигукує» відбитий голос, у якому той самий значення. Коли отримали більш (N+t)/2 що проглядали повідомлення з значенням v, «выкрикивается» готове повідомлення. Кількість що проглядали повідомлень дуже багато, щоб гарантувати, що ніякі коректні процеси не посилають готових повідомлень для різні значення (Лема 13.37). Одержання більш t готових повідомлень на одне й того значення (що означає, що у крайнього заходу один коректний процес послав таке повідомлення) також викликає «вигукування» готових повідомлень. Одержання більш 2t готових повідомлень для однієї й тієї ж значення (що означає, що як t коректних процесів послали таке повідомлення) викликає ухвалення рішення при цьому значення. У Алгоритмі 13.6 немає звичаю ніяких заходів, щоб уникнути «вигукування» готового повідомлення коректним процесом двічі, т.к. таке повідомлення все одно ігнорується коректними процессами.

var [pic]: integer init 0;

Только для командуючого: shout.

Для всіх процесів: while [pic] do begin receive from q; if від q вже був отриманий повідомлення голоси then skip (*q повторюється, ігнорувати*) else if t = in and [pic] then skip (*q наслідує g, має бути, Візантійський*) else begin [pic]; case t of in: if [pic]= 1 then shout ec: if [pic] then shout re: if [pic] then shout; if [pic] then [pic]; esac end end.

Алгоритм 13.6 Византийско-устойчивый алгоритм вещания.

Лемма 13.37 Ніякі два коректних процесу посилають готових повідомлень щодо різноманітних значень. Доказ. Коректний процес приймає найбільше одне початкова повідомлень (від командуючого), і отже посилає відбиті повідомлення для найбільше одного значення. Нехай p — перший коректний процес, який шле готове повідомлення для v, і q — перший коректний процес, який шле готове повідомлення для w. Хоча готове повідомлення то, можливо послано після отримання досить великої числа готових повідомлень, справи негаразд на першому коректного процесу, який надсилає готове повідомлення. Це наслідок того, і його посилкою мають бути отримані t+1 готових повідомлення, що означає, що готове повідомлення від по крайнього заходу одного коректного процесу вже був отриманий. Отже, p отримав v-отражения з більш (N+t)/2 процесів і q отримав w—отражения з більш (N+t)/2 процесів. Оскільки є лише N процесів і t < N/3, є більш t процесів, включаючи по крайнього заходу один коректний процес r, яких p отримав vвідбиток, а q отримав w-отражение. Оскільки r коректний, то v = w.

(Лема 13.38 Якщо коректний процес приймають рішення, усі коректні процеси вирішили щодо однієї й тієї ж значення. Доказ. Щоб зупинитися на v, для v має бути отримано більш 2t готових повідомлень, куди входять у собі більш t готових повідомлень від коректних процесів; по Лемме 13.37 рішення узгодженими. Припустимо, що коректний процес p стає в v; p отримав борошна понад 2t готових повідомлень, включаючи більш t повідомлень від коректних процесів. Коректний процес, надсилає готове повідомлення до p, посилає це повідомлення всім процесам, що означає, що це коректні процеси отримують більш t готових повідомлень. Це своє чергу, отже, що це коректні процеси посилають готове повідомлення, отже кожен коректний процес у кінцевому підсумку отримує N-t > 2t готових повідомлень та приймає решение.

(Лема 13.39 Якщо командувач коректний, все коректні процеси зупиняються з його вході. Доказ. Якщо командувач коректний, не посилає початкових сполучень з значеннями, відмінними від своєї входу. Отже, ніякої коректний процес не пошле що проглядали значень, відмінних входу командуючого, що означає, що найбільше t процесів посилають невірні відображення. Такої кількості невірних відображень замало того, щоб коректні процеси посилали готові повідомлення для невірних значень, що означає, що найбільше t процесів посилають невірні готові повідомлення. Такої кількості невірних готових повідомлень замало здобуття права коректний процес посилав готові повідомлення чи приймав рішення, що означає, що жоден коректний процес не посилає неправильного готового повідомлення й так само неправильного рішення. Якщо командувач коректний, він посилає початковий голос зі своїми входом всім коректним процесам, і всі коректні процеси «вигукують» відбиток з цим значенням. Отже, все коректні процеси отримають по крайнього заходу N-t > (N+t)/2 коректних що проглядали повідомлень і «выкрикнут» готове повідомлення з коректним значенням. Отже, все коректні процеси отримають по крайнього заходу N-t > 2t вірних готових повідомлень і приймуть правильне рішення. (.

Теорема 13.40 Алгоритм 13.6 — асинхронний t-Византийско-устойчивый алгоритм мовлення при t < N/3. Доказ. Слабка завершення випливає з Лем 13.39 і 13.38, угоду — з Леми 13.38, і залежність — з Леми 13.39. (.

Упражнения до Главі 13 Розділ 13.1 Вправа 13.1 Видалення кожного з трьох вимог Визначення 13.3 (завершення, угоди, нетривіальності) для проблеми згоди дозволяє прийняти дуже найпростіше його вирішення. Покажіть це, представивши три простих рішення. Вправа 13.2 У доказі Леми 13.6 передбачається, що з [pic] призначень біт N процесам виробляє можливу вхідну конфігурацію. Наведіть детермінований, 1-аварийно стійкі протоколи згоди для кожного з таких обмежень на вхідні значення. Дано, що парність входу є четной (тобто, є парне число процесів із входженням 1) у кожному початковій конфігурації. Є два (відомих) процесу [pic] і [pic], й кожна початкова конфігурація задовольняє [pic]. У кожній початковій конфігурації є, по крайнього заходу, [pic] процесів з у тому ж входом.

Раздел 13.2 Вправа 13.3 Покажіть, що з [pic] t-изначально-мертвых-устойчивого алгоритму вибору нет.

Раздел 13.3 Вправа 13.4 Покажіть, що жоден алгоритм для [pic]-приблизительного угоди неспроможна винести [pic] збоїв. Вправа 13.5 Дайте биекцию з багатьох { (P.S, r): [pic] and [pic]} на цілі вересня діапазоні [1, …, K]. Проект 13.6 Алгоритм 13.2 нетривіальний? Вправа 13.7 Адаптируйте доказ Теореми 13.15 для випадку, коли [pic] складається з k зв’язкових компонент. Вправа 13.8 У цьому вся вправі ми розглядаємо проблему [k, l]-выбора, який узагальнює звичайну проблему вибору. Проблема вимагає, щоб усе коректні процеси зупинилися чи 0 («переможений ») чи 1 («обраний »), І що число процесів, що беруть рішення 1 перебуває між k і l (включно). Які використання [k, l]-выбора? Покажіть, що немає детермінованого 1-аварийно-устойчивого алгоритму для [k, k]-выбора (якщо 0 < k < N). Наведіть детермінований t-аварийно-устойчивый алгоритм для [k, k+2t]- выборa.

Раздел 13.4 Вправа 13.9 Чи означає вимога збіжності, очікуване число кроків обмежена? Обмежено чи очікуване число кроків переважають у всіх алгоритми цього розділу? Вправа 13.10 Покажіть, що, коли всі коректні процеси починають раунд k аварийно-устойчивого алгоритму згоди (Алгоритм 13.3), усі коректні процеси також закінчать раунд k. Вправа 13.11 Доведіть, що й більш (N+t)/2 процесів починають аварийно-устойчивый алгоритм згоди (Алгоритм 13.3) з входом v, те решіння для v приймається упродовж трьох раунду. Доведіть, що й більш (N-t)/2 процесів починають цей алгоритм з входом v, те решіння для v можливо. Чи є рішення для v можливим, якщо рівно (N-t)/2 процесу починають алгоритм з входом v? Які бивалентные вхідні конфігурації алгоритму? Вправа 13.12 Доведіть, що, якщо більш (N+t)/2 коректних процесів починають Алгоритм 13.5 з входом v, то кінцевому підсумку приймається v-решение. Доведіть, що й більш (N+t)/2 коректних процесів починають Алгоритм 13.5 з входом v і t < N/5, то v-решение приймається протягом двох раундов.

Раздел 13.5 Вправа 13.13 Доведіть, що з t>N/3 асинхронного t-Византийскостійкого алгоритму мовлення немає. Вправа 13.14 Доведіть, що протягом виконання Алгоритму 13.6 коректними процесами посилається найбільше N (3N + 1) сообщений.

14 Отказоустойчивость в Синхронних Системах Предыдущая глава вивчала ступінь отказоустойчивости, досяжною у цілком асинхронних системах. Хоча досяжним прийнятна стійкість, надійні системи практично завжди синхронні тому, що вони покладаються на використання таймерів і верхніх меж часу доставки повідомлень. У цих системах досяжним вища ступінь стійкості, алгоритми більш прості, і алгоритми здебільшого гарантують верхню межу часу відповіді. Синхронність системи унеможливлює збійних процесів приведення коректних процесів збентежить, не посилаючи інформацію; справді, якщо процес не отримує повідомлення коли очікується, замість нього використовується значення за умовчанням, і відправник стає підозрюваним відмовити. Отже, які зазнали краху процеси негайно виявляються й у уявити не можуть ніякі негараздів у синхронних системах; ми концентруємося на Візантійських збої у цій главі. У Розділі 14.1 вивчається проблема виконання мовлення в синхронних мережах; ми уявімо верхню межу здібності відновлення (t < N/3), і навіть два алгоритму з оптимальної здатністю відновлення. Алгоритми детерминированы і досягають згоди; передбачається, що це процеси знають, коли починається мовлення. Оскільки згоду не детерминированно досяжно в асинхронних системах (Теорему 13.8), то присутності збоїв (навіть одиночній аварії), синхронні системи виявляють точно більш сильну обчислювальну потужність ніж асинхронні. Оскільки аварія й відсутність посилки інформації виявляються (і отже «безневинні «) в синхронних системах, лише Візантійські процеси здатні порушити обчислення, посилаючи неправдиву інформацію або про своєму власному змозі або неправильно пересилаючи (forwarding) інформацію. У Розділі 14.2 буде показано, що сталість синхронних систем то, можливо далі розширено з допомогою методів задля встановлення дійсності інформації. Ці механізми роблять неможливою «брехня» зловмисних процесів про інформацію, отриманої з інших процесів. Тим щонайменше, можливість посилки суперечливою інформацією про власну стані процесу залишається. Також показується, що реалізація встановлення дійсності практично можлива під час використання криптографічних методів. Алгоритми в Розділах 14.1 і 14.2 припускають ідеалізовану модель синхронних систем, у яких обчислення іде у імпульсах (раундах); див. Главу 11. Істотно вища здатність відновлення синхронних систем проти асинхронними системами означає неможливість будь-який 1- аварийно-устойчивой детермінованою реалізації імпульсної моделі у асинхронної моделі. (Така реалізація, синхронізатор, можлива в надійних мережах; див. Розділ 11.3). Реалізація імпульсної моделі можлива, проте, в асинхронних мережах обмеженою затримки (Підрозділ 11.1.3), де процеси мають годинами, і відома верхня межа затримки повідомлень. Реалізація можлива, навіть якщо годинник йдуть не так і по однієї третини процесів злонамеренно відмовляють. Найбільш важка частина реалізації - надійно синхронізувати годинник процесів, проблема, яка обговорена в Розділі 14.3.

14.1 Синхронні Протоколи Рішення У розділі ми уявімо алгоритми для Византийско-устойчивого мовлення в синхронних (імпульсних) мережах; ми розпочнемо з стислого огляду моделі імпульсних мереж, визначених в Розділі 11.1.1. У синхронної мережі процеси функціонують в імпульсах, пронумерованих 1, 2, 3, тощо; кожен процес може виконувати необмежена кількість імпульсів, коли його локальний алгоритм не завершується. Початкова конфігурація ([pic]) описується початковими станами процесів, та конфігурації після i-го імпульсу (позначається [pic]) також описується станами процесів. У імпульсі і, кожен процес спочатку посилає кінцеве безліч повідомлень, в залежності від свого стану в [pic]. Згодом кожен процес одержує дедалі повідомлення, послані їй у цьому імпульсі, і обчислює нове стан з урахуванням й сукупності повідомлень, отримані імпульсі. Модель імпульсу — ідеалізована модель синхронних обчислень. Синхронність відбивається у очевидно одночасному виникненні переходів станів у процесах; і гарантії те, що повідомлення імпульсу виходять до переходів станів цього імпульсу. Ці ідеалізовані припущення може бути ослаблені до реалістичних припущень, саме (1) доступності апаратних годині і (2) верхньої межі часу доставки повідомлень. Квазінаціональне середовище внаслідок модель асинхронних мереж обмежених затримок дозволяє дуже ефективно реалізувати модель імпульсу (див. Розділ 11.1.3). Як зазначено у Главі 11, одночасність переходів станів — лише видимість. У реалізації моделі переходи станів можуть відбуватися у різний час, за умови що гарантується своєчасне отримання всіх повідомлень. З іншого боку, реалізація повинна допускати необмежена кількість імпульсів процесу. Останнє вимога виключає реалізації Глави 11 з використання у отказоустойчивых прикладних програмах, оскільки вони всі страждають безвиходями, більшість їх навіть тоді одиночній втрати повідомлення. Як було вже згадано, до стійкою реалізації моделі імпульсу ми звернемося в Розділі 14.3. Оскільки модель імпульсу гарантує доставку повідомлень щодо одного й тому самому імпульсі, процес здатний визначити, що сусід не посилав йому повідомлення. Це властивість, відсутнє в асинхронних системах, пропонує рішення для проблеми згоди, і навіть проблеми надійного мовлення, в синхронних системах, що ми невдовзі і побачимо. У проблемі Византийского-вещания окремому процесу g, командуючому (general), дається вхід [pic], із яким звіряються з багатьох V (зазвичай {0, 1}). Процеси, які від командуючого, назвыаются помічниками (lieutenants). Повинні виконуватися такі три вимоги. Завершення. Кожен коректний процес p зупиниться на значенні [pic]. Угоду. Усі коректні процеси зупиняються однією й тому самому значенні. Залежність. Якщо командувач коректний, все коректні процеси зупиняються на [pic]. Можна, крім цього, вимагати одночасності, тобто, що це коректні процеси вирішили щодо одного й тому самому імпульсі. Усі алгоритми, обговорювані у цьому наступному розділах, задовольняють вимозі одночасності; див. також Підрозділ 14.2.6.

14.1.1 Кордон Здібності відновлення Здатність відновлення синхронних мереж після Візантійських збоїв, як і разі асинхронних мереж (Теорему 13.25), обмежена t < N/3. Цей кордон була вперше продемонстровано Пизом, Шостаком і Лампортом [PSL80] поданням кількох сценаріїв для алгоритму у присутності N/3 чи більш Візантійських процесів. На відміну від сценаріїв, які у доказі Теореми 13.25, тут коректні процеси отримують суперечливу інформацію, що дозволить укласти, деякі процеси є сбойными. Проте, як з’ясувалося, неможливо визначити, які процеси ненадійними, та зрадливі процеси можуть нав’язати неправильне решение.

Теорема 14.1 t-Византийско-устойчивого протоколу мовлення при t>N/3 не існує. Доказ. Як у ранніх доказах, здатність відновлення N/3 чи вище дає змогу розподілити процеси втричі групи (P.S, T, і U), кожна у тому числі можна повністю сбойной. Група, яка містить командуючого, називається P. S. Протиріччя виходить з розгляд трьох сценаріїв, зображених на Малюнку 14.1, де сбойная група позначена подвійним блоком.

[pic] Малюнок 14.1 Сценарії як доказ теореми 14.1.

В сценарії 0 командувач вістить значення 0, і процеси групи U збійні; в сценарії 1 командувач вістить 1 і процеси в T збійні. У імпульсі і сценарію 0 процеси групи U посилають процесам групи T з точністю ті повідомлення, що вони послали б (відповідно до протоколу) один сценарії. (Те є, повідомлення, послані у відповідь повідомлення, отримані в імпульсі i-1 сценарію 1.) Процесам в P. S він надсилає повідомлення, щоб їх протоколом. Процеси в P. S і T, звісно, посилають коректні повідомлення під всіх імпульсах. Зауважте, у цьому сценарії лише процеси групи U посилають неправильні повідомлення, і специфікації протоколу наказують, що це коректні процеси, включаючи групу T, зупиняються на 0. Сценарій 1 визначено аналогічно, але тут процеси в T збійні і вони посилають повідомлення, які мають надіслати сценарії 0. У цьому вся сценарії процеси в U зупиняються на 1. На закінчення розглянемо сценарій 2, де процеси в P. S збійні та грамотно поводяться так. Процесам в T він надсилає повідомлення сценарію 0 і процесів у U він надсилає повідомлення сценарію 1. Нині можна показати індукцією за двозначним номером імпульсу, що повідомлення, послані T до U (чи, від U до T) — точно ті, що послані в сценарії 0 (чи 1, відповідно). Отже, для процесів в T сценарій 2 невідрізнимо від сценарію 0 й у процесів в U він невідрізнимо від сценарію 1. З цього випливає, що згадані процеси в T зупиняються на 0, і процеси в U зупиняються на 1. Протиріччя. (У доказі використовується те, що Візантійські процеси можуть посилати повідомлення 1-сценария, навіть якщо вони лише повідомлення 0-сценария. Тобто, процеси можуть «брехати «як своїм власним стані, але ще й повідомлення, що вони отримали. Саме цей можливість можна усунути з допомогою встановлення дійсності, як описано в Розділі 14.2; це веде до здібності відновлення N-1.

14.1.2 Алгоритм Візантійського мовлення У цьому вся підрозділі буде показано, що верхня межа здібності відновлення, показана попередньому підрозділі, точна. З іншого боку, протиставляючи ситуації у асинхронних мережах, максимальна здатність відновлення досяжним під час використання детермінованих алгоритмів. Ми уявляємо рекурсивний алгоритм, також Піза та інших [PSL80], який допускає t Візантійських відмови при t < N/3. Здатність відновлення — параметр алгоритму. Алгоритм Broadcast (N, 0) дано як Алгоритм 14.2; не допускає відмов (t = 0), і якщо відмов немає, всі зупиняються на вході командуючого один імпульсі. Якщо відмова відбувається, угоду то, можливо порушено, але завершення (і одночасність), тим щонайменше, гарантируется.

Импульс 1: Командувач посилає всім процесам, помічники не посилають. Одержати повідомлення імпульсу 1. Командувач приймають рішення на [pic]. Помічники вирішили так: if від g в імпульсі 1 отримали cообщение then прийняти зважене рішення x else прийняти зважене рішення udef.

Алгоритм 14.2 Broadcast (N, 0).

Протокол для здібності відновлення t>0 (Алгоритм 14.3) використовує рекурсивні виклики процедури для здатність відновлення t-1. Командувач посилає свій вхід всім помічникам в імпульсі 1, і наступного імпульсі, кожен помічник розпочинає мовлення отриманого значення іншим помічникам, але ці мовлення має здатність відновлення t-1. Ця зменшена здатність відновлення — трудноуловимый момент алгоритму, оскільки (якщо командувач коректний) все t Візантійські процеси можуть перебувати серед помічників, отже фактичне число відмов може перевищувати здатність відновлення вкладеного виклику Broadcast. Щоб довести правильність виникає внаслідок алгоритму, необхідно розмірковувати, використовуючи здатність відновлення t і фактичне число збійних процесів f (див. Лемму 14.3). У імпульсі t+1 вкладені виклики виробляють рішення, тому помічник p приймають рішення в N-1 вкладених вещаниях. Ці N-1 рішення зберігаються у масиві [pic], з яких рішення p виходить більшістю голосів (значення, отримане безпосередньо від командуючого, тут ігнорується!). І тому на масивах визначається детермінована функція major, з такою властивістю, що, якщо v має більшість у W, (тобто, понад половина елементів рівні, то major (W)=v.

Импульс 1: Командувач посилає всім процесам, помічники не посилають. Одержати повідомлення імпульсу 1. Помічник p діє так. if від g в імпульсі 1 отримали cообщение then [pic] else [pic] Оголосити [pic] іншим помічникам, діючи як командувач в [pic] наступного импульсе.

(t+1): отримати повідомлення імпульсу t + 1. Командувач стає в [pic]. Для помічника p: До кожного помічника q в [pic] зустрічається решение.

[pic] := рішення, у [pic];

[pic].

Алгоритм 14.3 Мовлення (N, t) (ДЛЯ t> 0).

Лемма 14.2 (Завершення) Якщо Broadcast (N, t) починається у імпульсі 1, кожен процес приймають рішення в імпульсі t+1. Доказ. Оскільки протокол рекурсивен, його властивості доводяться з використанням рекурсії по t. У алгоритмі Broadcast (N, 0) (Алгоритм 14.2), кожен процес приймає рішення, у імпульсі 1. У алгоритмі Broadcast (N, t) помічники починають рекурсивні звернення алгоритму, Broadcast (N-1, t-1), в імпульсі 2. Якщо алгоритм розпочато в імпульсі 1, приймає рішення в імпульсі t (це — гіпотеза індукції), отже коли він розпочато в імпульсі 2, всі вкладені виклики приймають рішення, у імпульсі t + 1. У першому тому самому імпульсі приймають рішення в Broadcast (N, t). (Щоб доводити залежність (також індукцією) передбачається, що командувач коректний, отже все t збійних процесу серед N-1 помічників. Оскільки t < (N — l) /3 який завжди виконується, просту індукцію використовувати не можна, і ми розмірковуємо, використовуючи фактичне число несправностей, позначене f.

Лемма 14.3 (Залежність) Якщо командувач коректний, якщо є f збійних процесів, і якщо N > 2f+t, то ми все коректні процеси зупиняються на вході командуючого. Доказ. У алгоритмі Broadcast (N, 0) якщо командувач коректний, все коректні процеси, зупиняються на значенні входу генерала. Тепер припустимо, що лема справедлива для Broadcast (N-1, t-1). Оскільки командувач коректний, він посилає свій вхід всім помічникам в імпульсі 1, отже кожен коректний помічник q вибирає [pic]. Тепер N > 2f + t означає (N — 1) > 2f + (t — 1), тому гіпотеза індукції застосовується до вкладеним викликам, навіть якщо що тепер f збійних процесу серед помічників. Отже, для коректних помічників p і q, рішення p в Broadcast (N-1, t-1) дорівнює [pic], тобто, [pic]. Але, оскільки суворе більшість помічників коректно (N > 2f + t), процес p завершиться з [pic], у якому більшість значень дорівнює [pic]. Отже, застосування major до p видає потрібне значення [pic]. (.

Лемма 14.4 (Угоду) Усі коректні процеси стає в одному й тому самому значенні. Доказ. Оскільки залежність означає згоди на виконаннях, в яких командувач коректний, ми тепер сконцентруємося на разі, коли командувач сбойный. Але тоді найбільше t-l помічників збійні, що означає, що вкладені виклики функціонують у своїх здібностей відновлення! Справді, t < N/3 означає t — 1 < (N — 1) / 3, отже, вкладені виклики задовольняють угоді. Отже, все коректні помічники зупиняться однією й тому самому значенні [pic] кожному за помічника q у вкладеному виклик [pic]. Отже, кожен коректний помічник обчислює такий самий вектор W в імпульсі t + 1, що означає, що «застосування major дає той самий результат у кожному коректному процесі. (.

Теорема 14.5 Протокол Broadcast (N, t) (Алгоритм 14.2/14.3) — t-Византийскостійкий протокол мовлення при t < N/3. Доказ. Завершення засвідчили в Лемме 14.2, залежність в Лемме 14.3, і Шенгенська угода в Лемме 14.4. (.

Протокол Broadcast приймають рішення в (t + 1)-ом імпульсі, що оптимальним; див. Підрозділ 14.2.6. На жаль, його складність за повідомленням экспоненциальная; див. Вправа 14.1.

14.1.3 Полиномиальный Алгоритм Мовлення У розділі уявляємо Візантійський алгоритм мовлення Долева і інших [DFF+82], який використовує лише полиномиальное число повідомлень і біт. Тимчасова складність вище, ніж в попереднього протоколу; алгоритм вимагає 2t+3 імпульсу задля досягнення рішення. Наступного описі буде передбачатись, що N = 3t + 1, і потім обговорять випадок N > 3t + 1. Алгоритм використовує два порога, L = t + 1 і H = 2t + 1. Ці числа вибираються отже (1) кожне безліч з L процесів містить по крайньої мері один коректний процес, (2) кожне безліч з H процесів містить по крайнього заходу L коректних процесів, і (3) є по крайнього заходу H коректних процесів. Зверніть увагу, що припущення [pic] необхідно і для вибору L і H, які відповідають цим трьом властивостями. Алгоритм обмінюється повідомленнями типу, де v чи значення 1, чи ім'я процесу (bm позначає «broadcast message», «віщати повідомлення».) Процес p містить двомірну булеву таблицю R, де [pic] щирий тоді навіть тільки тоді ми, коли p отримав повідомлення від процесу q. Спочатку все елементи таблиці хибні, і ми вважаємо, що таблиця оновлюється в фазі отримання кожного імпульсу (це показано в Алгоритмі 14.4). Зауважте, що [pic] монотонна в імпульсах, тобто, якщо [pic] стає достеменним у деякому імпульсі, він є істиною на більш пізніх імпульсах. З іншого боку, бо тільки коректні процеси «вигукують» повідомлення, для коректних p, q, і r наприкінці кожного імпульсу маємо: [pic]. На відміну від протоколу Broadcast попереднього підрозділу, протокол Долева і інших є асиметричним в значеннях 0 і одну. Рішення 0 — значення по вмовчанням і вибирається, тоді як обміні було досить багато повідомлень. Якщо командувач має вхід 1, він «викрикувати» повідомлення, і досить великої кількості що проглядали повідомлень, типу, змушує процес прийняти зважене рішення 1. У алгоритмі доречні три типу дії: ініціювання, підтримка й підтвердження. Підтримка. Процес p підтримує процес q в імпульсі і, тоді як більш ранніх імпульсах p отримав досить свідчень, що q послав повідомлення; якщо справи такі, p пошле сполучення імпульсі і. Процес p прямо підтримує q, якщо p отримав повідомлення від q. Процес p побічно підтримує q, якщо p отримав сполучення крайнього заходу від L процесів. Безліч процесів [pic], підтримуваних p, визначається неявно з [pic] [pic] (*пряма*) [pic] (*непряма*) [pic] Поріг становлення непрямим які підтримують означає, що й коректний процес підтримує процес q, то q надіслав крайнього заходу одне повідомлення. Справді, припустимо, що деякий коректний процес підтримує q, нехай і - перший імпульс, у якому це відбувається. Оскільки непряма підтримка q потребує отримання по крайнього заходу одного повідомлення від коректного процесу у більш ранньому імпульсі, перша підтримка коректним процесом процесу q — пряма. Пряма підтримка коректним процесом означає, що цей процес отримав повідомлення від q. Підтвердження. Процес p підтверджує процес q після одержання повідомлення від H процесів, тобто, [pic] Вибір порогів означає, що, якщо коректний процес p підтверджує q, то все коректні процеси підтверджують q найбільше одним імпульсом пізніше. Справді, припустимо, що p підтверджує q після імпульсу і. Процес p отримав повідомлення від H процесів, включаючи (вибором порогів) по крайнього заходу L коректних підтримують для q. Коректні підтримують для q посилають повідомлення всім процесам, що означає, що у імпульсі і все коректні процеси здійснюють за крайнього заходу L повідомлень і підтримують q в імпульсі і + 1. Отже, в імпульсі і + 1 все коректні процеси посилають, і те що число коректних процесів по крайнього заходу H, кожен коректний процес отримує достатню підтримку, яка має підтвердити q. Ініціювання. Процес p ініціює, коли його є достатньо доказів те, що остаточне значення рішення буде 1. Після ініціювання, процес p посилає повідомлення. Ініціювання може бути викликано трьома типами доказів, саме (1) p — командувач і [pic], (2) p одержує вигоду від командуючого в імпульсі 1, чи (3) p підтвердив досить багато помічників наприкінці останнього імпульсу. Остання можливість, зокрема потребує певного уваги, оскільки число підтверджених помічників, що є «достатнім «збільшується протягом виконання, і підтверджений командувач не іде у рахунок при цьому правила. У перших трьох імпульсах L помічників би мало бути підтверджені, щоб ініціювати, але починаючи з імпульсу 4 поріг збільшується через щодва імпульсу. Отже, ініціювання відповідно до правилу (3) вимагає, щоб до кінця імпульсу і, [pic] помічників було підтверджено. Запис [pic] в алгоритмі позначає безліч підтверджених помічників, тобто, [pic]. Ініціювання процесом p представляється булевой перемінної [pic]. Якщо коректний помічник r ініціює наприкінці імпульсу і, все коректні процеси підтверджують r наприкінці імпульсу і + 2. Справді, r «вигукує» в імпульсі і + 1, тому всі коректні процеси (прямо) підтримують r в імпульсі і + 2, отже кожен процес отримує по крайнього заходу H повідомлень у тому імпульсі. Алгоритм триває протягом 2t + 3 імпульсів; якщо процес p підтвердив по крайнього заходу H процесів (тут вважає командувач) до кінця того імпульсу, p приймають рішення 1, інакше p приймають рішення 0. Див. Алгоритм 14.4.

var [pic]: boolean init false.

[pic]: boolean init if [pic] then true else false;

Импульс і: (* Фаза посилки *) if [pic] then shout; forall [pic] do shout; одержати всі повідомлення імпульсу і; (*відновлення стану*) if і = 1 and [pic] then [pic]; if [pic] then [pic]; if і = 2t + 3 then (*ухвалити будь-яке рішення*) if [pic] then [pic] else [pic].

Алгоритм 14.4 Протокол з надійним вещанием.

Командующий, є єдиним процесом, котрі можуть самостійно наказати ініціювання (за іншими процесах) займає потужне становище у алгоритмі. Легко помітити, що, якщо командувач коректно ініціює, починається лавина повідомлень, яка змушує все коректні процеси підтвердити H процесів і зупинитися на значенні 1. До до того ж якщо він ініціює, то немає «критичної маси «повідомлень, веде до ініціюванню будь-якого коректного процесса.

Лемма 14.6 Алгоритм 14.4 задовольняє завершення (і одночасності) і залежності. Доказ. З алгоритму видно, що це коректні процеси приймають рішення, у кінці імпульсу 2t + 3, що завершення і одночасність. Щоб показати залежність, ми припустимо, що командувач коректний. Якщо командувач коректний і має вхід 1, він «вигукує» повідомлення імпульсі 1, примушуючи кожен коректний процес q ініціювати. Отже, кожен коректний процес q «вигукує» в імпульсі 2, отже, до кінцю імпульсу 2 кожен коректний процес p підтримує й інші коректні процеси. Це означає, що у імпульсі 3 кожен коректний p «вигукує» кожному за коректного q, так що наприкінці імпульсу 3 кожен коректний процес одержує вигоду від кожного іншого коректного процесу, примушуючи його підтвердити q. Таким чином із кінця раунду 3 кожен коректний процес підтвердив H процесів, що означає, що остаточне рішення буде 1. (Командувач підтримується і підтверджується усіма коректними процесами одним імпульсом раніше від інших процесів.) Якщо командувач коректний і має вхід 0, не «вигукує» в імпульсі 1, чого робить і ніякий інший коректний процес. Припустимо, що жоден коректний процес не ініціював в імпульсах із першого по i-1; тоді ніякої коректний процес не надсилає у імпульсі і. Наприкінці імпульсу і ніякої коректний процес підтримувати не може і підтверджує ніякого коректного процесу, оскільки, як ми бачили раніше, це передбачає, що остання процес послав повідомлення. Отже, ніякої коректний процес не ініціює наприкінці імпульсу і. Звідси випливає, що жоден коректний процес не ініціює взагалі. Це означає, що жоден коректний процес будь-коли підтверджує коректний процес, отже ніякої коректний процес не підтверджує більш t процесів, і рішення, у кінцевому імпульсі - 0. (.

Мы продовжимо доказом угоди, і припускати у таких лемах, що колишній командувач сбойный. Достатня «критичної маси «повідомлень, провідна неминуче до 1-решению, створюється ініціюванням L коректних процесів, коли є по крайнього заходу чотири импульса.

Лемма 14.7 Якщо L коректних процесів ініціюють до кінця імпульсу і, і < 2t, усі коректні процеси зупиняються на значенні 1. Доказ. Нехай і - перший імпульс, у якого по крайнього заходу L коректних процесів ініціюють, і нехай, А позначає безліч коректних процесів, котрі ініціювали наприкінці імпульсу і. Усі в A — помічники, оскільки командувач сбойный. Наприкінці імпульсу і + 2 все коректні процеси підтвердили помічників в А; ми покажемо, що час все коректні процеси ініціюють. Випадок і = 1: Усі коректні процеси підтвердили помічників з, А до кінця імпульсу 3, і ініціюють, оскільки [pic]. Випадок [pic]: По крайнього заходу один процес, скажімо r, з, А ініціював в імпульсі і, оскільки вона підтвердила Th (i) помічників (ініціювання з допомогою отримання від командуючого можна тільки в імпульсі 1). Ці Th (i) помічників підтверджені усіма коректними процесами наприкінці імпульсу і + l, але r не належить до цих Th (i) підтвердженим помічникам, оскільки r вперше посилає сполучення імпульсі і + 1. Проте, все коректні процеси підтвердять r до кінця імпульсу і + 2; отже вони підтвердили по крайнього заходу Th (i) + 1 помічників наприкінці раунду і + 2. На закінчення, оскільки Th (i+2)= Th (i)+1, все коректні процеси ініціюють. Тепер, бо всі коректні процеси ініціюють до кінця раунду і + 2, вони підтверджені (усіма коректними процесами) наприкінці раунду і + 4, отже все коректні процеси підтвердили по крайнього заходу H помічників. Оскільки передбачалося, що і < 2t, [pic], тож усе коректні процеси зупиняються на значенні 1. (.

Для будь-якого коректного процесу, щоб зупинитися на 1, необхідна «лавина », що складається з ініціювання по крайнього заходу L на коректних процесів. Справді, 1-решение вимагає підтвердження по крайнього заходу H процесів, включаючи L коректних, що це коректні процеси ініціювали. Питання чи може Візантійський змова відкладати початок лавини тривалий час, щоб викликати 1-решение у деяких коректних процесах, без нав’язування їх у загальному відповідно до Лемме 14.7. Звісно, відповідь — немає, так як є обмеження те що, як довго змова може відкладати лавину, і кількість імпульсів, 2t + 3, вибрано точно те щоб запобігти цьому. Причина — зростаючий поріг для необхідного числа підтверджених процесів; на більш пізніх імпульсах він працює такий високий, що вони стало необхідно L ініційованих коректних помічників, щоб ініціювати наступний коректний процесс.

Лемма 14.8 Припустимо, що у крайнього заходу L коректних процесів ініціюють протягом алгоритму, і нехай і - перший імпульс, наприкінці якого ініціюють L коректних процесів. Тоді і < 2t. Доказ. Щоб ініціювати в імпульсі 2t чи вище, коректний процес має підтвердити по крайнього заходу Th (2t) = L + (t-1) помічників. Оскільки командувач сбойный, тобто найбільше t-1 збійних помічників, тому по крайнього заходу L коректних помічників повинні бути підтверджені, що, що вони, на більш ранньому імпульсі, L коректних процесів, має бути, ініціювали. (.

Теорема 14.9 Алгоритм мовлення Долева та інших (Алгоритм 14.4) — tВизантийско-устойчивый протокол мовлення. Доказ. Завершення (і одночасність також) і залежність показані в Лемме 14.6. Щоб показати угоду, припустимо, що є коректний процес, який стає в значенні 1. Ми помітили, що це, що у крайнього заходу L коректних процесів ініціювали. По Лемме 14.8, вперше це відбувалося в імпульсі і < 2t. Але тоді з Лемме 14.7, все коректні процеси зупиняються на значенні 1. (.

Чтобы полегшити уявлення алгоритму, було зроблено припущення, що процеси повторюють у кожному раунді повідомлення, що вони посилали на більш ранніх раундах. Оскільки коректні процеси записують повідомлення, отримані на більш ранніх раундах, це потрібно, тому досить послати кожне повідомлення лише. Отже, кожен коректний процес посилає кожна з N+1 можливих повідомлень іншому процесу найбільше одного разу, що обмежує складність за повідомленням величиною [pic]. Оскільки є лише N+1 різних повідомлень, кожне повідомлення повинна утримувати лише O (log N) біт. Якщо процесів перевищує 3t + 1, до виконання алгоритму вибирається сукупність 3t активних помічників. (Вибір виконується статично, наприклад, обираючи 3t процесів, чиї прізвища йдуть за g гаразд імен процесів. Командувач й активні помічники повідомляють пасивним помічникам про своє рішення, і пасивні помічники зупиняються на значенні, яке вони мають з більш t процесів. Складність за повідомленням цього послойного підходу — [pic], і разрядная складність — [pic].

14.2 Протоколи з Встановленням Дійсності Зловмисне поведінка, аналізованих досі включало неправильне пересилку інформацією доповнення до посилці неправильної інформації про власному стані процесу. На щастя, це надзвичайно зловмисне поведінка Візантійських процесів може бути обмежене з допомогою криптографічних коштів, які зробили б Теорему 14.1 недійсною. Справді, в сценаріях, які у її доказі, збійні процеси посилали повідомлення як і сценарії 1, отримавши лише повідомлення сценарію 0. У розділі передбачається наявність кошти на цифрового електронного підпису і встановлення дійсності повідомлень. Процес p, надсилає повідомлення М, додає до цього повідомленню деяку додаткову інформацію [pic], що називається цифровий підписом p для повідомлення М. На відміну від рукописних підписів, цифрова підпис залежить від М, що робить непотрібним копіювання підписи на інші повідомлення. Схема підписи задовольняє наступним властивостями. Якщо p коректний, лише p може правдоподібно обчислити [pic]. Це обчислення — підпис повідомлення M. Кожен процес може ефективно перевіряти (маючи p, М і P. S) [pic]. Ця перевірка — встановлення дійсності повідомлення M. Схеми підписи засновані на приватних і спільних ключах. Перше припущення не виключає можливості, що Візантійські процеси можуть відчинити свої секретні ключі одна одній, що дозволяє одному Візантійським процесу підробити підпис іншого. Передбачається, що тільки коректні процеси зберігають свої приватні ключі у секреті. Ми вивчимо реалізацію схем підписи на Підрозділах з 14.2.2 по 14.2.5. У наступному підрозділі, повідомлення, підписаний процесом p, тобто, пара, що містить і [pic], позначається: p.

14.2.1 Протокол Високої Ступені Відновлення Ефективний Візантійський алгоритм мовлення, використовує полиномиально багато повідомлень і t+1 імпульсів, було запропоновано Пайовому і Стронгом [DS83]. Встановлення дійсності, використовуване у цьому протоколі, дозволяє необмежену здатність відновлення. Ми зауважимо, тим щонайменше, що можуть відмовити трохи більше N процесів (з N), і N процесів відмовляють, все вимоги примітивно задовольняються; отже нехай t < N. Їх протокол грунтується більш ранньому, запропонованому Лампортом, Шостаком і Пизом [LSP82], що є експонентним за кількістю повідомлень. Ми уявляємо спочатку останній протокол. У імпульсі 1 командувач «вигукує» повідомлення: g, що містить свій (підписаний) вхід. У імпульсах зі 2 по t + l процеси підписують і пересилають повідомлення, що вони отримали попередньому імпульсі; отже, повідомлення, яким обмінюються в імпульсі і, містить і підписів. Повідомлення: g: [pic]: …: [pic] називається дійсним (у яких силу) для отримує процесу p, якщо справедливо таке. Усі і підписів коректні. і підписів від і різних процесів. p не є у списку підписів. Протягом алгоритму, процес p містить багато [pic] значень, які у дійсних повідомленнях, отриманих p; спочатку це безліч порожньо, і значення кожного дійсного повідомлення вставляється в нього. Повідомлення, що надсилаються в імпульсі і - з точністю ті справжні повідомлення, отримані у минулому імпульсі. Наприкінці імпульсу t + 1, процес p приймають рішення заснований на [pic]. Якщо [pic] складається з одиночного елемента {v}, p приймають рішення v, інакше p приймають рішення значення за умовчанням (наприклад, 0). Аби зекономити на числі повідомлень, p пересилає повідомлення: g: [pic]: …: [pic]: p лише процесам, не яке трапляється у списку g, [pic], …, [pic]. Ця модифікація немає жодного впливу поведінка алгоритму, оскільки для процесів в списку повідомлення не действительно.

Теорема 14.10 Алгоритм Лампорт, Шостака і Піза — коректний Візантійський алгоритм мовлення при t < N, використовує t + 1 імпульс. Доказ. Усі вирішили в імпульсі t + 1, що припускає й завершення і одночасність алгоритму. Якщо командувач коректний і має вхід v, всі отримають її повідомлення: g в імпульсі 1, тож усе коректні процеси включають v в W. Ніяке інше значення не вставляється в W, оскільки ніяке інше значення будь-коли підписується командувачем. Отже, в імпульсі t + 1 всі мають W = {v} і зупиняються на v, що означає залежність. Щоб показати угоду, ми матимемо, що з коректних процесів p і q, [pic] наприкінці імпульсу t + 1. Припустимо, [pic] наприкінці імпульсу t + 1, і нехай і - імпульс, у якому p вставив v в Wp, після одержання повідомлення: g: [pic]: …: [pic]. Випадок 1: Якщо q є у g, [pic], …, [pic], то q сам бачив значення v і вставив їх у [pic]. Випадок 2: Якщо q не є у послідовності g, [pic], …, [pic] і [pic], то p пересилає повідомлення: g: [pic]: …: [pic]: p процесу q в імпульсі і + і, отже q стверджує (надає силу) v саме пізніше у імпульсі і + 1. Випадок 3: Якщо q не є у послідовності g, [pic], …, [pic], і і = t + 1, зауважте, що, отримане p, підписано t + l послідовними процесами, включаючи по крайнього заходу один коректний процес. Цей процес відбувається переслав повідомлення всім іншим процесам, включаючи q, отже q бачить v. Оскільки [pic] до кінця імпульсу t + 1, p і q приймають однакове вирішення. (Завершити алгоритм раніше імпульсу t + 1 неможливо. В усіх життєвих імпульсах до t, коректний процес міг би отримувати повідомлення, створені і переслані лише сбойными процесами, і послані іншим коректним процесам, що міг би провадити до суперечливим рішенням. Проміжний наслідок попереднього алгоритму, саме угоду про безлічі значень серед усіх коректних процесів, сильніше, ніж необхідне досягнення угоди про одиночному значенні; Це було помічено Пайовому і Стронгом [DS83], запропонувавши ефективнішу модифікацію. Фактично досить, що наприкінці імпульсу t + 1, чи (a) для кожного коректного p безліч [pic] - і той ж одиночний елемент, чи (b) ні на якого коректного p безліч [pic]не є одиночним елементом. У першому випадку всі вирішили v, у тому випадку вони все вирішили 0 (чи, якщо бажано змінити алгоритм в такий спосіб, беруть рішення «командувач сбойный »). Алгоритмом Долева і Стронга досягається більш слабке вимога на безлічі W. Натомість, щоб передавати кожне дійсне повідомлення, процес p пересилає найбільше два повідомлення, саме одне повідомлення з перших вражень і одне повідомлення з іншим значенням, прийнятим p. Повне опис алгоритму залишено читателю.

Теорема 14.11 Алгоритм Долева і Стронга, описане вище — протокол Византийского-вещания, використовує t + 1 імпульс і найбільше [pic] повідомлень. Доказ. Завершення і одночасність доводяться, як у минулому протоколі, адже кожен коректний процес приймають рішення наприкінці імпульсу t + 1. Залежність виводиться як і, як у минулому протоколі. Якщо g правильно «вигукує» v у першому імпульсі, все коректні процеси приймають v у тому імпульсі, й ніяка інше значення будь-коли приймається; отже, все коректні процеси зупиняються на v. Заявлена складність за повідомленням випливає з факту, кожен (коректний) процес «вигукує» найбільше два повідомлення. Щоб показати угоду, ми покажемо, що з коректних процесів p і q, [pic] і [pic] задовольняють наприкінці імпульсу t + 1 наступному. Якщо [pic], то [pic]. Якщо [pic], то [pic]. Для (1): Припустимо, що p прийняв значення v після одержання повідомлення: g: [pic]: …: [pic] в імпульсі і, і розмірковуємо як і доказі Теореми 14.10: Випадок 1: Якщо q зустрічається серед g, [pic], …, [pic], q точно прийняв v. Випадок 2: Якщо q не зустрічається серед g, [pic], …, [pic], і [pic], [pic], то p пересилає значення процесу q, котрий прийме у його разі. Випадок 3: Якщо q не трапляється і = t + 1, по крайнього заходу одне із процесів, що підписав повідомлення, скажімо r, коректний. Процес r також переслав значення v процесу q, що таке, що v перебуває у [pic]. Для (2): Припустимо, що [pic] наприкінці алгоритму, і нехай w — друге значення, прийняте p. Знову подібним міркуванням можна показати, що [pic], що означає, що [pic]. (Рівність [pic] і [pic] може бути отримано, оскільки процес p нічого очікувати пересилати своє третє прийняте значення або як пізні.) Довівши (1) і (2), припустимо, що коректний процес p стає в [pic], тобто [pic]. Потім, з (1), v міститься переважають у всіх [pic] для коректного q, але, отже, [pic] не ширше одиночного елемента {v}; інакше [pic] - не одиночний елемент, з (2). Отже, кожен коректний процес q також стає в v. Далі, припустимо, що коректний процес p стає в значенні за умовчанням, оскільки [pic] - не одиночний елемент. Якщо [pic] порожній, кожен коректний q має порожній [pic] по (1) і якщо [pic], то [pic] по (2); отже, q також стає в значенні по умолчанию.

(Долев і Стронг надалі поліпшили алгоритм й одержали алгоритм, який розв’язує проблеми Византийского-вещания через те саме число імпульсів і за О (Nt) сообщений.

14.2.2 Реалізація Цифрових Підписів Оскільки підпис p [pic] повинна являти собою достатнє доказ те, що p — творець повідомлення, підпис має полягати з деякою форми інформації, яка Можливо ефективно обчислена процесом p (підписано); Не то, можливо ефективно обчислена будь-якою іншою процесом, відмінними від p (фальсифікований). Ми повинні негайно відзначити, що, більшість схем підписи, використовуються сьогодні, друге вимога не доведено настільки, що показано экспоненциальная труднощі проблеми підробки. Зазвичай, проблема підробки, як свідчать, пов’язана (чи іноді еквівалентна) із певною обчислювальної проблемою, яка вивчалася протягом багато часу в відсутність знання про її полиномиальной разрешимости. Наприклад, фальшування підписів у схемі Фиата-Шамира вимагає розкладати на множники великі цілих числа; оскільки останнє завдання (може бути) в обчислювальному відношенні дуже складна, перша, має бути, також складна в обчислювальному відношенні. Було запропоновано схеми підписи, засновані в різних, як очікується, важких проблемах, типу обчислення дискретного логарифма, розкладання на множники великих чисел, проблеми рюкзака. Вимоги (1) і (2) розуміють, що p повинен мати обчислювальне «перевагу «над іншими процесами; цю перевагу — деяка секретна інформація у володінні p, секретний (чи приватний) ключ p. Отже, обчислення [pic] ефективно, коли секретний ключ відомий, але (може бути) важко без цієї інформації. Зрозуміло, що й p вдається зберігати свій ключ таємно, то лише p може легко вираховуватимуть [pic]. Усі повинні вміти перевіряти підписи, тобто, маючи повідомлення М і підпис P. S, має бути можливо ефективно перевірити, що P. S справді був вирахувано з М з допомогою секретного ключа p. Ця перевірка вимагає, щоб була відчинені деяка інформацію про секретному ключі p; цю інформацію — загальний ключ p. Загальний ключ повинен дозволяти перевірку підписи, але потрібно, щоб його бути неможливо чи з крайнього заходу в обчислювальному відношенні важко використовуватиме обчислення секретного ключа p чи підробки підписів. Найуспішніші схеми підписи, запропоновані до нашого часу, засновані на обчисленнях з теорії чисел в арифметичних кільцях по модулю великих чисел. Базисні арифметичні операції додавання, множення, і спорудження до рівня можуть виконуватися у тих кільцях за полиномиальное період від довжини модуля (в бітах). Розподіл можливо, якщо знаменник і модуль взаємно прості (тобто, немає загальних простих делителей), і може також виконуватися за полиномиальное час. Оскільки підписання і перевірка вимагають обчислень над повідомленням, М інтерпретується як велике число.

14.2.3 Схема Підписи ЭльГамаля Схема підписи ЭльГамаля [EIG85] полягає в функції теорії чисел під назвою дискретний логарифм. Для великого простого числа P, група з множенню по модулю P, позначена [pic], містить P-1 елементів і чвлчется циклічною. Останнє означає, які можна вибрати такий елемент [pic], що P-1 чисел [pic] все різняться отже, перелічують усі елементи [pic]. Таке g називається генератором [pic], чи також первообразным коренем по модулю P. Генератор не унікальний; зазвичай їх досить багато. Маючи фіксований P і генератор g, кожному за [pic] є унікальне ціла кількість і по модулю P-1 таке, що [pic] (рівність в [pic]). Це і називається дискретним логарифмом (іноді індексом) x. На відміну від вищезгаданих базисних арифметичних операцій, вираховуватимуть дискретний логарифм непросто. Це — хорошо-изученная проблема, на яку до нашого часу не знайдено ефективне рішення, але теж було доведено її труднорешаемость; див. [0dl84] для стислого огляду результатів. Схема підписи ЭльГамаля [EIG85] полягає в труднощі обчислення дискретних логарифмів. Процеси спільно використовують велике просте число P і первообразный корінь g з [pic]. Процес p вибирає як «своє секретного ключа число d, випадково між 1 і P — 2, і загальний ключ p — число [pic]; зауважте, що d — дискретний логарифм e. Підпис p можна ефективно обчислити, знаючи логарифм e, і отже вона формує неявний доказ те, що підписує знає d. Насправді ж підпис для повідомлення М — пара (r, p. s), яка задовольнить [pic]. Таку пару p легко знайде з допомогою секретного ключа d. Процес p вибирає довільне число a, взаємно просте з P-1, і обчислює [pic] і [pic] Ці числа справді задовольняють [pic] (Усі рівності в [pic].) Дійсність підписи P. S = (r, p. s) для повідомлення М легко перевірити, перевіряючи на рівність [pic].

Алгоритмы для дискретного логарифма. Оскільки секретний ключ p, d, дорівнює дискретному логарифму загального ключа, e, схема розкрито, якщо ефективно вираховуватимуть дискретні логарифми по модулю P. До справжнього часу, невідомо ефективного алгоритму, роблячи це загалом випадку чи підробляти підписи будь-якою іншою способом. Загальний алгоритм для обчислення дискретних логарифмів було представлено Одлыжко [0dl84]. Його складність має хоча б порядок, як в хорощо відомих алгоритмів для розкладання на множники цілих чисел, так само великих як P. Алгоритм спочатку обчислює кілька таблиць, використовуючи лише P і g, й у другий фазі, обчислює логарифми для даних чисел. Якщо Q найбільший простий множник P-1, час перша фази і величину таблиць мають порядок Q; отже, бажано вибрати P такий, що P-1 має великий простий множник. Друга фаза, підрахунок логарифмів, може виконуватися протягом секунд навіть дуже малопотужних комп’ютерах. Отже, необхідно змінювати P і g досить часто, скажімо щомісяця, те щоб таблиці конкретної P застарівали до їх завершения.

Рандомизированное підписування (підписування з уравниванием ймовірностей). Рандомизация у процедурі підписування робить кожну з [pic] різних подписей[8] для даного повідомлення однаково імовірним результатом процедури підписування. Отже, і той ж документ, підписаний двічі, майже обов’язково зробить дві різних дійсних підписи. Рандомизация необхідна у процедурі підписування; якщо p підписує два повідомлення, користуючись у тому ж значенням a, з підписів можна обчислити секретний ключ p; див. Вправа 14.6.

14.2.4 Схема Підписи RSA Якщо n — велика кількість, твір двох простих чисел P і Q, тут ми дуже важко обчислити квадратний корінь і коріння вищих порядків по модулю n, а то й відомо розкладання на множники. Можливість обчислення квадратних коренів можна використовувати, щоб знайти множники n (див. Вправа 14.7), що, що обчислення квадратних коренів є настільки ж важким, як і розкладання на множники. У схемою підписи Ривеста, Шаміра і Эйдлмана [RSA78], загальний ключ p — велике число n, розкладання якого на множники p знає, і показник ступеня e. Підпис p для повідомлення М — e-й корінь М по модулю n, який легко перевірити, користуючись спорудженням до рівня. Цей корінь вищого порядку перебуває p і з використанням спорудження до рівня; при генерації свого ключа p обчислює число d таке, що [pic], що означає, що [pic], тобто, [pic] - e-й корінь М. Таємний ключ p полягає з номери d, тобто, p ні запам’ятовувати розкладання на множники n. У схемою RSA, p показує свій ідентифікатор обчисленням коренів по модулю n, що потребує (неявного) знання розкладання n на множники; передбачається, що тільки p знає його. У цій схемі кожен процес має свою модуль.

14.2.5 Схема Підписи Фиата-Шамира Більше тонке використання труднощі перебування (квадратних) коренів зроблено у схемі Фіата і Шаміра [FS86]. У RSA схемою процес підписує повідомлення, показуючи, що він може обраховувати коріння по модулю своєї спільної ключа, а здатність вираховуватимуть коріння можливо вимагає знання розкладання на множники. У схемою Фиата-Шамира процеси використовують загальний модуль n, розкладання на множники якого відомо лише довіреній центру. Процесу p даються квадратні коріння деяких специфічних чисел (в залежність від ідентифікатора p), та підпис p для М забезпечує доказ те, що підписує знає ці квадратні коріння, але з розкриваючи їх. Перевага схеми Фиата-Шамира над RSA схемою — нижча арифметична складність і відсутність окремого загального ключа кожному за процесу. Недолік — потреба у довіреному джерелі, який видає секретні ключі. Як згадувалося колись, схема використовує велике ціле число n, твір двох великих простих чисел, відомих тільки центру. З іншого боку є одностороння псевдо-случайная функція f, яка відображає рядки на [pic]; цю функцію відома і то, можливо обчислена кожним процесом, але зворотна функція може бути вычислена.

Секретные і спільні ключі. Як секретного ключа p дано квадратні коріння з [pic] по [pic] k чисел по модулю n, саме [pic], де [pic]. [pic] вважатимуться загальними ключами p, але вони може бути враховано з ідентифікатора p, не треба зберігати. Щоб уникнути технічних незручностей, ми припустимо, що це k чисел — квадратичные остатк по модулю n. Квадратні коріння може бути враховано центром, знаний множники n.

Подписавание повідомлень: перша спроба. Підпис p неявно доводить, що підписує знає коріння [pic], тобто, може видати число p. s такий, що [pic]. Таке число — [pic], але посилка самого [pic] розкрила б секретний ключ; щоб уникнути розкриття ключа, схема використовує таку ідею. Процес p вибирає довільне число r і обчислює [pic]. Тепер p — єдиний процес, котрі можуть видати число y, що задовольнить [pic], саме, [pic]. Отже, p може показувати своє знання [pic] і їх розкриття, посилаючи пару (x, y), що б [pic]. Оскільки p не посилає число r, обчислити [pic] з цього пари неможливо без обчислення квадратного кореня. Але є дві проблеми за підписами, які з таких пар. По-перше, будь-хто може виробити таку пару, жульничая так: спочатку вибрати y, і потім обчислити [pic]. По-друге, підпис залежить від повідомлення, отже процес, який одержав підписаний повідомлення від p, може скопіювати підпис будь-яку підроблене повідомлення. Важке запитання цієї схеми підписи — зробити, щоб p показував знання кореня твори з підмножини [pic], де підмножина залежить від повідомлення й довільного числа. Шифрування повідомлення й довільного числа з допомогою f це не дає подделывающему спочатку вибрати y. Щоб підписати повідомлення М, p діє так. P вибирає довільне число r і обчислює [pic]. P обчислює f (М, x), назвемо перші k біт з [pic] по [pic]. P обчислює [pic]. Підпис [pic] складається з кортежу ([pic],…, [pic], y). Щоб перевірити підпис ([pic],…, [pic], y) процесу p для повідомлення М, треба діяти так. Обчислити [pic] і [pic] Обчислити f (М, z) і перевірити, перші k біт — [pic] по [pic]. Якщо підпис істинною є, значення z, розрахований першою кроці перевірки дорівнює значенням x, використовуваному в подписывании і отже перші k біт f (М, z) рівні [pic] … [pic].

Подделка виклику і завершальний рішення. Ми розглянемо тепер стратегію подделывающего щоб одержати підписи відповідно до вищезгаданої схемою без знання [pic]. Вибрати k довільних біт [pic] … [pic]. Вибрати довільне число y і обчислити [pic] Обчислити f (М, x) і подивитися, рівняються чи перші k біт значенням [pic] … [pic], обраним раніше. Якщо це, то ([pic],…, [pic], y) — підроблена підпис для повідомлення M. Оскільки ймовірність рівності за крок (3) можна прийняти [pic], підробка стає успішної після очікуваного числа [pic] випробувань. При k = 72 і прийнятим часом [pic] секунд для випробування одного вибору [pic], очікуване час підробки (з цим стратегією) — [pic] секунд чи 1,5 мільйони, що робить схему цілком безпечної. Проте, кожен процес повинен зберігати k коренів, і якщо k може бути обмежений через обмеження простору, очікуване час підробки [pic] то, можливо незадовільно. Ми покажемо сьогодні як змінити схему, щоб використовувати k коренів, і реально отримувати очікуване час підробки [pic] для обраного цілого числа t. Ідея у тому, щоб використовувати перші kt біт f-результата, щоб визначити t підмножин від [pic], й примусити p показувати своє знання t цих творів. Щоб підписати повідомлення М, p діє так. p вибирає довільні [pic],…, [pic] і обчислює [pic]. p обчислює f (М, [pic], …, [pic]); назвемо перші kt біт [pic]. ([pic] і [pic]). p обчислює [pic] для [pic]. Підпис [pic] складається з ([pic], …, [pic], [pic], …, [pic]). Щоб перевірити підпис ([pic], …, [pic], [pic], …, [pic]) процесу p для повідомлення М, треба действуовать так. Обчислити [pic] і [pic]. Обчислити f (М, [pic], …, [pic]), і перевірити, перші kt біт — [pic], …, [pic]. Подделывающий, намагається зробити справжню підпис з тією ж самої стратегією, що наведена вище, тепер має можливість успіху у третій кроці [pic], що означає очікуване число випробувань [pic]. Фіат і Шамир показують: у свою роботу, що й розкладання n на множники не виявляється простим, але суттєво кращого алгоритму підробки не існує, отже схему можна зробити довільно безпечної, обираючи k і t досить большими.

14.2.6 Резюме і Обговорення У цьому попередньому розділі засвідчили, що у синхронних системах існують детермінований рішення проблеми Візантійського мовлення. Максимальна здатність відновлення таких рішень — t < N/3, а то й використовується перевірка дійсності (Розділ 14.1), і неограничена, якщо вона використовується (цей розділ). В усіх життєвих рішеннях, представлених тут, синхронність була змодельована з допомогою (досить сильних) припущень моделі імпульсу; отказоустойчивая реалізація моделі імпульсу обговорюється в Розділі 14.3.

Проблема розстрільної команди. На додачу до прийняття моделі імпульсу, друге припущення, лежаче основу всіх рішень, представлених досі пір — те, що імпульс, у якому мовлення починається, відомий усім процесам (і пронумеровано 1 для зручності). Якщо апріорі справи не так, виникають проблеми старту алгоритму одночасно, по тому, одностайно або як процесів (спонтанно) ініціюють запит прохання виконанні алгоритму мовлення. Запит може йти від командуючого (після обчислення результату, що має бути оголошено всім процесам) чи то з помічників (розуміють, що він всім потрібна інформація, зберігається у командуючого). Ця проблема вивчається у літературі як проблема розстрільної команди. У цьому проблемі, чи більш процесів ініціюють (запит), але щодо одного й тому самому імпульсі, і процеси можуть стріляти. Вимоги: Обгрунтованість. Ніякої коректний процес не стріляє, якщо ніякої процес не ініціював. Одночасність. Якщо будь-який коректний процес стріляє, всі коректні процеси стріляють у тому самому імпульсі. Завершення. Якщо коректний процес ініціює, то ми все коректні процеси стріляють протягом кінцевого числа імпульсів. Справді, маючи рішення для проблеми розстрільної команди, непотрібно заздалегідь погоджуватися перший імпульсі мовлення; процеси, запитуючі мовлення, ініціюють алгоритм розстрільної команди, і мовлення починається у імпульсі пов’язаному зі стріляниною. Методи, використовувані рішення проблеми Византийского-вещания і проблеми розстрільної команди, може бути об'єднані, щоб отримати протоколи, ефективніші за часом, які вирішують проблеми мовлення у відсутності апріорного угоди перший импульсе.

Временная складність і раніше зупинені протоколи. У цьому главі ми представили протоколи, використовують t + 1 чи 2t + 3 імпульсів, чи раундів зв’язку. Фішером і Линчем [FL82] показано, що t + 1 раундів зв’язку — оптимальне число для t-устойчивых протоколів згоди, і результати був розширено, щоб охопити протоколів із встановленням дійсності, Пайовому і Стронгом [DS83]. Тонкий той час у цих доказах — те що використаних сценаріях процес має відмовляти у кожному з імпульсів із першого по t, тому нижні межі у щонайгіршому разі - число фактичних збоїв протягом виконання. Так як у більшості виконань фактичне число збоїв набагато нижчі здібності відновлення, вивчалося існування протоколів, які можуть досягати угоди до цього часу тих виконанні, які мають маленьке число збоїв. Протоколи мовлення з такою властивістю називаються рано останавливающимися. Долев, Райсчук і Стронг [DRS82] продемонстрували нижню межу в f + 2 раунду нічого для будь-якого протоколу у виконанні з f збоями. Обговорення кількох рано останавливающихся протоколів мовлення згоди є у [BGP92]. Рано зупинені протоколи вирішили протягом кількох імпульсів по тому, як коректні процеси укладають, що було імпульс без нових збоїв. Проте, не можна гарантувати, що це коректні процеси досягають цього висновку щодо одного й тому самому імпульсі. (Якщо, звісно, вони не досягають їх у імпульсі t + 1; оскільки найбільше t процесів відмовляють, серед перших t + 1 є один раунд, у якому ніякого нового збою немає.) Як наслідок, рано зупинені протоколи не задовольняє одночасності. Коун і Дворк показали [CD91], що, щоб досягти одночасності, у виконанні, де ніяких збоїв немає, слід також t + 1 раунд, навіть рандомизированных протоколів й у (дуже слабкий) моделі аварій. Це означає, що протоколів з впровадження дійсності також потрібно t + 1 імпульсів для одночасного угоди. Проблеми рішення і узгоджена несуперечність. З використанням протоколу мовлення як підпрограми, фактично всі проблеми рішення для синхронних систем можна вирішити досягненням узгодженої несуперечливості, тобто домовленості про безлічі входів. У проблемі узгодженої несуперечливості, процеси вирішили про векторі входів, з однією елементів кожному за процесу у системі. Формально, вимоги такі: Завершення. Кожен коректний процес p стає в векторі [pic] з одним елементом кожному за процесу. Угоду. Вектори рішення коректних процесів рівні. Залежність. Якщо q коректний, то тут для коректного p, [pic]. Узгодженої несуперечливості можна досягнути множинними вещаниями: кожен процес вістить свій вхід, та інформаційний процес p поміщає своє рішення, у мовлення q в [pic]. Завершення, угоду, і залежність безпосередньо успадковуються від відповідних властивостей алгоритму мовлення. Оскільки кожен коректний процес обчислює і той ж вектор (угоду), більшість проблем рішення легко вирішується питання з допомогою детермінованою функції на векторі рішення (що безпосередньо гарантує угоду). Згода, наприклад, вирішується питання з допомогою вилучення значення, має більшість, з вирішального вектора. Вибір вирішується витяганням найменшого унікального ідентифікатора в векторі (остерігайтеся; обраний процес то, можливо сбойным).

14.3 Синхронізація Годин У попередніх розділах засвідчили, що (коли розглядаються детермінований алгоритми) синхронні системи мають вищу здатність відновлення, ніж асинхронні. Це було зроблено ідеалізованою моделі синхронності, де процеси функціонують в імпульсах. Вища здатність відновлення моделі імпульсу означає, що ні можливо детерминированно стійко синхронізувати повністю асинхронні мережі. У розділі буде показано, що стійка реалізація моделі імпульсу можлива в моделі асинхронних мереж обмежених затримок (ABD (asynchronous bounded-delay) мережі - АСОЗ). Модель АСОЗ характеризується наявністю локальних годині і верхньої кордоном на затримку повідомлень. У описі і аналізі алгоритмів ми використовуємо кадр реального часу (real-time frame), що є призначенням часу наступу [pic] кожному події. Відповідно до релятивістської фізиці, немає стандартного чи предпочтительного способу зробити це; в подальшому будемо припускати, що фізично значиме призначення вибрано. Кадр реального часу не піддається спостереженню для процесів в системі, але процеси можуть побічно відстежувати час, через годинник, значення яких пов’язані із реальним часом. Годинник процесу p позначаються [pic] і може читати і нотувати у них (запис у години необхідна для синхронізації). Значення годин безупинно змінюється у часі, якщо годинник не призначені; ми пишемо [pic], щоб позначити, зараз реального часу t годинник містять T. Заголовні літери (З, T) йдуть на часу годин, а рядкові літери (з, t) — для реального часу. Годинник можна використовувати керувати настанням подій, як і вираженні when [pic] then send message rоторое викликає посилку повідомлення під час [pic]. Функція [pic] позначається [pic]. Значення ідеальних годин поповнюється [pic] за [pic] одиниць часу, то є, воно задовольняє [pic]. Синхронізовані ідеальні годинник будь-коли потребують коригування, але, на жаль, вони лише (корисна) математична абстракція. Годинник, використовувані в розподілених системах, відчувають відхилення, обмежений маленькій відомої константою [pic] (зазвичай порядку [pic] чи [pic]). Відхилення годин З [pic]-ограничено, якщо, для [pic] і [pic], таких, що [pic] і [pic] немає присвоювання З, [pic] (14.1) Різні годин у розподілених системах не показують один і той водночас годин на будь-який поставлене момент реального часу, тобто, [pic] не обов’язково справедливо. Годинник [pic]-синхронизированы в останній момент реального часу t, якщо [pic], і [pic]-синхронизированы момент годинникового часу T, якщо [pic]. Ми вважаємо ці поняття еквівалентними; див. Вправа 14.8. Мета алгоритмів синхронізації годин у тому, щоб домогтися і підтримувати глобальну [pic]-синхронизацию, тобто, [pic]-синхронизацию між кожної двома-трьома годинами. Параметр [pic] - точність синхронізації. Затримка повідомлень обмежена знизу [pic] і згори [pic], де [pic]; формально, якщо повідомлення посилається на реальну час [pic] виходить в реальне час [pic], то [pic] (14.2) Оскільки вибір кадру реального часу вільний, припущення (14.1) і (14.2) ставляться до тимчасовому кадру як і, як і до годинах та банківській системі связи.

14.3.1 Читання Віддалених Годин У цьому вся підрозділі буде вивчена ступінь точності, з якою процес p може налаштовувати свої ідеальні годинник на ідеальні годинник надійного серверу p. s. У детермінованого протоколу найкраща доступна точність — [pic], і це точність може бути отримана для простого протоколу, який обмінюється лише одною повідомленням. Імовірнісні протоколи можуть досягати довільній точності, але складність за повідомленням залежить від бажаної точності й діють розподілу часів доставки сообщений.

Теорема 14.12 Існує детермінований протокол для синхронизирования [pic] з [pic] з точністю [pic], який обмінюється одним повідомленням. Ніякої детермінований протокол не сягає вищої точності. Доказ. Ми спочатку уявімо простий протокол і доведемо, що він сягає точності, заявленої в теоремі. Щоб синхронізувати [pic], сервер посилає одне повідомлення,. Коли p отримує, він коригує годинник на T + [pic]. Щоб довести заявлену точність, назвемо реальні часи посилки і одержання повідомлення [pic] і [pic] відповідно; тепер [pic]. Оскільки годинник ідеальні, [pic]. Під час [pic], p коригує годинник, щоб у них [pic], тому [pic]. Тепер [pic] означає [pic].

Рисунок 14.5 Сценарії для детермінованого протокола.

Чтобы показати нижню межу для точності, нехай дано детермінований протокол; у цьому протоколі p і p. s обмінюються деякими повідомленнями, після чого p коригує свої годинник. Розглядаються два сценарію для протоколу, як зображено на Малюнку 14.5. У першому сценарії, годинник рівні до виконання, все повідомлення з p. s в p доставляються після [pic], і всі повідомлення з p в p. s доставляються після [pic]. Якщо коригування у тому сценарії - [pic], то годинник p з точністю на [pic] випереджають [pic] після синхронізації. У другому сценарії [pic] до виконання відстає від [pic] на [pic], все повідомлення з p в p. s доставляються після [pic], і всі повідомлення з p. s в p доставляються після [pic]. Назвавши коригування у тому сценарії [pic], ми бачимо, що годинник p після синхронізації відстають від [pic] з точністю на [pic]. Проте, ні p ні p. s не спостерігають різницю між сценаріями, оскільки невизначеність у затримки повідомлення приховує відмінність; отже [pic]. Це означає, що точність найгіршого випадку [pic] Цей мінімум дорівнює (і відбувається при [pic]). (.

Если процеси p і q синхронізують свої годинник з сервером з цим точністю, досягається глобальна [pic]-синхронизация, який досить більшість прикладних програм. Краща точність досяжним у вероятностного протоколу синхронізації, запропонованого Крістіаном [Cri89]. І тому протоколу приймається, що затримка повідомлення — стохастичну змінна, розподілена відповідно до (не обов’язково відомої) функції [pic]. Можливість прибуття будь-якого повідомлення протягом x — F (x), і затриманні різних повідомлень незалежні. Довільна точність досяжним лише коли нижню межу [pic] щільна, тобто, для всіх x>[pic], F (x) > 0. Протокол простий; p просить, щоб p. s послав час, і p. s негайно відповідає повідомленням. Процес p вимірює час I між посилкою запиту і відповіді; справедливо [pic]. Затримка повідомлення відповіді - по крайньої мері [pic] і найбільше [pic], і отже відрізняється найбільше на [pic] від [pic]. Отже, p може встановити свої годин у [pic], і сягає точності [pic]. Якщо не спричинить бажана точність — [pic], p посилає новий запит якщо [pic], інакше завершается.

Лемма 14.13 Імовірнісний протокол синхронізації годин сягає точності [pic]с очікуваним числом повідомлень найбільше [pic]. Доказ. Можливість те, що запит p прибуває протягом [pic] - [pic]и така сама можливість, відповідь прибуває всередині протягом [pic]. Отже, можливість, що p отримує відповідь протягом [pic] - по крайнього заходу [pic], що означає кордон на [pic] на очікуване число випробувань до успішного обміну повідомленнями. (.

Временная складність протоколу зменшується, якщо p посилає новий запит коли ніякої відповіді був отримано [pic] після посилки запиту. Очікуване час тоді залежить від очікуваної чи максимальної затримки, а саме [pic], і протокол стійкий проти втрати повідомлень. (Потрібно використовувати номери як у порядку прямування, щоб відрізнити застарілі ответы.).

14.3.2 Розподілена Синхронізація Годин Цей поділ представляє t-Византийско-устойчивый (при t < N/3) розподілений алгоритм синхронізації годин Махани і Шнайдера [MS85]. Долев, Халперн і Стронг [DHS84] показали, що її жодна синхронізація не можлива при [pic], а то й використовується встановлення дійсності. Ядро алгоритму синхронізації - протокол, що досягає неточного домовленості про середніх значеннях годин. Процеси коректують свої годинник, і досягають високого рівня синхронізації. Через відхилення за якийсь час точність погіршується, наслідком чого стане новий раунд синхронізації після деякого інтервалу. Припустимо, що у реальне час [pic] годинник [pic]-синхронизированы; тоді до часу [pic] годинник [pic]-синхронизированы. Отже, якщо не спричинить бажана точність — [pic], і раунд синхронізації сягає точності [pic], раунди повторюються кожні [pic] одиниць часу. Оскільки час, скажімо P. S, до виконання раунду синхронізації зазвичай дуже мало проти R, то виправдано спрощує те, що у протягом синхронізації відхиленням можна знехтувати, тобто, годинник є ідеальними. Неточне угоду: алгоритм із швидкою сходимостью. У проблемі неточного угоди, використовуваної Махани і Шнайдером [MS85] для синхронізації годин, процес p має дійсне вхідний значення [pic], де для коректних p і q [pic]. Вихід процесу p — дійсне значення [pic], і точність виходу окреслюється [pic]; мета алгоритму у тому, щоб домогтися дуже малого значення точности.

var [pic], [pic], [pic]: real; (*Вхід, вихід, оцінювач V *) [pic], [pic]: multiset of real; begin (*фаза збору входів*) [pic] forall [pic] do send to q wait [pic]; (*Обробити повідомлення й *) while [pic] do insert ([pic]); (*Тепер обчислити прийнятні значення*) [pic] [pic] while [pic] do insert ([pic], [pic]); [pic] end Після набуття від q: send to q Після набуття від q: if таке повідомлення був отримано від q колись then insert ([pic], x).

Алгоритм 14.6 алгоритм зі швидкою сходимостью.

Алгоритм із швидкою сходимостью, запропонований Махани і Шнайдером дано як Алгоритм 14.6. Для кінцевого безлічі [pic], визначимо дві функції intvl (A)=[min (A), max (A)] і width (A) = max (A) — min (A). Алгоритм має фазу збору входів і фазу обчислення. У першій фазі процес p просить кожен інший процес послати свій вхід («вигукуючи» повідомлення) і чекає [pic] одиниць часу. Після цього часу, p отримав усі входи від коректних процесів, як і відповіді підмножини збійних процесів. Ці відповіді заповнюються (безглуздими) значеннями [pic] для процесів, які відповіли. Потім процес застосовує до отриманого значенням фільтр, який гарантовано пропускає все значення коректних процесів і ті збійні значення, що досить близькі до правильним значенням. Оскільки коректні значення відрізняються лише з [pic] і є по крайнього заходу N-t коректних значень, кожне коректне значення має тут по крайнього заходу N-t значення, які відрізняються найбільше на [pic] від нього; [pic] зберігає отримані значення з цією властивістю. Потім обчислюється вихід з допомогою усереднення значень — все відкинуті значення замінюються оцінкою, обчисленій застосуванням детермінованою функції estimator до інших значенням. Ця функція задовольняє [pic], але у іншому довільна; може бути мінімумом, максимумом, середнім, чи [pic].

Теорема 14.14 Алгоритм із швидкою сходимостью сягає точності [pic]. Доказ. Нехай [pic] - значення, включаемое в [pic] для процесу r, коли p перевищує ліміт часу (тобто, [pic] - чи [pic] чи [pic]), і [pic]- значення в [pic] для процесу r, коли p обчислює [pic] (Тобто [pic] - чи [pic] чи [pic]). Точність буде обмежена поділом підсумовування в обчисленні рішення на підсумовування над коректними процесами (З) і некоректними процесами (B). Для коректних p і q, різницю [pic] обмежена 0, якщо [pic], і [pic] якщо [pic]. Перша кордон випливає з те, що, бо коли p і r — коректні процеси, то [pic]. Справді, оскільки r відповідає на повідомлення p швидко, [pic]. Так само [pic] всім коректних r ", припущення про вході означає, що значення r переживає фільтрацію процесом p, отже Заснування, несучий основну відповідальність [pic]. Друга кордон справедлива, оскільки для коректних p і q, [pic], коли p і q обчислюють свої рішення. Оскільки додані оцінки перебувають між прийнятими значеннями, досить розглянути максимальне різницю між значеннями [pic] і [pic], які пройшли фільтри p і q відповідно. Є по крайнього заходу N-t процесів r, котрим [pic], і з крайньої мері N-t процесів r, котрим [pic]. Це означає, що є коректний r такий, що [pic] і [pic]; але оскільки r коректний, [pic], отже [pic]. Звідси випливає, що з коректних p і q, [pic] = [pic].

= [pic].

= [pic].

[pic].

[pic].

(Довільна точність можна досягти повторенням алгоритму; після і ітерацій, точність стає [pic]. Точність навіть від, якщо менша частка (ніж третину) процесів сбойная; у Висновку точності t можна розуміти, як фактичне число збійних процесів. Вихідну точність алгоритму (саму гірший) не можна поліпшити підхожим вибором функції estimator; справді, Візантійський процес r може нав’язати p будь-яке значення [pic], просто посилаючи p це значення. Функція то, можливо обрано відповідно, аби досягти хорошою середньої точності, коли відомо щось найбільш ймовірній поведінці збійних процессов.

Синхронизация Годин. Щоб синхронізувати годинник, використовується алгоритм з швидкої сходимостью, аби досягти неточного угоди з новому значенням годин. Передбачається, що годинник спочатку [pic]синхронизированы. Алгоритм має бути адаптований, оскільки Затримка повідомлення точно б не відома, отже процес неспроможна знати точне значення іншого процесу; і За виконання алгоритму йде час, отже годинник немає постійних значення, а збільшуються згодом. Щоб компенсувати невідому затримку, процес додає [pic] до одержуваним значенням годин (як і детерминированном протоколі Теореми 14.12), вводячи додаткове складова [pic] в вихідну точність. Щоб представляти отримане значення значення годин, ніж як константу, p зберігає різницю отриманого значення годин (плюс [pic]) і власного як [pic]. Під час t, наближення годин r процесом p — [pic]. Змінений алгоритм дано як Алгоритм 14.7.

var [pic], [pic], [pic]: real; (*Вхід, адаптація, оцінювач V *) [pic], [pic]: multiset of real; begin (*фаза збору входів*) [pic] forall [pic] do send to q wait [pic]; (*Обробити повідомлення й *) while [pic] do insert ([pic]); (*Тепер обчислити прийнятні значення*) [pic] [pic] while [pic] do insert ([pic], [pic]); [pic] [pic] end.

После отримання від q: send to q Після набуття від q: if таке повідомлення був отримано від q колись then [pic].

Алгоритм 14.7 швидка відповідність часов.

Заметьте, що у Алгоритмі 14.7 фільтр має як широку грань, саме [pic], ніж у Алгоритмі 14.6, де грань [pic]. Ширша грань компенсує невідому затримку повідомлення, і поріг виникає з наступного затвердження. Нехай [pic] позначає значення, яке p вставив в [pic] для процесу r після першої фази p (порівняйте багатозначно [pic] в попередньому алгоритмі). Твердження 14.15 Для коректних p, q, і r, після ліміту часу p виконується [pic]. Доказ. Передача повідомлення від q до p здійснює детермінований алгоритм читання годин з Теореми 14.12. Коли p отримує це повідомлення, [pic]ограничено [pic], тому [pic] відрізняється саме більше на [pic] від [pic]. Так само [pic] отличается.

———————————- [1] [pic] - функція Эйлера «фі»; [pic] - розмір [pic].

———————————- p.

r.

q.

r.

p.

П, а м я т ь Шина.

F.

P.

U.

C P U.

Процессор связи Система коммуникаций.

s.

T.

Сценарий 1.

(.

p.

T.

s.

T.

Сценарий 2.

p.

(.

T.

Показати весь текст
Заповнити форму поточною роботою