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

Глава 8

Примеры процессов с передачей сообщений

8.1Разделение множеств

8.1.1Задача разделения множеств

Пусть задана пара U, V конечных непересекающихся множеств, причём каждому элементу x U V сопоставлено некоторое число w(x), называемое весом этого элемента.

Требуется преобразовать эту пару в такую пару множеств U0, V 0, чтобы

• |U| = |U0|, |V | = |V 0|

(для каждого конечного множества M знакосочетание |M| обозначает количество элементов в M)

• для каждого u U0 и каждого v V 0 выполнялось неравенство

w(u) ≤ w(v)

8.1.2Распределённый алгоритм решения задачи разделения множеств

Задачу разделения множеств можно решить путём выполнения нескольких сеансов обмена элементами между этими множествами. Каждый сеанс состоит из следующих действий:

235

нахождение элемента mx с максимальным весом в левом множестве

нахождение элемента mn с минимальным весом в правом множестве

перенесение

mx из левого множества в правое, и

mn из правого множества в левое.

Для реализации этой идеи предлагается использовать распределённый алгоритм, определяемый как процесс вида

(Small | Large) \ {α, β}

(8.1)

где

процесс Small выполняет операции, связанные с левым множеством, и

процесс Large выполняет операции, связанные с правым множеством.

Потоковый граф, соответствующий этому алгоритму, имеет

вид ' $' $ u α - e

Small e β u Large

& %& %

Ниже мы будем использовать следующие обозначения:

для каждого подмножества W U V знакосочетания max(W ) и min(W ) обозначают элемент множества W с максимальным и минимальным весом соответственно,

для

236

любых подмножеств W1, W2 U V , и

любого u U V

выражения

W1 ≤ u, u ≤ W1, W1 ≤ W2

являются сокращённой записью выражений

x W1

w(x) ≤ w(u)

x W1

w(u) ≤ w(x)

x W1, y W2 w(x) ≤ w(y)

соответственно

Аналогичный смысл имеют выражения

max(W ), min(W ), W ≤ u, u ≤ W, W1 ≤ W2

в которых символы W , Wi и u обозначают переменные, значениями которых являются

помножества множества U V , и

элементы множества U V

соответственно.

8.1.3Процессы Small и Large

Процессы Small и Large могут быть определены в виде блок-схем, которые затем можно преобразовать в процессы с СО и редуцировать. Мы не будем давать описания этих блок-схем и излагать их преобразование в процессы с СО и этапы их редукции, приведём лишь соответствующие редуцированные процессы с СО.

Процесс Small имеет следующий вид:

Init = (S = U)

237

A

 

 

 

C

 

 

 

@

 

6

 

 

 

 

 

I@

 

 

 

 

mx := max(S)

@ (x < mx) ?

 

@

 

 

 

(x ≥ mx) ?

α! mx

 

@

 

 

S := S \ {mx}

 

@

 

 

U0 := S

 

@

 

(8.2)

 

 

- B

?

 

 

@

 

 

 

 

@

 

 

 

 

 

S := S x

 

β? x

{ } mx := max(S)

Процесс Large имеет следующий вид:

 

 

 

 

 

 

 

Init = (L = V ) a

 

 

 

 

 

c

 

 

@

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

I@

 

 

 

 

 

 

 

α? y

@ (y > mn) ?

 

L := L

@

@

 

 

 

(y ≤ mn) ?

y

}

 

 

 

 

 

 

 

{

 

 

 

 

@

 

 

 

V 0 := L

mn := min(L)

 

 

@

 

 

 

(8.3)

 

 

 

 

 

 

 

 

 

 

 

- b

 

 

?

 

 

 

@

 

 

 

 

 

 

 

 

@

 

 

 

 

 

 

 

 

 

L := L mn

 

 

 

 

 

 

β! mn

\ {

 

}

 

 

 

 

 

 

 

 

 

 

 

 

mn := min(L)

8.1.4Анализ алгоритма разделения множеств

Процесс, описываемый выражением (8.1), получается путём

выполнения над процессами (8.2) и (8.3) операций параллельной композиции и ограничения, в соответствии с определением (8.1), и

выполнения редукции получившегося процесса. Редуцированный процесс выглядит следующим образом:

238

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ac

 

 

 

 

 

 

 

x < mx

6

 

 

 

 

 

 

 

( y ≤ mn ) ?

 

 

 

 

 

 

 

V 0 := L

 

 

 

( y

mn )

?

 

 

 

 

 

 

 

x mx

 

 

 

( y > mn )

?

 

 

V 00

 

 

 

 

 

 

 

:= L

 

 

 

 

 

x < mx

 

 

 

U := S

 

 

 

 

 

 

Bb

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

Aa

 

 

 

-

 

 

 

 

Cc

 

mx := max(S)

 

 

 

(8.4)

 

 

 

y := mx

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S := S \ {mx}

 

L := L {y}

 

 

 

 

 

 

 

x ≥ mx

mn := min(L)

 

(

 

 

 

)

 

L := L \ {mn}

 

y > mn ?

x := mn

mn

 

U0 := S

 

S := S

{

}

 

?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ca

 

 

 

 

 

 

 

mx := max(S)

 

 

mn := min(L)

 

 

На данной диаграмме видно, что у процесса (8.4) имеются такие состояния (Ac и Ca),

из которых не выходит ни одного перехода (такие состояния называются терминальными), т.е., попав в которые, процесс не может продолжать свою работу,

но попадание в эти состояния не является нормальным завершением работы процесса.

Попадание процесса в такие состояния называется тупиком, или

дедлоком.

Процесс (8.1) действительно может попасть в одно из таких состояний, например, при

U = {3} и V = {1, 2}

239

(где вес каждого числа совпадает с его значением).

Тем не менее, процесс (8.1) обладает следующими свойства-

ми:

данный процесс всегда завершает свою работу (т.е. попадает в одно из терминальных состояний - Ac, Cc или Ca)

после завершения работы процесса выполняются соотношения

S = U ,

L = V

 

 

(8.5)

S

 

L = U

V

|

 

 

| |

| |

| | |

 

S

L

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Для обоснования этих свойств мы будем использовать функцию

def

f(S, L) = | {(s, l) S × L | w(s) > w(l)} |

Кроме того, при анализе последовательности операторов присваивания, выполняемых при переходе от состояния Aa к состоянию Bb, удобно представлять эту последовательность схематически как последовательность следующих действий:

 

 

y:=max(S)

1.

S

-

 

L

 

 

(перенесение элемента y := max(S) из S в L)

 

 

x:=min(L)

2.

L

-

S

 

3.mx := max(S)

4.mn := min(L)

Нетрудно установить, что имеют место следующие утверждения.

1.Если в текущий момент времени i

процесс находится в состоянии Aa, и

значения Si, Li переменных S и L в этот момент удовлетворяют равенству

f(Si, Li) = 0

т.е. имеет место соотношение

Si ≤ Li

240

то Si+1 = Si и Li+1 = Li. Кроме того, после выполнения перехода от состояния Aa к состоянию Bb значения переменных x, y, mx и mn будут удовлетворять соотношениям

y = x = mx ≤ mn

и, таким образом, следующим переходом будет переход от состояния Bb к состоянию Cc, т.е. процесс нормально завершит свою работу.

При этом

значения переменных U0 и V 0 будут равны Si и Li соответственно,

и, следовательно, значения переменных U0 и V 0 будут удовлетворять требуемым соотношениям.

2.Если в текущий момент времени i

процесс находится в состоянии Aa, и

значения Si, Li переменных S и L в этот момент удовлетворяют неравенству

f(Si, Li) > 0

то после выполнения перехода от состояния Aa к состоянию Bb (т.е. в момент i + 1) новые значения Si+1, Li+1 переменных S и L будут удовлетворять неравенству

f(Si+1, Li+1) < f(Si, Li)

(8.6)

Кроме того, значения переменных x, y, mx, mn в момент i+ 1 будут удовлетворять соотношениям

y = max(Si), x = min(Li)

mx = max(Si+1),

mn = min(Li+1)

x < y, x ≤ mx,

mn ≤ y

Отсюда следует, что если в момент i+1 процесс будет переходить из состояния Bb в одно из терминальных состояний (Ac, Cc или Ca), то это возможно

241

(a) либо если x = mx

 

(b) либо если y = mn

 

В случае (a) имеют место соотношения

 

Si+1 ≤ mx = x ≤ Li

 

откуда, используя

 

x < y и Li+1 Li {y}

 

получаем:

(8.7)

Si+1 Li+1

В случае (b) имеют место соотношения

Si ≤ y = mn ≤ Li+1

откуда, используя

x < y и Si+1 Si {x}

получаем соотношение (8.7).

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

S ≤ L

Истинность других соотношений, перечисленных в (8.5), усматривается непосредственно.

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

процесс бесконечно часто попадает в состояние Aa, и

при каждом попадании в состояние Aa значение функции f на текущих значениях переменных S, T положительно.

Невозможность данной ситуации следует из

242