Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KS_LK_AllInOne.docx
Скачиваний:
175
Добавлен:
23.11.2019
Размер:
28.78 Mб
Скачать

Когерентность кэш-памятей

1. Организация распределенной директории

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

В SCI протокол основан на распределенных директориях, как показано на рис. 1

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

2. Протокол когерентности

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

Рис. 1. Список разделяемых строк

3. Алгоритм кэширования.

  • Когда узел когерентно обращается к памяти за данными строки, память сохраняет адрес этого узла и возвращает адрес предыдущего узла, запрашивавшего эту же строку.

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

  • Если данные строки памяти не состоятельны, и состоятельные данные находятся в каком-либо кэше, а не в памяти, то возвращается только адрес запрашивавшего эту строку последним узла (без строки данных).

  • Запрашивающий доступ к данным узел, используя этот адрес, обращается непосредственно в узел, имеющий состоятельные данные. Затем завершается формирование списка узлов, разделяющих строку памяти.

  • Доступ по записи в строку памяти предоставлен только узлу в начале списка.

  • Для получения доступа по записи узел, бывший элементом списка, удаляет себя из списка и запрашивает доступ к памяти с правом записывать данные.

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

Стандарт SCI предусматривает как слабую, так и сильную поддержку последовательного выполнения программного кода.

  • В случае слабой поддержки, операция записи может быть произведена прежде, чем завершится очистка списка.

  • При сильной поддержке последовательного выполнения запись должна производиться только после очистки списка.

SCI поддерживает как линейное, так и логарифмическое (древовидное) распространение очистки списка. Стандарт SCI также позволяет паре узлов обмениваться данными, не прибегая к использованию памяти, пока некоторый другой узел не запросит данные.

Используемый в SCI протокол когерентности имеет достоинством то, что при расширении системы не требуется ничего менять в уже существующей.

Недостатком является необходимость дополнительной памяти для хранения указателей.

Коммуникационная среда на основе масштабируемого когерентного интерфейса SCI

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]