O chip MMU (Memory Management Unit) é necessário para que um processador tenha suporte a memória virtual?

13

O chip MMU (Memory Management Unit) é necessário para que um processador tenha suporte a memória virtual?

É possível emular a funcionalidade MMU no software? (Estou ciente de que provavelmente terá um grande impacto no desempenho).

    
por yoyo_fun 02.10.2017 / 11:07

3 respostas

19

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 ...).

    
por 02.10.2017 / 11:13
7

Depende exatamente do que você chama de memória virtual. Um modelo interessante é o antigo modelo Win16 (mais conhecido a partir do antigo Windows 3.x, não do Windows NT). Nesse modelo, você tinha as funções GlobalLock e GlobalUnlock , LocalLock e LocalUnlock . Estas eram uma forma de gerenciamento manual e cooperativo da memória virtual. Como isso foi feito no software (aplicativo), ele não exigia uma MMU. E a memória era virtual no sentido de que a memória destravada poderia ser trocada para o disco.

No entanto, no modelo Win16, não há proteção entre diferentes processos. Se outro processo deixasse dados na memória, você poderia sobrescrevê-lo. Esta não é uma restrição fundamental. Com SSDs rápidos hoje em dia, você pode remover completamente um processo não-executado da memória e fazê-lo em um tempo razoável.

    
por 02.10.2017 / 15:20
7

Não é necessário ter uma MMU de hardware, se você tiver um software que possa trocar processos de e para a memória física.

Este foi o modo de operação dos primeiros sistemas operacionais multitarefa. Apenas um processo é residente na memória a qualquer momento, é trocado em sua totalidade quando o intervalo de tempo expira (você pode ver que isso se torna problemático em grandes processos). O conteúdo da memória visto pelo processo em execução no momento não é o mesmo visto por qualquer outro processo, e cada um tem sua própria visão do espaço de endereço.

Algum suporte de hardware é útil - uma noção de área de memória "protegida" para uso próprio do sistema operacional (por exemplo, todos os endereços com conjunto MSB são acessíveis somente no modo supervisor) e um valor "break" indicando o endereço mais alto em uso, mas o hardware de gerenciamento de memória não é um requisito absoluto para a memória virtual; é apenas uma maneira particularmente eficaz de alcançá-lo.

    
por 02.10.2017 / 17:23