Как виртуально индексированный кеш с физическими тегами решает проблему омонимов?

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

Одним из известных решений проблемы омонимов в виртуальном кэше является использование физических тегов для кэша; то есть: проиндексируйте кеш с частью виртуального адреса, но сделайте тег частью физического адреса. Я не понимаю, как это работает.

В моем понимании процессор отправляет виртуальный адрес в кеш. Как процессор узнает, какой физический тег проверять, если он не отправляет какие-либо физические теги в кеш? Например, с обычным физическим кешем, если вы хотите увидеть, существует ли 00001111 в кеше, где 0000 - это биты тега, а 1111 - биты индекса, вы проиндексируете кеш на 1111, и если вы получите попадание, посмотрите, является ли тег для индекса 1111 0000.

Однако, если ваш виртуальный адрес 00001111, что соответствует физическому адресу, скажем, 10101010, процессор отправит 00001111 в виртуальный кеш. Как кеш узнает, какие биты физического тега проверять (1010), если эти теги отсутствуют в виртуальном адресе, отправленном процессором? Откуда физический адрес?

Проще говоря, предположим, что VA 1 сопоставляется с 3 физическими адресами: 2, 3 и 4. Если мой процессор запрашивает кеш с виртуальным адресом 1, как кеш даже узнает, что он должен искать 2, 3 и 4? Разве не неоднозначно, какой физический адрес я пытаюсь найти?


person WhoopsBing    schedule 04.03.2019    source источник
comment
Вам нужно будет объяснить более подробно. Вы используете академическую тарабарщину, которую авторы учебников вкладывают в книги, чтобы сбить с толку учащихся. Кроме того, неясно, является ли это вопросом программирования, а не вопросом проектирования оборудования.   -  person user3344003    schedule 05.03.2019


Ответы (1)


Термин «виртуально проиндексированный» просто означает, что индекс не требует перевода. Это происходит, если индекс полностью включен в часть page_offset преобразования виртуального адреса в физический.

Предположим, у вас есть страницы размером 4 КБ. Это означает, что 12 младших разрядов адресов не нуждаются в какой-либо трансляции.

Теперь предположим, что у вас есть кэш 32 КБ (2 ^ 15), с 64b (2 ^ 6) строками и ассоциативностью 8. Количество строк - 2 ^ 9, а количество наборов - 2 ^ 6. Таким образом, ваш индекс составляет 6 бит. Поскольку строки имеют размер 64b, смещение строки составляет 6b, а часть (индекс + смещение) - 12b. Вы можете заметить, что он равен размеру смещения страницы и не требует перевода. Это то, что называется виртуально индексированным кешем.

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

Каким-то образом термин виртуально индексированный вводит в заблуждение, поскольку он может применяться только тогда, когда физические и виртуальные индексы идентичны.

person Alain Merigot    schedule 04.03.2019