Skip to content

Latest commit

 

History

History
162 lines (110 loc) · 3.88 KB

gerenciamento.org

File metadata and controls

162 lines (110 loc) · 3.88 KB

Gerenciamento do Monte

1 Organização da Memória e Conceitos básicos

Monte

  • Região da memória para alocação e liberação de blocos
  • Momentos arbitrários durante a execução do programa

Relação do monte com ponteiros raízes (roots)

Blocos lixo e árvore de apontadores

2 Gerenciamento do Monte – Introdução

Principais preocupações em um gerenciador de monte

  • Espaço versus Tempo
  • Normalmente é uma escolha entre os dois

Espaço

  • Fragmentação interna
  • Fragmentação externa

Tempo

  • Algoritmo sofisticado mas demorado?
  • Simples e rápido?
  • Híbrido

3 Gerenciamento do Monte – Lista Única

Gerenciadores com uma lista encadeada de blocos livres

  • Inicialmente com um único bloco com todo o monte

Dois algoritmos

  • Primeiro Encaixe (first fit)
  • Melhor Encaixe (best fit)

Análise intuitiva

  • Best fit reserva blocos maiores para pedidos maiores
  • Best fit custa mais que o primeiro encaixe

Pergunta

  • Qual das abordagens gera menor fragmentação externa?

4 Gerenciamento do Monte – Lista Única

Pergunta. Considerando uma lista única

  • Qual o custo de uma alocação?

Custo de alocação é linear

  • Depende somente da quantidade de blocos já alocados

Reduzir para custo constante

  • Ter várias listas com tamanho de blocos diferentes

5 Gerenciamento do Monte – Listas Múltiplas

Monte é dividido em pools (uma para cada tamanho de bloco)

Uma lista de blocos livres para cada pool

Quando vem um pedido de alocação

  • Pedido é arredondado para o tamanho mais próximo
  • Realiza o acesso direto a lista de blocos livres específica

Divisão de tamanhos de bloco: estática ou dinâmica

  • Estática, definida em tempo de compilação
  • Dinâmica
    • Sistema Parceiro (Buddy System)
    • Monte de Fibonacci (Fibonacci Heap)

6 Sistema Parceiro (Buddy System)

  • Tamanho dos blocos são potências de 2
    • Blocos de tamanho 2^0, 2^1, 2^2, 2^3, 2^4 … 2^n

Algoritmo

  • \pause Se um bloco de tamanho 2^k é pedido, pega da piscina 2^k
  • \pause Caso não haja blocos livres nesta piscina
    • Pega um bloco da piscina 2k+1, divide em 2 e devolve
    • O bloco que sobrou é adicionado na lista 2^k
  • \pause No momento da liberação do bloco de 2k
    • Fundido com o bloco parceiro (antes da separação)
    • Colocado de volta na lista 2k+1

7 Monte de Fibonacci (Fibonacci Heap)

Tamanho dos blocos retirados da sequência de Fibonacci

  • 1, 1, 2, 3, 5, 8, 13, 21, …

Algoritmo

Funcionamento similar ao Sistema Parceiro

Algoritmo é ligeiramente mais complexo \linebreak → tamanhos dos blocos são mais irregulares

Permite uma fragmentação mais baixa

  • A sequência de fibonacci cresce mais devagar que 2^k

8 Framentação externa

Todos os algoritmos geram algum tipo de fragmentação

  • Não importa qual algoritmo, quantas listas de blocos livres
  • Diminuim a habilidade de responder pedidos de alocação

Algoritmos de Compactação do Monte

  • Mover blocos já alocados
  • Corrigir referências a esses blocos no programa \linebreak → Complexidade e custo computacional

9 valgrind \small (memcheck e massif)

./valgrind.png