Рефераты. Распределенные алгоритмы

Остается обсудить значение переменной B в протоколе отправителя. Это вспомогательная переменная, введенная только с целью доказательства правильности протокола. Отправитель нумерует слова в каждом соединении, начиная с 0, но, чтобы различать слова в различных соединениях, все слова индексируются последовательно по возрастанию для анализа протокола. Таким образом, там, где отправитель индексирует слово как i, "абсолютный" номер указанного слова  B + i, где B - общее количество пакетов, принятых p в предыдущих соединениях. Соответствие между "внутренними" и "абсолютными" номерами слов показывается на Рисунке 3.7. В реализации протокола B не хранится, и отправитель "забывает" все слова inp [0 .. B-1].

Loss:  { m Î M }    (* M - либо  Mp, либо Mq *)

begin remove m from M end

Dupl: { m ÎM }    (*M - либо  Mp, либо Mq *)

begin insert m in M end

Time:  (* d > 0 *)

begin forall i do Ut[i] := Ut[i] -d ,

St := St -d  ; Rt := Rt - d ;

if Rt £ 0 then delete (Rt, Exp) ;  (* cr := false *)

forall <.., r> Î Mp, Mq do

begin r := rd ;

                         if r £ 0 then remove packet

               end

end

Àëãîðèòì 3.6 Дополнительные переходы Протокола.


Подсистема связи представляется двумя мультимножествами, Mp для пакетов с адресатом p и Mq для пакетов с адресатом q. Протокол отправителя - Алгоритм 3.4, протокол приемника - Алгоритм 3.5. Имеются дополнительные переходы системы, представленные Алгоритмом 3.6, которые не соответствуют шагам в протоколе процессов. Эти переходы представляют собой отказы канала и изменение времени. В переходах Loss и Dupl M означает или Mp, или Mq. Действие Time уменьшает все таймеры в системе на величину d, это случается между двумя дискретными событиями, которые отличаются на d единиц времени. Когда таймер приемника достигает значения 0, соединение закрывается.

Ðèñóíîê 3.7 Порядковые номера протокола.

 

3.2.2 Доказательство корректности протокола

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

P0 º        cs Þ St £ S                                                              (1)

cr Þ 0 < Rt£ R                                                (2)

"i < B+ High : Ut[i] £ U                                           (3)

"<... r>Î Mp, Mq : 0 <r £ m                          (4)

 < data, s, i,w, r>Î Mq Þ cs ÙSt³ r +m+R               (5)

 crÞ cs /\  St ³ Rt + m                                                 (6)

<ack,i, r> ÎMp Þ cs /\ St>r                                     (7)

<data, s, i, w, r >ÎMq Þ  (w = inp[B + i] /\ i < High) (8)


Объяснение к (3): значение High предполагается равным нулю во всех конфигурациях, в которых со стороны приемника нет соединения.


Ëåììà 3.10 P0 - инвариант протокола, основанного на таймере.

Äîêàçàòåëüñòâî. Первоначально не соединения, нет пакетов, и B = 0, из чего следует, что P0 - true.

Ap: (1) сохраняется, т.к. St всегда присваивается значения S (St = S). (3) сохраняется, т.к. перед увеличением High, Ut[B + High] присваивается значение U. (5), (6) и (7) сохраняются, т.к. St может только увеличиваться. (8) сохраняется, т.к. High может только увеличиваться.

Sp: (1) сохраняется, т.к. St всегда присваивается значения S. (4) сохраняется, т.к. каждый пакет посылается с оставшимся временем жизни равным m. (5) сохраняется, т.к. пакет <..,  m> посылается и St устанавливается в S, и S = R + 2m. (6) и (7) сохраняется, т.к. St может только увеличиться в этом действии. (8) сохраняется, т.к. новый пакет удовлетворяет w = inp[B + i] и i < High.

Rp: Действие Rp не меняет никаких переменных из P0, и удаление пакета сохраняет (4) и (7).

Ep: Действие Ep не меняет никаких переменных из P0.

Cp: Действие Cp делает равным false заключения (5), (6) и (7), но ((2), (5), (6) и (7)) применимы только когда их посылки ложны. Cp также меняет значение B, но, т.к. пакетов для передачи нет, (по (5) и (7)), (8) сохраняется.

Rq: (2) сохраняется, т.к. Rt всегда присваивается значение R (если присваивается). (6) сохраняется, т.к. Rt устанавливается только в R только при принятии пакета <data, s,i,w,r>, è из (4) и (5) следует  cs Ù St ³ R + m когда это происходит.

Sq: (4) сохраняется, т.к. каждый пакет посылается с оставшимся временем жизни, равным m. (7) сохраняется, т.к. пакет < ack,i,r > посылается с r = m когда cr истинно, так что из (2) и (6)   St > m.

Loss: (4), (5), (7) и (8) сохраняются, т.к. удаление пакета может фальсифицировать только их посылку.

Dupl: (4), (5), (7) и (8) сохраняются, т.к. ввод пакета m применимо только если m уже был в канале, из чего следует, что заключение данного предложения было истинным и перед введением.

Time: (1), (2) и (3) сохраняются, т.к. St, Rt, и Ut[i] может только уменьшаться, и соединение приемника закрывается, когда Rt становится равным 0. (4) сохраняются, т.к. r может только уменьшиться, и пакет удаляется, когда его r-поле достигает значения 0. Заметим, что Time уменьшает все таймеры (включая r-поле пакета) на одну и ту же величину, значит сохраняет все утверждения вида Xt > Yt +C, где Xt и Yt -таймеры, и C - константа. Это показывает, что (5), (6) и (7) сохраняются.           ð


Первое требование к протоколу в том, что каждое слово в конце концов доставляется или объявляется потерянным. Определим предикат 0k(i) как

0k(i) ó error [i] = true \/ q доставил inp [i].

Сейчас может быть показано, что протокол не теряет никаких слов, не объявляя об этом. Определим утверждение P1 как

P1º   P0

/\ Øcs Þ" i < B: 0k(i)                          (9)

/\ cs Þ" i < B + Low : 0k(i)                (10)

/\ <data,true,I,w,r > ÎMqÞ"i<B+I: 0k(i)     (11)

/\ cr Þ" i < B+ Exp : 0k(i)                 (12)

/\ <ack,I,rMp Þ" i<B+I: 0k(i)                  (13)


Ëåììà 3.11 P1 - инвариант протокола, основанном на таймере.

Äîêàçàòåëüñòâî. Сначала заметим, что как только 0k(i) стало true для некоторого i, он никогда больше не становится false. Сначала нет соединения, нет пакетов, и B = 0, откуда следует, что P1 выполняется.

Ap: Действие Ap может открыть соединение, но при этом сохраняется (10), т.к. соединение открывается с Low = 0 и "i < B : 0k(i) выполняется из (9).

Sp: Действие Sp может послать пакет < data, s, I, w, r >, но т.к. s истинно только при I = Low, то это сохраняет (11) из (10).

Rp: Значение Low может быть увеличено, если принят пакет < ack, I, r >. Тем не менее, (10) сохраняется, т.к. из (13) "i < B + I : 0k(i) выполняется, если получено это подтверждение.

Ep: Значение Low может быть увеличено, когда применяется действие Ep, но генерация сообщения об ошибке гарантирует, что (10) сохраняется.

Cp: Действие Cp обращает cs в false, но оно применимо только если St < 0 и Low == High. Из (10) следует, что "i < B+ High : 0k(i) выполняется прежде выполнения Cp, следовательно (9) сохраняется. Посылка (10) обращается в false в этом действии, и из (5), (6) и (7) следует, что посылки (11), (12) и (13) ложны; следовательно (10), (11), (12) и (13) сохраняются.

Rq: Сначала рассмотрим случай, когда q принимает < data, true,l,w,r> при не существующем соединении (cr - false). Тогда "i < B+I : 0k(i) из (11), и w доставляется в действии. Т.к.
w = inp[B+I] из (8), присваивание Exp := I + 1 сохраняет (12).

        Теперь рассмотрим случай, когда Exp увеличивается в результате принятия
< data, s,Exp,w,r> при открытом соединении. Из (12), "i < B + Exp : 0k(i) выполнялось перед принятием, и слово w = Wp[B + Exp] доставляется действием, следовательно приращение Exp сохраняет (12).

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.