Esse documento representa parte dos meus estudos acerca do Livro - Operational Systems Three Easy Pieces, de dominio publico.


Hipóteses Iniciais

  1. 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.
  2. Memória suficiente: O espaço de endereçamento do processo é menor do que a memória física total.
  3. 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 volta

Nesse 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:

  1. 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.
  1. Gerenciamento de Base e Limite:
  • Configurar corretamente os registradores de base e limite ao alternar entre processos.
  1. 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.
  1. 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.

Bibliografia

https://pages.cs.wisc.edu/~remzi/OSTEP/vm-mechanism.pdf