Введение в распределенные


Часы, фиксирующие прямую зависимость



Download 3,3 Mb.
bet42/74
Sana13.07.2022
Hajmi3,3 Mb.
#785639
1   ...   38   39   40   41   42   43   44   45   ...   74
Bog'liq
Косяков ТАТ книга

Часы, фиксирующие прямую зависимость


Механизм логических часов, фиксирующих только прямую зависимость между процессами, позволяет снизить накладные расходы на передачу сообщений путем пересылки всего одной скалярной величины с каждым сообщением. В этой связи "полноценное" векторное время, позволяющее отслеживать причинно-следственный порядок событий распределенного вычисления, становится недоступным для процессов непосредственно во время их выполнения, т.е. в режиме on-line. Вместо этого, каждый процесс поддерживает лишь информацию, позволяющую выявлять только прямую зависимость его событий от событий в других процессах. При этом говорят, что событие ej' процесса Pj находится в прямой зависимости от события ei другого процесса Pi, если между наступлением событий ei и ej' состоялась прямая передача сообщения из Pi в Pj. Более формально: событие ej' оказывается в прямой зависимости от события ei тогда и только тогда, когда i = j и ei i ej', или когда i j и существуют взаимосвязанные события s и r отправки и получения одного и того же сообщения, такие что (ei i s) ˅ (ei = s) и (ej' = r) ˅ (r j ej'). При учете только прямых зависимостей векторная отметка времени любого события, позволяющая определить его транзитивные зависимости, может
быть рекурсивно вычислена в режиме off-line при помощи алгоритма, который исследует ранее зафиксированную процессами информацию о прямой зависимости их событий.
В механизме логических часов, фиксирующих прямую зависимость, каждый процесс Pi вместо вектора Vi поддерживает работу с так называемым вектором прямых зависимостей (англ. direct dependency vector) Di[1..N]. В компоненте Di[k] этого вектора хранится локальное время процесса Pk на момент отправки последнего сообщения из Pk в Pi. Отметка времени события ei определяется всеми компонентами Di на момент наступления ei и обозначается через D(ei). Компоненты Di[k] инициализируется нулем, 1 ≤ k N, и каждый процесс Pi использует следующие правила для работы с Di.

  • Перед выполнением любого события процесс Pi вычисляет новое значение своего логического локального времени и записывает его в компонент Di[i], т.е. Di[i] = Di[i] + 1.

  • Когда процесс Pi отправляет сообщение процессу Pj, вместе с сообщением передается только значение его локального времени Di[i].

  • Когда процесс Pj получает от процесса Pi сообщение, содержащее значение времени d, он обновляет i-й компонент своего вектора зависимостей согласно следующему правилу:

Dj[i] = max(Dj[i], d).
Отметим, что новое значение Dj[i] вычисляется именно как максимум из старого значения Dj[i] и времени d на случай канала, не обладающего свойством FIFO, т.е. когда сообщение от процесса Pi с большим значением d может опередить предшествующее ему сообщение с меньшим значением d.
Из представленных выше правил работы с вектором Di видно, что Di характеризует только прямые зависимости текущего состояния процесса Pi от событий в других процессах. Другими словами, в любой момент значение Di[j] соответствует порядковому номеру последнего события в процессе Pj, от которого текущее состояние процесса Pi зависит напрямую. Важно отметить, что такое событие процесса Pj могло наступить раньше другого события в Pj, от которого текущее состояние Pi зависит согласно отношению причинно-следственного порядка.
Пример работы часов, фиксирующих прямую зависимость, приведен на рис. 3.8. На этом рисунке, когда процесс P4 отправляет сообщение процессу P3, вместе с этим сообщением он передает только значение своего логического времени, равное двум, что позволяет отследить прямую
зависимость второго события e 2 процесса P от второго события e 2
3 3 4
процесса P4. Затем процесс P3 отправляет сообщение в процесс P2, тем
самым устанавливая прямую зависимость P2 от P3. Таким образом, в
действительности, четвертое событие e 4 процесса P становится
2 2
зависимым от второго события e42 процесса P4 согласно отношению причинно-следственного порядка. Однако, процесс P2 не получал об этом никакой информации и непосредственно по ходу своего выполнения установить эту зависимость не может. Более того, в четвертом элементе вектора зависимостей процесса P2, D2[4], содержится информация о более раннем событии e41 процесса P4, от которого e24 зависит напрямую.


Рис. 3.8. Пример работы часов, фиксирующих прямую зависимость.


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


Все множество событий, от которых заданное событие ei зависит транзитивно, может быть определено исходя из определения свойства транзитивности, т.е. путем последовательного объединения информации о событиях ej', от которых зависит ei, с информацией о событиях ek'', от которых в свою очередь зависят события ej'. Для иллюстрации данного принципа обратимся к рис. 3.8. Здесь вывод о транзитивной зависимости четвертого события e24 процесса P2 от второго события e42 процесса P4 можно сделать, объединяя зафиксированную в D(e24) информацию о
зависимости e 4 от третьего события e 3 процесса P и зафиксированную в
2 3 3

3

4
D(e33) информацию о зависимости e 3 от e 2.
Общая схема рекурсивного алгоритма, определяющего множество событий, произошедших раньше x-го по порядку события eix процесса Pi, приведена в Листинге 3.1. Данный алгоритм находит события других процессов из поверхности конуса прошлого события eix, то есть, по сути, формирует векторную отметку времени для eix и сохраняет ее в массиве DTV. Функция DependencyTrack(i,x) инициализирует i-й элемент массива DTV порядковым номером x заданного события eix. Это же значение является логическим локальным временем события eix в процессе Pi и хранится в i-ом компоненте отметки времени D(eix), зафиксированной для eix. Остальные элементы DTV инициализируются нулем. Затем алгоритм анализирует отметку времени каждого события, указанного в каждом элементе DTV, при необходимости рекурсивно вызывая функцию VisitEvent(j,y), где j – идентификатор процесса, а y – порядковый номер события в этом процессе. Каждый раз, когда VisitEvent(j,y) находит в векторе D(ejy) значение, превосходящее порядковый номер, хранящийся в соответствующем элементе DTV, в этот элемент DTV записывается найденное новое значение. После этого с помощью VisitEvent осуществляется переход к новому найденному (более позднему) событию и сравнение его отметки времени с DTV. Таким образом, функция VisitEvent рекурсивно проходит события из конуса прошлого события eix. При окончании поиска массив DTV будет содержать порядковые номера всех последних событий, произошедших раньше заданного события eix.

Download 3,3 Mb.

Do'stlaringiz bilan baham:
1   ...   38   39   40   41   42   43   44   45   ...   74




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish