Page 106 - 4868
P. 106
Ошибка! Стиль не определен. 104
структурованість, ніж семафори, хоча реалізуються так же само ефективно. У
першу чергу, монітори є механізмом абстракції даних. Монітор інкапсулює
уявлення про абстрактний об’єкт і забезпечує набір операцій для його
обробки. Монітор містить змінні, що зберігають стан об’єкта, і процедури,
що реалізують операції над ним. Процес отримує доступ до змінних в
моніторі тільки шляхом виклику процедур даного монітора. Взаємне
виключення забезпечується неявно, оскільки процедури в одному моніторі не
можуть виконуватися паралельно. Це схоже на неявне взаємне виключення,
що гарантується операторами await. Умовна синхронізація в моніторах
забезпечується явно за допомогою умовних змінних (condition variable). Вони
аналогічні семафорам, але мають суттєві відмінності у визначенні і, отже, у
використанні їх для сигналізації.
Паралельна програма, що використовує монітори для взаємодії і
синхронізації, містить два типи модулів: активні процеси та пасивні
монітори. За умови, що всі спільні змінні знаходяться всередині моніторів,
два процеси взаємодіють, викликаючи процедури одного і того ж монітора.
Пропонована модульність має дві важливі переваги. По-перше – процес, що
викликає процедуру монітора, може не знати про конкретну реалізацію
процедури (важливими є лише видимі результати виклику процедури). По-
друге – реалізуючи монітор можна не піклуватися про те, де і як
використовуються процедури монітора, і вільно змінювати його реалізацію,
не змінюючи при цьому видимих процедур і результатів їх роботи. Дані
переваги дають можливість створювати процеси та монітори незалежно один
від одного, що загалом полегшує написання паралельної програми.
Завдяки своїй корисності та ефективності монітори застосовуються в
багатьох мовах програмування. Закладені в основі моніторів механізми
синхронізації (неявне виключення та умовні змінні для сигналізації)
реалізовані також в операційних системах сімейства Unix. Також, умовні
змінні підтримуються декількома бібліотеками програмування, наприклад
POSIX (Pthreads).
Принцип використання монітора полягає у групуванні представлення та
реалізації спільного ресурсу (класу). Він складається з інтерфейсу та тіла.
Інтерфейс визначає операції (методи), що виконуються над ресурсом. Тіло
включає в себе змінні, що дозволяють зберігати стан ресурсу і процедури, які
реалізують методи (операції) інтерфейсу.
У різних мовах програмування монітори оголошуються і створюються
по-різному. Для простоти викладу вважатимемо, що монітор є статичним
об’єктом, а його тіло та інтерфейс описані наступним чином.
monitor mname {
оголошення глобальних змінних;
оператори ініціалізації;
процедури;
}
Процедури реалізують видимі операції. Глобальні змінні є спільними