Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Распределенная обработка информации I.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.23 Mб
Скачать

3. Причинная непротиворечивость

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

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

На схеме представлена последователь­ность событий, возможная для хранилища с причинной непротиворечивостью, но запрещенная для хранилищ со строгой или последовательной непротиворечи­вые. Стоит отметить, что W2(x)b и W1(x)c — параллельные операции, и по­тому их очередность для различных процессов не важна.

Рассмотрим второй пример. На следующей схеме (a) а мы видим, что W2(x)b потенциально зависит от W1(x)a, поскольку b может быть результатом вычислений, в которые входит значение, прочитанное операцией R2(x)a. Две операции записи связаны причинно-следственной связью, а значит, все процессы должны наблюдать их в одинаковом порядке. Таким образом схема (а) некорректна.

С другой стороны, на схеме (б) операция чтения из процесса Р2 убрана, и теперь W1(x)a и W2(x)b стали параллельными операциями записи. Хранилище с причинной непротиворечивостью не требует, чтобы параллельные операции записи обладали глобальной упорядоченностью, и потому схема корректна.

Реализация причинно-следственной непротиворечивости требует отслеживать какие процессы какие записи видели. Это можно успешно проделать, создав и поддерживая граф зависимостей, на котором будет указана взаимная зависимость операций друг от друга.

4. Непротиворечивость fifo

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

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

5. Слабая непротиворечивость

Непротиворечивость FIFO требует, чтобы операции записи одною процесса ото­всюду наблюдались в одном и том же порядке. Не все приложения нуждаются да­же в том, чтобы наблюдать все операции записи, не говоря уже об их порядке. Рассмотрим случай, когда процесс внутри критической области заносит записи в реплицируемую базу данных. Хотя другие процессы даже не предполагают рабо­тать с новыми записями до выхода этого процесса из критической области, СУБД не имеет никаких средств, чтобы узнать, находится процесс в критической области или нет, и может распространить изменения на все копии базы данных.

Наилучшим решением в этом случае было бы позволить процессу покинуть критическую область и затем убедиться, что окончательные результаты разосланы туда, куда нужно, и не обращать внимания на то, разосланы всем копиям промежуточные результаты или нет. Это можно сделать, введя так называемую переменную синхронизации. Переменная синхронизация имеет только одну ассоциированную с ней операцию, synchronize(S), которая синхронизирует все локальные копии хранилища данных. Напомним, что процесс P осуществляет операции только с локальной копией хранилища. В ходе синхронизации хранилища данных все локальные операции записи процесса Р распространяются на остальные копии, а операции записи других процессов — на копию данных Р.

Модель слабой непротиворечивости имеет три свойства.

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

  • С переменной синхронизации не может быть произведена ни одна операция до полного и повсеместного завершения предшествующих ей опера­ций записи.

  • С элементами данных не может быть произведена ни одна операция до полного завершения всех операций с переменными синхронизации.

Первый пункт гласит, что все процессы могут наблюдать за всеми операциями над переменными синхронизации, которые с точки зрения этих процессов исходят в одинаковом порядке. Другими словами, если процесс Р1 вызывает операцию synchronize(Sl) в то же самое время, когда процесс Р2 вызывает операцию synchronize(S2), результат будет точно таким же, как если бы операция synchronize(Sl) была вызвана раньше операции synchronize(S2), или наоборот.

Второй пункт указывает на то, что синхронизация очищает конвейер. Она ус­коряет выполнение всех операций чтения, которые в этот момент происходят, частично завершены или завершены в некоторых локальных копиях, и приводит их к повсеместному завершению. Когда синхронизация закапчивается, гаранти­ровано заканчиваются все предшествовавшие ей операции записи. Производя син­хронизацию после изменения совместно используемых данных, процесс перено­сит новые значения во все локальные копии хранилища.

Третий пункт поясняет, что при доступе к элементам данных (как для записи, так и для чтения) вес предшествующие синхронизации должны быть завершены. Производя перед чтением совместно используемых данных синхронизацию, про­цесс может быть уверен, что получит самые «свежие» значения.

В отличие от предыдущих моделей непротиворечивости, слабая непротиворе­чивость реализует непротиворечивость групп операций, а не отдельных опера­ций чтения и записи. Эта модель наиболее широко используется, если отдельные процедуры доступа к общим данным редки, а большая часть операций доступа со­брана в группы (много операций за короткий срок, а потом ничего в течение дол­гого времени).

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

Рассмотрим пример. Процесс Р1 осуществляет две записи значений элементов данных, после чего синхронизируется (показано буквой S). Если Р2 и РЗ к этому моменту еще не были синхронизированы, мы не можем дать никаких гарантий но поводу того, что они увидят. Таким образом, последовательность событий (а) допустима.

Р1: W(x)a W(x)b S P1: W(x)a W(x)b S _

P2: R(x)a R(x)b S P2: S R(x)a

P3: R(x)b R(x)a S

а б

Ситуация на схеме (б) иная. Здесь процесс Р2 синхронизирован. Это означает актуальность его локальной копии хранилища данных. Когда он будет считывать значение х, он получит значение b. Получение а при слабой непротиворечивости невозможно.