Unidade de Gerenciamento de Memória ouMMU (doinglêsMemory Management Unit) é um dispositivo dehardware que traduz endereços virtuais em endereços físicos, é geralmente implementada como parte daUnidade Central de Processamento ouCPU (Central Processing Unit), mas pode também estar na forma de um circuito integrado separado. UmMMU é efetivo em gerenciamento dememória virtual, manipulação e proteção de memória, controle decache e, em arquiteturas mais simples de computador, como em sistemas de 8 bits, bank switching.
Em designs anteriores demicroprocessadores, o gerenciamento de memória era feita por umcircuito integrado separado como o doVLSI VI475 (1986), o Motorola 68851(1984) usado com a CPU doMotorola 68020 noMacintosh II, ou o Z8015 (1985)[1] usado com a família de processadores Zilog Z8000. Mais tarde microprocessadores como o do Motorola 68030 a o Zilog Z280 colocaram aMMU junta com aCPU um mesmo circuito integrado assim como fez a Intel 80286 e mais tarde osprocessadores x86.
Na MMU, o valor no registro de re-locação é adicionado a todo o endereço lógico gerado por um processo do utilizador na altura de ser enviado para amemória.
O programa do utilizador manipula endereços lógicos; ele nunca vê endereços físicos reais.
A memória principal está dividida em dois tipos: a memória física e a memória lógica. A memória lógica é aquela que é visível para os programas, sempre que um programa utilizar memória é esta que estará sendo utilizada. A memória física é a que é implementada em circuitos digitais e é nela que a memória lógica é fisicamente armazenada, geralmente a memória lógica é maior do que a memória física. Para que isso funcione é necessário que seja realizada uma tradução de endereços lógicos para endereços físicos de memória para que um programa que utiliza da memória lógica possa ter uma memória física alocada para si. Para isso é necessário um processo de tradução de endereços lógicos para endereços físicos e esse processo é realizado pela unidade de gerenciamento de memória (MMU).[3]
O sistema atual de MMU divide oespaço de endereçamento virtual (endereços utilizados pelo processador) empáginas, cujo tamanho é de 2n, normalmente essas páginas possuem poucoskilobytes mas podem ser muito maiores. A maioria dos MMUs usa uma tabela páginas na memória chamado de "Page table" (Tabela de página), contendo uma "Page table entry" (PTE ou Entrada da tabela de páginas em português) por página, para mapear números de páginas virtuais para números de páginas físicas na memória principal. A PTE (Page table entry) usa uma cache associada chamadaTranslation Lookaside Buffer (TLB) que é utilizado para evitar a necessidade de acessar a memória principal toda vez que um endereço virtual é acessado. Outras Unidades de gerenciamento de memória podem ter uma matriz privada de memória[4] ouregistradores que mantenham um conjunto de tabelas de páginas. Quando o TLB falha uma tradução, um mecanismo mais lento envolvendo um hardware específico de dados estruturados ou um software auxiliar é usado.[5]
Normalmente o tamanho de uma página é de 4 KiB. Sendo assim, em um espaço de endereçamento de 32 bits, cada processo tem acesso a 4 GiB de memória virtual, o que corresponde a 1 MB de páginas de memória.[6]
APTE também tem informações referente à modificação/escrita da página (dirty bit), quando ela foi utilizada pela última vez (bit de acesso para aLRU(Least recently used) algoritmo de substituição de página), que tipo de processos podem ler e escrever na página e se ela deve ir para a cache.
Às vezes, aPTE proíbe o acesso a uma página virtual, porque esta talvez não esteja alocada na memória RAM física. Neste caso a MMU sinaliza uma “falha na página" para a CPU, a partir daí o sistema operacional então tenta encontrar um espaço vazio na RAM e gera uma nova PTE para mapear essa página para o endereço virtual requisitado.[5]
Em alguns casos, um erro de página pode indicar um “bug” no software, que pode ser prevenido através daproteção de memória: um sistema operacional pode usá-lo para proteger contra programas “errantes”, não permitindo o acesso à memória que um programa específico não deveria ter acesso. Normalmente, umsistema operacional atribui a cada programa de seu próprio espaço de endereço virtual.[5]
A MMU também diminui o problema da fragmentação da memória. Depois de blocos de memória serem alocados e liberados, a memória livre pode ficar fragmentada. Com a memória virtual, uma faixa continua de endereços virtuais podem ser mapeados em vários blocos não contínuos de memória física, esse mapeamento de endereços virtuais não contínuos é um dos benefícios da paginação.[5]
A TLB(Translation Lookaside Buffer) tem um custo elevado devido ao custo dos registradores que possuem também um preço elevado, seu tamanho é limitado e cada MMU possui apenas uma única TLB sendo esta então compartilhada por todos os processos.[6]
Muitos sistemas modernos dividem a memória em páginas com o tamanho de 4 a 64 KiB, normalmente com a capacidade para usar paginas grandes de 2 MiB a 1 GiB. As traduções das páginas são armazenados naTLB(Translation lookaside buffer).
Processadores de aplicativos baseados na arquitetura ARM implementam uma MMU definida pela arquitetura do sistema de memória virtual do ARM. A ARM utiliza uma tabela de página de dois níveis se estiver usando páginas de 4 KB e 64 KB, ou uma tabela de página de um nível no caso de páginas de 1 MB e 16 MB. PTEs incluem permissão de leitura/acesso de gravação baseado no privilégio, informações que serão alocadas namemória cache, e oBit NX.[7]
As páginas doVAX são de 512 bytes, o que é relativamente pequeno comparado com outros sistemas por isso o Sistema operacional pode tratar várias páginas como se fossem uma página maior. Por exemplo, o Linux no VAX agrupa oito páginas assim o sistema é visto como se tivesse páginas de 4 KiB. O VAX divide a memória principal física em quatro regiões cada uma com 1 GiB, e cada uma dessas quatro regiões tem um propósito fixo, são elas.
AMMU doVAX não possui o Bit de Acesso (Accessed Bit) portando os Sistemas Operacionais que implementam a paginação devem encontrar um meio de emular o bit de acesso para que este possa funcionar eficientemente.
A arquiteturax86 possui umaMMU muito complexa com vários modos de operação devido à compatibilidade que foi mantida ao longo dos anos com a evolução do x86. NaIA-32 a CPU primeiro divide a memória em páginas de 4 KiB, o endereço da memória é mascarado para que não seja maior do que 32 bits. O resultado desse endereço pode ser pesquisado através de uma estrutura de árvore, que é dividido da seguinte forma 10 bits para a raiz, 10 bits para as folhas e os outros 12 bits são copiados diretamente para o resultado.
Ax86-64 é uma extensão de 64 bits dox86, a diferença é que quando usado páginas de 4 KiB a tabela de páginas tem quatro níveis ao invés de três. O endereço virtual é dividido em 9 bits para cada um dos quatro níveis da árvore, 12 bits copiados diretamente para o resultado e os 16 restantes ficam inutilizados. Em páginas de 2 MiB são apenas 3 níveis da tabela de páginas. Algumas CPUs mais novas da arquitetura x86 também suportam páginas de 1 GiB com dois níveis de paginação.
A arquitetura de sistema heterogêneo ouHSA (Heterogeneous System Architecture em inglês) é uma arquitetura de processador que integra aCPU com os processadores gráficos (GPUs) no mesmo barramento com tarefas e memória compartilhada. Essa arquitetura possui um espaço de endereço virtual unificado para CPUs, GPUs e DSPs, tornando obsoleto os sistemas de mapeamento e cópia de dados das arquiteturas atuais.[8]
Este artigo foi originalmente baseado em material doFree On-line Dictionary of Computing que é licenciado sob aGFDL.