Eso depende tanto del procesador (no solo de la serie del procesador, puede variar de un modelo a otro) como de los sistemas operativos, pero existen principios generales. Si un procesador es multinúcleo no tiene un impacto directo en este aspecto; el mismo proceso podría ejecutarse en múltiples núcleos simultáneamente (si es multiproceso), y la memoria se puede compartir entre procesos, por lo que la sincronización de caché es inevitable independientemente de lo que ocurra en un cambio de contexto.
Cuando un procesador busca una ubicación de memoria en la memoria caché, si hay una MMU , puede usar la dirección física o virtual de esa ubicación (a veces incluso una combinación de ambas, pero eso no es realmente relevante aquí).
Con las direcciones físicas, no importa qué proceso esté accediendo a la dirección, los contenidos se pueden compartir. Por lo tanto, no es necesario invalidar el contenido de la memoria caché durante un cambio de contexto. Si los dos procesos asignan la misma página física con diferentes atributos, esto es manejado por la MMU (que actúa como una MPU (unidad de protección de memoria)). La desventaja de un caché direccionado físicamente es que la MMU debe ubicarse entre el procesador y el caché, por lo que la búsqueda de caché es lenta. Los cachés L1 casi nunca son direcciones físicas; cachés de nivel superior pueden ser.
La misma dirección virtual puede denotar diferentes ubicaciones de memoria en diferentes procesos. Por lo tanto, con un caché prácticamente direccionado, el procesador y el sistema operativo deben cooperar para garantizar que un proceso encuentre la memoria correcta. Existen varias técnicas comunes. El código de cambio de contexto proporcionado por el sistema operativo puede invalidar todo el caché; Esto es correcto pero muy costoso. Algunas arquitecturas de CPU tienen espacio en su línea de caché para un ASID (identificador de espacio de direcciones), la versión de hardware de una ID de proceso, también utilizada por la MMU. Esto separa efectivamente las entradas de caché de diferentes procesos, y significa que dos procesos que mapean la misma página tendrán vistas incoherentes de la misma página física (generalmente hay un valor ASID especial que indica una página compartida, pero estos deben vaciarse si no están asignados a la misma dirección en todos los procesos donde están asignados). Si el sistema operativo se encarga de que los diferentes procesos usen espacios de direcciones no superpuestos (lo que anula el propósito de usar la memoria virtual, pero a veces se puede hacer), las líneas de caché siguen siendo válidas.
La mayoría de los procesadores que tienen una MMU también tienen un TLB . El TLB es un caché de asignaciones de direcciones virtuales a direcciones físicas. El TLB se consulta antes de las búsquedas en cachés direccionadas físicamente, para determinar la dirección física rápidamente cuando sea posible; el procesador puede comenzar la búsqueda de caché antes de que se complete la búsqueda de TLB, ya que a menudo las líneas de caché candidatas se pueden identificar desde los bits intermedios de la dirección, entre los bits que determinan el desplazamiento en una línea de caché y los bits que determinan la página. Las memorias caché con dirección virtual omiten el TLB si hay un impacto en la memoria caché, aunque el procesador puede iniciar la búsqueda de TLB mientras consulta la memoria caché, en caso de una falla.
El TLB en sí mismo debe administrarse durante un cambio de contexto. Si las entradas TLB contienen un ASID, pueden permanecer en su lugar; el sistema operativo solo necesita vaciar las entradas TLB si su ASID ha cambiado de significado (por ejemplo, porque un proceso ha salido). Si las entradas de TLB son globales, deben invalidarse al cambiar a un contexto diferente.