МегаПредмет

ПОЗНАВАТЕЛЬНОЕ

Сила воли ведет к действию, а позитивные действия формируют позитивное отношение


Как определить диапазон голоса - ваш вокал


Игровые автоматы с быстрым выводом


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


Целительная привычка


Как самому избавиться от обидчивости


Противоречивые взгляды на качества, присущие мужчинам


Тренинг уверенности в себе


Вкуснейший "Салат из свеклы с чесноком"


Натюрморт и его изобразительные возможности


Применение, как принимать мумие? Мумие для волос, лица, при переломах, при кровотечении и т.д.


Как научиться брать на себя ответственность


Зачем нужны границы в отношениях с детьми?


Световозвращающие элементы на детской одежде


Как победить свой возраст? Восемь уникальных способов, которые помогут достичь долголетия


Как слышать голос Бога


Классификация ожирения по ИМТ (ВОЗ)


Глава 3. Завет мужчины с женщиной


Оси и плоскости тела человека


Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д.


Отёска стен и прирубка косяков Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу.


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

Обеспечение когерентности памяти в ВС с общей памятью





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

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

1. Протоколы на основе справочника (directory based). Информация о состоянии строки памяти содержится только в одном месте, называемом справочником (физически справочник может быть распределен по различным ВМ системы).

2. Протоколы наблюдения (snooping). Данные протоколы применимы к ВС, использующим для передачи данных широковещательный коммутатор (когда один ВМ передает данные, остальные имеют возможность их читать), например, общую шину. Каждый кэш, который содержит копию некоторой строки памяти, имеет также соответствующую служебную информацию о ее состоянии. Во время операций чтения и записи строк памяти кэш-контроллеры всех ВМ наблюдают за общей шиной (просматривают ее). Во время наблюдения кэш-контроллер определяет, не содержит ли его кэш копию читаемой (записываемой) строки памяти.

Имеются два подхода поддержания когерентности. Один из них заключается в гарантировании получения вычислительным модулем исключительных прав доступа к строке памяти перед выполнением записи в эту строку. Этот тип протоколов называется протоколом записи с аннулированием (write invalidate protocol), поскольку при выполнении записи в одну из копий другие копии аннулируются. Это наиболее часто используемый протокол как в схемах на основе справочников, так и в схемах наблюдения. Исключительное право доступа гарантирует, что во время выполнения записи не существует никаких других копий элемента данных, в которые можно писать или из которых можно читать, - все другие кэшированные копии элемента данных аннулированы.

Чтобы увидеть, как такой протокол обеспечивает когерентность, рассмотрим операцию записи, вслед за которой следует операция чтения другим ВМ. Поскольку запись требует исключительного права доступа, любая копия, поддерживаемая читающим ВМ, должна быть аннулирована (объявлена недействительной). При чтении аннулированной строки происходит промах кэш-памяти, который вынуждает выполнить выборку новой копии данных. Для выполнения операции записи можно потребовать, чтобы ВМ имел достоверную копию данных в своей кэш-памяти прежде, чем выполнять в нее запись. Таким образом, если оба ВМ попытаются записать в одну и ту же строку памяти одновременно, один из них выиграет состязание у второго и вызовет аннулирование его копии. Другой ВМ для завершения своей операции записи должен сначала получить новую копию строки памяти, которая теперь уже должна содержать обновленное значение.

Альтернативой протоколу записи с аннулированием является обновление всех копий строки памяти в случае записи в нее. Этот тип протокола называется протоколом записи с обновлением (write update protocol) или протоколом записи с трансляцией (write broadcast protocol). Обычно в этом протоколе для снижения трафика через коммуникационную среду при операции записи в каком-либо ВМ отслеживается, содержится ли строка памяти в кэшах других ВМ. Если нет, то трансляции обновленных данных не происходит.



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

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

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

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

Другой способ предполагает отображение изменений в основной памяти либо в момент вытеснения строки из кэша записывающего ВМ, либо в момент возникновения запроса на чтение измененных данных в другом ВМ. Если копия строки памяти, в которую производится запись, находится в кэше (ОП) записывающего ВМ, то запись производится в кэш-память (ОП) этого ВМ. При отсутствии копии в кэш-памяти (ОП) записывающего ВМ производится запись в основную память. Указанный способ получил название обратная запись.

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

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

 

Протокол MESI

Для обеспечения когерентности памяти для ВС с сосредоточенной общей памятью часто используется протокол MESI. MESI подразумевает использование кэш-памяти с обратной записью и является протоколом на основе наблюдения с аннулированием. Поскольку наблюдение предполагает использование в качестве коммутатора общей шины, то применение данного протокола ограниченно SMP-системами с шинной организацией коммуникационной среды.

Предполагается, что данные считываются из основной памяти в кэш некоторыми блоками фиксированного размера – строками. Строка, размещенная в кэш-памяти одного из ВМ, называется кэш-строкой, а сам ВМ по отношению к размещенным в нем кэш-строкам – локальным. Соответственно, остальные ВМ будут называться удаленными.

Протокол MESI приписывает каждой кэш-строке одно из четырех состояний, начальные буквы названий которых и составляют аббревиатуру MESI. Строка может находиться в состоянии Modified («измененная»), Exclusive («монопольно копированная»), Shared («разделяемая») или Invalid («недействительная»). Состояние кэш-строки может быть изменено процессором локального ВМ посредством операций чтения, записи или внутренней проверки, а также удаленными ВМ или контроллером кэш-памяти посредством внешней проверки. Рассмотрим состояния MESI подробнее.

Измененная(М): данные в кэш-строке, помеченной как измененная, находятся только в кэш-памяти локального ВМ. Чтение и запись строки осуществляется локальным ВМ без доступа к общей шине.

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

Разделяемая (S): разделяемая кэш-строка может храниться в кэш-памятях нескольких ВМ. Запросы на чтение локальным ВМ выполняются через кэш-память. Запросы на запись к разделяемой кэш-строке всегда переключаются на общую шину, поэтому строки в кэш-памятях удаленных ВМ объявляются недействительными. Эта операция производится в цикле внешней проверки с использованием адреса, выдаваемого при выполнении цикла шины. При этом содержимое основной памяти также обновляется. Операция записи в локальную кэш-память обновляет только ее содержимое, которое недействительным не объявляется.

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

Таблица 5.1 показывает, каким образом размещаются данные в зависимости от состояния кэш-строки.

Таблица 5.1

Размещение данных в зависимости от состояния кэш-строки

Сос-тояние MESI Значение кэш-строки Значение в основной памяти Есть копия в другом кэше? Запрос на запись обращается к
М Действительно Недействительно Нет Кэш-памяти
E Действительно Действительно Нет Кэш-памяти
S Действительно Действительно Возможно Кэш/ОП
I Недействительно Неизвестно Возможно ОП

Таблица 5.2 содержит схему перехода кэш-строки из одного состояния в другое. Состояние может поменяться в результате чтения или записи кэш-строки локальным ВМ, а также в ходе циклов проверки, инициируемых операциями чтения и записи кэш-строки удаленными ВМ. В цикле проверки может использоваться бит INV принудительного перевода кэш-строки в состояние I.

Таблица 5.2

Переходы кэш-строки из одного состояния в другое

Исходное состояние Состояние после чтения Состояние после записи Состояние после проверки
INV=0 INV=1
I Чтение строки из ОП, E Сквозная запись в ОП, I I I
S Чтение из кэша, S Сквозная запись в ОП, E Строка не обновлялась, S Строка была обновлена удаленным ВМ, I
E Чтение из кэша, E Запись в кэш, M Строка прочитана удаленным ВМ, S Строка была обновлена удаленным ВМ, I
M Чтение из кэша, M Запись в кэш, M Строка запрошена на чтение удаленным ВМ; обратная запись строки, S Строка запрошена на запись удаленным ВМ; обратная запись строки, I

 

Рассмотрим диаграмму переходов кэш-строки из одного состояния в другое (рис. 5.27). Смена состояния I возможна только после чтения локальным ВМ строки из основной памяти в кэш. При этом состояние кэш-строки устанавливается в S, если копии прочитанной строки есть в кэш-памятях удаленных ВМ, и в E, если кэш-строка скопирована монопольно. Запись I-строки осуществляется непосредственно в основную память и не меняет ее состояния.

Когда кэш-строка находится в состоянии S, чтение ее как локальным, так и удаленными ВМ, не изменяют этого состояния. Локальный ВМ осуществляет чтение из кэша без обращения к основной памяти. Запись строки локальным ВМ приводит к сквозной записи в основную память, записи в локальную кэш-память и аннулированию (переводу в состояние I) копий строки во всех удаленных ВМ. Кэш-строка переводится в состояние E. Наоборот, запись S-строки удаленным ВМ приводит к ее аннулированию в локальном модуле и переходу в состояние I.

Чтение монопольно-копированной строки (состояние E) локальным ВМ осуществляется из кэш-памяти и не меняет ее состояния. Чтение же копии этой строки удаленным ВМ из основной памяти переводит кэш-строку в S-состояние. Запись E-строки удаленным ВМ делает ее недействительной (правильная копия строки будет находиться только в основной памяти). Запись E-строки локальным ВМ осуществляется только в кэш-память и переводит кэш-строку в состояние M.

Кэш-строка в состоянии M читается и записывается локальным ВМ без изменения состояния и обращения к основной памяти. Запрос на чтение этой строки со стороны удаленного ВМ приводит к обратной записи строки в основную память, чтению строки из основной памяти в кэш удаленного ВМ и переводу кэш-строки в состояние S. Запрос на запись со стороны удаленного ВМ также вызывает обратную запись измененной кэш-строки в основную память, после чего кэш-строка становится недействительной.

Рис. 5.27. Диаграмма переходов протокола MESI

MESI – не единственный существующий протокол поддержки когерентности на основе наблюдения. Первым подобным протоколом является протокол однократной записи (write-once), предложенный в 1983 г. Гудменом. Кроме этого, в разное время были разработаны и реализованы в разных ВС протоколы Synapse, Berkley, Illinois, Firefly и другие.

 





©2015 www.megapredmet.ru Все права принадлежат авторам размещенных материалов.