Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OEVM-sem-pract-2007.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.97 Mб
Скачать

Семинар 7. Кэш-память Введение

Кэш-память обычно реализуется как ассоциативная память, в которой для каждой единицы памяти (block, line) хранятся дополнительные признаки (тэги). У каждого блока в кэш-памяти имеется адресный тег, указывающий, какой блок в основной памяти данный блок кэш-памяти представляет. Когда в ассоциативную память подается адрес, с ним одновременно сравниваются все тэги. Если один из тэгов равен поданному в адресе, производится обращение к той единице памяти, которая ассоциирована с этим тэгом. Такая ситуация называется попаданием – cache hit. Если же равенства не обнаруживается, кэш-память сигнализирует о промахе – cache miss. В случае промаха требуется выполнить цикл шины для обращения к основной памяти (иногда эти опреации совмещены во времени). Кроме того, необходим способ определения того, что блок кэш-памяти содержит достоверную или пригодную для использования информацию. Наиболее общим способом решения этой проблемы является добавление к тегу так называемого бита достоверности (valid bit).

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

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

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

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

    1. случайная

    2. LRU – last recently used

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

Блок из кэша может быть прочитан в то же самое время, когда читается и сравнивается его тэг. Таким образом, чтение блока начинается сразу, как только становится доступным адрес блока. При выполнении операции записи, коренным образом меняется ситуация с попаданием и промахом. При записи процессор определяет размер записи (от 1 до 8 байт) и эта часть блока может быть заменена. Над блоком производится ряд последовательных операций: чтение, модификация, запись.

Как правило, процессоры с кэшем различаются стратегией выполнения записи. При этом имеется 2 базовые возможности:

  1. стратегия сквозной записи (write through, store through), при этом информация записывается в 2 места: в блок кэш-памяти и в блок более низкий.

  2. с обратным копированием (write back, store back, store in), при этом информация записывается только в блок кэша, модифицированный блок кэша (строка) переписывается в ОП, только тогда, когда происходит замещение.

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

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

При промахе во время записи имеются две дополнительные возможности:

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

  • не размещать запись в кэш-памяти (называется также записью в окружение (write around)). Блок модифицируется на более низком уровне и не загружается в кэш-память.

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

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