Банковская система. Для иллюстрации применения векторных часов при решении различных задач вернемся к рассмотренной в п. 3.2.2 задаче подсчета полной суммы денег, находящихся на счетах в разных филиалах банка. При решении этой задачи с помощью скалярных часов предполагалось, что всем процессам известен некоторый момент логического времени t, в который процессы будут подсчитывать денежные средства на своих счетах и в каналах между филиалами. Однако сама процедура достижения соглашения между процессами о таком будущем моменте t представляет определенные сложности. Действительно, при использовании механизма скалярных часов процесс не может произвольным образом выбрать значение t для согласования с другими процессами, т.к. не исключено, что на момент выбора t логические часы других процессов ушли далеко вперед, и их текущее логическое время потенциально может превышать любое предлагаемое значение t. Кроме того, если t окажется слишком большим, то придется долго ожидать наступления этого момента.
Использование векторных часов может помочь в решении этой задачи. А именно, для любых двух процессов Pi и Pj в любой момент верно
неравенство Vi[i] ≥ Vj[i], т.е. представление других процессов о ходе выполнения процесса Pi не может опережать ход его собственного выполнения. Поэтому в момент продвижения процессом Pi своего логического локального времени Vi[i] не существует такого процесса Pj, у которого Vj > Vi. Это означает, что текущие показания векторных часов других процессов не могут превосходить показания векторных часов процесса Pi при выполнении в нем внутреннего события. То есть в качестве будущего момента логического времени t процесс Pi может выбрать время своего следующего события.
С использованием механизма векторных часов процедура согласования времени t для подсчета денежных средств могла бы определяться таким образом.
Процесс Pi вычисляет векторное время своего следующего, еще не наступившего события t = Vi + (0,…0, 1, 0,…0), и рассылает это значение всем остальным процессам распределенной системы.
Затем процесс Pi приостанавливает свою работу до тех пор, пока не получит подтверждения от всех других процессов о том, что они приняли значение t. Тем самым гарантируется, что в системе не окажется ни одного процесса, показания часов которого превзойдут t до момента окончания процедуры согласования.
После того как значение t становится известным всем процессам распределенной системы, процесс Pi увеличивает показания своих логических локальных часов, т.е. Vi становится равным t, и рассылает пустое сообщение всем другим процессам с тем, чтобы показания их векторных часов превзошли t.
В остальном алгоритм подсчета денежных средств остается таким же, как и в п. 3.2.2.
Основной недостаток предложенной выше схемы заключается в том, что процесс Pi вынужден приостанавливать свою работу на время информирования других процессов о выбранном значении t. Избежать этого можно с помощью дополнительного (N + 1)-го виртуального процесса, чьи логические часы управляются процессом Pi, предлагающим t. В этом случае Pi может назначить t с помощью увеличения логического локального времени этого (N + 1)-го виртуального процесса, тем самым получая возможность продолжать свою работу наравне со всеми другими процессами распределенной системы.
Do'stlaringiz bilan baham: |