Главная страница

Теория процессов


Скачать 1.62 Mb.
НазваниеТеория процессов
Дата26.12.2022
Размер1.62 Mb.
Формат файлаpdf
Имя файлаprocesses.pdf
ТипИзложение
#864794
страница5 из 15
1   2   3   4   5   6   7   8   9   ...   15
get_and_work?
put?
Отметим, что объект “молоток” и процесс “молоток” - это разные понятия.
Функционирование мастерской определяется при помощи сле- дующего процесса J ob_Shop:
J ob_Shop = (J obber | J obber | M allet) \ L
где L = {get_and_work, put}.
144

Потоковый граф процесса J ob_Shop имеет следующий вид.
'
&
$
%
'
&
$
%
'
&
$
%
J obber
M allet
J obber u
u u
u e
e e
e u
u
@
@
@
@
@
@
I
@
@
R

get_and_work get_and_work put put in in out out
Введем теперь понятие “абстрактного рабочего”, про которого известно, что он циклически
• принимает материал, и
• выдает готовые изделия но ничего неизвестно о подробностях процесса его работы.
Поведение “абстрактного рабочего” мы зададим при помощи следующего процесса Abs_J obber:
Abs_J obber
Doing












-

in?
out!
Поведение “абстрактной мастерской” мы зададим при помо- щи следующего процесса Abs_J ob_Shop:
Abs_J ob_Shop = Abs_J obber | Abs_J obber
“Абстрактную мастерскую” мы будем использовать как спе- цификацию мастерской. Процесс “абстрактная мастерская” пре- дставляет поведение мастерской без учета деталей ее реализа- ции.
145

Докажем соответствие мастерской ее спецификации, то есть наличие наблюдаемой конгруэнции
J ob_Shop
+
≈ Abs_Job_Shop
(6.2)
Процесс Abs_J ob_Shop является параллельной композицией двух процессов Abs_J obber. В целях предотвращения коллизии в обозначениях, мы выберем различные идентификаторы для обо- значения состояний этих процессов. Пусть, например, эти про- цессы имеют вид
A
i
D
i












-

in?
out!
где i = 1, 2.
Параллельная композиция этих процессов имеет вид
A
1
, A
2
D
1
, A
2
D
1
, D
2
A
1
, D
2




















-

in?
out!
-

in?
out!
?
6
in?
out!
?
6
in?
out!
Применяя к данному процессу процедуру минимизации отно- сительно наблюдаемой эквивалентности, мы получим процесс
















-

-

in?
out!
in?
out!
(6.3)
Процесс J ob_Shop имеет 4 · 4 · 2 = 32 состояния, и мы не приводим его здесь ввиду его большой громоздкости. Если ми- нимизировать этот процесс относительно наблюдаемой эквива- лентности, то получится процесс, изоморфный процессу (6.3).
146

Это означает, что имеет место соотношение
J ob_Shop ≈ Abs_J ob_Shop
(6.4)
Поскольку из начальных состояний процессов
J ob_Shop и Abs_J ob_Shop не выходит рёбер с меткой τ , то отсюда и из (6.4) следует искомое соотношение (6.2).
6.3
Неконфликтное использование ресу- рса
Предположим, что имеется некоторая фирма, сотрудники кото- рой объединены в несколько групп.
В здании, где работает фирма, выделена одна комната, кото- рую каждая из групп может использовать для проведения своих рабочих совещаний.
Предположим, что необходимо обеспечить неконфликтное ис- пользование этой комнаты группами. Это означает, что когда од- на из групп проводит в комнате совещание, другой группе долж- но быть запрещено проводить своё совещание в этой комнате.
Для решения этой задачи создаётся специальный процесс –
диспетчер.
Если какая-либо из групп хочет провести совещание в этой комнате, она должна послать диспетчеру заявку на предостав- ление ей права пользования комнатой для проведения этого со- вещания.
Когда диспетчер разрешает какой-либо группе использовать комнату, он посылает ей уведомление об этом.
Окончив совещание, группа должна сообщить об этом дис- петчеру, чтобы диспетчер знал, что комната стала свободной и доступна для других групп.
Рассмотрим описание работы указанной системы при помощи теории процессов.
Пусть число групп равно n (n ≥ 2).
147

Диспетчер мы опишем как процесс с именем D, графовое представление которого содержит для каждого i = 1, . . . , n под- граф
D
d i1
d i2
















?
-
@
@
@
@
@
@
@
@
@
I
req i
?
acq i
!
rel i
?
т.е.
D ∼
n
X
i=1
req i
?. acq i
!. rel i
?. D
Действия, входящие в Act(D), имеют следующий смысл:
• req i
? – получение заявки от i-й группы
• acq i
! – уведомление i-й группы о том, что она имеет право пользоваться комнатой
• rel i
? – получение сообщения от i-й группы об освобождении ею комнаты.
Опишем теперь поведение каждой группы.
(Мы будем описывать только взаимодействие групп с диспет- чером и с комнатой, и не будем касаться прочих их функций).
Мы будем представлять
• начало проведения совещания в комнате действием start!,
и
• окончание совещания - действием f inish!.
148

Поведение i-й группы мы опишем в виде процесса G
i
, кото- рый имеет следующее графовое представление:
g i0
g i1
g i2
g i3
g i4
























?
-
6 6

req i
!
acq i
?
start i
!
f inish i
!
rel i
!
т.е. G
i
∼ req i
!. acq i
?. start!. f inish!. rel i
!. G
i
Совместное поведение диспетчера и групп можно описать сле- дующим процессом:
Sys = (D | G
1
| . . . | G
n
) \ L
где L = {req i
, acq i
, rel i
| i = 1, . . . , n}.
Потоковый граф системы, состоящей из диспетчера и групп для n = 2 показан на рисунке '
&
$
%
'
&
$
%
'
&
$
%
G
1
D
G
2
u e
u u
e u
e u
e e
u e
u u
u u
-
-



- rel
1
acq
1
req
1
rel
2
acq
2
req
2
start start f inish f inish
Покажем теперь, что алгоритмы работы диспетчера и групп действительно обеспечивают неконфликтный режим использо- вания комнаты, который заключается в том, что после начала проведения совещания в комнате какой-либо группой (то есть после выполнения этой группой действия start!) никакая другая
149
группа не может начать проводить в этой комнате своё сове- щание (т.е. тоже выполнить действие start!), до тех пор первая группа не закончит своё совещание (т.е. пока не будет выполнено действие f inish!).
Определим процесс Spec следующим образом:












-

start!
f inish!
т.е. Spec ∼ start!. f inish!. Spec.
Наличие неконфликтного режима использования комнаты эк- вивалентно истинности соотношения
Sys ≈ Spec
(6.5)
Это соотношение можно рассматривать как требование к систе- ме, состоящей из диспетчера и групп.
Докажем соотношение (6.5).
Преобразуем процесс Sys, применив несколько раз теорему о разложении:
Sys ∼

n
P
i=1
τ.



acq i
!. rel i
?. D | G
1
| . . .
. . . | acq i
?. start!. f inish!. rel i
!. G
i
| . . .
. . . | G
n



\ L ∼

n
P
i=1
τ.τ.



rel i
?. D | G
1
| . . .
. . . | start!. f inish!. rel i
!. G
i
| . . .
. . . | G
n



\ L ∼

n
P
i=1
τ.τ.start!.



rel i
?. D | G
1
| . . .
. . . | f inish!. rel i
!. G
i
| . . .
. . . | G
n



\ L ∼

n
P
i=1
τ.τ.start!. f inish!.



rel i
?. D | G
1
| . . .
. . . | rel i
!. G
i
| . . .
. . . | G
n



\ L ∼

n
P
i=1
τ.τ.start!. f inish!. τ.



D | G
1
| . . .
. . . | G
i
| . . .
. . . | G
n



\ L
|
{z
}
Sys
=
=
n
P
i=1
τ.τ.start!. f inish!. τ.Sys
150

Воспользовавшись тождествами
P + P ∼ P
и
α.τ.P
+
≈ α.P
получаем отсюда, что
Sys
+
≈ τ.start!. f inish!. Sys
Рассмотрим теперь уравнение
X = τ.start!. f inish!. X
(6.6)
Согласно теореме 33 из параграфа 5.8, решение этого урав- нения с точностью до
+
≈ единственно.
Как было показано выше, процесс Sys является решением уравнения (6.6) с точностью до
+
≈.
Процесс τ.Spec тоже является решением уравнения (6.6) с точностью до
+
≈, так как
τ.Spec ∼ τ.start!. f inish!. Spec
+

+
≈ τ.start!. f inish!. (τ.Spec)
Следовательно, имеет место соотношение
Sys
+
≈ τ.Spec из которого следует (6.5).
6.4
Планировщик
Предположим, что имеется n процессов
P
1
, . . . , P
n
(6.7)
и для каждого i = 1, . . . , n среди действий, которые может вы- полнить P
i
, есть два служебных действия:
• действие α
i
?, которое представляет собой сигнал
P
i начинает работу
(6.8)
151

• действие β
i
?, которое представляет собой сигнал
P
i заканчивает работу
(6.9)
Мы предполагаем, что все имена
α
1
, . . . , α
n
, β
1
, . . . , β
n
(6.10)
различны, и для каждого i = 1, . . . , n имена из names(Act(P
i
)) \ {α
i
, β
i
}
не совпадают ни с одним именем из (6.10). Обозначим множество имён из (6.10) символом L.
Для каждого i = 1, . . . , n действия из множества
Act(P
i
) \ {α
i
?, β
i
?}
называются собственными действиями процесса P
i
Произвольная трасса каждого процесса P
i может содержать действия α
i
? и β
i
? в любом количестве и в любом порядке.
Мы хотели бы создать новый процесс P , в котором все про- цессы P
1
, . . ., P
n работали бы совместно, причём эта совместная работа должна подчиняться определённому режиму. Процесс P
должен иметь вид
P = (P
1
| . . . | P
n
| Sch) \ L
где процесс Sch называется планировщиком и предназначен для задания требуемого режима работы процессов P
1
, . . ., P
n
Процесс Sch должен выполнять только действия из множества

1
!, . . . , α
n
!, β
1
!, . . . , β
n
!}
(6.11)
В силу определения процесса P , для каждого i = 1, . . . , n
• каждое исполнение процессом P
i
∈ (6.7) действия α
i
? или
β
i
? в составе процесса P может произойти только одновре- менно с исполнением комплементарного действия процес- сом Sch, и
152

• исполнение этих действий будет невидимо за пределами процесса P .
Говоря неформально, каждый процесс P
i
, работающий в со- ставе процесса P , может начать или закончить какой-либо сеанс своей работы тогда и только тогда, когда планировщик Sch раз- решит ему это сделать.
Режим, которому должна подчиняться работа процессов P
1
,
. . ., P
n
, заключается в следующих двух условиях.
1. Для каждого i = 1, . . . , n произвольная трасса процесса P
i
,
работающего в составе процесса P , должна иметь вид
α
i
? . . . β
i
? . . . α
i
? . . . β
i
? . . .
где точки изображают собственные действия процесса P
i
,
т.е. функционирование процесса P
i должно представлять собой последовательность сеансов вида
α
i
? . . . β
i
? . . .
где каждый сеанс
• начинается с сигнала α
i
? о начале сеанса
• далее выполняются некоторые собственные действия процесса P
i
• затем производится сигнал β
i
? о завершении сеанса,
• после чего процесс P
i может производить некоторые собственные действия (например, связанные с подго- товкой к следующему сеансу).
2. Процессы P
i должны начинать новые сеансы только по оче- реди в циклическом порядке, т.е.
• сначала может начать свой первый сеанс только про- цесс P
1
• потом может начать свой первый сеанс процесс P
2
• . . .
153

• затем может начать свой первый сеанс процесс P
n
• после этого может начать свой второй сеанс процесс
P
1
• затем может начать свой второй сеанс процесс P
2
• и т.д.
Отметим, что мы не требуем, чтобы каждый процесс P
i получал разрешение начать свой k-й сеанс только после того, как преды- дущий процесс P
i−1
завершит свой k-й сеанс. Однако мы требуем,
чтобы каждый процесс P
i получал разрешение начать новый се- анс, только если он выполнил действие β
i
?, сигнализирующее о завершении своего предыдущего сеанса.
Исполнение собственных действий процессами P
i может про- изводиться в произвольном порядке, в том числе допускается и взаимодействие между этими процессами во время их работы в составе процесса P .
Описанный режим можно равносильным образом выразить в виде следующих двух условий на произвольную трассу tr ∈ T r(Sch)
В формулировке этих условий мы будем использовать следую- щее обозначение: если tr ∈ T r(Sch)
и
M ⊆ Act то знакосочетание tr |
M
обозначает последовательность действий,
получаемую из tr удалением всех действий, не принадлежащих
M .
Условия, выражающие описанный выше режим, имеют сле- дующий вид:
∀ tr ∈ T r(Sch), ∀ i = 1, . . . , n tr |

i

i
}
= (α
i
! β
i
! α
i
! β
i
! α
i
! β
i
! . . .)
(6.12)
и
∀ tr ∈ T r(Sch)
tr |

1
,...,α
n
}
= (α
1
! . . . α
n
! α
1
! . . . α
n
! . . .)
(6.13)
154

Данные условия можно выразить равносильным образом в виде условия наличия наблюдаемой эквивалентности между неко- торыми процессами. Чтобы определить эти процессы, мы введём вспомогательные обозначения.
1. Пусть a
1
. . . a n
– некоторая последовательность действий из
Act. Тогда знакосочетание
(a
1
. . . a n
)

обозначает процесс, графовое представление которого име- ет следующий вид:
















-
-
-


?
a n
a
1
a
2
a n−1 2. Пусть заданы
• некоторый процесс P , и
• некоторое множество действий
{a
1
, . . . , a k
} ⊆ Act \ {τ }
(6.14)
Знакосочетание hide (P, a
1
, . . . , a k
)
(6.15)
обозначает процесс
( P | ( a
1
)

| . . . | ( a k
)

) \ names({a
1
, . . . , a k
})
Процесс (6.15) можно рассматривать как процесс, получаемый из P заменой меток переходов: все метки переходов в P , принад- лежащие множеству (6.14), заменяются на τ .
Используя введённые обозначения, условие (6.12) можно вы- разить следующим образом: для каждого i = 1, . . . n hide
Sch, α
1
!, . . . , α
i−1
!, α
i+1
!, . . . , α
n
!
β
1
!, . . . , β
i−1
!, β
i+1
!, . . . , β
n
!
!

≈ (α
i
!. β
i
!)

(6.16)
155

Условие (6.13) можно выразить следующим образом:
hide (Sch, β
1
!, . . . , β
n
!) ≈ (α
1
!. . . . α
n
!)

(6.17)
Нетрудно заметить, что существует несколько планировщи- ков, удовлетворяющих данным условиям. Например, данным усло- виям удовлетворяют следующие планировщики:
• Sch = (α
1
! β
1
! . . . α
n
! β
n
!)

• Sch = (α
1
! . . . α
n
! β
1
! . . . β
n
!)

Однако такие планировщики налагают слишком жёсткие огра- ничения на работу процессов P
1
, . . . , P
n
Нам хотелось бы, чтобы планировщик допускал максималь- ную свободу в поведении процессов P
1
, . . . , P
n в составе процесса
P . Это одначает, что если в какой-либо момент времени
• какой-либо процесс P
i имеет намерение выполнить действие a ∈ {α
i
?, β
i
?}, и
• это намерение процесса P
i не противоречит описанному вы- ше режиму то планировщик не должен отказывать процессу P
i в возмож- ности выполнить это действие в текущий момент времени, т.е.
среди действий планировщика, которые он может выполнить в текущий момент времени, должно присутствовать действие a (не факт, что именно это действие будет выполнено в текущий мо- мент времени, но среди возможных действий оно должно при- сутствовать).
Сформулированное выше неформальное описание максима- льной свободы в поведении планировщика можно формально уточнить следующим образом:
• каждому состоянию s планировщика можно сопоставить метку label(s), имеющую вид пары (i, X) где
– i ∈ {1, . . . , n}, i = номер того процесса, который имеет право начать очередной сеанс в текущий момент вре- мени
156

– X ⊆ {1, . . . , n} \ {i}, X = список активных процес- сов на текущий момент времени (т.е. таких процессов,
которые начали очередной сеанс, но пока его не закон- чили)
• начальное состояние планировщика имеет метку (1, ∅)
• множество переходов состоит из
– переходов вида s
-
α
i
!
s
0
где
∗ label(s) = (i, X)
∗ label(s
0
) = (next(i), X ∪ {i}), где next(i)
def
=
(
i + 1, если i < n, и
1,
если i = n
– и переходов вида s
-
β
j
!
s
0
где
∗ label(s) = (i, X),
∗ label(s
0
) = (i, X \ {j}), причём j ∈ X
Сформулированное описание свойств требуемого планировщика можно рассматривать как его определение:
• в качестве множества состояний планировщика мы можем взять просто множество пар вида
{(i, X) ∈ {1, . . . , n} × P({1, . . . , n}) | i 6∈ X}
(т.е. каждое состояние совпадает со своей меткой)
• и определить множество переходов так, как описано выше.
Обозначим такой планировщик знакосочетанием Sch
0
Описание планировщика Sch
0
содержит существенный недо- статок: размер такого описания экспоненциально зависит от чис- ла процессов (6.7), которыми нужно управлять (число состояний
157

Sch
0
равно n·2
n−1
), что не позволяет быстро модифицировать та- кой планировщик в том случае, когда множество процессов (6.7)
изменяется (например, к нему добавляются новые процессы, или удаляются старые).
Мы можем использовать Sch
0
только как эталон, с которым мы каким-либо способом будем сравнивать другие планировщи- ки.
Для решения поставленной задачи мы определим другой пла- нировщик Sch. Мы будем определять его
• не путём явного описания состояний и переходов,
• а путём задания некоторого выражения, которое определя- ет его в терминах композиции процессов достаточно про- стого вида.
Данное описание будет лишено сформулированного выше недо- статка.
В описании планировщика Sch мы будем использовать новые вспомогательные имена γ
1
, . . . , γ
n
. Обозначим множество этих имён символом Γ.
Процесс Sch определяется следующим образом:
Sch def
= (Start | C
1
| . . . | C
n
) \ Γ
(6.18)
где
• Start def
= γ
1
!. 0
• для каждого i = 1, . . . , n процесс C
i имеет вид




















?
-
6

γ
i
?
γ
next(i)
!
β
i
!
α
i
!
158

Потоковый граф процесса Sch в случае n = 4 имеет следую- щий вид:
'
&
$
%
'
&
$
%
'
&
$
%
'
&
$
%
'
&
$
%
u
?
-
6

u e
u u
u e
u u
u e
u u
u e
u u
Start
C
1
C
2
C
3
C
4
α
1
β
4
β
2
α
3
α
2
β
1
β
3
α
4
γ
2
γ
4
γ
3
γ
1
γ
1
Приведём неформальное пояснение функционирования процесса
Sch.
Назовём процессы C
1
, . . . , C
n
, участвующие в определении пла- нировщика Sch, циклерами. Циклер C
i называется
• выключенным, если он находится в своём начальном со- стоянии, и
• включённым, если он находится не в начальном состоя- нии.
Процесс Start включает первый циклер C
1
и после этого “уми- рает”.
Каждый циклер C
i отвечает за работу процесса P
i
. Циклер
C
i
159

• включает следующий циклер C
next(i)
после того, как он дал разрешение процессу P
i начать очередной сеанс работы, и
• выключается после того, как он дал разрешение процессу
P
i закончить очередной сеанс работы.
Докажем, что процесс (6.18) удовлетворяет условию (6.17)
(проверку условия (6.16) мы опустим).
Согласно определению процесса (6.15), условие (6.17) имеет вид
(Sch | (β
1
?)

| . . . | (β
n
?)

) \ B ≈ (α
1
!. . . . α
n
!)

(6.19)
где B = {β
1
, . . . , β
n
}.
Обозначим Sch
0 def
= левая часть (6.19).
Докажем, что
Sch
0 +
≈ τ.α
1
!. . . . α
n
!. Sch
0
(6.20)
Отсюда, по свойству единственности (с точностью до
+
≈) решения уравнения
X = τ.α
1
!. . . . α
n
!. X
будет следовать соотношение
Sch
0 +
≈ (τ α
1
! . . . α
n
! )

из которого, в свою очередь, следует (6.19).
Мы будем преобразовывать левую часть соотношения (6.20)
так, чтобы получилась правая часть этого соотношения. Для этого мы будем использовать свойства 8, 11 и 12 операций на процессах, сформулированные в параграфе 3.7. Напомним эти свойства:
• P \ L = P , если L ∩ names(Act(P )) = ∅
• (P
1
| P
2
) \ L = (P
1
\ L) | (P
2
\ L), если
L ∩ names(Act(P
1
) ∩ Act(P
2
)) = ∅
• (P \ L
1
) \ L
2
= P \ (L
1
∪ L
2
) = (P \ L
2
) \ L
1 160

Используя данные свойства, можно преобразовать левую часть соотношения (6.20) следующим образом.
Sch
0
=
= (Sch | (β
1
?)

| . . . | (β
n
?)

) \ B =
=
((Start | C
1
| . . . | C
n
) \ Γ) |
| (β
1
?)

| . . . | (β
n
?)

!
\ B =
= (Start | C
0 1
| . . . | C
0
n
) \ Γ
(6.21)
где
C
0
i
= (C
i
| (β
i
?)

) \ {β
i
}
Заметим, что для каждого i = 1, . . . , n имеет место соотноше- ние
C
0
i
+
≈ γ
i
?. α
i
!. γ
next(i)
!. C
0
i
(6.22)
Действительно, по теореме о разложении
C
0
i
= ((γ
i
?. α
i
!. γ
next(i)
!. β
i
!. C
i
) | (β
i
?)

) \ {β
i
} ∼
∼ γ
i
?. α
i
!. γ
next(i)
!. τ.C
0
i
+
≈ правая часть (6.22)
Используя данное замечание и теорему о разложении, цепочку равенств (6.21) можно продолжить следующим образом:
(Start | C
0 1
| C
0 2
| . . . | C
0
n
) \ Γ
+

+
≈(γ
1
!. 0
|
{z
}
=Start
| γ
1
?. α
1
!. γ
2
!. C
0 1
|
{z
}
+
≈ C
0 1
| C
0 2
| . . . | C
0
n
) \ Γ ∼
∼ τ. (0 | α
1
!. γ
2
!. C
0 1
| C
0 2
| . . . | C
0
n
) \ Γ =
= τ. (α
1
!. γ
2
!. C
0 1
| C
0 2
| . . . | C
0
n
) \ Γ ∼
∼ τ. α
1
!. (γ
2
!. C
0 1
| C
0 2
| . . . | C
0
n
) \ Γ
+

+
≈ τ. α
1
!. (γ
2
!. C
0 1
| γ
2
?. α
2
!. γ
3
!. C
0 2
|
{z
}
+
≈ C
0 2
| . . . | C
0
n
) \ Γ ∼
∼ τ. α
1
!. τ. (C
0 1
| α
2
!. γ
3
!. C
0 2
| . . . | C
0
n
) \ Γ ∼ . . . ∼
∼ τ. α
1
!. τ. α
2
!. . . . τ. α
n
!. (C
0 1
| . . . | γ
1
!. C
0
n
) \ Γ
+

+
≈ τ. α
1
!. . . . α
n
!. (C
0 1
| . . . | γ
1
!. C
0
n
) \ Γ
+

+
≈ τ. α
1
!. . . . α
n
!. ( γ
1
?. α
1
!. γ
2
!. C
0 1
|
{z
}
+
≈ C
0 1
| . . . | γ
1
!. C
0
n
) \ Γ ∼
∼ τ. α
1
!. . . . α
n
!. τ. (α
1
!. γ
2
!. C
0 1
| . . . | C
0
n
) \ Γ
|
{z
}
(6.23)
161

Выражение, подчёркнутое фигурной скобкой в последней стро- ке данной цепочки, совпадает с выражением в четвёртой строке этой цепочки, которое, в свою очередь, находится в отношении
+
≈ с Sch
0
Мы получили, что последнее выражение в цепочке (6.23)
• находится в отношении
+
≈ с правой частью соотношения
(6.20), и
• с другой стороны, данное выражение находится в отноше- нии
+
≈ с левой частью соотношения (6.20)
Таким образом, соотношение (6.20) доказано.
Читателю предоставляется в качестве упражнения доказать
• истинность условия (6.16), и
• соотношение Sch ≈ Sch
0
Читателю предлагается самостоятельно определить и дока- зать корректность планировщика, управляющего совокупностью
P
1
, . . ., P
n процессов с приоритетами, в которой каждому про- цессу P
i сопоставлен некоторый приоритет, представляющий собой число p i
∈ [0, 1], причём
P
n i=1
p i
= 1.
Планировщик должен реализовать такой режим работы про- цессов P
1
, . . ., P
n
, при котором
• для каждого i = 1, . . . , n доля количества сеансов, выпол- ненных процессом P
i
, относительно общего количества се- ансов, выполненных всеми процессами P
1
, . . . , P
n
, асимпто- тически стремилась бы к p i
, при неограниченном увеличе- нии времени работы процессов P
1
, . . ., P
n
, причём
• данный планировщик должен обеспечивать максимальную свободу функционирования процессов P
1
, . . . , P
n
162

6.5
Семафор
В этом примере, как и в примере из предыдущего параграфа,
предполагается, что заданы n процессов
P
1
, . . . , P
n
(6.24)
причём для каждого i = 1, . . . , n процесс P
i имеет вид
P
i
= (α
i
? a i1
. . . a ik i
β
i
?)

где
• α
i
? и β
i
? – служебные действия, представляющие собой сиг- налы о начале и о конце очередного сеанса работы процесса
P
i
, и
• a i1
, . . . , a ik i
– собственные действия процесса P
i
Мы хотели бы создать такой процесс P , в котором все про- цессы P
1
, . . ., P
n работали бы совместно, причём эта совместная работа должна подчиняться следующему режиму:
• если в некоторый момент времени какой-либо из процессов
P
i начал очередной сеанс своей работы исполнением дей- ствия α
i
?,
• то этот сеанс должен быть непрерываемым, т.е. все по- следующие действия процесса P должны быть действиями процесса P
i
, до тех пор, пока P
i не завершит этот сеанс.
Данное требование можно выразить в терминах трасс: каждая трасса процесса P должна иметь вид
α
i
? a i1
. . . a ik i
β
i
? α
j
? a j1
. . . a jk j
β
i
? . . .
т.е. каждая трасса tr процесса P должна представлять собой конкатенацию трасс tr
1
· tr
2
· tr
3
каждая из которых представляет собой сеанс работы какого-либо процесса из (6.24).
163

Искомый процесс P мы определим следующим образом:
P := ( P
1
[f
1
] | . . . | P
n
[f n
] | Sem ) \ {π, ϕ}
где
• Sem – процесс, предназначенный для задания требуемого режима работы процессов P
1
, . . ., P
n
, данный процесс на- зывается семафором и имеет вид
Sem = ( π! ϕ! )

• f i
: α
i
7→ π, β
i
7→ ϕ
Спецификация процесса P представляется следующим со- отношением:
P
+
≈ τ.a
11
. . . . a
1k
1
. P + . . . +
+ τ.a n1
. . . . a nk n
. P
(6.25)
Доказательство того, что процесс P удовлетворяет этой специ- фикации, производится при помощи теоремы о разложении:
P = ( P
1
[f
1
] | . . . | P
n
[f n
] | Sem ) \ {π, ϕ} ∼




π?.a
11
. . . . .a
1k
1
.ϕ?.P
1
[f
1
] | . . . |
| π?.a n1
. . . . .a nk n
ϕ?.P
n
[f n
] |
| π!. ϕ!. Sem



\ {π, ϕ} ∼
∼ τ.



a
11
. . . . .a
1k
1
.ϕ?.P
1
[f
1
] | . . . |
| π?.a n1
. . . . .a nk n
ϕ?.P
n
[f n
] |
| ϕ!. Sem



\ {π, ϕ}+
+ . . . +
+τ.



π?.a
11
. . . . .a
1k
1
.ϕ?.P
1
[f
1
] | . . . |
| a n1
. . . . .a nk n
ϕ?.P
n
[f n
] |
| ϕ!. Sem



\ {π, ϕ} ∼
∼ . . . ∼
∼ τ.a
11
. . . . a
1k
1
.τ. P + . . . + τ.a n1
. . . . a nk n
.τ. P
+

+
≈ τ.a
11
. . . . a
1k
1
. P + . . . + τ.a n1
. . . . a nk n
. P
В заключение обратим внимание на следующий момент. На- личие префикса “τ.” в каждом слагаемом в правой части соот- ношения (6.25) означает, что выбор альтернативы в начальный момент функционирования процесса P определяется
164

• не в окружающей среде процесса P ,
• а внутри процесса P .
Если бы этого префикса не было, то это означало бы, что выбор альтернативы в начальный момент функционирования процесса
P определяется окружающей средой процесса P .
165

Глава 7
Процессы с передачей сообщений
7.1
Действия с передачей сообщений
Введённое и изученное в предыдущих главах понятие процесса допускает различные обобщения.
Одно из таких обобщений заключается в добавлении к дей- ствиям из Act некоторых параметров, т.е. рассматриваются та- кие процессы, у которых выполняемые действия имеют вид
(a, p)
где a ∈ Act, и p – параметр, который может иметь, например следующий смысл:
• сложность (или стоимость) выполнения действия a
• приоритет действия a по отношению к другим действиям
• момент времени, в который произошло действие a
• длительность действия a
• вероятность совершения действия a
• или что-либо другое.
166

В настоящей главе мы рассматриваем один из вариантов та- кого обобщения, который связан с добавлением к действиям из
Act параметров, представляющих собой сообщения, передавае- мые при выполнении этих действий.
Напомним, что, согласно нашей неформальной интерпрета- ции понятия действия,
• выполнение процессом действия вида α ! заключается в пе- редаче другому процессу объекта с именем α, и
• выполнение процессом действия вида α ? заключается в по- лучении от другого процесса объекта с именем α.
Обобщим данную интерпретацию следующим образом. Будем считать, что к объектам, которыми обмениваются процессы, мож- но добавлять сообщения, т.е. действия процессов могут иметь вид
α ! v и
α ? v
(7.1)
где α ∈ N ames, и v – сообщение, которое может представлять собой
• число,
• символьную строку,
• банкноту,
• материальный ресурс,
• и т.п.
Выполняя действие вида α ! v или α ? v, процесс передаёт или получает вместе с объектом α сообщение v.
Напомним, что понятие передаваемого объекта, как и поня- тия приёма и передачи, могут иметь виртуальный характер (бо- лее подробно см. параграф 2.3).
Для формального описания процессов, которые могут выпол- нять действия вида (7.1), мы обобщим понятие процесса.
167

7.2
Вспомогательные понятия
7.2.1
Типы, переменные, значения и константы
Мы будем предполагать, что задано множество T ypes типов,
причём каждому типу t ∈ T ypes сопоставлено множество D
t зна- чений типа t.
Типы могут обозначаться идентификаторами. Для наиболее часто используемых типов существуют общепринятые иденти- фикаторы, например,
• тип целых чисел обозначается int
• тип булевых значений (0 и 1) обозначается bool
• тип “символы” обозначается char
• тип “символьные строки” обозначается string
Также мы будем предполагать, что заданы следующие мно- жества.
• Множество V ar, элементы которого называются перемен- ными, причём каждой переменной x ∈ V ar сопоставлен тип t(x) ∈ T ypes.
Каждая переменная x ∈ V ar может принимать значения в множестве D
t(x)
, т.е. в различные моменты времени пе- ременная x может быть связана с различными элементами множества D
t(x)
• Множество Con, элементы которого называются констан- тами. Каждой константе c ∈ Con сопоставлены
– тип t(c) ∈ T ypes, и
– значение [[c]] ∈ D
t(c)
, называемое интерпретацией кон- станты c.
168

7.2.2
Функциональные символы
Мы будем предполагать, что задано множество функциональ- ных символов (ФС), причём каждому ФС f сопоставлены
• функциональный тип t(f ) (называемый ниже просто типом), представляющий собой знакосочетание
(t
1
, . . . , t n
) → t
(7.2)
где t
1
, . . . , t n
, t ∈ T ypes, и
• частичная функция
[[f ]] : D
t
1
× . . . × D
t n
→ D
t называемая интерпретацией ФС f .
Например, ниже мы будем рассматривать следующие ФС:
+,
−,
·,
head,
tail,
[ ]
где
• ФС + и − имеют тип
(int, int) → int функции [[+]] и [[−]] представляют собой соответствующие арифметические операции
• ФС · имеет тип
(string, string) → string функция [[·]] сопоставляет каждой паре строк (u, v) строку,
получаемую приписыванием v к u справа (т.е. конкатена- цию u и v).
• ФС head имеет тип string → char функция [[head]] сопоставляет каждой непустой строке её
первый символ
(значение функции [[head]] на пустой строке не определено)
169

• ФС tail имеет тип string → string функция [[tail]] сопоставляет каждой непустой строке u стро- ку, получаемую из u удалением её первого символа
(значение функции [[tail]] на пустой строке не определено)
• ФС [ ] имеет тип char → string функция [[ [ ] ]] сопоставляет каждому символу строку, со- стоящую из одного этого символа
• ФС length имеет тип string → int функция [[length]] сопоставляет каждой строке её длину
(т.е. количество символов в этой строке).
7.2.3
Выражения
Выражения строятся стандартным образом из переменных, кон- стант и ФС. Каждое выражение e имеет тип t(e) ∈ T ypes, опре- деляемый структурой этого выражения.
Правила построения выражений имеют следующий вид.
• Каждая переменная или константа является выражением того типа, который сопоставлен этой переменной или кон- станте.
• Если
– f – ФС, имеющий тип (7.2), и
– e
1
, . . . , e n
– выражения типов t
1
, . . . , t n
соответственно то знакосочетание f (e
1
, . . . , e n
) является выражением типа t.
170

Если каждой переменной x, входящей в выражение e, сопо- ставлено значение ξ(x), то выражению e можно сопоставить зна- чение, обозначаемое знакосочетанием ξ(e), и определяемое стан- дартным образом:
• если e = x (переменная), то ξ(e)
def
= ξ(x)
(значение ξ(x) предполагается заданным)
• если e = c (константа), то ξ(e)
def
= [[c]]
• если e = f (e
1
, . . . , e n
), то значение ξ(e) выражения e опре- делено, если
– все значения ξ(e
1
), . . . , ξ(e n
) определены, и
– значение функции [[f ]] определено на списке
(ξ(e
1
), . . . , ξ(e n
))
в этом случае
ξ(e)
def
= [[f ]](ξ(e
1
), . . . , ξ(e n
))
Ниже мы будем использовать следующие обозначения.
• Знакосочетание Expr обозначает совокупность всех выра- жений.
• Знакосочетание F m обозначает совокупность тех выраже- ний, которые имеют тип bool.
Выражения из F m называются формулами.
При построении формул могут использоваться обычные бу- левские связки (∧, ∨, → и т.д.), интерпретируемые стан- дартным образом.
Символ > обозначает тождественно истинную формулу, а символ ⊥ – тождественно ложную формулу.
Формулы вида ∧(b
1
, b
2
), ∨(b
1
, b
2
), и т.п. мы будем записы- вать в более привычном виде b
1
∧ b
2
, b
1
∨ b
2
, и т.д.
171

В некоторых случаях формулы вида b
1
∧ . . . ∧ b n
и b
1
∨ . . . ∨ b n
будут записываться в виде





b
1
b n





и



b
1
b n



соответственно.
• Выражения вида +(e
1
, e
2
), −(e
1
, e
2
) и ·(e
1
, e
2
) будут запи- сываться в более привычном виде e
1
+ e
2
, e
1
− e
2
и e
1
· e
2
• Выражения вида head(e), tail(e), [ ](e), и length(e) будут записываться в виде ˆ
e, e
0
, [e] и |e| соответственно.
• Костанта, интерпретацией которой является пустая строка,
будет обозначаться символом ε.
7.3
Понятие процесса с передачей сооб- щений
В этом параграфе мы излагаем понятие процесса с передачей со- общений. Данное понятие получается из исходного понятия про- цесса, изложенного в параграфе 2.4, следующей модификацией.
• К числу компонентов процесса добавляются
– компонента X
P
, называемая множеством перемен- ных этого процесса, и
– компонента I
P
, называемая начальным условием.
• Метки переходов представляют собой не действия, а опе- раторы.
Прежде чем излагать формальное определение понятия про- цесса с передачей сообщений, мы объясним смысл вышеперечис- ленных понятий.
Для краткости, мы будем в этой главе называть процессы с передачей сообщений просто процессами.
172

7.3.1
Множество переменных процесса
Мы будем предполагать, что с каждым процессом P связано мно- жество переменных
X
P
⊆ V ar
В каждый момент времени i работы процесса P (i = 0, 1, 2, . . .)
каждой переменной x ∈ X
P
сопоставлено значение ξ
i
(x) ∈ D
t(x)
Значения переменных могут изменяться во время работы процес- са.
Означиванием переменных из X
P
называется произволь- ный набор ξ значений, сопоставленных этим переменным, т.е.
каждое означивание ξ имеет вид
ξ = {ξ(x) ∈ D
t(x)
| x ∈ X
P
}
Таким образом, в каждый момент времени i работы процесса P
определено некоторое означивание ξ
i переменных из X
P
Для каждого процесса P знакосочетание Eval(X
P
) обознача- ет совокупность всевозможных означиваний переменных из X
P
Ниже мы будем предполагать, что для каждого процесса P
все выражения, относящиеся к процессу P , содержат переменные только из множества X
P
7.3.2
Начальное условие
Другой новой компонентой процесса P является формула I
P

F m, называемая начальным условием. Данная формула вы- ражает условие на означивание ξ
0
переменных процесса P в на- чальный момент его работы: ξ
0
должно удовлетворять условию
ξ
0
(I
P
) = 1 7.3.3
Операторы
Главное отличие нового определения понятия процесса от старо- го заключается в том, что
• в старом определении метка каждого перехода является действием, которое совершает процесс при выполнении этого перехода, а
173

• в новом определении метка каждого перехода является опе- ратором, который представляет собой схему действия,
приобретающую вид конкретного действия лишь при кон- кретном выполнении этого оператора.
В определении понятия оператора мы будем использовать то же самое множество N ames, которое было введено в параграфе
2.3.
Обозначим символом O множество, элементы которого назы- ваются операторами, и подразделяются на следующие четыре класса.
1. Операторы ввода, которые представляют собой знакосо- четания вида
α ? x
(7.3)
где α ∈ N ames и x ∈ V ar.
Действие, соответствующее оператору (7.3), выполняется путём ввода в процесс объекта, который имеет
• имя α, и
• дополнительный параметр, представляющий собой со- общение.
Введённое сообщение v записывается в переменную x, т.е.
после исполнения данного действия значение переменной x становится равным v.
2. Операторы вывода, которые представляют собой знако- сочетания вида
α ! e
(7.4)
где α ∈ N ames и e ∈ Expr.
Действие, соответствующее оператору (7.4), исполняется путём вывода из процесса объекта, который имеет
• имя α, и
• дополнительный параметр, представляющий собой со- общение вида v, которое равно значению выражения e на текущих значениях переменных процесса.
174

3. Операторы присваивания (первый вид внутренних опера- торов), которые представляют собой знакосочетания вида x := e
(7.5)
где
• x ∈ V ar, и
• e ∈ Expr, причём t(e) = t(x)
Действие, соответствующее оператору (7.5), исполняется путём обновления значения переменной x: после исполне- ния этого оператора её значение становится равным значе- нию выражения e на текущих значениях переменных про- цесса P

1   2   3   4   5   6   7   8   9   ...   15


написать администратору сайта