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  запускає  інший  процес,  то  виходить,  що
   103   104   105   106   107   108   109   110   111   112   113