Página inicial
O QUE É MEMÓRIA
VIRTUAL
O QUE É MEMÓRIA VIRTUAL
ESTUDO SOBRE MEMÓRIA VIRTUAL
SOBRE
MEMÓRIA VIRTUAL
MEMÓRIA
VIRTUAL
A memória virtual consiste em recursos de hardware e software
com três funções básicas:
(i) realocação (ou recolocação), para assegurar que cada processo (aplicação)
tenha o seu próprio espaço de endereçamento, começando em zero;
(ii) proteção, para impedir que um processo utilize um endereço de memória que
não lhe pertença;
(iii) paginação (paging) ou troca (swapping), que possibilita a uma aplicação
utilizar mais memória do que a fisicamente existente (essa é a função mais
conhecida).
Simplificadamente, um usuário ou programador vê um espaço de endereçamento
virtual, que pode ser igual, maior ou menor que a memória física (normalmente
chamada memória DRAM - Dynamic Random Access Memory).
Paginação para principiantes
Para o usuário que está com pouca memória RAM, paginação é
muito útil pois possibilita que seus programas utilizem um tamanho de sua
escolha para usar como uma memória "RAM" virtual. Mas caso a memória do programa
exceder a memória real de seu sistema, apenas as partes utilizadas pelo processo
atual estarão na memória, o resto estará armazenado no disco rígido.
Como o disco rígido é um hardware mais lento do que a memória RAM, essa memória
virtual que você dimensionou não vai ser igual como se você estivesse utilizando
uma memória RAM normal em seu computador.[3] A melhoria é significativa quando
você usa memória virtual em um computador que não tem a mesma.[2]
História
Todos os computadores modernos de uso genérico utilizam
memória virtual para executar a mais simples das aplicações, tais como
processadores de texto, folhas de cálculo, jogos, leitores multimídia, etc. Os
sistemas operacionais mais antigos, como o DOS e o Microsoft Windows de 1980,[4]
ou os mainframes da década de 1960, geralmente não tinham a funcionalidade da
memória virtual, com as excepções notáveis do Atlas B5000 e o Apple Lisa.
A memória virtual foi inicialmente criada para possibilitar a um programa ser
executado em um computador com uma quantidade de memória principal (física)
menor que o tamanho de todo o espaço do utilizado pelo próprio programa.[5] Ou
seja, o espaço ocupado pelas instruções, dados e pilha de execução de um
programa pode ser maior que o espaço em memória principal disponível. Por
exemplo, um programa que ocupa um total de 64 MiB pode ser executado em um
computador com apenas 32 MiB disponíveis para o programa, bastando que o sistema
operacional se encarregue de manter sempre na memória principal as partes
adequadas à execução naquele momento.[6]
A memória virtual foi desenvolvido por volta de 1959-1962, na Universidade de
Manchester para o Computador Atlas, terminado em 1962.[7] A ideia é atribuída a
John Fotheringham,[8] no entanto, Fritz-Rudolf Güntsch, um cientista alemão,
pioneiro da ciência computacional e, mais tarde, o criador do mainframe
Telefunken TR 440, alega ter inventado o conceito em 1957, na sua tese de
doutorado Logischer Entwurf eines digitalen Rechengerätes mit mehreren asynchron
laufenden Trommeln und automatischem Schnellspeicherbetrieb (Conceito lógico
para um sistema digital computacional com múltiplos sistemas assíncronos de
armazenamento e modo de memória rápida automática).
Funcionamento
Existem dois mecanismos principais para implementação da
memória virtual: paginação e segmentação[9]
Na paginação a memória física é dividida em blocos de bytes contíguos
denominados molduras de páginas (page frames), geralmente com tamanho de 4 KiB
(arquiteturas x86 e x86-64) ou 8 KiB (arquiteturas RISC) de tamanho. Por sua
vez, o espaço de memória de um processo (contendo as instruções e dados do
programa) é dividido em páginas que são fisicamente armazenadas nas molduras e
possuem o mesmo tamanho destas.
Na segmentação existem vários espaços de endereçamento para cada aplicação (os
segmentos). Neste caso, o endereçamento consiste em um par ordenado
[segmento:deslocamento], onde o deslocamento é a posição do byte dentro do
segmento.
Na arquitetura x86 (32 e 64 bits), são usadas a segmentação e a paginação.[10] O
espaço de endereçamento de uma aplicação é dividido em segmentos, onde é
determinado um endereço lógico, que consiste no par [segmento:deslocamento]; o
dispositivo de segmentação converte esse endereço para um endereço linear
(virtual); finalmente, o dispositivo de paginação converte o endereço virtual
para físico, localizando a moldura de página que contém os dados solicitados.
O endereço virtual é encaminhado para a unidade de gerenciamento de memória (MMU
- Memory Management Unit), um dispositivo do processador, cuja função é
transformar o endereço virtual em físico e solicitar este último endereço ao
controlador de memória. A conversão de endereços virtuais em físicos baseia-se
em tabelas de páginas, que são estruturas de dados mantidas pelo sistema
operativo.[2]
As tabelas de páginas descrevem cada página da aplicação (num sistema em
execução, existe pelo menos uma tabela de páginas por processo). Cada tabela é
indexada pelo endereço virtual e contém o endereço físico da moldura
correspondente ou a indicação de que a página está em um dispositivo de
armazenamento secundário (normalmente um disco rígido).
Como o acesso à tabela de páginas é muito lento, pois está em memória, a MMU
possui uma cache associativa chamada buffer de tradução de endereços (TLB -
Translation Lookaside Buffer) que consiste em uma pequena tabela contendo os
últimos endereços virtuais solicitados e seus correspondentes endereços físicos.
[editar] Linux em 32 bitsNa arquitetura x86 de 32 bits, o Linux pode endereçar
até 4 GiB de memória virtual (também chamado de espaço de endereçamento
linear).[11] Este espaço é dividido em dois: o espaço do núcleo (kernel space) e
o espaço do usuário (user space). O primeiro é único e protegido das aplicações
comuns, e armazena, além do próprio código do núcleo, uma estrutura que descreve
toda a memória física; este espaço é limitado a um gibibyte (1024 MiB). Cada
aplicação recebe um espaço de endereçamento de até 3 GiB para armazenar o código
e os dados do programa.
Caso a memória física seja menor do que a necessária para conter todas as
aplicações, o Linux pode alocar espaço em meios de armazenamento diversos (disco
rígido, dispositivo de rede e outros). Este espaço é tradicionalmente conhecido
como espaço de troca (swap space), embora o mecanismo adotado seja a paginação.
Windows em 32 bits
Analogamente ao Linux, as versões atuais do Windows de 32
bits usam um espaço de endereçamento de 4 GiB divididos em duas partes. Por
padrão, o Windows reserva 2 GiB para o núcleo e permite que cada aplicação use
até 2 GiB. Entretanto, é possível alterar essa configuração, e permitir que uma
aplicação use até 3 GiB. Neste caso, obviamente, o espaço do núcleo será
reduzido para um gibibyte.[12]
Diferentemente do Linux, o Windows usa apenas arquivos para paginação (paging
files). Pode usar até 16 desses arquivos, e cada um pode ocupar até 4095 MiB de
espaço em disco.
Resumo
Memória virtual é uma forma de contornar o problema de falta
de memória RAM num computador utilizando a própria memória interna do HD (disco
rígido) através da criação virtual de memória estendida que funciona da mesma
maneira que a RAM embora muito mais lentamente, uma vez que isto acontece ao
nível do HD e, como se sabe, a velocidade dos discos rígidos ainda é muito
inferior à de um pente de memória RAM normal. A memória virtual é feita deixando
um espaço do HD reservado para que seja possível a sua utilização como memória
virtual. No Windows você como usuário pode tanto escolher a opção de deixar o
Windows escolher qual é a melhor opção de quantidade de memória RAM(sendo que
este espaço vai ficar indo e voltando),mas geralmente o Windows por si só pega
pouca memória RAM. Ainda também ser feito a escolha pelo próprio usuário de
quanto quer usar de seu disco rígido para memória virtual, ou seja, alocação de
memória do disco rígido para ser usada como se fosse memória RAM.
No Linux a memória virtual também existe mas ela já é dimensionada quanto ao seu
tamanho na instalação e não poderá mais ser mudada ao longo da vida do sistema
instalado no seu computador somente poderá ser mudado se o disco rígido for
reparticionado novamente para utilizar uma partição maior de swap (que é assim
chamado a memória virtual do Linux), e assim deixando a swap maior você terá que
diminuir a raiz que é onde você instala o sistema operacional e pode manipular
com todos os seus documentos.
Bom à memória virtual também é chamado de arquivo de paginação em alguns
lugares. Recomenda-se que se use 2x a 3x de memória virtual do que você tiver de
memória RAM,você pode encontrar esse tipo de recomendação em vários sites como
fóruns de informática, mas não siga isso a risca, pois, se você tiver um
computador com memória de ‘4’ GiB, o que a maioria das pessoas diz como
(gigabytes), por exemplo, é loucura seguir o exemplo e colocar ‘8’ GiB.
A memória virtual deixou os programadores despreocupados com quanto de memória
seu programa irá precisar para rodar no computador e se o respectivo programa
poderia rodar com outros sem travar, pois a memória virtual utilizando a memória
do disco rígido tem uma memória muito maior do que os pentes de memória RAM que
você encontra hoje em dia no mercado que chegam aos seus 4 GiB, podendo o
programador se preocupar mais com a tarefa de programação do que a de quanto o
programa irá gastar de memória.Memória virtual é um conjunto de algoritmos muito
bem estipulados de maneira que conseguem fazer com que parte do disco rígido se
pareça com a memória RAM. e
Fonte Wikipédia