Существует четыре способа адресации кеша в зависимости от того, используются ли биты виртуального или физического адреса для индексации и / или для тегирования.
Поскольку индексация кеша является наиболее критичной по времени (поскольку все пути в наборе могут считываться параллельно, а соответствующий путь выбирается на основе сравнения тегов), кеши, как правило, индексируются по виртуальному адресу, что позволяет начать индексацию до адреса. перевод завершен. Однако, если для индексации используются только биты в пределах смещения страницы (например, каждый путь не превышает размер страницы и просто по модулю размера пути для индексации 1 ), тогда это индексирование фактически использует физический адрес. Нередко ассоциативность L1 увеличивается, прежде всего, для индексации большего кеша по физическому адресу.
Хотя индексация на основе физического адреса возможна способами, превышающими размер страницы (например, путем прогнозирования более значимых битов или механизма быстрого перевода, обеспечивающего эти биты с использованием задержки индексации с помощью известных битов физического адреса, чтобы скрыть задержку преобразования), она обычно не делается.
Использование виртуальных адресов для тегирования позволяет определить попадание в кэш до того, как будет выполнен перевод. Разрешения по-прежнему необходимо проверять, прежде чем доступ может быть зафиксирован, но для нагрузок данные могут быть перенаправлены в исполнительные блоки, и вычисления с использованием начатых данных и для сохранения данных могут быть отправлены в буфер, чтобы разрешить отложенную фиксацию состояния. Исключение разрешения сбрасывает конвейер, поэтому это не добавляет сложности в проектирование.
(Хинты, используемые кешем данных Pentium 4, обеспечили это преимущество задержки благодаря использованию подмножества битов виртуального адреса, которые доступны рано, для умозрительного выбора пути.)
(Во времена необязательных внешних MMU теги виртуальных адресов могли быть особенно привлекательными, когда перевод почти полностью выходил за рамки дизайна кэша.)
Хотя виртуально индексированные и помеченные кеши могут иметь значительные преимущества по задержке, они также создают возможность для псевдонимов, когда один и тот же виртуальный адрес сопоставляется с разными физическими адресами (омонимами), или один и тот же физический адрес сопоставляется с разными виртуальными адресами (синонимами). Индексирование и пометка с физическими адресами позволяет избежать наложения имен.
Проблема омонимов относительно легко решается с помощью идентификаторов адресного пространства (ASID). (Очистка кэша при изменении адресных пространств также гарантирует отсутствие омонимов, но это относительно дорого. По крайней мере, частичная очистка потребуется, когда ASID повторно используется для другого адресного пространства, но 8-разрядный ASID может избежать сбросов на большинстве адресов изменения пространства.) Обычно ASID управляются операционной системой, но некоторые системы предоставляют аппаратные проверки для повторного использования ASID на основе базового адреса таблицы страниц.
Проблему синонимов решить сложнее. В случае пропуска кэша необходимо проверить физические адреса любых возможных псевдонимов, чтобы определить, присутствует ли псевдоним в кэше. Если в индексации избегают использования псевдонимов - индексацией по физическому адресу или операционной системой, гарантирующей, что псевдонимы имеют одинаковые биты в индексе (раскраска страницы), - тогда необходимо проверять только один набор. Перемещая любой обнаруженный синоним в набор, указанный более недавно использованным виртуальным адресом, можно избежать псевдонима в будущем (пока не произойдет другое сопоставление того же физического адреса).
В виртуально помеченном кеше с прямым отображением без наложения индексов возможно дальнейшее упрощение. Поскольку потенциальный синоним будет конфликтовать с запросом и будет удален, любая необходимая обратная запись грязной строки может быть выполнена до того, как будет обработана ошибка кэша (таким образом, синоним будет в памяти или физически адресуемый кэш более высокого уровня) или физически адресуемый Буфер обратной записи может быть исследован до того, как будет установлена строка кэша, извлеченная из памяти (или кэш более высокого уровня). Не измененный псевдоним не нужно проверять, поскольку содержимое памяти будет таким же, как в кеше, просто выполняя ненужную обработку пропусков. Это устраняет необходимость в дополнительных физических тегах для всего кэша и позволяет относительно медленной трансляции.
Если в индексе нет гарантированного избежания наложения псевдонимов, то даже физически помеченный кэш должен будет проверять другие наборы, которые могут содержать псевдонимы. (Для одного нефизического бита индекса может быть приемлемо второе исследование кэша в одном альтернативном наборе. Это было бы похоже на псевдоассоциативность.)
Для виртуально помеченного кэша может быть предоставлен дополнительный набор тегов физических адресов. Доступ к этим тегам возможен только в случае промахов и может использоваться для когерентности ввода-вывода и многопроцессорного кэша. (Поскольку и пропуски, и запросы согласованности относительно редки, такое совместное использование обычно не вызывает проблем.)
AMD Athlon, который использовал физические теги с виртуальной индексацией, предоставил отдельный набор тегов для датчиков когерентности и обнаружения псевдонимов. Поскольку для индексации используются только три виртуальных адресных бита, нужно было исследовать семь альтернативных наборов на предмет возможных псевдонимов при пропуске. Поскольку это можно было сделать во время ожидания ответа из кэша L2, это не добавило задержки, и дополнительный набор тегов также можно было использовать для запросов когерентности, которые были более частыми, учитывая исключительность кэша L2.
Для большого виртуально индексируемого кэша L1 альтернативой проверке множества дополнительных наборов будет предоставление физического к виртуальному трансляционному кешу. В случае пропуска (или проверки когерентности) физический адрес будет преобразован в виртуальный адрес, который может использоваться в кэше. Поскольку предоставление записи кэша трансляции для каждой строки кэша было бы нецелесообразным, потребовались бы средства для аннулирования строк кэша, когда перевод исключен.
Если псевдонимы (по крайней мере, для записываемых адресов) гарантированно не будут возникать, например, в типичной операционной системе с единым адресным пространством, то единственным недостатком виртуально адресуемого кэша являются дополнительные издержки тега из-за того, что виртуальные адреса в таких системах больше, чем физические адреса. Аппаратное обеспечение, предназначенное для одной ОС адресного пространства, может использовать буфер разрешения доступа вместо буфера преобразования перевода, что задерживает преобразование до тех пор, пока не будет пропущен кэш последнего уровня.
1 Перекошенная ассоциативность индексирует разные способы кэширования с разными хэшами, основанные на большем количестве битов, чем необходимо для модульного индексирования одинаковых размеров. Это полезно для уменьшения количества конфликтов. Это может создать проблемы с наложением, которые не будут присутствовать в кеше с модульным индексом того же размера и ассоциативности.