O problema de aliasing aparece em um cache fisicamente marcado com indexação virtualmente?


7

Basicamente, e como um método simples, podemos acessar o cache com o Endereço físico, que é do TLB.

Mas, como outro método, podemos acessar o cache com o Endereço Virtual . Porém, nesse caso, se o cache não for totalmente liberado entre a alternância de contexto (outros dados do processo podem existir no cache), há um problema de alias. A mesma memória pode ser direcionada a partir do endereço virtual diferente.

Mas, no meu livro de texto, incluindo esses problemas, muitos podem ser resolvidos por virtualmente indexados fisicamente . Eu acho que isso ainda pode criar um problema de alias.

Estou errado?


Shubham deu a resposta certa. Para mais detalhes / idéias, você pode ver meu artigo de pesquisa sobre TLB, que analisa mais de 85 artigos. A Figura 3a do artigo discute a subdivisão de endereços e 3b mostra o caso especial em que o alias não ocorre para determinado tamanho de cache, uma vez que o índice de cache é calculado inteiramente a partir do deslocamento da página.
user984260

Respostas:


6

O problema de aliasing pode ser resolvido se selecionarmos o tamanho do cache pequeno o suficiente. Se o tamanho do cache for tal que todos os bits para indexação do cache venham dos bits de deslocamento da página, vários endereços virtuais apontarão para a mesma posição de índice no cache e o alias será resolvido.

Por exemplo, considere o endereço virtual de 32 bits 0xFFFF FFFF, este sistema usa um tamanho de página de 64kB, suponha que o bit de deslocamento da página seja 16 bits. Agora, se selecionarmos Os bits de índice como 10 (número de conjuntos 1024) e o tamanho do bloco como 64 bytes. Em seguida, os bits de índice e os bits de deslocamento de bloco são acomodados nos bits de deslocamento de página do endereço virtual. Considere outro endereço 0xEEEE FFFF, que parece causar alias, mas apesar de ter um endereço virtual diferente, os bits de ordem inferior forçam o mapeamento para o mesmo local no cache e não há alias. A única desvantagem dessa abordagem é que o tamanho do cache é limitado pelo tamanho da página.


Em palavras leigas. A noção de memória virtual inteira depende de diferentes números de páginas virtuais e físicas. Assim, no VI-PT, o número físico é a etiqueta física. Portanto, não há problema de alias (como o endereço físico é único). O endereço virtual é usado para restringir uma entrada no cache usando a indexação da parte de deslocamento (que é de qualquer maneira o mesmo para o endereço físico / virtual). Portanto, este limite de indexação para usar os bits que não sejam de número de página. Daí o tamanho menor do cache.
Anup Buchke 23/07/19

1

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 .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.