. Virtualizacao-de-Memoria
Esse documento representa parte dos meus estudos acerca do Livro - Operational Systems Three Easy Pieces, de dominio publico.
Hipóteses Iniciais
- Espaços de endereçamento contíguos: Cada espaço de endereçamento de processo deve ser alocado de forma contígua na memória física.
- Memória suficiente: O espaço de endereçamento do processo é menor do que a memória física total.
- Tamanho fixo: Cada espaço de endereçamento tem o mesmo tamanho.
Essas suposições simplificam a discussão inicial, permitindo a introdução gradual de mecanismos mais complexos depois.
Exemplo de Tradução de Endereços
int x = 3000;
x = x + 3;movl 0x0(%ebx), %eax ; carrega valor de x
addl $0x03, %eax ; soma 3
movl %eax, 0x0(%ebx) ; armazena o valor de voltaNesse cenário:
- A variável x reside no endereço virtual 15 KB.
- O programa acessa a memória virtual como se começasse no endereço 0 KB.
- No entanto, fisicamente, o SO pode alocá-lo a partir do endereço 32 KB.
A questão é: como o SO faz esse mapeamento sem que o programa perceba?
Relocação Dinâmica (Base e Limite)
A técnica de relocação dinâmica ou Base e Limites resolve esse problema.
Registradores de Base e Limite:
- Base: Define o endereço físico de início do processo, ou seja, guarda um valor inicial do offset necessario para acessar a memoria corretamente.
- Limite (Bounds): Define o tamanho máximo permitido do espaço de endereçamento do processo, ou seja, a memoria total esta no intervalo destes 2 regs. (Bounds - Base = VM) Tradução de endereço: $$Endereco Fisico = Endereco Virtual + Base$$
Esta traducao garante um processo hiperveloz, ja que usa apenas uma instrucao (e as subsequents laod e store) para acessar a memoria fisica.
Proteção: O registrador de limite garante que o processo não acesse além de seu próprio espaço de memória.
Se o processo tentar acessar um endereço virtual maior que o limite, a CPU gera uma exceção e o SO pode encerrar o processo.
Suporte de Hardware
O hardware precisa de alguns recursos essenciais para implementar a relocação dinâmica:
- Modo Privilegiado: O SO roda em modo privilegiado, com acesso total ao hardware, enquanto os programas de usuário rodam em modo restrito.
- Registradores de Base e Limite: Cada CPU possui um par de registradores de base e limite para suportar a tradução de endereços.
- Tradução de Endereços: Circuitos na CPU realizam a adição do registrador base ao endereço virtual.
- Instruções Privilegiadas: Apenas o SO pode modificar os registradores de base e limite, garantindo controle.
- Exceções: A CPU gera exceções quando processos tentam acessar áreas proibidas de memória.
Responsabilidades do Sistema Operacional
O SO deve assumir várias responsabilidades para gerenciar a memória virtual:
- Gerenciamento de Memória:
- Alocar memória para novos processos.
- Liberar memória quando processos terminam.
- Manter uma lista de memória livre para saber quais partes da memória física estão disponíveis.
- Gerenciamento de Base e Limite:
- Configurar corretamente os registradores de base e limite ao alternar entre processos.
- Troca de Contexto:
- Durante a troca de contexto, o SO deve salvar os valores dos registradores de base e limite do processo atual e restaurá-los para o novo processo que vai rodar.
- Manipulação de Exceções:
- Fornecer manipuladores de exceções para lidar com acessos ilegais à memória.
Exemplo prático:
- O SO aloca espaço de memória para um processo e configura a base para 32 KB.
- Se o processo tenta acessar um endereço virtual acima de 16 KB (limite), uma exceção é disparada.
Ineficiências
A relocação dinâmica é eficiente, mas tem algumas desvantagens:
- Fragmentação Interna: Como o espaço de endereçamento do processo deve ser contíguo, partes da memória podem ficar inutilizadas entre a pilha (stack) e o heap.
- Falta de Flexibilidade: Todos os processos precisam ter o mesmo tamanho de espaço de memória, o que não reflete a realidade de aplicações com diferentes necessidades de memória.
Essas limitações motivam o desenvolvimento de mecanismos mais avançados, como segmentação e paginação, abordados em capítulos posteriores.

