Page 108 - 4868
P. 108
Ошибка! Стиль не определен. 106
операційною системою, але аж ніяк не програмістом. На практиці взаємне
виключення в мовах і бібліотеках реалізується за допомогою блокувань і
семафорів. В однопроцесорних операційних системах на основі заборони
зовнішніх переривань, а в багатопроцесорних операційних системах на
основі міжпроцесорних блокувань і заборони переривань на рівні процесора.
Умовна змінна використовується для припинення роботи процесу,
безпечне виконання якого є неможливим до момонту переходу монітора в
стан, що задовольняє деякій логічній умові. Умовні змінні також
застосовуються для запуску призупинених процесів, у випадку коли умова
набуває значення «істина». Умовна змінна оголошується наступним чином:
cond cv;
Таким чином, cond – це новий тип даних. Умовні змінні можна оголошувати
і використовувати тільки в межах моніторів.
Значенням умовної змінної cv виступає черга призупинених процесів
(черга затримки), яка спочатку є порожньою. Програміст не має можливості
безпосередньо звертатися до значення змінної cv. Замість цього він отримує
непрямий доступ до черги за допомогою декількох спеціальних операцій,
описаних нижче.
Процес може запросити стан умовної змінної за допомогою виклику
функції
empty(cv);
Якщо черга, що асоціюється із змінною cv порожня, то дана функція
повертає значення «істина», інакше – «хиба».
Процес блокується на умовній змінній cv за допомогою виклику методу
wait(cv);
Виконання операції wait поміщає робочий процес в кінець черги, що
асоціюється із змінною cv. Для того, щоб інший процес зміг увійти в монітор
з метою запуску призупиненого процесу, операція wait скасовує винятковий
доступ до монітора для процесу, що її викликав.
Заблоковані процеси запускаються операторами signal шляхом
виклику методу
signal(cv);
Даний метод виконує перевірку черги затримки змінної cv. Якщо у черзі
знаходяться призупинені процеси, то оператор signal запускає процес із
«голови» черги. Таким чином, операції wait та signal забезпечують
порядок сигналізації FIFO.
15.3. Визначення порядку сигналізації
Виконуючи операцію signal, процес працює в моніторі і, отже, може
керувати блокуванням, неявно зв’язаним із монітором. В результаті виникає
дилема. Якщо операція signal запускає інший процес, то виходить, що