Page 47 - 6571
P. 47

об’єднує часткову коректність і завершуваність. Програма повні-
            стю  коректна,  якщо  вона  завжди  завершується,  видаючи  при
            цьому правильний результат.
                  Взаємне виключення – це приклад властивості безпеки в па-

            ралельній програмі. При «поганому» стані два процеси такої про-
            грами одночасно виконують дії в одній критичній секції. У «хо-
            рошому» стані кожен процес виконується у своїй критичній сек-

            ції.
                  Для перевірки того, що дана програма задовольняє бажаним
            властивостям  звичайний  застосовується  підхід,  якій  полягає  у
            тестуванні,  або  налагодженні.  Його  можна  охарактеризувати

            фразою «запусти програму і подивися, що вийде». Це відповідає
            перебору деяких можливих історій програми і перевірці їх при-

            йнятності. Недолік такої перевірки полягає в тому, що кожен тест
            стосується тільки однієї історії виконання, а обмежене число тес-
            тів навряд чи здатне продемонструвати відсутність поганих істо-
            рій.  Також  в  результаті  тестування  можна  виявити  тільки  наяв-

            ність помилок, а не гарантувати їх відсутність. Крім того, парале-
            льні програми дуже складні в тестуванні та налагодженні, оскіль-
            ки, по-перше, важко зупинити відразу всі процеси і перевірити їх

            стан, і, по-друге, в загальному випадку кожне виконання програ-
            ми призводить до нової історії.
                  Другий  підхід  –  використання  операторних  міркувань,  які
            можна назвати «вичерпний аналіз варіантів виконання» (переби-

            раються всі можливі історії виконання програми). Для цього ана-
            лізуються  способи  чергування  неподільних  дій  процесів.  На
            жаль,  в  паралельній  програмі  число  можливих  історій  зазвичай

            дуже велике (тому метод є «виснажливим»). Припустимо, що па-
            ралельна програма містить n  процесів і кожен з них виконує пос-
            лідовність із  m  неподільних дій. Тоді число різних історій про-

            грами складе  (n m×       )!/ ( ! )m  n  . Для програми з трьох процесів, кож-

            ний з яких виконує всього дві неподільні операції, можливими є
            90 різних історій! Чисельник у формулі – це кількість можливих
            перестановок з n m×  дій. Але, оскільки кожен процес виконує по-
            слідовність дій, то для нього можливий тільки один порядок ви-

            конаннядій. Знаменник відкидає всі варіанти з неправильним по-
            рядком виконаннядій. Ця формула дає кількість, рівну числу спо-




                                                        46
   42   43   44   45   46   47   48   49   50   51   52