A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Departamento de Informática Universidade Federal de Pernambuco

Apresentações semelhantes


Apresentação em tema: "Departamento de Informática Universidade Federal de Pernambuco"— Transcrição da apresentação:

1 Departamento de Informática Universidade Federal de Pernambuco
Garbage Collection Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco

2 Gerenciamento Estático
Mais simples. Utilizado na versão original de FORTRAN. A cada vez que um procedimento é chamado utilizam-se as mesmas posições de memória. Alocação decidida em tempo-de-compilação.

3 Alocação Estática: Organização da Memória
Programa Principal Subrotina A Subrotina B Subrotina C

4 Alocação Estática: Chamada a Procedimentos
... z = DSucc (3) w = DSucc (2) Programa Principal DSucc DSucc(n) temp1 = n + n return temp1 Subrotina B Subrotina C

5 Alocação Estática: Chamada a Procedimentos
... z = DSucc(3) w = DSucc(2) Programa Principal DSucc DSucc(3) temp1 = 6 return temp1 Subrotina B Subrotina C

6 Alocação Estática: Chamada a Procedimentos
... z = 6 w = DSucc(2) Programa Principal DSucc DSucc(3) temp1 = 6 return temp1 Subrotina B Subrotina C

7 Alocação Estática: Chamada a Procedimentos
... z = 6 w = DSucc(2) Programa Principal DSucc DSucc(2) temp1 = 4 return temp1 Subrotina B Subrotina C

8 Alocação Estática: Chamada a Procedimentos
... z = 6 w = 4 Programa Principal DSucc DSucc(2) temp1 = 4 return temp1 Subrotina B Subrotina C

9 Alocação em Pilha Surgiu com Algol
Possibilidade de procedimentos recursivos. fac n = n * fac ( n - 1 ) , n > 0 = , otherwise Se ProcA chama ProcB, ProcA nunca termina antes do ProcB. Gerenciamento simples.

10 Alocação em Pilha fac 2 é re-escrito como fac 2 => 2 * fac ( 2 - 1)
=> 2 * (1 * 1) => 2 * 1 => 2

11 Alocação em Pilha: Organização da Memória
Pilha de Registros de Ativação Programa Principal Subrotina A Subrotina B Subrotina A Memória de Trabalho Subrotina A Subrotina C

12 Garbage Collection: Alocação Dinâmica de Memória
Listas: quebra da disciplina de pilha. Uma rotina chamada pode gerar uma estrutura de dados que viva após o término da sua chamada. IPL-5 foi a primeira linguagem a ter listas como tipo primitivos. A falta de um GC foi a causa do seu insucesso. LISP (J.McCarthy ) foi a primeira linguagem a ter GC.

13 Garbage Collection: Organização da Memória
Pilha de Registros de Ativação Programa Principal Subrotina A Subrotina B Subrotina C Subrotina A raiz 2 raiz 1 Memória de Trabalho Heap Lixo

14 Garbage Collection: Mark-Scan (J.McCarthy 1960)
Free-list 1.Todas as célulasestão na free-list Heap

15 Garbage Collection: Mark-Scan (J.McCarthy 1960)
1.Todas as célulasestão na free-list. 2.O processo do usuário usa células Raiz Free-list Heap

16 Garbage Collection: Mark-Scan (J.McCarthy 1960)
1.Todas as célulasestão na free-list. 2.O processo do usuário usa células. 3.A reescrita do grafo gera lixo. Raiz Free-list Heap

17 Garbage Collection: Mark-Scan (J.McCarthy 1960)
3.A reescrita do grafo gera lixo. 4.A free-list fica vazia. Raiz Heap Free-list

18 Garbage Collection: Mark-Scan (J.McCarthy 1960)
3.A reescrita do grafo gera lixo. 4.A free-list fica vazia. 5.Suspenso o processo do usuário. 6.Fá-se a marcação. Raiz Heap Free-list

19 Garbage Collection: Mark-Scan (J.McCarthy 1960)
6.Fá-se a marcação. 7.Fá-se a varredura, retornando as células de lixo a free-list. 8.Retoma-se o processo do usúario Raiz Free-list Heap

20 Garbage Collection: Mark-Scan (J.McCarthy 1960)
Tempo de suspensão do processo do usuário: Grafo_em_uso + Tamanho_da_Heap Imprevisibilidade do tempo de suspensão. Necessita de 1-bit para a marcação.

21 Reference Counting (Collins 1960)
Desenvolvido para LISP. Evita a suspensão do processo de usuário. Efetuado em pequenos passos intercalados com as transformações ao grafo. Exige a inclusão de um contador por célula.

22 Reference Counting (Collins 1960)
NEW: tira uma célula da free-list e conecta-a ao grafo. Free-list B 1 Root C 1 A 2 New(A.esq)

23 Reference Counting (Collins 1960)
NEW: tira uma célula da free-list e conecta-a ao grafo. B 1 Root C 1 1 1 A 2 1 Free-list New(A.esq) 1

24 Reference Counting (Collins 1960)
COPY: copia um ponteiro. Root Copy(C.dir, A->B) C 1 2 A Free-list B 1 1 1 1 1

25 Reference Counting (Collins 1960)
COPY: copia um ponteiro. Root Copy(C.dir, A->B) C 1 2 A Free-list B 2 1 1 1 1

26 Reference Counting (Collins 1960)
DELETE: retira um ponteiro. Root C 1 Delete(A->B) 2 A Free-list B 1 1 1 2 1

27 Reference Counting (Collins 1960)
DELETE: retira um ponteiro. Root C 1 Delete(A->B); Delete(Sons_B) 2 A Free-list B 1 1 1 2 1

28 Reference Counting (Collins 1960)
DELETE: retira um ponteiro. Root Delete(A->B); Delete(Sons_B); Free(B). C 1 2 Free-list A B 1 1 1 1 1

29 Cyclic Reference Counting McBeth 1963
Deleção de ponteiro a cíclo: Root A 2 Delete(Root->A) 1 B

30 Cyclic Reference Counting McBeth 1963
Space-leak. Root A 1 Delete(Root->A) 1 B

31 Cyclic Reference Counting Brownbridge 1985
Algoritmo errado!!!! Root 2 2 2 A B C

32 Cyclic Reference Counting Martinez-Wachenchauzer-Lins
Algoritmo geral!! Root 2 2 2 A B C Delete(Root->A)

33 Cyclic Reference Counting Martinez-Wachenchauzer-Lins
Age em RF > 1 (sharing) Root 1 2 2 A B C Delete(Root->A) Mark_red(A)

34 Cyclic Reference Counting Martinez-Wachenchauzer-Lins
Mark-Scan local Root 1 A B C Delete(Root->A) Mark_red(A) Scan_green(A)

35 Cyclic Reference Counting Martinez-Wachenchauzer-Lins
Busca referências externas. Root 1 A B C Delete(Root->A) Mark_red(A) Scan_green(A)

36 Cyclic Reference Counting Martinez-Wachenchauzer-Lins
Encontrada referência externa. Root 1 A B C Delete(Root->A) Mark_red(A) Scan_green(A)

37 Cyclic Reference Counting Martinez-Wachenchauzer-Lins
Sub-grafo em uso. Root 1 A B C Delete(Root->A) Mark_red(A) Scan_green(C)

38 Cyclic Reference Counting Martinez-Wachenchauzer-Lins
Referências atualizadas. Root 1 2 A B C Delete(Root->A) Mark_red(A) Scan_green(C)

39 Cyclic Reference Counting Martinez-Wachenchauzer-Lins
Busca de lixo reciclável! Root 1 2 2 A B C Delete(Root->A) Mark_red(A) Scan_green(A) Collect_blue(A) Publicado em: Information Processing Letters 1990

40 Lazy Cyclic Reference Counting Lins
Mark-Scan postergado. Root 2 2 2 A B C Delete(Root->A)

41 Lazy Cyclic Reference Counting Lins
Mark-Scan postergado. Root Pilha 1 2 2 A B C Delete(Root->A) Publicado em: Information Processing Letters 1992

42 Lazy Cyclic Reference Counting Lins
Mark-Scan só é chamado se necessário!! Root Pilha 1 2 2 A B C Delete(Root->A)

43 Garbage Collection: Cópia (Fenichel-Yochelson 1969)
A Heap é dividida em dois semi-espaços de igual tamanho. Quando o semi-espaço em uso fica esgotado cópia-se o grafo-em-uso para o outro semi-espaço deixando o lixo para trás.

44 Garbage Collection: Cópia (Fenichel-Yochelson 1969)
heap_1 heap_2 raiz hp

45 Garbage Collection: Cópia (Fenichel-Yochelson 1969)
raiz heap_1 heap_2 hp

46 Garbage Collection: Cópia (Fenichel-Yochelson 1969)
raiz heap_1 heap_2 hp

47 Garbage Collection: Cópia (Fenichel-Yochelson 1969)
raiz heap_1 heap_2 hp

48 Garbage Collection: Cópia (Fenichel-Yochelson 1969)
A cópia é recursiva. Há suspensão do processo de usuário. Eficiente em máquinas com memória virtual. Não necessita de espaço extra na célula para marcação.

49 Garbage Collection: Cópia (Fenichel-Yochelson 1969)
Complexidade computacional proporcional ao grafo-em-uso. Degrada com a ocupância. Compacta os dados sem custo extra. Adequado para células de tamanho variável.

50 Garbage Collection: Cópia (Cheney 1970)
Algoritmo mais amplamente usado. Não utiliza recursividade ou qualquer outra estrutura de dados extra para “lembrar” o caminho da cópia. Utiliza dois apontadores.

51 Garbage Collection: Cópia (Cheney 1970)
raiz heap_1 cp hp heap_2

52 Garbage Collection: Cópia (Cheney 1970)
raiz heap_1 cp hp heap_2

53 Garbage Collection: Cópia (Cheney 1970)
raiz heap_1 cp hp heap_2

54 Garbage Collection: Cópia
O algoritmo de Fenichel-Yochelson faz uma varredura no grafo em profundidade (depth-first). O algoritmo de Cheney varre o grafo breadth-first. Experimentalmente encontra-se que a varredura depth-first traz maior localidade entre as células. Há versões de Cheney depth-first.

55 Garbage Collection: Cópia Generacional.
Otimiza o algoritmo de cópia. Células novas morrem cedo. Células velhas vivem muito. Segrega as células por idade: várias heaps utilizadas. Evidência experimental.

56 Garbage Collection: Cópia Generacional.
Raiz Heap 0 Celulas Velhas Heap 1 Celulas Novas Heap 2

57 Garbage Collection: Cópia Generacional.
Minor Garbage Collection: Heaps mais novas. Mais freqüênte. Major Garbage Collection: Equivalente ao algoritmo original de cópia. Heap mais velha. Problema do algoritmo: ponteiros intergeneracionais sobretudo célula_mais_nova -> célula_mais_velha

58 Parallel Garbage Collection: Cópia - Appel-Ellis-Li (1988)
Baseado em Baker. Usa informação do Sistema Operacional para bloquear páginas de memória. Faltando espaço: Suspende todos os threads do mutador. O coletor varre os objetos ainda não varridos.

59 Parallel Garbage Collection: Cópia - Appel-Ellis-Li (1988)
Faltando espaço: Troca os semi-espaços. Copia os objetos acessíveis para to-space. Proteje as páginas ainda não copiadas. Re-inicia os threads de mutadores. Algoritmo eficiente.

60

61


Carregar ppt "Departamento de Informática Universidade Federal de Pernambuco"

Apresentações semelhantes


Anúncios Google