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

1.6.2.1. Кэш-память прямого отображения

Кэш-память прямого отображения является самым простым типом кэш-памяти. На рис.20 приведен пример одноуровневой кэш памяти, содержащей 1024 блока по 32 байта.

Рис.20. Кэш-память прямого отображения и формат адреса

Каждый элемент кэш-памяти состоит из трех частей:

  1. Поле Tag (бирка) содержит старшие 17 разрядов адреса памяти, из которого поступил блок данных (адрес блока).

  2. Поле Valid (действительно) содержит сведения о достоверности данных.

  3. Поле Block содержит копию блока данных памяти.

В кэш-памяти прямого отображения данный блок может храниться только в одном месте по номеру блока. Когда процессор выдает адрес памяти, контроллер кэш-памяти выделяет из этого адреса 10 бит номера блока и использует их для поиска в кэш-памяти одного из 1024 элементов. Если этот элемент действителен, то производится сравнение поля Tag адреса и поля Tag кэш-памяти. Если поля равны, то попадание, иначе – промах. В случае попадания слово считывается из кэш-памяти. При промахе или недействительности, блок вызывается из памяти и сохраняется в кэш-памяти, заменяя тот блок, который там был.

1.6.2.2. Ассоциативная по множеству кэш-память

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

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

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

Обобщим параметры кэш памяти:

m – разрядность адреса памяти ;

M = 2^m – величина адресного пространство в байтах;

S = 2^s – число множеств кэш;

E – число линий (входов) в множестве;

B = 2^b – размер блока в байтах;

t = m * s*b – число бит тега;

C – общий размер кэш в байтах.

Таким образом, кэш может быть охарактеризована четверкой (m,S,E,B), а общий размер кэш составляет C = S*E *B байт.

1.6.2.3. Обновление кэш-памяти.

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

В MPS c несколькими МП, разделяющих общую MM, также необходимо поддерживать когерентность, но уже и кэш этих МП.

Рис.21. Ассоциативная по множеству кэш и формат адреса

Во всех решениях контроллер кэш-памяти разрабатывается так, чтобы кэш-память могла перехватывать запросы на магистрали, контролируя все запросы магистрали от других процессоров и устройств ввода-вывода, и предпринимать необходимые действия. Эти устройства называются кэш-памятью с отслеживанием (snooping cashe). Набор правил, которые выполняются кэш-памятью, процессорами и MM, чтобы предотвратить появление различных вариантов данных в нескольких блоках кэш-памяти, формирует протокол когерентности кэширования. Единица передачи и хранения кэш-памяти называется строкой или блоком кэш-памяти (32 или 64 байта).

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

Другой вариант поведения при промахах по записи – загрузка кэш-памяти (политика заполнения по записи – write-allocate). Заполнения по записи эффективно, когда высока вероятность повторного обращения к слову, вызвавшему промах.

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