Page 109 - 4868
P. 109

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

               одночасно мужуть виконуватися два процеси: процес, який виконав операцію
               signal  та  запущений  нею  на  виконання.  Проте,  в  подальшому  може
               виконуватися  тільки  один  із  них  (навіть  у  випадку  мультипроцесорів),
               оскільки  лише  один  процес  може  мати  винятковий  доступ  до  монітора.
               Таким чином, можливі два варіанти виконання:
                     1) сигналізувати і продовжити.  Процес, що виконав операцію  signal

               продовжує роботу, а процес, який отримав сигнал, виконується після нього;
                     2)  сигналізувати  і  очікувати:  Процес,  що  виконав  операцію  signal
               очікує  певний  проміжок  часу,  а  процес,  який  отримав  сигнал,  виконується
               відразу.
                     Дисципліна  (порядок)  «сигналізувати  і  продовжити»  не  перериває
               обслуговування. Процес, що виконує операцію signal, зберігає винятковий
               доступ до монітора, а процес,який отримав сигнал, почне роботу після того
               як отримає винятковий доступ до монітора. По суті, операція signal просто
               повідомляє  процес  про  його  розблокування,  після  чого  він  повертається  в
               чергу процесів, що очікують входу в монітор.
                     Порядок       «сигналізувати         і    очікувати»       виконує       переривання
               обслуговування.  Процес,  що  виконує  операцію  signal,  передає  монітор
               процесу,  що  був  запущений,  тобто  запущений  процес  перериває  роботу
               сигналізуючого  процесу.  У  даному  випадку  процес,  що  виконав  операцію
               signal додається в чергу процесів, які очікують входу монітор.
                     Діаграма  станів  на  рисунку1.18  ілюструє  процедуру  синхронізації  в
               моніторах.  Якщо  певний  процес  володіє  монітором,  то  інший  процес,  що
               виконує  виклик  його  процедури  поміщається  у  чергу,  в  іншому  випадку
               даний  процес  отримує  контроль  над  монітором.  Коли  монітор  звільняється
               (після  завершення  процедури  або  виконання  операції  wait),  то  процес,  що
               знаходиться  в  «голові»  черги  може  у  нього  ввійти.  Виконуючи  операцію
               wait(cv), процес покидає монітор  і поступає  у чергу, зв’язану з  умовною
               змінною.  Коли  процес  із  монітору  виконує  операцію  signal(cv),  то  при
               порядку  «сигналізувати  і  продовжити»  (SC)  процес  із  «голови»  черги
               переходить у монітор після того як завершить роботу процес, що знаходиться
               в  моніторі.  При  порядку  «сигналізувати  і  очікувати»  (SW)  процес,  що
               виконується в моніторі поміщається у чергу, а процес із черги переходить до
               виконання в моніторі.















                        Рисунок 1.18– Діаграма станів під час синхронізації в моніторі

                     У лістингу 1.25 представлено монітор, який реалізує семафор. Монітор і
   104   105   106   107   108   109   110   111   112   113   114