Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lit / Kosyakov_-_raspredelennye_sistemy_unlocked.pdf
Скачиваний:
222
Добавлен:
16.03.2016
Размер:
3.86 Mб
Скачать

2.4.Конус прошлого и конус будущего для события

Враспределенном вычислении на событие ej' потенциально влияют только такие события ei, для которых ei ej', и событие ej' "знает"

онаступлении только этих событий ei. Поэтому множество таких событий ei формирует "прошлое" события ej', которое обозначается через Past(ej'):

Past(ej') = {ei: ei , ei ej'}.

Множество Past(ej') называют (световым) конусом прошлого для события ej', как проиллюстрировано на рис. 2.8. Подмножество множества Past(ej') событий, происходящих в процессе Pi, обозначим через Pasti(ej'). Множество Pasti(ej') линейно упорядочено отношением →i. Пусть max(Pasti(ej')) – наибольший элемент этого множества. Очевидно, что событие max(Pasti(ej')) является последним событием процесса Pi, потенциально влияющим на событие ej' (см. рис. 2.8). Важно отметить, что событием max(Pasti(ej')) при i j всегда будет являться событие отправки сообщения.

Совокупность P(ej') = max(Pasti(ej')) всех последних событий процессов, которые могут оказывать влияние на событие ej', называют поверхностью конуса прошлого для события ej'. Здесь обратим внимание, что если событие ei произошло раньше, чем ej', то все события, в свою очередь наступившие в Pi раньше ei, также произошли раньше ej'. Поэтому поверхность конуса прошлого определяет все множество Past(ej') событий, произошедших раньше ej'.

Рис. 2.8. Конус прошлого и конус будущего для события.

Аналогично конусу прошлого для события определяется его конус будущего. А именно, (световому) конусу будущего Future(ej') события ej'

61

принадлежат все события ei, на которые ej' может оказывать влияние (см.

рис. 2.8):

Future(ej') = {ei: ei , ej' ei}.

Если через Futurei(ej') обозначить все события множества Future(ej'), происходящие в процессе Pi, то наименьшим элементом min(Futurei(ej')) этого множества будет являться первое событие процесса Pi, на которое влияет ej'. Следует обратить внимание, что событием min(Futurei(ej')) при i j всегда будет являться событие получения сообщения.

Совокупность F(ej') = min(Futurei(ej')) всех первых событий процессов, на которые ej' может оказывать влияние, называют

поверхностью конуса будущего для события ej'. Аналогично P(ej')

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

Очевидно, что все события процесса Pi, которые наступают после события max(Pasti(ej')), но перед событием min(Futurei(ej')), являются параллельными с событием ej'. Поэтому параллельными с ej' событиями являются те и только те события, которые принадлежат множеству

E \ Past(ej') \ Future(ej').

Логический и физический параллелизм. Для распределенного вычисления два события считаются логически параллельными, когда они не связаны отношением причинно-следственной зависимости друг с другом. В свою очередь, физический параллелизм событий подразумевает наступление событий практически в одно и то же время. Важно отметить, что события могут быть логически параллельными даже в случае, когда они происходят в разные моменты времени. Например, на рис. 2.7 события e24 и e31 происходят в различные моменты времени, однако, являются логически параллельными. Тем не менее, если бы скорости выполнения процессов и задержки доставки сообщений были бы другими, указанные события вполне могли бы произойти практически в одно и то же время. При этом результат вычисления не будет зависеть от того, совпадает ли выполнение логически параллельных событий во времени или нет. Поэтому, несмотря на то, что два логически параллельных события могут происходить в различные моменты времени, для всех практических и теоритических задач можно считать, что такие события происходят одновременно. Однако здесь важно еще раз оговориться, что в отличие от физического параллелизма, отношение логического параллелизма не является транзитивным, т.е. (ei || ej') ˄ (ej' || ek'') / ei || ek''. Поэтому, например, для стороннего наблюдателя события e24 и e31 на рис. 2.7 могли бы происходить практически одновременно. Также событие e24 могло бы произойти практически в одно и то же время с событием e15. Однако e31 ||/ e15, и потому эти события всякий раз будут происходить друг за

62

другом, и между ними в выполнении всегда будут находиться другие события.

2.5. Свойства каналов

Свойства каналов связи определяются допущениями относительно взаимосвязи событий отправки и получения сообщений.

Свойство очередности. Канал, сохраняющий порядок передаваемых по нему сообщений, называется очередью, или каналом FIFO (англ. First In First Out). Это означает, что если отправка сообщения m1 происходит раньше чем отправка сообщения m2 по одному и тому же каналу, то получение сообщения m1 также происходит раньше, чем получение сообщения m2. При отправке сообщения по такому каналу оно помещается

вконец очереди, а при получении сообщения оно извлекается из начала очереди.

Канал, не являющийся очередью (non-FIFO канал), можно представить в виде мультимножества, в которое отправляющий процесс добавляет элементы (сообщения), а принимающий процесс изымает элементы (сообщения) в случайном порядке.

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

Для асинхронного механизма обмена сообщениями событие отправки сообщения будет допустимо только в тех состояниях, в которых канал не является переполненным. Стоить отметить, что при описании модели распределенной системы в п. 2.1, мы предполагали, что допустимость события отправки сообщения не зависит от состояния канала, тем самым неявно подразумевая, что каналы имеют неограниченную емкость и, как следствие, никогда не переполняются. В дальнейшем мы будем рассматривать именно такие каналы.

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

Надежность. Канал считается надежным, если каждое сообщение, отправленное по этому каналу, обязательно будет доставлено получателю

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

Вненадежном канале возможно возникновение ошибок разных типов: потеря сообщения, искажение сообщения, дублирование или спонтанное порождение сообщения. Потеря сообщения приводит к тому, что отправленное сообщение никогда не сможет быть получено.

Искажение сообщения происходит, когда полученное сообщение

63

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

Мы все каналы будем считать надежными.

64

Соседние файлы в папке Lit