Post on 27-Jan-2019
Administração
de Sistemas
Operacionais Prof.: Marlon Marcon
Gerenciamento de
Memória Aula 9
Gerenciamento de memória
Memória virtual
Cache do disco
Memória virtual
O linux tem suporte a memória virtual, isto
é, utiliza o disco como extensão da
memória RAM, fazendo com que o
tamanho da memória disponível aumente;
O kernel irá gravar o conteúdo de blocos
de memória sem uso no disco rígido;
Processo transparênte ao usuário.
Memória virtual
Os programas executados no linux vêem
somente a quantidade de memória
disponível, sem saber se é disco ou RAM;
Porém o acesso à disco chega a ser 1000
vezes mais lento do que a memória, o que
torna os programas mais lentos.
Memória virtual
O linux pode tanto utilizar um arquivo
normal de um sistema de arquivos quanto
uma partição separada.
Se utilizar arquivos é mais fácil
redimensionar o tamanho da memória
virtual do que usando partições
dedicadas.
Criando uma área de troca
Um arquivo de troca é uma arquivo comum, sem nenhum tratamento especial para o kernel.
A única coisa que importa para o kernel é que este não possua espaços, e que seja preparado utilizando o utilitário mkswap;
Preferenciamente deve residir no disco local
Criando uma área de troca
Porque não pode ter espaços em
branco?
Quando o kernel está verificando o arquivo
de swap, um espaço em branco significa
que a minha área útil terminou;
Se o kernel tentar acessar esse espaço em
branco poderá sobreescrever uma outra
parte que era importante.
Criando uma área de troca
em arquivo
Podemos utilizar o seguinte comando:
dd if=/dev/zero of=/extra-swap bs=1024 count=1024
Onde:
dd: comando básico para copiar um arquivo
integralmente, bit a bit.
if: arquivo de origem
of: arquivo de destino
bs: Bit Size, ou tamanho do meu bloco de dados
count: quantos blocos desejo ter.
Criando uma área de troca
em uma partição
Uma partição de swap é criada como
qualquer outra partição;
A única diferença é que ela não possui
nenhum sistema de arquivos;
Criando uma área de troca
em uma partição
Após criar um arquivo de troca ou uma
partição, é necessário gravar uma assinatura
no início, que contém algumas informações
importantes para o kernel;
Para tal utiliza-se o comando mkswap:
mkswap dispositivo bloco
mkswap /extra-swap 1024
Criando uma área de troca
em uma partição
Devemos ter cuidado ao utilizar um arquivo
não vazio como swap, pois o kernel irá
sobreescrevê-lo;
Porém, nossa área de troca ainda não está
sendo utilizada.
Utilizando a área de troca
Uma área de troca é ativada por meio
do comando swapon:
swapon caminho_swap
swapon /extra-swap
Para verificar se a nossa área de troca
está sendo utilizada digite o comando
free.
Utilizando a área de troca
Para deixar de utilizar o swap utiliza-se o
comando swapoff:
swapoff caminho_swap
swapoff /extra-swap
Alocando áreas de troca
Algumas fontes dizem que dvemos alocar
o dobro da memória física para a área
de troca, mas esta regra é muito simples,
seguem algumas sugestões:
Alocando áreas de troca 1. Estime o total d memória necessário. Faça
isso rodando todos os programas passíveis de execução ao mesmo tempo.
2. Adicione uma margem de segurança ao item 1.
3. O tamanho da memória total é igual à soma da física com a swap, calcule a swap baseado nisso;
4. Se a swap for muito maior que a física aconselha-se colocar mais RAM.
Cache
A leitura é muitoo lenta quando comparada
com o acesso a memória real;
Quando por exemplo estamos respondendo
um email, primeiramente o lemos, depois
respondemos e daí sim os dados são
gravados em disco;
Enquanto não gravamos o arquivo de email,
esse fica armazenado em memória, em um
buffer cache.
Cache
O buffer não pode ser muito grande, pois
memória RAM é cara;
Quando o cache está cheio, os dados
sem uso há mais tempo não descartados
e a memória então é liberada para uso
por dados novos.
Cache
Muitos SOs têm cache de buffer, mas
nem todos funcionam dentro dos
mesmos princípios:
write-through: os dados são gravados no
disco imediatamente (e mantidos no
cache)
write-back: a gravação é feita somente
em intervalos de tempo.
Cache
O Write-back é mais eficiente, porém
mais suscetível à erros;
Caso a máquina tenha algum problema,
as mudanças no cache serão perdidas.
Em sistemas UNIX tradicionais, existe um
programa chamado update que roda
em segundo plano, executando um sync
a cada 30 segundos.
Cache no Linux
O linux tem um programa chamado
bdflush que executa uma sincronização
assíncrona, para evitar travamentos
devido ao grande tráfego de entrada e
saída que tal sincronização pode gerar.
Cache
A eficiência do cache é determinada
pelo seu tamanho.
Um cache pequeno é quase inútil pois
manterá poucos dados o que gerará
muitos acessos ao disco para gravação.
Se for muito grande também é um
problema pois a memória para os
programas fica pequena.
Cache
O linux, para tornar mais eficiente o uso
da memória real, automaticamente usa
toda a memória livre como cache de
buffer, mas também diminui quando osp
programas necessitam de mais memória.