Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие по ВС.doc
Скачиваний:
228
Добавлен:
22.03.2016
Размер:
1.1 Mб
Скачать

Совместно используемая и распределенная память

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

Если каждый процессор имеет собственную локальную память (в дополнение к общей), то ВС называют системой с неоднородным доступом. Наличие локальных памятей позволяет уменьшить число обращений в общую «глобальную» память и сделать систему эффективной при числе процессоров до 20-30.

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

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

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

Для решения этой проблемы используют запись с аннулированием и запись с обновлением. Любая строка в кэш-памяти помечается тегом, состоящим из двух битов состояния: I (недействительное), V (достоверное), R (резервированное) и D (измененное). При записи с аннулированием, если какой-либо процессор изменяет содержимое совместно используемого блока в своей кэш-памяти, то все копии этого блока в кэш-памятях других процессоров помечаются как недостоверные, для чего бит V в них устанавливается в ноль. При сквозной записи этот модифицированный блок записывается также в глобальную память. При попытках этих процессоров прочитать отмеченный блок данных из своих кэш-памятей произойдет кэш-промах, т.е. возникает необходимость прочитать модифицированный блок из глобальной памяти. При использовании обратной записи нужно вначале переписать этот блок в глобальную память из того модуля, где он был модифицирован.

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

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

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

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

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