Протиставлення алгоритмів Петерсона та Декера


41

Я намагаюся зрозуміти алгоритми Петерсона і Деккера, які дуже схожі і демонструють багато симетрій.

Я спробував сформулювати алгоритми на неофіційній мові так:

Peterson's: "I want to enter."                 flag[0]=true;
            "You can enter next."              turn=1;
            "If you want to enter and          while(flag[1]==true&&turn==1){
            it's your turn I'll wait."         }
            Else: Enter CS!                    // CS
            "I don't want to enter any more."  flag[0]=false;

Dekker's:   "I want to enter."                 flag[0]=true;
            "If you want to enter              while(flag[1]==true){
             and if it's your turn               if(turn!=0){
             I don't want to enter any more."      flag[0]=false;
            "If it's your turn                     while(turn!=0){
             I'll wait."                           }
            "I want to enter."                     flag[0]=true;
                                                 }
                                               }
            Enter CS!                          // CS
            "You can enter next."              turn=1;
            "I don't want to enter any more."  flag[0]=false;

Різниця, здається, полягає в тому, де "You can enter next."відбувається і факт, що "if it's your turn I don't want to enter any more."відбувається в Dekker's.

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

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

Чим різняться ці алгоритми? Я думаю, що коли обидва процеси намагаються увійти в критичний розділ, у Петерсона процес говорить «я входжу», тоді як у Dekker - «Ви можете увійти». Чи може хтось з'ясувати спосіб поведінки процесів у кожному алгоритмі? Чи правильний мій спосіб викладати це в неофіційних термінах?


Зауважимо, що алгоритм Петерсона не повністю вирішує проблему критичного розділу, оскільки читання та запис у прапори самі по собі є критичними проблемами секцій. Документ, який фактично повністю вирішує проблему, - "Арбітр: активний системний компонент для впровадження синхронізуючих примітивів", Henk JM Goeman.
користувач3083171

Відповіді:


24

Ваші неофіційні описи алгоритмів чудові.

Я думаю, що в обох випадках автор намагався придумати найпростіше рішення, яке вони могли думати, що гарантувало як взаємне виключення, так і свободу тупику. Жоден алгоритм не є голодним чи справедливим.[ред .: як зазначено в коментарях, алгоритм Пітерсона є голодним і справедливим]. Рішення Dekker було першим алгоритмом взаємного виключення з використанням інструкцій просто завантаження та зберігання. Він був представлений у Dijkstra, Edsger W .; "Співпрацюючі послідовні процеси", у F. Genuys, ред., Мови програмування: Інститут підвищення кваліфікації НАТО , стор. 43-112, Academic Press, 1968 . Якщо ви читаєте документ, ви бачите, що Dijkstra працює через декілька спроб, визначивши проблему з кожною, а потім додавши трохи більше для наступної версії. Частина неефективності його алгоритму пов'язана з тим, що він починає з алгоритму повороту, а потім намагається модифікувати його, щоб дозволити процесам прогресувати в будь-якому порядку. (Не лише 0,1,0,1, ...)

Алгоритм Петерсона був опублікований у 1981 році, після більш ніж десятирічного досвіду та переконань щодо алгоритму Деккера. Петерсон хотів набагато простіший алгоритм, ніж Деккер, щоб довести правильність набагато простіше. Ви можете бачити, що він відчував деяке розчарування у громаді від заголовка своєї статті. Петерсон, Г.Л.; "Міфи про проблему взаємного виключення", Інф. Зб. Лет. , 12 (3): 115-116, 1981. Дуже швидко читається і дуже добре пишеться. (І зауваження щодо проведення офіційних методів є безцінними.) У роботі Петерсон також обговорюється процес, завдяки якому він побудував своє рішення з більш простих спроб. (Оскільки його рішення простіше, воно вимагає менших проміжних кроків.) Зауважте, що головна відмінність (те, що ви називаєте "домінування", а не "покірність") полягає в тому, що Петерсон почав свіжий (а не від алгоритму повороту повороту, з якого починався Дійкстра ) його цикл очікування простіший та ефективніший. Він розуміє, що може просто піти з простого циклічного тестування, в той час як Дайкстра мусив кожен раз переробляти та повторювати спробу.

Я думаю, що я повинен також згадати класичний папір алгоритму Лампорта : Lamport, Leslie; "Нове рішення задачі програмування Дейкстри", Comm ACM 17 (8): 453-455, 1974 . Алгоритм Bakery, мабуть, простіший, ніж алгоритм Dekker (і, звичайно, простіший у випадку з більш ніж двома процесорами), і спеціально розроблений як стійкий до помилок. Я спеціально згадую це з двох причин. По-перше, тому, що це дає трохи історії щодо визначення проблеми взаємного виключення та спроб її вирішення до 1974 р. По-друге, тому що алгоритм Bakery демонструє, що для вирішення проблеми взаємного виключення не потрібно атомної апаратної атомності.

Нарешті, особливим фаворитом мого є Лампорт, Леслі; "Алгоритм швидкого взаємного виключення", ACM Trans. Склад. Сис. , 5 (1): 1-11, 1987. У цій роботі Лампорт намагався оптимізувати рішення проблеми взаємного виключення у (звичайному) випадку про те, що для критичного розділу мало міркувань. Знову ж таки, це гарантує взаємне відчуження та тупик свободи, але не справедливості. Це (я вважаю) перший алгоритм взаємного виключення, що використовує лише звичайні зчитування та записи, які можуть синхронізувати N процесорів за O (1) час, коли немає суперечок. (Коли виникає суперечка, вона повертається на тест O (N).) Він дає неофіційну демонстрацію того, що найкраще, що ви можете зробити у випадку вільного розгляду, - це сім доступ до пам'яті. (І Dekker, і Peterson роблять це з 4, але вони можуть працювати лише з двома процесорами, коли ви розширите їхні алгоритми на N, вони повинні додати додатковий O (N) доступ.)

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


3
>> Жоден алгоритм не є голодним чи справедливим. Це не правда. Алгоритм Петерсона - це голодування вільне та справедливе. Якщо нитка знаходиться в критичному розділі, а інша чекає в циклі очікування - той, хто чекає, потрапить у CS наступний, навіть якщо нитка, яка була в CS, набагато швидша.

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

Посилання на покупку Петерсона "Міфи про проблему взаємного виключення": doi.org/10.1016/0020-0190(81)90106-X
strager

PDF "Міфи про проблему взаємного виключення" Петерсона (Archive.org): web.archive.org/web/20150501155424/https://cs.nyu.edu/~lerner/…
страгер

3

У наступному документі ми наводимо формальні моделі алгоритмів Петерсона та Деккера (та деяких інших), і ми використовували перевірку моделей, щоб довести їх властивості. Будь ласка, знайдіть наші результати в таблиці нижче (стовпці "Тупик" та "Розбіжність" відносяться до наших моделей, "МЕ" = ІСТИНА означає, що алгоритм правильний, "Обгін" = ІСТИНА означає, що це справедливо).

Р. Меоліч, Т. Капус, З. Брезочник. ACTLW - логіка дерев обчислень на основі дії, за винятком оператора. Інформаційні науки, 178 (6), стор 1542-1557, 2008.

https://doi.org/10.1016/j.ins.2007.10.023

введіть тут опис зображення


1

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

А тепер уявіть двох чоловіків з іншої культури ( Zombian Culture ), яких вони насправді не надто дбають один про одного, коли в’їжджають кудись ( справа у повазі запитати когось, хоче він увійти чи ні ).

Для уточнення інформації про проблему можна сказати, що:

  • Два іранця = Два процеси за допомогою алгоритму Dekker
  • Два зомбії = Два процеси за допомогою алгоритму Петерсона

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

p0:
   wants_to_enter[0] ← true // Goes through the house entrance
   while wants_to_enter[1] { // If the other man wants to enter too
      if turn ≠ 0 { // Then see if it is your turn or not
         wants_to_enter[0] ← false // If it is not your turn don't go furthur
         while turn ≠ 0 { // and wait until it is your turn
           // busy wait
         }
         wants_to_enter[0] ← true // when it is your turn go through the door
      }
   }

   // critical section
   ...
   turn ← 1
   wants_to_enter[0] ← false // Set the turn for the other man
   // remainder section

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

P0:     
  flag[0] = true; // Goes through the house entrance
  turn = 1; // Set the turn for himself
  while (flag[1] && turn == 1) // Wait until the other one is going in
  {
   // busy wait
  }
   // critical section
      ...
   // end of critical section
  flag[0] = false; // Done going inside

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.