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).
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).
Respostas:
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
...).
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 GlobalLock
e GlobalUnlock
, LocalLock
e LocalUnlock
funçõ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.
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.
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.
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 .
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)