Gerenciamento de Memória

Memória Virtual
(do processo)

Memória Principal (Física, RAM)

  • Armazena o programa (instruções e dados)

Memória Cache

  • Armazena as informações mais acessadas
  • Fica entre a memória principal e os registradores

Estrutura de Array

  • cada posição com um endereço

Multiprogramação

  • Vários processos na memória

Registradores Base e Limit
Delimitam o espaço de endereçamento do processo

Base
Guarda a informação do endereço de início

Limit
Quantos bytes usados pelo processo

Binding
Atribuição de instruções e dados na memória

O programa reside em disco como arquivo binário executável

Para ser executado, deve ser carregado na memória RAM e inserido em um processo.

Pode ocorrer em 3 estágios:

Em tempo de compilação

Em tempo de carga

Em tempo de execução

  • Posição de memória é conhecida, código absoluto pode ser gerado.
  • Se posição inicial mudar, recompila.

Deve gerar código relocável se o endereço de memória não é conhecido em tempo de compilação.

  • Atribuição somente em tempo de execução (caso o processo possa se mover durante sua execução de um segmento para outro).
  • Necessita de suporte de hardware para mapeamento de endereços (ex. Registradores Base e Limit)

Espaço de Endereçamento 🚩
Lógico VS Físico

  • O mapeamento entre lógico e físico é feito pela MMU.

Lógico

  • Gerado pela CPU
  • Também chamado de endereço virtual

MMU
Unidade de Gerenciamento de Memória

  • Dispositivo de hardware que mapeia endereços virtuais para endereços físicos.
  • O valor no registrador relocador (ou base) é adicionado a cada endereço gerado pelo processo do usuário no momento que é enviado para a memória.
  • O programa do usuário lida com endereços lógicos, nunca com físicos reais.

Carga Dinâmica
Uma rotina não é carregada até que seja chamada.
❗ É responsabilidade do programador projetar programas que utilizem esse recurso.

Melhor utilização do espaço da memória, pedaços de códigos quase nunca usados (ex.: exceções com tratamentos) não são carregados.

Ligação Dinâmica
Usada normalmente para mapear as bibliotecas do programa.

Swapping
Troca de processos 🔃

Físico

  • Visto pela memória
  • Carregado no registrador de endereço de memória

Um processo que precisa ser executado e está no disco (por falta de espaço na memória RAM) é movido para a RAM, enquanto o que estava em execução vai para o disco.

Alocação Contígua
A memória principal é normalmente dividida em duas partes:

Parte onde o SO reside

Parte onde processos do usuários residem

Registradores de relocação são usados para proteger processos dos usuários uns dos outros e de alterar códigos e dados do SO.

  • Registrador base contém valor do menor endereço físico.
  • Registrador limite contém o tamanho do intervalo do endereços lógicos - cada endereço lógico deve ser menor que o registrador limite.
  • MMU mapeia o endereço lógico dinamicamente.

Armazenamento Dinâmico
Como atender uma requisição de tamanho x com uma lista de blocos livres

First-fit (Primeira)
Aloca o primeiro bloco livre que seja grande o suficiente para satisfazer a requisição.

Best-fit (Melhor)
Aloca o menor bloco livre que seja grande o suficiente.

Worst-fit (Pior)
Aloca o maior bloco livre.

Fragmentação
Há espaço suficiente na memória porém não é contíguo.
Blocos separados (se tornam inutilizáveis).

💡 Solução: Compactação

  • Deslocar blocos para colocá-los juntos em um grande bloco.
    ❗ Problema:
  • Nem sempre é possível.
  • O custo pode ser alto / dispendioso.

💡 Solução: Paginação

  • Divide a memória física em tamanho fixos (blocos).
    *Divide a memória lógica em partes do mesmo tamanho (páginas).
    ❗ Problema:
  • Fragmentação interna, como as páginas tem tamanho fixos, podem sobrar espaços sem serem utilizados.

Páginas Compartilhadas

  • Compartilhamento de Código:
    bibliotecas que mais de um programa usam. Aparecem na mesma localização no endereçamento lógico.
  • Códigos e dados privados:
    Cada processo mantém uma cópia separada de códigos e dados, podem aparecer em qualquer endereço no espaço de endereçamento lógico.

click to edit

Segmentação
Esquema de gerenciamento de memória que suporta a visão do usuário de memória.

Separação de memória lógica do usuário da memória física.
*Pode ser maior que a memória física.

Paginação sob demanda

  • Página só é carregada quando necessária (Mecanismo de permuta preguiçoso).
    ✅ Benefícios:
  • Espera ao carregar programas é menor.
  • Operações I/O mais rápidas.
  • Ocupa menos memória = mais processos rodando.

Segmentação sob demanda

Página ausente?

1) SO verifica uma outra tabela para decidir.
2) Obtém bloco livre na memória.

Substituição de Páginas
Casos onde processos precisam de todas as páginas em memória.
Bit de modificação controla a atualização das páginas.