Memória Virtual
O problema é que temos um espaço limitado de
memória RAM e, cada vez mais, os aplicativos
consomem partes maiores dela.
E o que o processador faz quando a memória
RAM acaba? Muito simples: utiliza a memória
virtual.
Memória Virtual
• A memória virtual é uma espécie de arquivo
que é criado no computador e o processador
utiliza para armazenar dados que ele costuma
deixar na memória RAM. É como se ele
simulasse a memória RAM dentro do seu HD,
por isso que se chama memória virtual.
Memória Virtual
 Memória Virtual é um espaço variável e reservado no
disco onde o Sistema Operacional continua
armazenando os dados que não couberam na memória
RAM.
 Na memória RAM ficam os dados temporários usados
enquanto o computador está ligado, se ela enche, os
dados vão sendo gravados no HD.
 O desempenho de processamento é menor, pois o HD é
muito mais lento que a memória.
Memória Virtual
• O sistema operacional é capaz de executar
aplicações mesmo que a soma de todos os
programas em execução simultânea supere a
da memória RAM instalada no computador.
SO - Memória
• O SO move ao disco rígido o conteúdo da
memória RAM, liberando espaço para novas
aplicações,se esses dados movidos ao HD
voltem a ser necessários.
• O SO automaticamente realiza a operação
inversa, carregando-os na memória RAM,
razão pela quais muitos chamam este tipo de
procedimento de troca de memória.
Funções – Memória Virtual
Relocação (ou recolocação), para assegurar que
cada processo tenha o seu próprio espaço de
endereçamento.
Proteção, para impedir que um processo utilize um
endereço de memória que não lhe pertença.
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).
Memória Virtual
Memória Virtual
No Windows recebe o nome de: PAGE FILE
No Linux recebe o nome de: SWAP
Conceito- Swap
 O SO escolhe um programa residente que é
levado da memória para o disco (swap-out )
retornando posteriormente para a memória
(swap-in).
Conceito - Paginação
Permite que o programa possa ser espalhado
por áreas não contíguas de memória.
Conceito - Segmentação
Técnica de gerência de memória onde
programas são divididos em segmentos de
tamanhos variados cada um com seu próprio
espaço de endereçamento.
Swap
• Acontece toda vez em que um processo
esgota seu um certo tempo e surge outro
processo na fila com uma prioridade maior
que a dele.
• O tempo no entanto deve ser relativamente
grande, pois a comunicação memória e disco
rígido consome certo tempo,
Swap
Swap
• O disco rígido é mais lento que o
armazenamento em memória principal, e o
processo consiste de trazer um processo ao
disco e levar outro a memória, essa troca de
não deve ser realizado em espaço de tempo
muito curto.
Swap
• Em sistemas UNIX particularmente o processo
de swap é desabilitado por padrão e só usado
quando a memória está realmente
comprometida, isto se deve ao tempo de troca
que é alto.
Paginação
• 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).
Paginação
Paginação
• 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.
Paginação
Novidade!
O kibibyte é um múltiplo do byte. 1 kibibyte
1024bytes.
O símbolo da unidade para o kibibyte é KiB.
A unidade foi criada pelo Comissão
Eletrotécnica Internacional (IEC), em 1999.
kibibyte
Foi aceite para ser usado por todos os
principais padrões organizações. Ele foi
projetado para substituir o kilobyte
usada em alguns contextos de ciência da
computação, que conflita com a definição do
prefixo quilo.
Segmentação
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.
Segmentação
Segmentação
Diferenças
• A principal diferença entre a paginação e a
segmentação é a alocação da memória de
maneira não fixa, a alocação depende da
lógica do programa.
Resumindo
• Na arquitetura x86 (32 e 64 bits), são usadas a
segmentação e a paginação. 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].
Resumindo
• O dispositivo de segmentação converte esse
endereço para um espaço de endereçamento
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
Resumindo
MMU -Memory Management Unit
O endereço virtual é encaminhado para a
unidade de gerenciamento de memória
(MMU -Memory Management Unit).
 MMU - 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.
Tabela de Páginas
• 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
Operacional.
Tabela 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 ou a indicação de
que a página está em um dispositivo de
armazenamento secundário.
Tabela de Páginas
Tabela de Páginas
• Como o acesso à tabela de páginas é muito
lento, pois está em memória, a MMU possui
uma
memória(cache)
associativa
chamada buffer de tradução de endereços
(TLB - Translation Lookaside Buffer).
TLB - Translation Lookaside Buffer
• TLB - Consiste em uma pequena tabela
contendo os últimos endereços virtuais
solicitados e seus correspondentes endereços
físicos.
TLB - Translation Lookaside Buffer
Linux em 32 Bits
Na arquitetura x86 de 32 bits, o Linux pode
endereçar até 4 GB de memória virtual.
Este espaço é dividido em dois: o espaço do
núcleo e o espaço do usuário.
Kernel space - É único e protegido das
aplicações comuns, e armazena, uma
estrutura que descreve toda a memória física;
este espaço é limitado a 1 GB.
Linux em 32 Bits
• User space - Cada aplicação recebe um espaço
de endereçamento de até 3 GB.
• Caso a memória física seja menor do que a
necessária, o Linux pode alocar espaço em
meios de armazenamento diversos (disco
rígido, dispositivo de rede e outros).
Linux em 32 Bits
 Este espaço é tradicionalmente conhecido
como espaço de troca (swap space), embora o
mecanismo adotado seja a paginação.
Windows em 32 Bits
• Na arquitetura x86 de 32 bits, o Windows
pode endereçar até 4 GB de memória virtual,
dividido em duas partes.
• Por padrão, o Windows reserva 2 GB para o
núcleo e para as aplicações até 2 GB.
Entretanto,
é
possível
alterar
essa
configuração, podendo usar até 3 GB.
Windows em 32 Bits
• 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 MB de espaço em disco.
Atenção!
• Páginas acessadas com menos frequência na
RAM vão para disco (para o Pagefile.sys ),
dando lugar à uma outra página prioritária no
momento.
Atenção!
• Quando a aplicação finalmente acessar o dado
que está naquela página agora em disco, o
sistema aloca espaço na RAM para trazer de
volta a página. Isso pode resultar em outras
páginas que estavam em RAM a serem
paginadas para o disco.
Resumindo...
• No Linux a memória virtual é dimensionada
quanto ao seu tamanho na instalação e não
poderá mais ser mudada.
• Somente poderá ser mudado se o disco rígido
for reparticionado novamente para utilizar
uma partição maior de swap. Assim deixando
a swap maior você terá que diminuir a raiz.
Resumindo...
• A memória virtual também é chamado de
arquivo de paginação. Recomenda-se que se
use 2x a 3x de memória virtual do que você
tiver de memória RAM, mas não siga isso a
risca, pois, se você tiver um computador com
memória de 4 GB.
Resumindo...
• No Windows o usuário tem livre arbítrio ou
Windows escolher qual é a melhor opção de
quantidade de memória RAM,mas geralmente
o Windows por si só pega pouca memória
RAM.
• O usuário pode ainda escolher de quanto quer
usar de seu disco rígido para memória virtual,
ou seja.
Resumindo...
• A memória virtual deixou os programadores
despreocupados com quanto de memória seu
programa irá precisar, pois a memória virtual é
muito maior do que os pentes de memória
RAM, podendo o programador se preocupar
mais com a tarefa de programação.
Memória Virtual
Por que
que a memória RAM é mais cara?
 Não seria mais fácil simplesmente utilizar o
HD para armazenar os dados?
Memória Virtual
• Porque a memória virtual é extremamente
mais devagar do que a memória RAM. Dessa
forma se computador dispor de
pouca
memória RAM e precisar usar a memória
virtual para armazenar dados o desempenho
será comprometido
Espaço de Kernel e o Espaço do
Usuário
• Compactar a área do kernel pode causar
problemas, como restringir o número de
usuários que podem se conectar
simultaneamente ou o número de processos
que podem ser executados. Um espaço do
usuário menor significa que o programador do
aplicativo tem menos espaço para trabalhar.
• Só mais uma coisa: utilize o mesmo valor em
"Tamanho inicial" 400 e "Tamanho final" 400,
por exemplo. Isso evita que o arquivo fique
fragmentado e o sistema consegue acessá-lo
de forma mais eficiente...
• Mas muito cuidado ao alterar estes valores, se
tu alterar pra valor e depois aumentar a RAM
altera esse valor antes, já vi começar a dar
erro de tela azul por causa disso...
• Pq não deixar em tamanho gerenciado pelo
sistema??
• Não acho interessante deixar o sistema
gerenciar porque o mesmo criaria um arquivo
de memória virtual que não teria um valor
fixo. Logo ele ficaria muito fragmentado com o
uso e deixaria o sistema ainda mais lento.
• Por padrão, o Windows armazena o arquivo
de paginação na partição de inicialização (a
partição contém o sistema operacional e seus
arquivos de suporte). O tamanho padrão do
arquivo de paginação é 1,5 vezes a RAM total.
• http://support.microsoft.com/?scid=kb%3Bptbr%3B314482&x=11&y=11
• Para melhorar o desempenho, é uma prática
recomendada colocar o arquivo de paginação
em uma partição e unidade de disco rígido
diferentes. Dessa forma, o Windows pode
tratar várias solicitações E/S mais
rapidamente.
Gerenciamento de Memória
Endereço de memória é um identificador
único para um local de memória no qual um
processador ou algum outro dispositivo pode
armazenar pedaços de dados.
Gerenciamento de Memória
Em
computadores
modernos
com
endereçamento por byte, cada endereço
representa
um
byte
distinto
de
armazenamento.
Gerenciamento de Memória
Dados maiores que um byte podem residir em
múltiplos bytes, ocupando uma seqüência de
bytes consecutivos.
Alguns
microprocessadores
foram
desenvolvidos
para
trabalhar
com
endereçamento por palavra, tornando a
unidade de armazenamento maior que um
byte
Gerenciamento de Memória
Tanto memória virtual quanto memória
física utilizam endereçamento de memória.
Gerenciamento de Memória
• Para facilitar a cópia de memória virtual em
memória
real,
os
sistemas
operacionais dividem a memória virtual
em páginas, cada uma contendo um número
fixo de endereços.
Gerenciamento de Memória
• Cada página é armazenada em disco até que
seja necessária, sendo então copiada pelo
sistema operacional do disco para a memória,
transformando o endereço virtual em
endereço real.
Gerenciamento de Memória
• Tal transformação é invisível ao aplicativo, e
permite que aplicativos operem independente
de sua localização na memória física,
fornecendo aos sistemas operacionais
liberdade para alocar e realocar memória
conforme necessário para manter o
computador executando eficientemente.
Gerenciamento de Memória
• Freqüentemente, ao citar tamanho de
palavra em computadores modernos, é citado
também o tamanho de endereços de memória
virtual em tal computador.
Gerenciamento de Memória
• Por exemplo, um computador de 32 bits
geralmente trata os endereços de memória
como valores inteiros de 32 bits, tornando o
espaço de endereçamento igual a 232 =
4.294.967.296 bytes de memória, ou 4 GB.
Download

hardware – memória virtual