Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Брой распознанный текст.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.18 Mб
Скачать

1.1.5. Действия как переходы состояний

До сих пор множества действий мы не интерпретировали дальше. Важное значение для действий в процессах имеет изменение состояния. Если действия могут изменять состояние системы, то эти изменения состоя­ния мы можем принять в качестве значений действий. Теперь нас инте­ресует, в частности, вопрос о том, можно ли через такие предписывания значений действиям также однозначно предписать значения и процессам.

Для этой цели определим недетерминированные автоматы состояний с транзитивными действиями. Такие автоматы задаются следующими со­ставными частями:

S множество состояний,

А множество транзитивных действий,

R с S х А х S отношения переходов состояний,

So множество возможных начальных состояний.

Пусть заданы состояния cq, Ст| « R и действие а € А. Отношение (сто, а, стО е R выражает, что в состоянии ctq действие а может быть выполнено и это может привести к следующему состоянию ctj е R. Этот тип автома­тов называется недетерминированным, так как для одного состояния могут быть возможными многие транзитивные действия и каждое из этих дей­ствий может вести к различным последующим состояниям.

Мы будем использовать запись

а

Сто > CTi ,

чтобы выразить, что (сто, a, Ст() е R справедливо.

- Каждому автомату состояний можно, исходя из заданного множества Начальных состояний, предписать трассы. Последовательность а;, где Ui<k,keNu {х}, есть конечная или бесконечная трасса действий автомата, если существует последовательность состояний <т,, 0 < i < к, с со e So и

а •

ст;-! 1—> с^ для всех i, 1 < i < к.

С помощью переходов состояний можно охарактеризовать ряд сущест­венных свойств действий.

Действие а называется детерминистическим, если для каждого со­стояния сто S существует не более одного последующего состояния Ст[ е S с

СТо —_—> а,.

Действие а называется тотальным, если для каждого состояния ао е S существует одно последующее состояние <3] с

ст0 —-—► ах.

Тотальным, детерминистическим действиям можно предписать (тотальные) отображения изменений состояний. Пусть S - множество со­стояний. Каждому' действию в А предпишем изменение состояния в силу отображения р: р: А (S S).

Конечным, последовательным процессам можно тотчас предписать ото браження изменения состояний с помощью функциональных следующих друг за другом переключений отображении изменения состояний отдель­ных действий.

Пример (процесс выполнения программы с изменениями состояний). Ход выполнения следующей программы

у := 1; х := 10; while х > 0 do у := х * у; х := х - 1 od

соответствует последовательной структуре действий, для которой ее со­бытия, действия и состояния приведены в табл. 1.5.

Здесь такие действия, как (х > 0)'?, обозначают действия опроса, ко­торые не изменяют пространства состояния данных. Если, однако, мы добавим управляющие состояния (например, счетчик команд) к про­странству состояний, то опрос также будет изменять состояние.

Для приведенной выше программы состояния заданы парой чиа л (n, т), которые представляют значения программных переменных х и v. Для встречающихся действий рассмотрим следующие отображения изме­нений состояний:

p(y:=l)(n,m) = (п.1), р(х := 10) (n, т) = (10, т),

р(у := х * у) (n, m) = (n, п * ш), р(х := х - 1) (n, m) = (п - 1, ш), р(х > 0) (п, т) = (п, т).

Событие

Действие

Состояние

X

У

ао

у := 1

?

1

ь0 ,

х := 10

10

1

а1

(х > 0) ?

10

1

bl

у := х * у

10

10

Cl

х := х - 1

9

10

а10

(х > 0) ?

1

10!

ь10

у := х * у

1

10!

с10

х := х - 1

0

10!

ац

(х > 0) ?

0

10!

Таблица 1.5. События, действия и состояния хода выполнения программы

С каждым присваиванием в императивной программе связывается дейст­вие, которое соответствует отображению изменения состояния. Отобра­жение изменения состояний процесса получается путем композиции отображений изменения состояний отдельных действий в том порядке их следования, который задан с помощью таблицы. D

В связи с программами и поставленными им в соответствие процессами возникает вопрос о том, какие изменения состояний могут быть без ка- ких-либо трудностей произведены параллельно во времени (т. е. наряду Друг с другом). Во многих случаях действия могут выполняться одновре­менно. Однако определенные изменения состояний не могут быть вы­полнены одновременно без того, чтобы не возник конфликт. Мы скажем, что такие действия находятся в конфликте относительно друг друга.

Пример (конфликты при параллельно выполняемых присваиваниях). Рассмотрим действия, которые соответствуют присваиваниям

  1. х := х + 1,

  2. х := 2 * х.

Если зафиксировать порядок, в котором будут выполняться оба действия, То тем самым однозначно определяется отображение состояний. Если же °ба действия должны выполняться параллельно, то соответствующему процессу нельзя однозначно предписать какое-либо отображение изме­нения состояний. В обоих действиях должна изменяться программная переменная х. Действия находятся в конфликте. □

Конфликтующими действиями в примере пешеходного перехода дороги являются действия ''Пешеход пересекает проезжую часть" и "Машина пе­реезжает пешеходный переход". Кажется невозможным параллельно вы­полнять события с конфликтующими действиями и, соответственно, та­кому выполнению нельзя однозначно предписать изменение состояний.

Чтобы правильно подойти к проблеме конфликта действий при мо­делировании распределенных систем, введем на действиях двухместное отношение, которое указывает, когда пара действий катается конфлик­тующей. Отношение

Conflict £ А х А

для каждой пары действий аь а2 е А задает, существует ли конфликт. В случае присваиваний это отношение конфликтности может быть опре­делено следующим образом.

В процедурной программе два коллективных присваивания

(Zj) X], ..., хп := Еь ..., Еп,

(Z2) уь уш := F;, ..., Fm

являются бесконфликтными, если программные переменные, изменяемые в одном из этих присваиваний, не встречаются в другом присваивании Тогда справедливо, что

    1. никакая из переменных xf (для 1 < i < п) не встречается в (Z2),

    2. никакая из переменных yj (для 1 < j < m) не встречается в (Zj).

Это условие называется условием Бернштейна. Если данное условие вы полняется, то порядок выполнения обоих присваиваний не оказывает влияния на достигаемое заключительное состояние.

Множество присваиваний называется бесконфликтным, если все присваивания попарно бесконфликтны.

Обратим внимание, что даже присваивания

(Y0 х := х + 2,

(Y2) х := х + 1

не являются бесконфликтными, хотя оба возможных порядка их выпол­нения

х := х + 2; х := х + 1 х := х + 1; х := х + 2

ведут к одному и тому же состоянию. Однако если эти присваивания разбить на ряд присваиваний (что иногда делается при переводе на ма­шинный язык)

(Yj) hi :=х; hi := hi + 2; х := hi (Y2) h2 := x; h2 := h2 + 1; x :=• h2,

то при установлении такой последовательности выполнения

hi := х; h2 := х; hi :== hi + 2; h2 := h2 + 1; x := hi; x := h2

будет получен иной результат. На этом основании действия Y) и Y2 нель­зя считать бесконфликтными.

Впрочем, мы предполагаем, наоборот, что для бесконфликтных дей­ствий а), а2 соответствующие им изменения состояний являются незави­симыми, и тем самым порядок выполнения действий не играет роли для изменения состояния. Тогда справедливо

p(ai) »р(а2) = р(а2) »p(ai).

Более того, для бесконфликтных действий aj и а2 мы даже примем, что они без каких-либо проблем могут выполняться во времени наряду друг с другом (параллельно).

Для (составных) действий, которые состоят из параллельного выпол­нения ai и а2, мы будем писать также aj (( а2. В предположении бескон- флмктг (ости с к ра ведливо:

P(al) °р(а2) = р(а2) »р(аО .

Тогда определим:

P(ai II а2) =def р(а,) 0 р(а2).

Мы предполагаем, что параллельная композиция бесконфликтных дейст­вий не вводит никаких новых конфликтов:

—'((аь a;,) е Conflict) л ~Ч(а2, аз) е Conflict) =s> —■((aj I а2, а3) е Conflict).

Тем самым оказывается, что параллельная композиция || по отношению к индуцируемому изменению состояния яатяется коммутативной и ассо­циативной. Справедливы следующие законы:

ai II а2 = а21| аь ( ai I а2) || а3 = а, || ( а21| а3 ).

Если нарушается условие бесконфликтности, то относительно действия параллельного выполнения ничего сказать нельзя.

I

35

t

Процесс (Ео, <о, о-) называется бесконфликтным, если все конфлик- товозможные действия встречаются только в непараллельных парах со­бытий, и тем самым для каждой пары событий е, d б Ео справедливо сле­дующее высказывание:

(а(е), a(d)) е Conflict => е <о d v d <о е.

Другими словами, действия с конфликтами не выполняются параллель­но. Обратим внимание, что в обычных вычислительных архитектурах од­новременное чтение и запись, так же как и кратные одновременные за­писи в какую-либо ячейку памяти, также технически приводят к кон­фликту.

Пусть заданы множество состояний S, множество действий А и от­ношение перехода состояний для действий. Это отношение может быть распространено на конечные процессы и, соответственно, на трассы. Дли трасс такое распространение определим следующим образом. Пусть ст0, О; и с*2 - состояния, а - действие, а si и S2 " последовательности действий. Переходы состояний определим индукцией по длинам последовательно­стей следующим образом:

с

сто > Сто,

сто > Ст! =>ст0 — * СЬ

s, s, s, s, сто * О) л Ст) > с2 => Сто * а2 ■

Тем самым для трасс индуцируется отношение переходов на состояния.

Конечным процессам также можно предписать переход состояний. Для конечного процесса р определим отношение перехода следующим

образом. Переход р

ст0 ► СТ!

возможен лишь в том случае, если существует трасса s процесса р такая, что справедливо

сто ——> CTi-

Для бесконфликтных действий а, b всегда справедливо:

..а Ь> • Ь а> Сто > <=> Сто —► СТ)

Если все действия в конечном процессе тотальны и детерминистичны, го для каждого состояния е S существует единственное состояние ctj е 5 с

р

сто ► CTi .

Таким образом, бесконфликтному конечному процессу р = (Ео, <о, а) Просто может быть предписано изменение состояния р(р):

р(р): S S

с

р(р) = p(a(ej)) ° ... ° p(a(en)) , где множество событий Ео пусть определено как Е0 = {еь ..., еп}

и пусть имеют место следующие отношения причинности (1 < i, j < n): i < j <= ef <o ej.

Обратим внимание, что в случае бесконфликтности отображение изме­нения состояний р(р) не зависит от выбора индицирования.

Пример (параллельный процесс для вычисления факториала). Рассмот­рим процесс р с диаграммой действий, приведенной на рис. 1.15. Задан­ный процесс является бесконфликтным и вычисляет п!, если пара дейст­вий

у := у * z, z := х

встречается ровно п раз. □

у := 1 —- у := y'z *

X

х 1 —*- z := х —х := х-1

Рис. 1.15. Диаграмма действий для процесса р

Итак, конечные процессы определяют даже однозначные изменения со­стояний, если только действиям предписаны отображения изменений со­стояний и процессы яатяются бесконфликтными. Тем самым (конечный) процесс каждому начальному состоянию предписывает конечное состоя­ние.

Часто нам хотелось бы, в связи с процессами и их переходами со­стояний, рассматривать также промежуточные состояния. В процессе со Многими параллельными событиями промежуточные состояния при оп­ределенных обстоятельствах в действительности никогда не достигаются. Если одно из событий закончилось, то другие параллельные события еще Продолжаются. Никогда между ними состояние покоя не достигается. И тем не менее мы можем в бесконфликтных процессах определить вирту­альные (мыслимые) промежуточные состояния. Для этого может быть

y:=y*z ...

37

использована концепция конечных префиксов. Каждый конечный пре­фикс р, процесса ро определяет для заданного начального состояния сто промежуточное состояние aj в силу

Pi

с0 > с, .

Если рассматривать отображения состояний как значения процессов, то получаются дальнейшие требования для уточнения процессов.

Для уточнения pi = (Ej, <ь од) процесса ро = (Eq, <q, а0) посредством отображения у: Е] Ео мы требуем, чтобы были выполнены определен­ные предположения относительно интерпретации действий.

  1. Бесконфликтность продолжает сохраняться. Выражаясь математичес­ки, тогда для всех событий e,d е Ei справедливо:

7(e) ~ 7(d) => -^((aj(c), aj(d)) е Conflict) v е <t d v d <j е,

7(e) * v(d) => ((a,(e), ai(d)) e Conflict <=> (a0(y(e)), a0(y(d))) e Conflict).

  1. Порождаются одинаковые отображения состояний. Выражаясь мате­матически, справедливо:

V с е Е0: (p(pi|m) = p(a0(e)), причем М = (de Еь y(d) = е}.

Процесс ро называется огрублением пли абстракцией. Часто поступают "либеральнее" по сравнению с приведенных! выше определением уточне­ния и допускают, что уточнение может дополнительно изменять состоя­ния определенных вспомогательных переменных.

Наряду с изменением состояний с действиями можно также связатг и другие эффекты. Для каждого моноида М с двухместным связыванием с п нейтральным элементом е и каждого отображения р: А -> М ,

для которого справедливо следующее высказывание:

(аа2) g Conflict => p(as) => р(а2) = р(а2) ° р(а,),

можно каждому- бесконфликтному конечному процессу р предписат1 элемент m(p) е М. Если р = (Ео, <о, а) есть пустой процесс, то мы опрс делим

ш(р) = е.

Если р = (Ео, <о, «) не пустой процесс, то определим т(р) = р(а(е)) ° т(р|Ео\(е|),

если е есть любое минимальное событие из Ео. Здесь мы говорим о моно­иде действий.Процессы, коммуникация и координация в распределенных системах

Первым примером для моноида действий были отображения измене­ний состояний. Нейтральным элементом здесь является отображение идентичности. Другой пример мы получим при рассмотрении пар после­довательностей. Пусть

М = D* х D\

где D - любое множество "элементов данных". Для (Ъь b2), (dj, d2) е М определим связывание через поэлементную конкатенацию:

(bb b2) ° (db d2) = (bi о dj, b2 ° d2).

Для d e D рассмотрим действия read(d) и print(d) с интерпретацией p(read(d)) = (<d>, e) и p(print(d)) = (e, <d>).

Порождаемая процессом пара (dj, d2) может значить как последова­тельность di прочитанных процессом данных и, соответственно, как по­следовательность d2 записанных процессом данных.

Пример (процесс ввода/вывода). Процесс на рис. 1.16 соответствует сле­дующей паре последовательностей:

(<1 2 3 ... 9>, <1 2 3 ... 9>) и

read(1) read(2) —*• read(3) —... read(9)

\ \ \ \

print( 1) —print(2) print(3) print(9)

Puc. 1.16. Процесс с вводом u выводом

Из этого примера еше раз становится ясным, что процессы и их зна­чения являются формальными описаниями историй протекания процес­сов.

Процессы соответствуют ориентированным на транзакции (прото­колы) описаниям функционирования систем. Отображения изменений состояний абстрагируются от отдельных действий и ограничиваются ос­тающимся от действий видимым эффектом, предстааленным с помощью возникающих состояний.