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] Implementar tradução de endereços virtuais e proteção de memória #33

Open daniel-pg opened 11 months ago

daniel-pg commented 11 months ago

No projeto atual, é responsabilidade da(s) MMU(s) fazer tudo menos o principal, que é justamente traduzir endereços lógicos/virtuais vindos da CPU para endereços físicos, que serão enviados para o Controlador de Memória/Barramento.

Existem várias decisões de design que precisam ser consideradas antes de começarmos esse trabalho, como por exemplo:

  1. Quantos níveis de privilégio a CPU vai suportar?
    • Implementar só o modo M (Machine) dispensaria completamente a virtualização de memória (endereço lógico = endereço virtual), e toda requisição de dados da CPU para as MMUs que não estiverem na cache podem ser repassadas para o Controlador de Memória. É o que já está sendo feito!
    • Se entendi bem o manual, somente o modo S (Supervisor) realmente requer virtualização. Só os modos U (User) + M não precisa.
  2. Como implementar o esquema de virtualização? Padrão dita que deve ser por paginamento (em oposição a segmentação). Ver Seção 4.3 do manual (Sv32: Page-Based 32-bit Virtual-Memory Systems).
  3. Como implementar proteção de memória, gerar page-faults em caso de acessos ilegais ou misses da TLB, e como a CPU deve reagir a esses eventos?

Referências: RISC-V Privileged Specification: https://github.com/riscv/riscv-isa-manual/releases/tag/Priv-v1.12