O que é memória virtual?


27

Eu estava checando minhas anotações para 'Memória virtual' e a definição no meu livro é:

Processo de alocação de uma seção do armazenamento secundário para atuar como parte da memória principal

Onde, como a Wikipedia diz:

A memória virtual é uma técnica de sistema de computador que dá a um programa aplicativo a impressão de que ele possui memória de trabalho contígua (um espaço de endereço)

e (Wikipedia também diz)

Observe que "memória virtual" é mais do que "usar espaço em disco para aumentar o tamanho da memória física"

Alguém pode oferecer algum esclarecimento sobre qual é o correto?


Acredito que a nota da Wikipedia envolva algumas qualificações sobre o que é usado em termos de coisas contíguas.
JB rei

Essa pergunta provavelmente obteria uma resposta melhor no SO.
Captain Segfault 17/09/09

2
Não confunda o que é memória virtual e como ela é usada. A primeira frase da Wikipedia está definindo o que é. Seu livro está falando sobre como é normalmente usado. Quando as pessoas falam sobre "páginas", estão falando sobre uma implementação específica da memória virtual.
Tony Lee

2
Seu livro de texto está completamente errado. Existem muitas máquinas com memória virtual e nenhum armazenamento secundário. Da mesma forma, havia muitas máquinas que podiam usar o armazenamento secundário como parte da memória principal, mas não suportavam a memória virtual. "Memória virtual" é algo que não é memória, mas é acessado como memória. Seu livro está definindo troca ou paginação.
David Schwartz

1
O manual o define de maneira totalmente incorreta, o armazenamento secundário não faz parte da definição. E mesmo a declaração da Wikipedia sobre "mais do que espaço em disco" é enganosa, porque pode não envolver disco de forma alguma - essa afirmação parece estar "estendendo a memória para o disco" mais alguma outra coisa.
Kelvin

Respostas:


41
Note that "virtual memory" is more than just "using disk space to extend physical memory size"

A memória virtual é uma camada de abstração fornecida para cada processo. O computador possui, digamos, 2 GB de RAM física, endereçado de 0 a 2G. Um processo pode ver um espaço de endereço de 4 GB, que ele possui inteiramente para si. O mapeamento de endereços virtuais para endereços físicos é tratado por uma unidade de gerenciamento de memória, gerenciada pelo sistema operacional. Normalmente, isso é feito em "páginas" de 4KB.

Isso fornece vários recursos:

  1. Um processo não pode ver a memória em outros processos (a menos que o SO queira!)
  2. A memória em um determinado endereço virtual pode não estar localizada no mesmo endereço físico
  3. A memória em um endereço virtual pode ser "paginada" para o disco e, em seguida, "paginada" quando for acessada novamente.

Seu livro define a memória virtual (incorretamente) como apenas o nº 3.

Mesmo sem qualquer troca, você precisa estar ciente da memória virtual se escrever um driver de dispositivo para um dispositivo que faça DMA (acesso direto à memória). Seu código de driver é executado na CPU, o que significa que seus acessos à memória são por meio da MMU (virtual). O dispositivo provavelmente não passa pela MMU e, portanto, vê endereços físicos brutos. Portanto, como escritor de driver, você precisa garantir:

  1. Todos os endereços de memória bruta que você passa para o hardware são físicos, não virtuais.
  2. Quaisquer blocos grandes (de várias páginas) de memória que você enviar são fisicamente contíguos. Uma matriz de 8K pode ser virtualmente contígua (por meio da MMU), mas duas páginas fisicamente separadas. Se você instruir o dispositivo a gravar 8K de dados no endereço físico correspondente ao início dessa matriz, ele gravará o primeiro 4K onde você espera, mas o segundo 4K irá corromper alguma memória em algum lugar. :-(

4

Vou tentar começar devagar e depois juntar tudo isso para você. É tipo isso:

A memória virtual, como comumente usada, refere-se à "paginação". Como o nome sugere, a paginação é como um bloco de notas humano.

Quando você está elaborando somas simples ou aprendendo informações simples, você faz tudo isso em sua mente: basta carregar todas as informações, processá-las e obter a resposta. É como um computador carregando arquivos do disco rígido - ele carrega os programas ou imagens ou outras informações necessárias para trabalhar em sua "memória real" (ou "memória física") e trabalha neles com seu "cérebro" ( seu processador).

No entanto, quando você estiver aprendendo informações complexas ou trabalhando com somas complexas, talvez não consiga encaixar tudo isso na sua cabeça de uma só vez. Você fica confuso, começa a desacelerar, falha em manter tudo lá de uma vez e precisa esquecer algo para se lembrar de outra coisa.

A solução humana é usar um bloco de notas. Anotamos nas páginas todas as coisas que não conseguimos lembrar ao mesmo tempo, mas nos referimos a elas enquanto fazemos as somas. Talvez não consigamos lembrar uma lista enorme de números de vendas para o mês, mas podemos olhar as páginas, obter as informações um pouco de cada vez e processar cada bit. É como o computador "paginando" sua memória - escrevendo páginas cheias de informações e colocando-as na "memória virtual" para referência posterior, e percebendo que precisa de uma página e carregando-a da memória virtual na memória real. No linux e no unix, o local em que essas páginas são armazenadas é literalmente chamado de "arquivo de paginação", e as páginas de dados na memória são literalmente chamadas de "páginas". Sistemas diferentes têm nomes diferentes para essas coisas, mas o conceito geral é o mesmo.

Então, realmente, a paginação é muito simples. Todas as páginas de informações não cabem na memória; portanto, algumas páginas são colocadas em disco e carregadas novamente mais tarde.

Agora, onde fica mais complicado, os sistemas modernos apresentam mapeamento de memória e proteção de memória, que geralmente são gerenciados pelo mesmo sistema de hardware no computador: a unidade de gerenciamento de memória ou MMU.

Em um computador multitarefa (moderno), que pode executar muitos programas ao mesmo tempo e possui proteção de memória, cada programa geralmente é separado de outros programas em execução no mesmo sistema. Dessa forma, um programa não pode alterar outro programa simplesmente acessando sua memória - a MMU separa fisicamente o espaço de endereço de um programa do de outros. Em outras palavras, os programas do usuário não veem os programas de outros usuários nem mesmo outros programas. Eles não veem "memória real" - eles veem sua própria "memória virtual".

Agora, esse conceito de isolamento de memória e o arquivo de paginação são duas coisas conceitualmente diferentes, e é provavelmente por isso que você está confuso. No entanto, a chave é que ambos trabalham usando a MMU - a unidade de gerenciamento de memória, que divide a memória em páginas e mapeia as páginas para um espaço de endereço virtual.

Portanto, quando um programa solicita a memória em um determinado "endereço de memória", o que realmente acontece é que as páginas de memória desse programa e seus endereços correspondentes (o "espaço de endereço" do programa) são consultados e a página que corresponde a esse bloco de memória foi encontrado. Essa página pode ser carregada em algum lugar da memória real, caso em que o programa recebe acesso ou pode ser paginada em um disco. Se for paginado, ele dispara uma "falha de página" - o disco é acessado e a página é carregada na memória. Portanto, o programa funciona mesmo quando não há memória suficiente, mas é executado LENTAMENTE, se for necessário usar o disco para o que normalmente seria um acesso muito rápido à memória.

Agora, se não houver espaço suficiente para carregar essa página na memória, você terá um problema. Nesse caso, alguma página OTHER que já esteja na memória deve ser "trocada" para o disco, para que a primeira página do programa possa ser carregada. Ou, podem igualmente ser páginas do mesmo programa. Você vê isso algumas vezes em programas gráficos, por exemplo, em sistemas muito carregados, quando parte da imagem é carregada lentamente e desenhada rapidamente, a próxima parte é carregada igualmente lentamente e desenhada rapidamente e quando você volta ao trabalho com a primeira parte, é lento novamente. Isso ocorre porque eles estão sendo carregados para serem trabalhados e depois trocados novamente, para que outra coisa possa ser trabalhada. Obviamente, essa é uma maneira muito lenta de trabalhar, e o que você realmente precisa é de mais memória REAL.


Eu discordo 100% desta resposta. Se "memória virtual" se referisse à paginação, um sistema que não pagina (por exemplo, um sem troca ou arquivos de página ativados) não suportava memória virtual. Mas isso é obviamente insano.
David Schwartz

@DavidSchwartz - inicialmente tive uma reação semelhante à sua, mas ao ler a resposta com mais detalhes, não acho que seja tão ruim assim. Considere Wikipedia / memória virtual / Paged : "Quase todas as implementações de memória virtual dividem um espaço de endereço virtual em páginas, blocos de endereços de memória virtual contíguos". Ou seja, "paginação", no sentido amplo, não requer um arquivo de paginação , mas refere-se ao mapeamento de endereços virtuais em endereços físicos.
Home

1
Hmm, por outro lado, Lee diz: "Todas as páginas de informação não cabem na memória, então algumas páginas são colocadas em disco e carregadas novamente mais tarde.", Então David está certo: essa resposta perde o fato essencial de que paginação não se trata apenas de paginação em disco . No lado positivo, Lee continua mencionando outros benefícios da memória virtual (isolamento de memória). Se essa resposta fosse reformulada para não confundir "mapeamento de páginas da memória virtual" com "paginação no disco", seria mais útil.
Home

@ToolmakerSteve O problema é que esse é um equívoco muito comum e tudo o que fortalece esse equívoco é, na OMI, uma coisa ruim. Aqui é especialmente ruim quando essa resposta está tentando explicar os conceitos básicos de uma maneira muito simples - é importante não estabelecer uma base com base em um equívoco comum!
David Schwartz

@DavidSchwartz - eu concordo. Você está certo, ele não está definindo "memória virtual", ele está definindo "como um arquivo de paginação funciona". No começo, pensei que o problema era apenas o fato de Lee não conseguir distinguir entre "paginação = mapeamento de páginas de memória do virtual para o físico" versus "arquivo de paginação = mapeamento de páginas no disco", mas após a releitura, ele realmente estava falando apenas sobre o mapeamento para o disco. (Como podemos ver, a partir da citação de livros didáticos, de todas as outras respostas, exceto o capitão, e a partir de uma pesquisa do Google, esta mescla dos dois conceitos é muito difundida Tenho certeza de que fui culpado disso..)
Você está em: Home

0

Eu sei que é tarde demais .... mas achei que ainda era útil.

  • Todos estão corretos com base em diferentes pontos de vista.
  • A memória virtual é uma técnica de gerenciamento de memória, enquanto a memória de troca estava na área da unidade de disco. A memória de troca é geralmente chamada como espaço de troca. O espaço de troca refere-se à parte da memória virtual reservada como um local de armazenamento temporário. O espaço de troca é utilizado quando a RAM disponível não é capaz de atender aos requisitos de memória do sistema
  • Você pode consultar o link abaixo para obter mais detalhes

-2

Bem, se entendermos a palavra virtual, acho que podemos entender como ela se relaciona com a memória.

"Virtual", conforme definido no Dictionary.com: "temporariamente simulado ou estendido por software de computador: um disco virtual na RAM; memória virtual no disco rígido".

No caso da memória virtual, o sistema está simulando a memória do sistema usando recursos de memória mais lentos (por exemplo, disco rígido, pen drive etc.). Quando é necessária memória adicional, o sistema troca dados na memória do sistema, o que não é necessário para o disco rígido. unidade ou recurso que você configurou. Isso libera memória do sistema para que seu aplicativo possa continuar a tarefa que estava executando.

A troca é um processo contínuo e, portanto, se você atualizar sua memória, deverá ver uma melhoria no desempenho, pois o sistema não deve exigir a troca para a memória mais lenta com frequência.


-2

A memória virtual é um recurso de um sistema operacional (SO) que permite a um computador compensar a escassez de memória física transferindo temporariamente páginas de dados da RAM (memória de acesso aleatório) para o armazenamento em disco.

Isso significa que é como um espelho ou uma amostra de memória usada na máquina virtual ou na caixa virtual para tentar sistemas operacionais sem formatar o computador.


Não, isso é paginação.
David Schwartz

-4

Memória virtual é um bloco do seu disco rígido que o sistema usa como arquivo de paginação, além da RAM física.

Fica complicado e, às vezes, lento, porque o Windows NÃO desfragmenta essa parte do seu disco rígido.

As 2 melhores dicas que posso oferecer: 1) O Virt Mem deve ser definido em mínimo e máximo em aproximadamente 1,5X sua memória física. ex. 2 GB de RAM = 3070 MB Virt. 2) Ao desfragmentar, desligue o arquivo de paginação. Desfragmente 2x e redefina o número original. Isso fornece uma fatia limpa da unidade e aumenta a velocidade do arquivo de paginação.


1
Isso não é completamente verdade - os gerenciadores de memória modernos virtualizam TODA a memória do sistema. É isso que permite a separação de processos - cada processo pode apenas tocar sua própria memória. O gerenciador de memória é responsável por mapear essas páginas virtuais para o armazenamento real e, opcionalmente, para um disco fixo.
Anthony Giorgio

1
"O Windows NÃO desfragmenta esta parte do seu disco rígido." simplesmente nuke pagefile.sys, reinicie, desfragmente o disco e reative a paginação, voilá, um arquivo de paginação novo e contínuo! no entanto, o PageDefrag da Sysinternals faz um trabalho melhor, pois também colocará o arquivo de paginação no início da unidade / partição para obter melhor desempenho.

1
Se essa resposta estiver correta, um sistema Windows sem arquivos de paginação configurados não poderá fornecer suporte à memória virtual. Mas isso está obviamente errado. Esse sistema ainda pode, por exemplo, mapear arquivos no espaço de endereço do processo além da RAM física, que é um exemplo de memória virtual.
David Schwartz
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.