izumizawa / mc851

Projeto com objetivo de desenvolver um sistema computacional contendo, ao menos, um processador e seus componentes periféricos.
5 stars 0 forks source link

[MMU] Checagem de atributos da memória física #35

Open daniel-pg opened 11 months ago

daniel-pg commented 11 months ago

Para fazer a memory-mapped I/O (MMIO) funcionar corretamente, cada uma das MMUs precisa ter informações sobre o mapeamento físico da memória, pois:

  1. Leituras em dispositivos de I/O não podem ser colocadas na cache: não há como manter a coerência da cache pois o valor do periférico pode mudar por conta própria, sem que a CPU escreva nele.
  2. Da mesma forma, não faz sentido escrever na cache sem passar o valor para o dispositivo de I/O.
  3. Dispositivos de I/O geralmente não suportam acessos desalinhados nem escritas de largura menor que uma word, pois ao quebrar um acesso em vários, cada um pode ter efeitos colaterais indesejados.
  4. Outro problema relacionado a efeitos colaterais de escrita/leitura é que algumas regiões do endereço físico não podem ser acessados especulativamente (ex.: fazer prefetch de instruções) nem redundantemente.

A essas propriedades chamamos de Physical Memory Attributes (PMA), e a estrutura de hardware responsável por checa-las é o PMA Checker. As duas maneiras principais de se implementar isso é:

  1. Por meio de um circuito "hardwired" (a dúvida que fica é se isso deve ser colocado na MMU ou no Controlador de Barramento/Memória). O mapeamento de memória é conhecido e fixo no momento de design.
  2. Por meio de registradores de controle mapeados em memória, específicos para a nossa plataforma, que permitem configurar essas propriedades em tempo de execução.