O que é memória virtual?

25

Eu verifiquei duas vezes minhas anotações sobre "Memória virtual" e a definição em meu livro de texto é:

Process of allocating a section of secondary storage to act as part of the main memory

Onde Wikipedia diz:

Virtual memory is a computer system technique which gives an application program the impression that it has contiguous working memory (an address space)

e (a Wikipedia também diz)

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

Alguém pode oferecer algum esclarecimento sobre o que está correto?

    
por Yacoby 17.09.2009 / 21:13

6 respostas

38
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 tem, digamos, 2 GB de RAM física, endereçados de 0 a 2G. Um processo pode ver um espaço de endereçamento de 4 GB, o que é totalmente para si. O mapeamento de endereços virtuais para endereços físicos é tratado por uma unidade de gerenciamento de memória, que é 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 sistema operacional 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 é acessada novamente.

Seu livro de texto define a memória virtual (incorretamente) como apenas o número 3.

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

  1. Todos os endereços de memória brutos 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ê envia são fisicamente contíguos. Um array de 8K pode ser virtualmente contíguo (através da MMU), mas duas páginas fisicamente separadas. Se você disser ao dispositivo para escrever 8K de dados para o endereço físico correspondente ao início desse array, ele gravará o primeiro 4K onde você espera, mas o segundo 4K corromperá alguma memória em algum lugar. : - (
por 17.09.2009 / 21:59
5

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

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

Quando você está trabalhando com 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 nelas com o "cérebro" ( seu processador).

No entanto, quando estiver aprendendo informações complexas ou trabalhando com somas complexas, talvez não seja possível encaixar tudo isso em sua cabeça de uma só vez. Você fica confuso, começa a desacelerar, não consegue manter tudo lá de uma vez, e tem que esquecer algo para 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 de uma vez, mas nos referimos a elas enquanto fazemos as somas. Podemos não ser capazes de lembrar uma lista enorme de números de vendas para o mês, mas podemos olhar para as páginas, obter as informações um pouco de cada vez e processar cada bit. Isso é como o computador "paginando" sua memória - escrevendo páginas cheias de informações e colocando-as em "memória virtual" para referência futura, e percebendo que precisa de uma página e carregando a página de volta da memória virtual para a memória real. No linux e no unix, o local onde 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, então algumas páginas são colocadas no disco e carregadas novamente mais tarde.

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

Em um (moderno) computador multitarefa, que pode executar vários 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 vêem programas de outros usuários ou até mesmo outros programas. Eles não vêem "memória real" - eles vêem sua própria "memória virtual".

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

Assim, 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 para esse programa e seus endereços correspondentes (o "espaço de endereço" do programa) são pesquisadas e a página que corresponde a esse bloco de memória é encontrado. Essa página pode ser carregada em algum lugar na memória real, em cujo caso o programa recebe acesso ou pode ser paginado para um disco. Se for paginado, ele acionará uma "falha de página" - o disco será acessado e a página será carregada na memória. Portanto, o programa funciona mesmo quando não há memória suficiente, mas funciona LENTAMENTE, se é 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 a página na memória, você terá um problema. Nesse caso, alguma outra página 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 ser igualmente páginas do mesmo programa. Você vê isso às vezes em programas gráficos, por exemplo, em sistemas altamente carregados, quando parte da imagem é carregada lentamente e desenhada rapidamente, então a próxima parte é carregada igualmente lentamente e desenhada rapidamente, e quando você volta a trabalhar com o primeiro parte, é lento novamente. Isso é porque eles estão sendo carregados para serem trabalhados, então trocados novamente, então algo mais pode ser trabalhado. Obviamente, esta é uma maneira muito lenta de trabalhar, e o que você realmente precisa é de mais memória real.

    
por 18.09.2009 / 00:58
0

Eu sei que é tarde demais ... mas ainda acho ú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 swap era área na unidade de disco. A memória de troca é geralmente chamada de espaço de troca. Espaço de troca refere-se à parte da memória virtual que é reservada como um local de armazenamento temporário. O espaço de troca é utilizado quando a RAM disponível não consegue atender ao requisito da memória do sistema
  • Você pode consultar o link abaixo para obter mais detalhes
por 15.09.2015 / 09:46
-2

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

"Virtual" como definido no Dictionary.com: "temporariamente simulado ou ampliado por software de computador: um disco virtual na RAM; memória virtual em um 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 memória adicional é necessária, o sistema trocará dados na memória do sistema que não são necessários para o disco rígido ou recurso que você configurou. Isso libera a memória do sistema para que seu aplicativo possa continuar a tarefa que estava realizando.

A troca é um processo contínuo e, portanto, se você atualizar sua memória, você verá uma melhoria de desempenho, já que o sistema não deve exigir a troca para a memória mais lenta como o mais freqüente.

    
por 17.09.2009 / 21:29
-2

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

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

    
por 15.09.2015 / 11:32
-4

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

É complicado, e às vezes lento, porque o Windows não desfragmenta essa parte do disco rígido.

As melhores 2 dicas que posso oferecer: 1) Virt Mem deve ser ajustado em min e max em aproximadamente 1,5X de sua memória física. ex. 2 GB de RAM = 3070 MB de Virt. 2) Quando desfragmentar, desligue seu arquivo de paginação. Desfragmentar 2x e redefinir novamente para o número original. Isso dá uma fatia limpa da unidade e aumentará a velocidade do arquivo de paginação.

    
por 17.09.2009 / 21:20