Page 80 - 6571
P. 80
кутових дужок випливає задоволення умови 2. Інші три власти-
вості будуть задовольнятися при безумовній справедливій страте-
гії планування, оскільки вона гарантує, що процес, який намага-
ється виконати неподільну дію, яка відповідає його критичній се-
кції, зрештою це зробить, незалежно від дій інших процесів. Од-
нак при такому «рішенні» виникає проблема реалізації оператора
неподільності (кутові дужки).
Всі чотири зазначені властивості важливі, проте найбільш
суттєвим є взаємне виключення. Для опису властивості взаємного
виключення необхідно визначити, чи знаходиться процес у своїй
критичній секції. Щоб спростити запис, побудуємо рішення для
двох процесів, CS1 та CS2, яке легко узагальнюється для n проце-
сів.
Нехай in1 та in2 – логічні змінні з встановленим початко-
вим значенням «хиба». Коли процес CS1 (CS2) знаходиться у сво-
їй критичній секції, змінній in1 (in2) присвоюється значення
«істина». Поганий стан, якого необхідно уникати, виникає у ви-
падку, якщо змінні in1 та in2 одночасно мають значення «істи-
на». Таким чином, потрібно, щоб для будь-якого стану виконува-
лося заперечення умови поганого стану.
MUTEX:Ø(in1 Ùin2)
Предикат MUTEX – це глобальний інваріант. Він повинен за-
довольнятися в початковому стані і після кожної операції присво-
єння значень змінним in1 та in2. Зокрема, перед тим, як процес
CS1 увійде в критичну секцію, присвоївши тим самим змінній
in1 значення «істина», він повинен переконатися, що змінна in2
має значення «хиба». Дану дію можна реалізувати за допомогою
наступної умовної неподільної операції.
<await (!in2) in1 = true;>
Оскільки процеси симетричні відносно один-одного, то у
вхідному протоколі процесу CS2 використовується аналогічна
умовна неподільна операція.
Рішення даної задачі показано в лістингу 3. Дана програма
задовольняє умові взаємного виключення. Взаємного блокування
не виникає, оскільки якби кожен процес був заблокований в сво-
єму протоколі входу, то обидві змінні in1 та in2, мали б значен-
ня «істина», а це суперечить тому, що в даній точці коду обидві
79