Tanenbaum (модели конситентности) (1162628), страница 3
Текст из файла (страница 3)
Модели непротив ивасти, ариентиравеннью на дзиныв 341 допустимые чередования выртжевий но времени. В каждом из этих трех процессов лечатюатгя две переменные. Поскольку еливственные значения, ксчорые может принимать каждая нз переменных, — вто исходное значение (0) нли присваеяное значение (1), каждый пропах печатает строку из двух битов.
Числа в графе «Печатьь — тот результат, который паявитгя на устройстве выпада. Бслн мы объединим результаты рабаты процессов Р1, Ру н РЗ в таком порядке, мы получим строку из шести битов, характеризующую частичное черелрва. ние инструкций. Эта отрока в таблице представлена в графе еСипютураь. Ниже мы характеризуем каждый нэ вариантов по его сипптуре, а не по результатам Не 'все из 64 сигнатур допустимм. Тривиальный пример: снгнзхура 000000 не разрешена, поскольку означаю, что инструкции печати выполнены раньше, чем инструкции присваивания, что нарушает требанания о выполнении инструкций в порядке, прелусмотреином программой.
Более сложный щшмер — 001001, Первые два бита, 00, означают, что перемепнме у и т а момент нх ломти были раппы пулю. Такая ситуация может возникнуть только в том случае, если обе инструкции из процесса Р1 выполняются до начала выполнения процессов Ру иРЗ. Слелуквцие даа бита, 10, означают, чго Р2 вьшолняеггя после начала выполнения Р1, но до начала выполнения РЗ. Последние два бита, 01, означают, что выполнение РЗ должно закончиться до начала выполнения Р1, но мм уже видели, что процесс Р1 должен выполняться первым. Таким абралам, сигнатура 001001 недопустима. Говоря коротко, 90 допустимых последовательностей выполнения инструкций порождают миопюбразие различных результатов рабаты программы (их все-таки менее 64), допустимьш по условиям последовательной непрагиво[пчинкти. Соглашение между процессами и распределенным хранилищем лзнныю предназначенным для совместного даст)ты, состоит в том, что процессм воспринимают асе вчи результаты как правильные.
Другими словамн. процессм даюкны воспринимать четыре [пзультаты из табл. 6.2 и все осгзльные допустимьге результаты в качестве правильных ответов и корректно работать в случае получения одного из них. Программа, которая рабгтаьт с какими-то иэ этих результатов, а нагие нжпринимает как ошибочные„нарушает соглашение с хранилищем данных и является неправильной. Существуют рзюпгчные способы формального выражения последовательной непротиворечивости (и другю; моделей). Общий подход изложен в [сь 296[. Кэжлый прапесс Р[ ямеет ассоциированную с лпм репэнэаьюю (ехесшюн) ЕЕ которая представляет собой последовательность аперапнй чтения н записи процессом Р[ значений нз хранилища данных Я, Эта последовательность соответствует порядку, заданному р нрограмме, ассоциированной с процессом Рь Так, например.
реализация четырех процессов, представленных на рнс. 6.6, а, может быть залана следующим образом." Ей Игт(х)а Еу: игу( У) Юг Ю(х)Ь, Ю(х)а Е4: Е4(х)Ь, Е4(х) 342 1"лава 6. Непротиво вость и папэнкация Чтобы получить относительный порядок, в котором должны испоюшться операции, мы должны объелниить строки операций в реализации Ег' в единую строку Н так, чтобы каждая из операций, входящих в Н, плодила и в Н. Строка Н называется нсжарней (быдлу).
интуитивно понятно, что и описывает очередносп, операций с точки зрения единого цеитрвлиэошвного хранилища. Все до. лустимые значения Н'обязаны следовать двум ограничениям: + должен сохраняться такой же порядок выполнения, как и в программе + должно сохрашпъсл соотношение межлт данными. Первое ограничение означает, что если операция записи или чтения ОР( в гщной из строк реализации Н следует перел другой операцией ОР2 то ОР( дшиана следовать перед ОР2 и в истории Н.
Если это ограничение для всех пар операций соблюдается, то получиюпэяся история Н не будет содержать операций, нарушающих порядок, заданный щиграммой. Второе ограничение, когорте мы будем называть сеязэосллю даниил (йха сойеиесе), означает, что чтение Е(х) некоторого элемента данных х всегда должно возвращать самое недавнее из записанных значений х, то есть значение е, записанное последней перед Е(х) операцией В(х)и Связность данных проверяем ся путем вьгяеления казгдого элемента данных и последовательности операций с ннм.
Прочие данные при этом остаютсн без внимания. В противоположность этому, при проверке непротиворечивости внимание обращается на операции записи различных элементов данных и их порядок. Если мы рассматриваем созмеспю исцользуемую память и локализацию в памяти, не обращая внимания на элементы данных, такой случай связности ивиных называется сеял юсглзю ианяжн (глелиэу ссЬегюгсе). Возвращаясь к четырем процессам, представленным па рис. 6.6, л, допустимым значением истории Н лля них может быть следующая строка: Н йг((х)(ьЕУ(х)Ь,К4(х)Ь,%2(х)а,ЕУ(х)а,Я4(х)о. С другой стороны, для исполнения четырех процессов, представленных на рис. 6.6, б, невозможно найти разрешенной истории, поскольку в последовательно непротиворечивой системе невозьюжно сделать так, чтобы процесс РЗ сначала выполнял операцию ЕУ(х)Ь, а затем — операцию ЕУ(х)а, в то время как процесс Е4 считывает значения е я Ь в обратном порядле.
Более сложным примером могут быть несколько допустимых значений Н. Поведение программы будет счизхться щжвильньл». если ее последовательность операций соапктстзуег одному из разрешенных значений Н. Хотя последовательная непротиворечивость и дает удобнуго для прщрзммистов мсщель, она имеет серьезные проблемы с производительностью. В [268] было доказано, что при времени чтения г, времени записи ю и минимальном вре. пени передачи пакета пеклу узлами Г всегда выполняется условие г + ы Х т.
другими словами, для всякого последовательно непротиворечиного хранилища иэ. меиевие протокола для увеличения скорости чтения вмзывает падение скорости записи, и наоборот. По этой причине исследователи принялись эа поиск новых, еше более слабых моделей. В слелующем пункте мы рассмотрим некоторые из ннх. 6.2. Мпавпи непротиворечивости, оРитпираванные наданнье 343 6.2.3. Причинная непротиворечивость Модель приливной неироииморзчизости (сакю( стчапзнгу) [206[ представляет собой ослабленный вариант последовательной непротиворечивости, при которой проводится разделение между аобытиями, потенциально обладающими причинно-следственной связью, и событиями, ею не облалающими.
Мы уже говорили о причинно-следственной связи в предмдущей главе, когда абсуждалн нектарные отметки времени. Если событие В вызвано предшестаукицим событием А нли нающится под его влиянием, то причинно.следственная связь требует, чтобы те акружааицие наблюдали сначала событие А, а затем В.
Рассмотрим пример с памягъхь Предположить что процесс УЦ записывает значение переменной х. Таким образом, чшние х и запись у будут потенцгельио связаны с этим процессом причинно-сщаственной свзэью, поскольку вычисление у может зависеть от значения х, которое прочтет Р2 (то есть от значения, записанного процессом Рг). С другой стороны, если два процесса спонтанно и одновременно ааписывают значения двух различны неремениих, онн не могут иметь причинно.следственную свяак Когда за записью слелует чтение, зти дэа события потенциально имеют причинно.следственную связь. И воойце, чтение связано с записью, которан предоставляет данные лля этого чтения, причинноследственной связью.
Операции, не имеющие причинно-следственной связи, называются нара тельными (сонсиглшг). Для тото чтобы хранилище даниЬх поддерживало причинную непротиворечивость, Оно должно уловлепюрять следующему условию: операции зтимзъ теюрые навенци([уэна созваны причинно-следстзеннай связью, должны наблюдаться есеми щюцессами з одинаковом нарядлз, а норалззльныз операции зониси мазут ноблюдатыя на разных матимах з разном порядке В качестве примера рассмотрим рис. 6.7.
На нем представлена ггцглсаовательность событий, возьквкнэя для хранилища с причищюй непротиворсчизостыо, но запрещенная для хранилищ со строгой или последовательной непративоречнщктью. Стоит отметить, что И2(х)Ь и Иг((х)с — параллельнме операпин, и по- атому их очередность лля различнмх Процессов не важна.