Sistemas Operacionais

Aula 16: Memória virtual: Linux

Referências:

Gerência de Memória Física

Como o usuário aloca memória ?

Como o núcleo aloca memória ?

Por exemplo, para uso interno ou como o sistema de memória virtual aloca memória ?
Como fazer para identificar blocos de memória disponíveis com tamanhos variáveis ?

Buddy Heap

Páginas (ou conjuntos de páginas) são agrupados em blocos de 2:

Truque: uma lista encadeada para cada tamanho de blocos.

Caches do Núcleo

Dois tipos de cache são mantidos no núcleo:

Caches X Memória Virtual

A interação entre estes caches é estreita:

Para evitar redundância de espaço e cópias as páginas físicas são compartilhadas.

Contadores de Referência

Mapeamento Endereço Virtual -> Real

Paginação de 3 níveis:

Motivo: É necessário por causa do espaço de endereçamento no Alpha - muito grande.

Problema: Os x86 só permitem paginação de 2 níveis.

Solução: Reduzir o nível do meio a um elemento só.

Diversos Sabores de Páginas

Páginas da memória virtual podem ser:

Outra classificação:

Compartilhamento de Memória

Como fazer um fork ?

Método ineficiente:

Que horrível!... E se as duas tarefas compartilhassem as páginas ?

Não dá, porque quando um processo modificar a memória esta mudança seria visível ao outro.

Copy on Write

E que tal se a gente compartilhasse a página somente na leitura ?

As páginas marcadas como copy-on-write são:

Ou seja, um fork é feito simplesmente compartilhando as páginas:

O efeito é de compartilhamento máximo, tudo que pode ser compartilhado será:

Compartilhar é Preciso

Copy-on-write compartilha por exemplo:

Mas não compartilha quando por exemplo:

ELF X a.out

O formato de binário a.out é antigo e usado por diversos Unix.

O formato ELF usado por versões mais modernas do Linux é linkado dinamicamente:

Shared Libraries

Cuidado a ser tomado:

Porque ? Isto não tinha sido resolvido muito antes com paginação e segmentação ?

Compartilhar é Necessário

Compartilhamento de memória permite um ganho significativo na performance.

No Linux podemos identificar compartilhamento de memória: