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

14

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

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

yoyo_fun
fonte
Qualquer computador totalmente capaz pode emular qualquer outro computador com um impacto suficiente no desempenho. Ou emule qualquer hardware. A única questão é a magnitude do desempenho atingido.
Vality
hoje, todos os processadores precisam de um TLB, por isso possuem uma unidade MM incorporada.
rastafile

Respostas:

22

Qualquer emulador de sistema que emule um sistema que contém uma MMU emula efetivamente uma MMU em software, portanto, a resposta para 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, portanto, é necessário emulação de software completa da CPU executando o software que está sendo controlado ou necessidade de assistência de hardware.

Assim, você pode criar um sistema sem MMU, portar QEMU , adicionar as peças ausentes para tornar a memória virtual realmente útil ( por exemplo , adicionar suporte para troca no sistema host) e executar um sistema operacional que exige MMU no QEMU, com toda a proteção que você esperaria no sistema operacional convidado (com exceção de erros do QEMU).

Um exemplo real e antigo de uma “emulação” sem MMU usada para fornecer memória virtual é a máquina Z , 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 intérprete 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 à memória virtual, pelo menos no nível do sistema operacional. Como indicado no kernel sem MMU? , é possível construir o kernel do Linux para que ele possa ser 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 exigem memória virtual (troca, mmap...).

Stephen Kitt
fonte
aplicativos de máquina virtual também têm um componente emulador MMU?
Yoyo_fun #
Sim - não necessariamente como um componente separado, mas eles têm o suporte necessário na emulação.
Stephen Kitt
7
@JenniferAnderson: Algumas CPUs modernas têm recursos que permitem ao emulador (parcialmente) descarregar a emulação MMU para a própria MMU. Por exemplo, um programa executado dentro de um emulador, ele próprio usará várias páginas de memória emuladas, essas páginas de memória são obviamente "aninhadas" nas páginas de memória usadas pelo emulador. As CPUs Intel e AMD de ponta mais recentes têm suporte para tabelas de páginas aninhadas, o que permite ao emulador expressar esse aninhamento na própria MMU, em vez de ter que emular (caro).
Jörg W Mittag
@ Jörg de fato, obrigado pelo esclarecimento. A maioria dos hipervisores ainda inclui algum nível de emulação de software, para que funcionem sem o suporte extra de hardware. Fiquei impressionado com o aspecto "É possível" da pergunta ;-).
Stephen Kitt
3
@JenniferAnderson: Sim, essa funcionalidade foi introduzida especificamente para para-virtualização. (Observe que não é novidade, a para-virtualização assistida por hardware existe no mundo do mainframe desde o início dos anos 1960.) No entanto, também pode ser usado para outros aplicativos interessantes, como acelerar a coleta de lixo (consulte o coletor C4 na Zing JVM da Azul, por exemplo). No entanto, nota, que tudo isso funciona nos dois sentidos: da mesma forma que se estende MMUs com suporte a virtualização é nada mais do que uma otimização de desempenho e virtualização ...
Jörg W Mittag
7

Depende exatamente do que você chama de memória virtual. Um modelo interessante é o antigo modelo Win16 (mais conhecido no Windows 3.x antigo, não no Windows NT). Nesse modelo, você tinha GlobalLocke GlobalUnlock, LocalLocke LocalUnlockfunções. Essa era uma forma de gerenciamento manual e cooperativo da memória virtual. Como isso foi feito no software (aplicativo), não foi necessário um MMU. E a memória era virtual no sentido de que a memória desbloqueada poderia ser trocada para o disco.

No entanto, no modelo Win16, não há proteção entre processos diferentes. Se outro processo deixar dados na memória, você poderá substituí-los. Esta não é uma restrição fundamental. Atualmente, com SSDs rápidos, você pode remover completamente um processo não em execução da memória e fazê-lo em um tempo razoável.

MSalters
fonte
7

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

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

Algum suporte de hardware é útil - uma noção de uma á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 apenas no modo supervisor) e um valor de "interrupção" indicando o endereço mais alto em uso, mas o gerenciamento de memória o hardware não é um requisito absoluto para memória virtual; é apenas uma maneira particularmente eficaz de alcançá-lo.

Toby Speight
fonte
2
Isso não é memória realmente virtual, porém, é a troca apenas tratamento ... (Nós realmente precisamos definir “memória virtual” para uma resposta adequada a esta pergunta!)
Stephen Kitt
Cada processo tem sua própria visão do espaço de endereço - editarei para esclarecer a definição que estou usando.
precisa
Certo, mas é o mesmo mapeamento individual para todos os processos. (Do ponto de vista dos processos não há muita diferença então não há nenhum argumento real lá ...)
Stephen Kitt
0

As máquinas comerciais originais para fazer VM não tinham MMU - elas tinham VM embutida no processador. Meu pensamento atual é que as MMUs são apenas uma reflexão tardia para colocar a VM em cima dos processadores que não são VM. A VM foi desenvolvida na Universidade de Manchester, e os designers de Burroughs estavam convencidos de que deveriam incluí-la - embora muito inovadores na época.

O Burroughs B5000 (agora máquinas Unisys MCP) usava descritores de memória que impõem limites de memória - saem de um limite e seu programa é despejado (respeitar limites é a base de uma sociedade legal, mas alguns abusam do privilégio, portanto, os limites devem ser impostos).

Os descritores mantêm um endereço de memória, comprimento do bloco e tipo de dados, mas também o bit P de importância ou bit de presença. O p-bit indica que o bloco está na memória. Um bit-p igual a zero significa que o bloco está no armazenamento em massa e o endereço é o endereço de armazenamento, no programa original (código ou dados) ou na VM (dados distribuídos).

Essas máquinas implementaram um modelo de memória hierárquica. As MMUs parecem compensar as deficiências da memória plana, necessitando mapear objetos do usuário na memória plana. A JK Iliffe também projetou máquinas ICL com este modelo:

http://www.computerconservationsociety.org/resurrection/res74.htm#f

https://en.wikipedia.org/wiki/Burroughs_large_systems

A diferença entre essas máquinas e a maioria das de hoje é que elas tratam da arquitetura completa do sistema, não apenas da arquitetura da CPU.

Portanto, parece que não apenas as MMUs não são necessárias, mas os sistemas estão melhores sem elas.

user3717661
fonte
-1

A maioria dos processadores de desktop, laptop e servidor inclui um ou mais TLBs no hardware de gerenciamento de memória e quase sempre está presente em qualquer processador que utilize memória virtual paginada ou segmentada .

Translation_lookaside_buffer

E então, leia sobre a Memória Virtual e o que ela realmente significa. O enorme espaço de endereço virtual não é a ideia principal. A idéia principal é o armazenamento em cache / buffer, em muitos níveis.

Está longe de ser simples, mas esse cache de memória TLB é uma peça importante de hardware sobre a qual o subsistema mm do kernel se baseia (caso contrário, a VM seria em grande parte sobrecarga).


VM =

memória virtual OU máquina virtual. Muito diferente, muito conectado.


Portanto, a resposta é não, um chip MMU (uma unidade separada fora da CPU, na placa principal) não é necessário.

Sim, é necessário algum MMU de hardware (na CPU) para pensar em VM útil. (Começou com essa segmentação 8086 , para a plataforma x86)

rastafile
fonte