Page 106 - 4868
P. 106

Ошибка! Стиль не определен.                                                              104

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

               використанні їх для сигналізації.
                     Паралельна  програма,  що  використовує  монітори  для  взаємодії  і
               синхронізації,  містить  два  типи  модулів:  активні  процеси  та  пасивні
               монітори. За умови, що всі спільні змінні знаходяться всередині моніторів,
               два процеси взаємодіють, викликаючи процедури одного і того ж монітора.
               Пропонована модульність має дві важливі переваги. По-перше – процес, що
               викликає  процедуру  монітора,  може  не  знати  про  конкретну  реалізацію
               процедури  (важливими є лише видимі  результати  виклику процедури).  По-
               друге  –  реалізуючи  монітор  можна  не  піклуватися  про  те,  де  і  як
               використовуються процедури монітора, і вільно змінювати його реалізацію,
               не  змінюючи  при  цьому  видимих  процедур  і  результатів  їх  роботи.  Дані
               переваги дають можливість створювати процеси та монітори незалежно один
               від одного, що загалом полегшує написання паралельної програми.
                     Завдяки  своїй  корисності  та  ефективності  монітори  застосовуються  в
               багатьох  мовах  програмування.  Закладені  в  основі  моніторів  механізми
               синхронізації  (неявне  виключення  та  умовні  змінні  для  сигналізації)
               реалізовані  також  в  операційних  системах  сімейства  Unix.  Також,  умовні
               змінні  підтримуються  декількома  бібліотеками  програмування,  наприклад
               POSIX (Pthreads).
                     Принцип використання монітора полягає у групуванні представлення та
               реалізації  спільного  ресурсу  (класу).  Він  складається  з  інтерфейсу  та  тіла.
               Інтерфейс  визначає  операції  (методи),  що  виконуються  над  ресурсом.  Тіло
               включає в себе змінні, що дозволяють зберігати стан ресурсу і процедури, які
               реалізують методи (операції) інтерфейсу.
                     У  різних  мовах  програмування  монітори  оголошуються  і  створюються
               по-різному.  Для  простоти  викладу  вважатимемо,  що  монітор  є  статичним
               об’єктом, а його тіло та інтерфейс описані наступним чином.
                     monitor mname {
                       оголошення глобальних змінних;
                       оператори ініціалізації;
                       процедури;
                     }

                     Процедури  реалізують  видимі  операції.  Глобальні  змінні  є  спільними
   101   102   103   104   105   106   107   108   109   110   111