2. Model Checking. Вериф. парал. и распределенных программных систем. Карпов (2010) (1185529), страница 36
Текст из файла (страница 36)
е. (экпченнг счетчика жиязлд прочессс Р,, э с етчвяе я и ) нрозмс Рз, зялчмше нем й У). В соответствии с семантикой асннхрощюй композиции в каждом состоянии компсзи- ° з нач( ВО, ЧТС зиачен( также ( сыщик Рассмотрим работу лроцесса Р,. Вначале значение г рвано (. После выполнения в строке с мепсой в, опера(орсе некритической секции д(С(, в еле.
дующей строке и, процесс проверяет значение а Если другой процесс нахы днтся в своей критической секции (это показывает значение 2, равное О), то процесс Р, ждет освобожденна критической секции, выполняя так называсыое "активное ош(дание" — передает управление опять на процсрку г, бессмысленно загруэщя процессор повторением пары операций (проверка, передача управления). Если вход в критическую секцию разрешен (т. е. 2-1), то процесс Р, входит в свою критическую секцию (строка с меткой и,), предварн(алано установив г равным 0 в строке с меткой зч (чтобы другие процессы не зюглн войти в своп критические секции).
Закончив работу в критической секции, процесс в строке с меткой и, восстанавливает значение т. Процесс Р, работает аналогично. Свойство взаимного искяючения, которое доюкно быль проверено в этой системе параллельных процессов, вырывается следующей формулой Ь(Ь: ы (рс( = и4 л (зсз = н() — ОзстОяине, В котором Оба процюсОв ОДНОвремен. но находятся в своих критических секциях, недостижимо в их композиции. Для проверки этого свойства построим модель процесса Р„считая неделимыми вмполнення каждого оператора. Соспжннл Р, — зто пары значений (рс(,5), т. е. (знпчение счетчика комолд Р,, значение переменной г). Поскольку в начале выпоянеиия операторов процесса Р, значение т может бызь уже изменено другим щюцессом, у этой модели два начальных состояния (рис.
5,9). Всего в системе переходов для Р, восемь состояний, столько же у Рз г~а з |ыполв сле- й сис).т).: юмегь шции. а юли.чеиий ). Пог бызь сания ко же опция зит из гп Ри ответ лпози- нахо- О). то вываег, бес, перею), то редваюессм гес кой юс Рг ции может быть выполнено югюзе-либо одно из действмй любого процесса, если зто действие возможно в текущем состоянии этого процесса. рис.5.9. Система переходов прогремим взаимного псюиоченна На рнс. 5ЛО прсцставяен фрагмент системы переходов композиции процессов Р, н Рз. Всею сисюма переходов для двух программ содержит порядка 40 состояний.
Прн росте числа процессов в параллельной программе обще число глсбальных мстояннй всей снстемы растет зкспоненциалыю. На втой системе переходов видно, что состояние, в котором оба процесса находятся в своих критических секциях(т.е. Рс, =м4 н Рс л4) достижимо нз начального соспжниа. После того как а строке тз процессом Р, проверено, что значение общего флага г" 1, нодотого, как процесс Р, установит значение г' в О, другой процесс может проверить общую переменную у и закис обнаружить, что ее значение разрешает ему войти в свою критическую секцию.
Очевидно, что такие ситуации чрезвычайно редки, а нх вероятность : Главе в На сне исчещюще мала. Именно зто создает огромные трудности в обнаружении подобных ошибок в параллельных сношках, как уже было поюмано в ае!. Верификация — зто единственный меню. позволяющий обнаруживвть ред- кие ошибки такого сорга. Рис жЖ Система переховов парвяяельной программы Р! З Р2 Причина того, что приввпеиный выше алгоритм не решает проблему взаимного исключения, состоит в том, что между операциями ПРОВЕРИТЬ У Ьеаено лн,г едпяяанр) н УСТАНОВИТЬ Г ( г ж О) другой процесс может проверить состояние общей переменной Г = О.
Таким образом, для защиты критического нншрвала с помощью обшей переменной нам необходима организация критического инюрввла для работы процесса с з)ой переменной. Вьг пар зре иеь УС Пр~ Вю ьь меч нне Из ~ рек рог Тип иа31 (Ехй сов. сел! сем пня уел ( одн~ 'ллеш 5 Выход пз этого порочиого круга состоит в том,'чтобы сделать выполиеиие пары операций ПРОВЕРИТЬ и УСТАНОВИТЬ мгиоеепимм. Вспомним, однако, что мгновенных операций пег, да нам, в действительиости, нужна ие мгновенная, а только НЕДЕЛИМАЯ операция, мгповеилая только с лычки гргнгм других мппвпостей системы. Иными словами, иеобходимо сделать так, чтобы любой процесс мог пабяюдать (и изменять) состояиие этой переменной только либо до, либо после того, как операция <ПРОВЕРИТЬ и УСТАНОВИТЬ> выполняема с этой переменной каким-либо другим процессом.
кении з сг/. ь ред- Ррмывр 6.4 Включим в соспш возможных операций неделимую операцию . ьш ш42 ы ш г-т со следующей семантикой: если значение г равно 1, то вычесть 1 из г, а если пег — то ничего ие делать и ждать. Тогда новое решение проблемы взаимного исключения может быль представлено так: ш:: 22:: гы исз п14 ИС2 лш ее!с шы и г: с"ы с2: чезе 4212 Ы Г: Гшл из: с24 пэс Сзг 4: Г: 2+14 «4: Г: 2+14 в5: Сакс «Л4 с5: сосо сгг На рис. 5.11 представлена сисгема переходов процесса Р„ а па рис. $.12— система переходов параллельной композицми процессов Р, !~ Рз.
Нз рис. 5.!2 видно, что проблема взаимного исюпочения теперь решена ксрРектно: сРеди достижимых состолпий нет состоаиил, в котоРом Рс, = шз п Роз =из. Тип переменных, пад которыми определены две неделимые операции: Р(4) — уменьшения значения з па 1, если,г > О, и яшвть, если з ь" О, Р(4) — увеличеиие значения переменной э иа 1. аимьу ожет дима зере- называется семафором. Семафоры были введены Эдсгером Дейкстрой (Ебзйсг 01)йэпв) лзш решения проблем синхронизации параллельных процессов. Любой фрагмент процесса можгю слслшь атомарным, неделимым с точки зрения всех остяльиых процессов, параллельно выполняемых с данным, если поместить его мехду операциями Р и Р, выполняемыми над некоторым семафором. Заметны, что при этом решштся и проблема активного смидл иия — бесполезной траты времени процессора на передачи управления, еслп )словие ие выполняется. В модели весь этот фрагмент можно представить одним переходом.
:.Глвев Б 5.6. Пак< й Язы квц г. Удс лни Аббре1 проста р гопы! моделг аспект в язык~ О про 0 кан СГ пер Рне. и! 1. Система нереходав одное нз проессов программы взаимною искмочеиия тяге яп ояе я! Рнс. Б.З 2. Система переходов корреюиой программы взаимного исюгюиеиня Пакеп привел ния яп базис. Вицин ную ст русмоз собой, описан их взм ритмог туру К иай си вери фг струит Пакет лержи1 иых аг предсг зго пр процес тараи польза "леев Э гйу Сю Креммяаямсдеяи р снслмм 6.6. Пакеты верификации и структура Крипке. Пакет верификации Зр1п Пакеты верификации.
Ипюнсивные исследования в обяасти пюг(е1 сйесй!пй привели к тому, что разработанная к настоящему времени техника применения этого подхода для верификации намного проще, чем его теоретический базис. Современные пакеты верификации автоматизируют все этапы верификации, в том числе они освобождмот пользователя и от необходимости вручную строить структуру Кринке аернфицируемой системы.
Модель вернфнцнруемой онстемы описывается на входном языке пакета. который представляет собой, факпнгески, язык программированив высокого уровня. удобный для описания множества параллельных взаимодействующих процессов, каналов нх взаимодействия н работы с простыми типами данных. С помощью алгоритмов, описанных выше, пакет верификации автоматически построит структуру Кринке (систему переходов) каждого из компонегпных модулей заданной системы, построит их композицию и автоматически выполнит процпю верификации — проверку выполнимости заданной темпоральной формулы на структуре Кринке. Одним из таких пакеюв является Зр(п. Пакет верификации Зр(в.
Зргп — это система верификации, которая поддерживает разработку и анализ корректности параллельных и распределемных систем с конечным числам состояний, спецификация свойств которых представлена формулами СП.. Основная цель использования пакета Зргп— зто проверка корректности взаимодействующих параллельных асинхронных процессов (рис, 5.13). Зр!и фокусируется именно на асинхронной модели, которая естественна для программных систем. Система Зр)в предоставляет пользователю: 1.
Язык Рпнпе1а (Ргогосо( Мега Ьвйиайв) — С-подобный язык лдя спецификации моделей. 2. Удобные средства для выражения требований корректности'формулами линейной темпоральной логики (без оператора Х (!Чех! Т1пю)). Аббревиатура Зрш расшифровывается как и!ягр!е Рготе!и !нгегргегег, т.е. простой интерпретатор систем, специфицированных на языке представления Ргоюе1а. Цель юьпа Ргоще!а — дать возможность пользователю посзромгь попель параллельной системы для последукнцей проверки в ее поведении °спектов координации и взанмодейспим параллельных процессов. Поэтому в язьнсе только трн типа обьектов спецификации; .э процессы; О каналы, по которым процессы взаимодействуют; П переменнме простмх тюке. всех ралж зсй ~ Ьр)и Опнс няи ( руст реаль Архн чися< зелье жст 6 ву), г ниц) Кома вибо взвив сылю числе Рис. Ц !з.
Пакет верпфнищии Бр)п Поскольку задача нашего изложения — не изучение тгого специфического замка, мы приведем акесь очень краткое введение в Рнкпе)а. Цель языка Ргоше)а — предоставить программисту максимально удобные средства для описания таких программ, которме могут быть проверены, т. е. могут быть автоматически оттранслнрованы в представление структуры Кринке. Одним из главных ограничений поэтому явлается конечность числа состояний спе-, цнфицируемых процессов. При этом число возможных вычислений проПгамм, специфицированных на юыке Ргогпе)а, обычно бесконечно. В параллельной программе на Рным)а конечное число процессов, переменные имеют конечное число возмшкных значений н в каналах возможно только жнмчное число передаваемых сообщений.