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 представлено монітор, який реалізує семафор. Монітор і