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

1.1.3. Последовательное представление процессов с помощью трасс

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

Обозначим через А* бесконечную последовательность элементов из А. Элементы из А" могут быть отождествлены с тотальными отображе­ниями "N на А. Определим множество Ам как

А® = А* и А£ .

Об элементах А03 мы говорим как о потоках (англ. stream) над множест­вом А. Множество А* последовательностей над А служит для представле­ния конечных потоков над А.

Конкатенация может быть обобщена от конечных последовательно­стей на бесконечные, при этом для бесконечных последовательностей определим:

х °у = х дтя х б Ах, у е А(0.

Если х g А*, у е А*, то х ° у обозначает бесконечную последователь­ность, которая начинается элементами в х и за которыми следуют эле­менты в у.

Каждому последовательному процессу можно однозначно сопоста­вить поток действий - мы говорим в этом случае о трассе (spur, англ. trace) процесса. Это сопоставление происходит с помощью следующего отображения:

spur: {р: р последовательный процесс } -> А{0 . Определим: spur(p) = с,

если р = (Ео, <о, а) есть пустой процесс и тем самым Ео = 0. Если Ео * 0, то определим

spur(p) = <а> = spur(p|E0Me)) ,

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

Трассы являются более простыми моделями дтя последовательного "ода работы системы, чем структуры действий. Так как в случае не по­следовательных систем во многих применениях вопрос о том, какие дей­ствия могут выполняться параллельно, имеет подчиненное значение, ка­жется естественным для таких систем упрощенно вместо одновременно протекающих в них процессов рассматривать их линеаризацию в качестве хода работы системы. Это упрощенное представление хода ра­боты системы можно объяснить при помощи концепции последователь­ного наблюдателя. Представим себе, что наблюдатель системы каждое встречающееся действие протоколирует в линейном (последовательном) списке действий. Если действия во времени встречаются наряд}' друг с другом, наблюдатель принудительно приводит их случайным образом в линейный порядок следования. Если эти последовательные наблюдения применяют для представления хода работы системы, то говорят об "интерливинг"-модели.

Через множество линеаризаций процесса можно также-не последова­тельным процессам предписать множество потоков действий в качестве трасс. Для какого-либо (возможно, непоследовательного) процесса р = = (Е0, <о, а) определим множество его трасс с помощью следующего ра­венства:

трассы (р) = {трасса (q): процесс q есть совершенная линеаризация процесса р}.

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

Пример (трассы процесса). Процесс р, который описывается с помощью диаграммы действий, приведенной на рис. 1.6, обладает следующим мно­жеством трасс:

трассы (р) = {<abcdef>, <abdcef>, <abcedf>, <acebdf>, <acbdef>, <acbedf> }.

A

b с

d e

\ /

f

Puc. 1.6. Процесс p

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

Пример (процессы, структура которых представляется с помощью трасс не однозначно). Процесс pi = (Ej, <j, cq) с

Ei = {e, d},

<, = {(e, c), (d, d)},

ai(e) = a, a,(d) = а

имеет, так же как и процесс р2 = (Е2, <2, а2) с Е2 = {е, dh

<2={(е, е), (d, d), (е, d)}, <х2(е) = a, a2(d) = а,

множество {<а а>} в качестве трассы. Это показывает, что при рассмот­рении трассовой модели параллельность действий описывается не полно.

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

При предписывании конечному процессу множества потоков дейст­вий в качестве трасс наряду с выбранным выше сопоставлением напра­шивается следующая альтернатива индуктивного определения. Опреде­лим множество S(p) трасс пустого процесса (процесса с пустым множест­вом событий) через {е>, а непустого процесса р = (Eq, <q, a) - через следующее уравнение:

S(p) = {<а> ° t: 3 е е Е0: а0(е) = а л V d е Е0: е <e dAt е S(p|EoMel) }.

S есть отображение, которое каждому процессу предписывает множество трасс. Это естественное уравнение для отображения S и тем самым для множества трасс процесса имеет для конечных процессов однозначное решение.

Индукцией по числу событий в р нетрудно доказать, что для каждого Конечного процесса р с Spuren (р) существует в точности одно решение Приведенного выше уравнения для S(p). Это, однако, не имеет места в случае бесконечных процессов - для них существуют различные реше­ния указанного выше рекурсивного уравнения для отображения S. Реше­ние с помощью Spuren(p) всегда является заданным отображением, кото- Рое процессам сопоставляет множества трасс их линеаризации.

Для бесконечных процессов - и с точки зрения теории неподвижной

Для бесконечных процессов - и с точки зрения теории неподвижной точки - кажется естественным семейству решений приведенного выше уравнения поставить в соответствие в качестве множества трасс наи­большее (в смысле включения множеств) из этих множеств. Это множе­ство, как это можно показать индукцией по префиксу трасс, определяет­ся однозначно. Будем обозначать это множество через Max_Spuren(p).

Множество Max_Spuren(p), однако, в общем случае не совпадает с множеством Spuien(p). Это отклонение снова должно иметь дело с по­нятием "справедливость" (англ. fairness).

Бесконечные потоки в множестве Max_Spuren(p)\Spuren(p) будем на­зывать несправедливыми трассами бесконечного процесса р, а потоки в Spuren(p) - справедливыми трассами. Обратим внимание, что каждый конечный префикс последовательности в Spuren(p) является также по­следовательностью в Max_Spuren(p), и наоборот.

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

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

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

а —а —а —а —а —...

Рис. 1.7. Граф действий процесса р

Рассмотрим для представления графа действий нашего примера про­цесс Pi = (Е[, <|, а]) со следующих! определением (пусть < и соответст­венно < есть обычные порядки на целых числах Z):

Е, =Z\{0},

e<|d»0<e<dv0>e>d,

е < 0 => а 1 (с) = а, с > 0 => ai(e) = b .

Каждая трасса процесса р| является бесконечной последовательностью над множеством {а, Ь>, которая содержит как бесконечно много экземп­ляров действия а, так и бесконечно много экземпляров действия Ь. В трассах бесконечных префиксов, и тем самым в несправедливых трас­сах, может встретиться также бесконечно много экземпляров действия а, однако лишь конечное число экземпляров действия b или же бесконечно много экземпляров действия Ь, но лишь конечное число экземпляров действия а. □

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