La traducción de direcciones se maneja a través de un búfer de traducción (TLB), que es solo un caché de información de traducción (y algunos metadatos como permisos, cacheabilidad, etc.). El TLB funciona sustituyendo el número de la página física (los bits de dirección por encima de los utilizados para indexar dentro de una página) por el número de página virtual proporcionado (es decir, la página virtual se asigna a la página física). (Dado que las páginas virtuales se alinean con las páginas físicas en la granularidad de la página, los bits de indexación dentro de una página coinciden con las direcciones virtuales y físicas de una página determinada).
Normalmente, para reducir la demora en la recuperación de datos, el caché se indexa con la dirección virtual en paralelo con la búsqueda de TLB; este sería un caché con direccionamiento virtual, pero si solo se usan los bits de índice dentro de una página, entonces también es un caché con direccionamiento físico (porque esos bits de la dirección virtual coinciden con los bits de la dirección física). (Una memoria caché se puede direccionar físicamente al menos parcialmente en paralelo con el acceso a TLB al predecir los bits extra no virtuales o al alimentar los bits adicionales después de indexar parcialmente la memoria caché, pero las compensaciones parecen favorecer las cachés con direcciones virtuales).
(El uso de bits de dirección no físicos en la indexación de la memoria caché puede introducir complejidades, ya que otra asignación de la página podría no utilizar los mismos bits de indexación virtuales).
Actualmente, se prefiere el etiquetado físico cuando se determina un acierto de caché comparando la etiqueta en el índice apropiado con la dirección física solicitada. La coherencia con otros dispositivos que acceden a la memoria (dispositivos de E / S o procesadores), que proporcionan direcciones físicas al sistema, es más fácil con las etiquetas físicas (evitando la necesidad de una dirección física para el mecanismo de traducción de direcciones virtuales, aunque también se pueden proporcionar etiquetas físicas a etiquetas virtuales mediante la duplicación del almacenamiento de etiquetas o mediante el uso de un caché L2 incluido).
Como ejemplo, con un 8KiB, un caché asociativo de conjuntos de dos vías con bloques de 16 bytes que utilizan páginas de 4KiB en un espacio de direcciones de 32 bits, habría 256 conjuntos (grupos de bloques de caché que comparten el mismo índice), que requieren 8 bits para indexar. Una carga de la palabra de 32 bits en 0x00ab_1134 indexaría los conjuntos con 8 bits (0x13), leería las dos etiquetas para ese conjunto y leería las palabras con desplazamiento 0x4 en ambos bloques de datos para el conjunto. (La lectura de ambos bloques reduce el retraso). Al indexar el caché, el número de página, los 20 bits principales de la dirección (0x00ab_1) se presentan a la TLB (generalmente con una ID de espacio de dirección adjunta); asumiendo que la información para esa página está disponible en el TLB (un resultado de TLB), la traducción se envía para compararse con ambas etiquetas, lo que resulta en una coincidencia con una de las etiquetas (en cuyo caso se seleccionan los datos correspondientes a esa etiqueta) o ninguna coincidencia (en cuyo caso hay una falta de caché). (La TLB también verificará si el proceso tiene permiso de lectura para esa página).
Con un caché virtualmente etiquetado, el TLB se puede sacar de la ruta crítica (lo que podría reducir el retraso del acceso al caché con un TLB más grande) ya que solo es necesario para las comprobaciones de permisos, no para la comparación de etiquetas. (La información del permiso incluso podría incluirse con las etiquetas de caché). Por lo general, un sistema tiene un espacio de direcciones virtuales más grande que el espacio de direcciones físico (almacenable en caché), por lo que las etiquetas de direcciones virtuales requerirían más espacio de almacenamiento; esta demanda de almacenamiento se incrementa mediante la adición de ID de espacio de direcciones para evitar tener que vaciar la memoria caché cuando se carga un proceso diferente (un sistema operativo de espacio de dirección único no necesitaría tal descarga).
El artículo de wikipedia para "CPU cache" podría ser útil.