Eu estive pensando em escrever um sistema operacional hobby para alguns dos processadores ARM. Existem muitos computadores de placa única populares com o ARM MPU, então eu simplesmente queria comprar um deles (escolhendo um com mais documentação aberta). Fiquei surpreso quando descobri que mesmo as placas com memória suficiente não têm MPUs com unidade de gerenciamento de memória.
Como eu sempre trabalhei com processadores i386 + e nunca mais nada (exceto algumas PICs de microchip), agora estou confuso e não tenho certeza se é possível escrever um sistema operacional em funcionamento cuja funcionalidade não seja limitada quando comparada aos sistemas operacionais escritos para MPUs com MMU.
Eu poderia pensar em algumas soluções para "substituir" ou "simular" a MMU e tenho algumas perguntas:
- Nos processadores Intel nos modos de 16 e 32 bits, há uma maneira de usar segmentos e seletores de segmentos para usar diferentes blocos de memória em diferentes tarefas. Isso significa que eu poderia alterar o espaço da memória alterando o conteúdo dos registradores de segmento ao fazer uma alternância de tarefas no x86. Existem conceitos gerais para segmentação de memória que poderiam ser usados na arquitetura ARM?
- Ao carregar um arquivo de objeto vinculado em vez de executável, eu poderia usar as realocações (correções) ou posicionar o código independente para apontar tarefas em partes da memória da mesma maneira como se eu mapeasse a memória usando estruturas de paginação. Isso seria eficaz o suficiente?
- Também li algo sobre as unidades de proteção de memória nos processadores ARM. Estes poderiam ser úteis?
Existem maneiras "usuais" de gerenciar tarefas em sistemas sem MMU?