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