Sistemas de Ficheiros DistribuídosTopSistemas de ArquivosMemória Virtual

Memória Virtual

Conceitos de Memória Virtual

Vantagens:

VM em Unix

Requerimentos

Precisamos de:

Área de Swap

Precisamos de

Mapas de Tradução

Precisamos de vários mapas:

Substituição de Páginas

Várias técnicas são possíveis:

Suporte de HW

Unidade de Gestão de Memória (MMU):

TLB

Cada acesso a memória obrigaria a acedar PT:

Hardware x86

Hardware x86: Paginação

Hardware: RS/6000

VM em 4.3BSD

Baseado no 3BSD:

Memória Física

Três áreas:

Core map sobre cada frame:
  1. Nome processo dono, tipo, e VPN:
  2. Lista de Páginas Livres
  3. Cache de Páginas de Texto
  4. Sincronização

Espaço de Endereçamento

Emula VAX-11:

Vida de Página

3 Estados:

Residente:
em memória física;

Fill-On-Demand:
ainda não foi referida, pode ser fill-from-text ou zero-fill;

Outswapped:
recuperáveis de swap,

bits válido e fill-on-demand a 0, e PFN a 0.

Espaço de Swap

Partições cruas, sem filesystem

fork() em BSD

Gestão de Memória:

  1. Alocação de swap para dados e pilha;
  2. alocaçào de PTEs em Userptmap, senão swapping de outro processo;
  3. Área-u é inicializada e colocada no map Forkmap;
  4. Região de texto: filho é adicionado aos processos usando esta estrutura;
  5. Dados e texto são copiados pág a pág.
Caro!!

PF em BSD

Numa PF o sistema guarda informação de estado e chama rotina de PF:

  1. Se violação de limites, SIGSEGV ou aumenta pilha, senão chama pagein();
  2. Se simulação de referenced, coloca valid a 1;
  3. Se PF residente mas na free lista, valid a 1 e entrada cmap fora de free list;
  4. Se pág de texto e outro processo está a ler: locked e in-transit; usa wanted e sleep()
  5. Procurar tabela de hash para páginas de texto que não na PTE;
  6. Ler do swap se em swap;
  7. Alocar e colocar a 0s para zero-fill;
  8. Ler de executável para fill-from-text: primeiro na buffer-cache, se lá flush, ler de disco.

Lista de Páginas Livres

Se memória cheia, qual a melhor pág para remover?

  1. Pág de processo terminados;
  2. Senão usar LRU:
  3. kernel mantém páginas livres entre minfree e maxfree com pagedaemon:

Swapping

Sistema geralmente funciona bem, mas

BSD: Conclusões

Boa funcionalidade e poucas exigências sobre HW, mas:

Ideal para disco grande, CPU lento, e pouca memória.

VM em SVR4/Solaris

Ideias:

Desenho de VM em Solaris

Abstrações Fundamentais de VM

O sistema usa

  1. page, página;
  2. as, espaço de endereçamento;
  3. seg, segmento;
  4. hat, tradução de endereços em hardware;
  5. anon, páginas anónimas:

Página Física

Memória é dividida em regiões paginadas e não paginadas:

Espaço de Endereçamento

proc aponta para as:

Mapeamentos

Existem vários tipos de segmentos:

Páginas Anónimas

Criada quando processo modifica página MAP_PRIVATE:

O HAT

Operações dependentes do HW são isoladas no HAT. É acedido por uma interface:

Informação no HAT é redundante e altamente dependente do HW:

Drivers de Segmentos

Existem diferentes tipos de segmentos:

seg_vn

Mapeia:

seg_vn em detalhe

Dados incluem:

Protecão máxima é a inicial.

Swapping

Responsabilidade do anon layer:

Mapeamento Novo

Gestão de Páginas Anónimas

Novo Processo

Copy On Write

Uso de swap device reference array permite que partilha seja por página:

Depois de PF:

Gestão de Páginas Livres

pagedaemon implementa relógio:

Swapping

Processo swapper tem PID 0 e é chamado cada segundo:

VM e Sistema de Arquivos

Relação simbiótica:

Vantagens

Desvantagens

Melhoramentos

Tipos de modificações:

Número de PF grande na versão inicial.

Optimizações

Alguns melhoramentos:

VM no Linux

PFNs no Linux

LRU no Linux

Swapping em Linux

kswapd mantém memória livre:


vitor@cos.ufrj.br

Sistemas de Ficheiros DistribuídosTopSistemas de ArquivosMemória Virtual