Page 114 - 4868
P. 114

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


                     Лістинг  1.27  –  Рішення  задачі  про  читачів  та  письменників  з
               використанням моніторів

                     monitor RW_Controller {
                       int nr = 0, nw = 0;
                       cond oktoread; # отримує сигнал, коли nw == 0
                       cond oktowrite; # отримує сигнал, коли nr == 0 та nw == 0
                       procedure request_read() {
                         while (nw > 0) wait(oktoread);
                         nr = nr+1;
                       }
                       procedure release_read() {
                         nr = nr-1;
                         if (nr == 0) signal(oktowrite);
                         # запустити один процес-письменник
                       procedure request_write() {
                         while (nr > 0 || nw > 0) wait(oktowrite);
                         nw = nw+1;
                       }
                       procedure release_write() {
                         nw = nw-1;
                         signal(oktowrite); # запустити один процес-письменник та
                         signal_all(oktoread); # всі процеси-читачі
                       }
                     }


                     16.2. Реалізаціяінтервального таймера
                     Розглянемо нову задачу, що полягає у розробці інтервального таймера,
               який  дозволяє  процесу  перейти  на  деякий  час  в  стан  очікування.  Така
               можливість  часто  надається  операційними  системами,  щоб  дозволити
               користувачам,  наприклад,  періодично  виконувати  службові  команди.
               Розглянемо два рішення, в яких реалізовано два корисні методи. У першому
               рішенні  використані  так  звані  покриваючі  умови,  а  у  другому  –
               операторwaitз пріоритетами.
                     Монітор,  який  реалізує  інтервальний  таймер,  являє  собою  ще  один
               приклад контролера ресурсів. Ресурсом у даному випадку виступає логічний
               годинник. При цьому над годинником можливо виконувати такі операції як
               delay(interval),  яка  призупиняє  процес  на  проміжок  часу  тривалістю
               intervalтаtick,  що  виконує  інкремент  значення  логічного  годинника.
               Можливі  й  інші  операції,  наприклад,  отримання  значення  часу  або
               призупинення  процесу  до  моменту,  поки  годинник  не  досягне  певного
               значення.
                     Прикладні  процеси  викликають  операцію  delay(interval)  з

               від’ємним  значенням  interval,  а  операцію  tick  викликає  процес,  який
               періодично  запускається  апаратним  таймером.  Даний  процес  зазвичай  має
   109   110   111   112   113   114   115   116   117   118   119