Tanenbaum (модели конситентности) (1162628), страница 6
Текст из файла (страница 6)
Хотя описанный централизованный алгоритм и решает проблему, это отнюдь не едзпктзенный полхол. Вообще гшюря, распределыпюе хрзнилипю данных является саободно непротиворечивым при условии выполнения им трех правил. + Перед выполнением операций чтения или зэписи созиестно используемых данных исе прелмдущие захваты этого процесса должны быть полно. стью законченм.
+ Перед выполнением освобождения эсе предыдущие операции чтения и записи этого процесса должны быть полностью закончены. Доступ к синхронизируемым переменным должен обладать непротиэоречивостью Р)РО (последозатеаьная непротиэоречиаосгь не требуется). Если исе эти условия выполнены и пронесем правильно (то есть попарно) испольауахг захваты и освобождения, результат. любого выполнения не будет отличаться от порядка, характерного для последовательно непротиворечивых храни) липс В результате блокировка отпраций наа совместно использ)юмыми данными будет атомарной блатдаря примитивам захвата и осзобождения, которые будут препятствовать черслоэанию, У свобслной непротизоречиэости имеэтгя такая реализация, как миговая сво бедная яюйляиьюреммесэв (йпу шйам пзмйыясу) (2Щ При обнчной свободной непротиворечивости, которую мы далее будем называть вне рэичной свободней б.й Модели непрстиэорачиаостн, щжамтмщгааыщеиаданные 351 пепротиворзчиеостью (щйат ге(еале сонтЬгммр), чтобы не путаное с елениеымь собратом, при освоболщении процесс, выполнюощий освобождение, рассыязет же мсдифицироваяные данные всем процессам, которые уже имеот копии этих данных и поэтому иотыщиалыю могут быть эаиитсресованннми в их обновленной версию Не существует способа указать, нужны они нв самом деле или нет, и для надежности обновленные данные получают все эти процессы.
Хотя разослать повсюду все данные несложно, обычно это неэффектныю. При ленивой свободной непротиворечивости в момент освобождения ничего никуда не рассылаетсл. Взамен этого в момент захвата процесс, пытающийся произвести захват, должен получить наиболее свежие.дамане из процесса нли процессов, в которых они хранятся. Для определения того, по вти элементы данных лействительно были переданы, используется протокол отметок времени.
Во многих прщраммах критическая область располагается внутри цикла В случае ммргичной свободной непративсречивопи осщбождение щхвкхсдггг при каждом проходе цикла при этом лсе мцаифнцированные данные рассылаются всем процессам, подаержнваюшим их копки. Этот алгоритм поглощает пропускную способношь каналов и вызывает неизбежные задержки. В юриаите ленивой свободной непротююречнвости в момент освобождения не происходщ ничего. При следующем захвате процесс определяет, что уже облкаыт всеми необходимыми данными, а значит, ему не нужно генерировать никаких сообщений. В результате при ленивой свободной нецроппюрпншостн, до тех пор пока другой процесс не произведет захват.
сетевой график вообще не генерируется, Повторяющиеся пари операций захвата-освобождения, происходящие в одном и том же пропесск в отсутствие попыток доступа к данным иэщю не вызывают никакой нагрузки на сетг. 6.2.7., Поелементнае непротиаоречиаость Еще шща модель непротиворечивости, соыынная для применения в критических обласпш, — поэлементная непротиворечивость (ещту пвтпзмгму) [4б).
Как и оба варианта свободной непротиворечивости, она требует от программиста (или компнлатора) вставкд «сдв для захвата и освобождения в начале и ксаще критической области. Однако в отличие от свободной непротиворечивости, ноэле. ментная нещютиворечивость дополнительно требует, чтобм каждый отделыщй элемент совмеспю испольэуеммх ланных был ассоциирован с переменной синхронизации — блокировкой илн барьером. Если необжщимо.
чтобы к элементам массива имелся независиммй пэрадлельный доступ, то различные элементы массива должны быль ассоциированы с различными блокировками. Когда происходит захват переменной синхронизации, непроппюречивьпЮ становятся только те данные, которые ассоциированы с этой переменной синхронпэапни. Позлементнаа непротиворечивхть отличается от ленивой свободной непротиворечивостя тем, что в последней отсутствует связь между совместно используемыми элементами данных и блокировками или барьерами, потому при замете необходимые пфеменные определяются эмпирнческж Связывая список совмеспю используемых элементов данных с переьминымн синхронизации. мы снижаем накладные расходы на захват и освобождение пере- 362 Главе б.
Непротиваречняость и реплнхзцнн меннмх синхронизации до нескольких синхронизируемых элементов дашшк Зто также позноляет нам, увеличивая степень параллелнзыа, иметь иесквнко одновременно выполняемых критических абдастей, включающих в себя непере. секаалцнеся группы совместно используемых алементов данных. Цена, которую мы платим за это, — дополнительные усилия и сложность связывания всех раз, делаемых элементов данных с переменными синхронизации.
Программирование в этом случае также сложнее и грозит опшбками. Пе менные сиих пгзапни использ сл ишим об м. Кзжазя пе. ре р(я уютсл нху разо ременная синхронизация имеет текущего владельца — процесс, который захватил ее последним. Владелец может многократно входить в критические обзжтн и вьшодить из них, не насылая в сеть иинакнх сообщений Процесс, не являю.
щийся в настоящее время владельцем переменной синхронизации, но жедаюший захватить ее, должен послать текущему влалельцу сообщение, запрашивая право собственности к текущие значения данньи, ассоциированных с переменной синхронизации. Кроме того, нескользо процессов могут одновременно влэлеть переменной синхронизации, но не в эксклюзивном режиме. Зто озяачает, что они могут прочесть жсацииронанные с переменной Ванные, но не записать их Формзльно хранилище данных обеспечивает позлементную ггепр~тивореш. вость, если оно улпвлнгворяет трем условиям ~50~.
+ Захват процессом доступа к переменной синхронизации невозможен до тех пор, пока не осуществлены бее обновления отслннизаемых совмес1но исполззуемых данных этого процесса. + Пека один нз процессов имеет аксклюзивный доступ к переменной синхронизации, кикакой другой процесс не может захватить зту переменную синхронизации, в том числе и не эксклюзивно, + После эксклюзивного доступа к переменной синхронизации не эксклю. званый досгуп любош другого процесса к этой переменной синхрониза; ции запрещен, пока зто не булет разрешюю владельцем втой переменной Пераое условие гласит, что если процесс производит захват, то захват не мо. жег быть выполнен (то есть нельзя передать управление следующей ннструк.
ции) до тех пор, пока все контролируемые общие данные не станут цепротиворечивыми. Другими словами, при захвате должны быть визуализированы все изменения, сделанные в этих данных удаленными процессами. Второе условие говорит, что перел обновлением элемента совместно используемых данных пропесс должен пойти в критическую область в эксклюзивном режиме, чтобы гарантировать. что никакой другой процесс в то же самое время не изменяет этн данные.
Третье условие гласит, что если процесс хочет войти в критическую область в не эксклюзивном режиме, он должея сначала пронерить, что владелец переменной синхронизации, отслеживающей зту критическую область, получил самую свежую копию отслеживаемых данных Пример поэлементной непротиворечивости иллюстрирует рис. 6.12 Вместо того чтобы работать со всеми совместно используемыми данными. в этом нриме.
ре мы ассоциируем блокировку с каждым элементом данных. Здесь процесс Р1 П.2. Ьвгделп нюротиворвчпвостп, орнвнтппованпые па данные 333 осуществляет захват х, нзменяет х, после чего захватьмаст у. Процесс Р2 захватывает л, но не у, после чего счнтывает нз х значенне для а, По для у может счнтать только нуль (ФП.). Поскольку процесс РЗ сначала захватывает у, сн может прочитать эначенне Ь после того, как элемент у будет освобожден пропесом Р(. Рт: ь««г) и г«пмр. г««)а п в. пп Рп все цг) п(Иь Впе.
Пл ж дыпотм«зв ппледавмем«сом о«за П д«э п««я«мене«зй пзпветиееГж ьпости Одна нз проблем прогрвммпрованпя для поэлемептной непротпвсречпвосгн отвосптся к правнльнсму связыванию данных с переыеннымн сннхрониэпцщ. Один нз способов решения этой проблемы состоят в применении распределенных совмеспю используемых сбьектов. Это делается следующим образом. Квждьтй распределенный объект имеет ассоцпнрованную с ннм переменную сннхроннзацнн.