Existem dois aspectos relacionados aos caches e alias de VIPT. E os problemas podem ser um pouco diferentes entre arquiteturas de conjuntos de instruções.
1)
Existem várias maneiras de mapear os endereços virtuais de cada processo para os endereços físicos externos.
Alguns usam "identificadores de processo" ou "identificadores de espaço de endereço" (iirc ARM, SPARC, MIPS) onde cada processo em execução recebe um valor diferente usado para selecionar tabelas de páginas diferentes.
Alguns usam endereços "lógicos / físicos", onde os endereços de cada processo (= lógico) são traduzidos em um espaço de endereço maior (por exemplo, de 32 a 52 bits) (= virtual) compartilhado entre todos os processos, e os TLBs transformam esses endereços virtuais estendidos em endereços físicos. PowerPCs são assim.
Para evitar a necessidade de liberar todos os TLBs e todo o cache durante cada alternância de contexto, as tags de cache (e TLBs) podem armazenar os identificadores de espaço de endereço correspondentes ou endereços virtuais estendidos: Cada endereço de cada processo é diferente e nenhum alias é possível ( bem, às vezes é esperado um aliasing, por exemplo, onde executar código de kernel privilegiado mapeado no mesmo intervalo de endereços virtuais de todos os processos)
2)
Um problema mais sutil é quando vários processos compartilham a mesma área de memória física. Esse intervalo de memória física pode ser mapeado em diferentes endereços virtuais por cada processo. A modificação por um processo pode não ser visível pelo outro. Particularmente com caches de write-back, onde as gravações não são encaminhadas imediatamente para a RAM. Uma solução, com a assistência do sistema operacional, é garantir algum alinhamento entre os processos, dependendo do tamanho do cache, mesmo que os endereços virtuais sejam diferentes entre os diferentes processos, eles terão um alias na mesma linha de cache e se ejetarão automaticamente.
Os caches virtualmente indexados são usados principalmente em CPUs simples (antigas), devido a esses problemas de alias. Atualmente, uma técnica muito comum é limitar cada tamanho do cache L1 ao tamanho da página MMU (geralmente 4kB ou 8kB) para que o índice do cache seja compartilhado entre endereços físicos e virtuais, a busca do cache ocorre ao mesmo tempo que a resolução do endereço MMU .