Definições conflitantes de memória virtual

2

Parece que existem duas definições de memória virtual, e eu me pergunto se elas descrevem a mesma coisa ou é que dois conceitos semelhantes, mas distintos, são chamados da mesma coisa?

Definição 1 : um meio de estender a RAM usando armazenamento secundário

"A memória virtual é um recurso de um sistema operacional (SO) que permite que um computador compense a falta de memória física" - techtarget

"A memória virtual é RAM simulada. Quando você tiver usado toda a sua memória RAM, o seu computador irá transferir dados para um espaço vazio no disco rígido." - delete-computer-history

"A memória virtual é uma técnica que permite a execução de processos que não estão completamente disponíveis na memória" - tutorialspoint

Definição 2 : sistema pelo qual a memória é endereçada

"a memória virtual é uma técnica de gerenciamento de memória ... Ela mapeia endereços de memória usados por um programa, chamados endereços virtuais, em endereços físicos na memória do computador". - wikipedia

e a memória virtual é responsável por dar a um programa o seu próprio espaço de endereçamento, de modo que pode assumir que está começando no endereço 0x00

Pergunta : estou confuso? Como essas definições são compatíveis?

    
por Celeritas 06.01.2016 / 07:59

3 respostas

2

Memória virtual é qualquer memória que não é necessariamente mapeada de um para um para a memória física. Geralmente, descreve um conceito ou arquitetura e implica alguma interface para usá-lo.

Então, basicamente, ambas as definições declaradas podem ser aplicadas: Pode ser uma memória armazenada em outra mídia que não a RAM principal e pode ter endereços que não correspondem a endereços físicos.

Por exemplo, no Windows, seus aplicativos podem ter áreas de memória compartilhando o mesmo endereço virtual, mas com conteúdos diferentes, enquanto algumas outras áreas em endereços iguais compartilham o mesmo conteúdo, por exemplo, código de bibliotecas, e você também pode compartilhar conteúdos em endereços diferentes para cada aplicativo, especialmente com ASLR, onde os endereços são randomizados.

Ao mesmo tempo, o endereçamento virtual também apresenta um meio de mapear a memória virtual para o disco de forma transparente, geralmente com a ajuda de exceções de CPU ou interrupções que são levantadas quando o código acessa a memória que não é mapeável para RAM física. O sistema pode carregar automaticamente os dados na RAM e, em seguida, conceder acesso a ela.

    
por 06.01.2016 / 09:52
0

Eles estão descrevendo a mesma coisa. O artigo da Wikipedia é uma explicação técnica. Eu acho que a introdução do artigo é pobremente / desajeitadamente, no entanto. O corpo principal do artigo descreve isso muito bem.

Memória virtual, como um substantivo, é qualquer armazenamento usado para guardar o que estaria na memória, mas não é, geralmente porque não há espaço suficiente lá ou não será necessário por um tempo (relativamente "um tempo" pode ser frações de segundo. Normalmente, isso é espaço em algum tipo de armazenamento de longo prazo emprestado para o propósito (arquivos de páginas em discos rígidos são o exemplo comum). Em algumas situações (como para servidores), isso pode ser um hardware construído para esse propósito.

O artigo da Wikipedia fala sobre isso, mas expande o conceito para os subsistemas (como o endereçamento virtual) que ajudam a tornar a implementação possível.

    
por 06.01.2016 / 08:32
0

Eles estão descrevendo duas coisas (relacionadas). O primeiro é descrever como o sistema lida com a falta de memória física suficiente, trocando algumas informações entre a memória física e uma unidade de disco. Isso é oculto dos programas em execução pelo sistema operacional e faz com que a memória física pareça maior do que realmente é. Tente procurar arquivos de troca de RAM

O segundo está descrevendo como um processador decide qual parte da memória (normalmente a memória física real) deve ser acessada para cada programa em execução em um sistema. Pode ser descrito melhor como endereçamento de memória virtual. Desta forma, cada programa em execução na máquina pode pensar que tem o seu próprio bloco de memória dedicado, começando no endereço 00000, mas na realidade os blocos de memória estão realmente espalhados pela memória física. Tente procurar endereços de memória, ponteiros

    
por 06.01.2016 / 09:54