Qualquer emulador de sistema que emule um sistema contendo uma MMU efetivamente emula uma MMU em um software, portanto a resposta à sua pergunta, conforme declarada, é "sim". No entanto, a memória virtual requer alguma maneira de impor o controle de acesso à memória, ou pelo menos a tradução de endereços, para que ele precise de emulação total de software da CPU que está sendo controlada ou precise de assistência de hardware. p>
Então você poderia construir um sistema sem MMU, portar QEMU , adicionar as partes que faltam para tornar a memória virtual realmente útil ( por exemplo, , adicione suporte para swap no sistema host), e execute um sistema operacional que requer MMUs no QEMU, com toda a proteção que você esperaria no sistema operacional convidado (exceto os bugs do QEMU). Um exemplo real e antigo de uma "emulação" sem MMU usada para fornecer memória virtual é o Z-machine , que era capaz de paginar e trocar seu código e dados, em sistemas de 8 bits no final dos anos setenta e início dos anos oitenta. Isso funcionou ao emular um processador virtual no processador real subjacente; Dessa forma, o interpretador mantém controle total sobre o layout da memória que o programa em execução "vê". Na prática, geralmente é considerado que uma MMU é necessária para suporte de memória virtual, pelo menos no nível do sistema operacional. Como indicado kernel sem MMU? , é possível construir o kernel do Linux para que ele possa executado em sistemas sem uma MMU, mas a configuração resultante é muito incomum e apropriada apenas para casos de uso muito específicos (sem software hostil em particular). Pode não suportar muitos cenários que requerem memória virtual (troca, mmap
...).