Page 40 - 4868
P. 40

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

               властивості  живучості.Програма  завершується,  якщо  завершується  кожен
               цикл або виклик процедури, тобтодовжина кожної історії кінцева. Тотальна
               (повна)  коректність  програми  –  це  властивість,  що  об’єднує  часткову
               коректність  і  завершуваність.  Програма  повністю  коректна,  якщо  вона
               завжди завершується, видаючи при цьому правильний результат.
                     Взаємне  виключення  –  це  приклад  властивості  безпеки  в  паралельній
               програмі.При  «поганому»  стані  два  процеси  такої  програми  одночасно
               виконують  дії  в  одній  критичній  секції.У  «хорошому»  стані  кожен  процес
               виконується у своїй критичній секції.
                     Для  перевірки  того,  що  дана  програма  задовольняє  бажаним
               властивостям  звичайний  застосовується  підхід,  якій  полягає  утестуванні,
               або налагодженні. Його можна охарактеризувати фразою «запусти програму
               і  подивися,  що  вийде».Це  відповідає  перебору  деяких  можливих  історій
               програми і перевірці їх прийнятності.Недолік такої перевірки полягає в тому,

               що кожен тест стосується тільки однієї історії виконання, а обмежене число
               тестів навряд чи здатне продемонструвати відсутність поганих історій. Також
               в  результаті  тестування  можна  виявити  тільки  наявність  помилок,  а  не
               гарантувати  їх  відсутність.Крім  того,  паралельні  програми  дуже  складні  в
               тестуванні та налагодженні, оскільки, по-перше, важко зупинити відразу всі
               процеси  і  перевірити  їх  стан,  і,  по-друге,  в  загальному  випадку  кожне
               виконання програми призводить до нової історії.
                     Другий  підхід  –  використання  операторних  міркувань,  які  можна
               назвати «вичерпний аналіз варіантів виконання» (перебираються всі можливі
               історії  виконання  програми).Для  цього  аналізуються  способи  чергування
               неподільних дій процесів.На жаль, в паралельній програмі число можливих
               історій зазвичай дуже велике (тому метод є «виснажливим»).Припустимо, що
               паралельна програма містить n процесів і кожен з них виконує послідовність
               ізm неподільних дій.Тоді число різних історій програми складе(n m                  )!/ ( ! )m  n
               .Для програми з трьох процесів, кожний з яких виконує всього дві неподільні
               операції, можливими є 90 різних історій!Чисельник у формулі – це кількість
               можливих  перестановок  з  n m          дій.Але,  оскільки  кожен  процес  виконує
               послідовність  дій,  то  для  нього  можливий  тільки  один  порядок  виконання
               дій.Знаменник  відкидає  всі  варіанти  з  неправильним  порядком  виконання
               дій.Ця  формула  дає  кількість,  рівну  числу  способів  перемішати n колод  по
               mкарт  у  кожній,  за  умови,  що  відносний  порядок  карт  в  кожній  колоді
               зберігається.
                     Третій  підхід  полягає  у  застосуванні  стверджувальних  міркувань
               (assertional reasoning).Його можна назвати «абстрактним аналізом».У цьому
               методі  формули  логіки  предикатів  називаються  твердженнями  і
               використовуються для опису наборів станів – наприклад, всіх станів, у яких
               x > 0. Неподільні дії розглядаються як предикатні перетворювачі, оскільки
               вони змінюють стан програми, що задовольняє одному предикату,  на стан,
               який  задовольняє  іншому.Перевагою  даного  підходу  є  компактне
               представлення станів і їх перетворень.Але ще важливіше те, що він породжує
   35   36   37   38   39   40   41   42   43   44   45