Você pode executar um sistema operacional de vários processos, mesmo sem suporte de hardware (sem MMU ), com todos os ponteiros representando um endereço físico. Você, no entanto, perde vários recursos-chave normalmente fornecidos pela MMU:
- Como um ponteiro sempre aponta para um local específico na RAM, não é possível trocar (ou apenas de maneira muito limitada). Normalmente, a MMU gera uma exceção quando não consegue encontrar uma página física para um determinado endereço virtual, e o manipulador de exceções fornecido pelo SO busca a página da troca.
- Como um ponteiro é desreferenciado sem verificação, cada processo pode acessar a memória de outros processos e a memória do kernel. Normalmente, a MMU gera uma exceção quando não consegue encontrar uma página física para um determinado endereço virtual, e o manipulador de exceções fornecido pelo SO encerra o processo para tentar um acesso inválido.
- Como o mesmo ponteiro tem o mesmo significado em diferentes processos, não é possível implementar facilmente o garfo . Normalmente, o efeito de
fork
é fazer uma cópia¹ da memória física do processo e criar um novo mapa de memória virtual dos mesmos endereços virtuais para os novos endereços físicos.
Existem sistemas operacionais unix que funcionam em sistemas sem MMU.
- MINIX é uma variante unix originalmente desenvolvida por Andrew Tanenbaum como um companheiro de seu livro Sistemas Operacionais: Design e Implementação . As versões originais foram executadas nos PCs da época, que não suportavam memória virtual. (Tendo em conta os seus interesses, eu recomendo a leitura deste livro, mesmo uma edição mais antiga, se é tudo o que você pode pagar.)
-
µCLinux é uma variante do Linux para microcontroladores sem uma MMU . As limitações do µCLinux incluem a não implementação de uma bifurcação geral (somente
vfork
é suportado) e a ausência de proteção de memória; mas há multitarefa preemptiva.
¹ Em unices modernos, isso geralmente é feito preguiçosamente (copy-on-write), que novamente depende da MMU que gera uma exceção quando não consegue encontrar uma página física.