You are on page 1of 26

AMBIENTES DE EXECUO

ACESSO A DADOS NO LOCAIS NA PILHA


Anderson Pinheiro

Sumrio
2

Acesso aos dados sem procedimentos aninhados. Questes sobre procedimentos aninhados Profundidade de aninhamento Elos de acesso Displays Gerenciamento do heap Gerenciador de memria Localidade em programas

A memria
8

Memria de Pilha

Nomes locais a um procedimento tm espao alocado em uma pilha.

Memria Heap

Os dados que podem sobreviver chamada do procedimento que os criou usualmente so alocados em um heap de memria reutilizvel.

Acesso aos dados sem procedimentos aninhados


9

Para linguagens que no permitem declaraes de procedimentos aninhadas, a alocao de memria para as variveis e o acesso a essas variveis simples: Variveis globais so alocadas em uma rea de memria esttica. Qualquer outro nome precisa ser local ativao no topo da pilha. (top_sp da pilha)

Acesso aos dados sem procedimentos aninhados


10

Na famlia de linguagens C, todas as variveis so definidas ou dentro de uma nica funo ou fora de qualquer funo(globalmente).
Varivel global

Escopo seguindo todas as declaraes, exceto quando onde houver uma definio local.
Varivel local

Acesso aos dados sem procedimentos aninhados


11

A alocao de memria para as variveis e o acesso a essas variveis simples: 1- Variveis globais so alocadas em uma rea de memria esttica. Os endereos dessas variveis permanecem fixos e so conhecidos em tempo de compilao.

2 - Qualquer outro nome precisa ser local ativao no topo da pilha. Podemos acessar essas variveis por meio do apontador top_sp da pilha.

Questes sobre procedimentos aninhados (1/2)


12

O acesso se torna muito mais complicado quando uma linguagem permite que as declaraes de procedimentos sejam aninhadas e tambm usa a regra geral de escopo esttico, ou seja, um procedimento pode acessar variveis dos procedimentos cuja declaraes envolvem sua prpria declarao.

O motivo que saber em tempo de compilao que a declarao de p est imediatamente aninhada dentro de q no nos diz as posies relativas de seus registros de ativao em tempo de execuo.

Questes sobre procedimentos aninhados (2/2)


13

Suponha que x seja declarado no procedimento envolvente q. Localizar a ativao relevante de q a partir de uma ativao de p uma deciso dinmica; isso exige informaes em tempo de execuo adicionais sobre as ativaes.

Uma linguagem com declaraes de procedimento aninhados


14

Das linguagens mais recentes com procedimentos aninhados, uma das mais influentes ML. ML uma linguagem funcional, significando que as variveis, uma vez declaradas e inicializadas, no so alteradas. Definio: val <nome> = <expresso> Funes: fun <nome>(<argumentos>) = <corpo> Corpo de funo: let <lista de definies> in<comandos> end

Profundidade de aninhamento
15

Procedimentos que no esto aninhados dentro de nenhum outro procedimento = profundidade 1. Se um procedimento p for definido imediatamente dentro de um procedimento na profundidade de aninhamento i, ento d a p a profundidade de aninhamento i + 1.

Profundidade de aninhamento
16

fun sort(inputFile, outputFile) = let Definidas dentro de val a = array(11,0); funo com profundidade fun readArray(inputFile) = ....... 1. ....a...; fun exchange(i , j) = ....... ....a...; fun quickSort(m, n) = ....... let val v = ....; fun partition(y , z) = ...a...v .... Exchange ..... in ... a ... v ... partition ... quickSort end in ... a .. readArray .. Quicksort end;

profundidade 1

2 2 2

Elos de acesso (1/2)


17

Uma implementao direta da regra de escopo esttica normal para funes aninhadas obtida acrescentandose um apontador chamado elo de acesso a cada registro de ativao.

Se o procedimento p est aninhado imediatamente dentro do procedimento q, ento o elo de acesso em qualquer ativao de p aponta para ativao mais recente de q.

Elos de acesso (2/2)


18

s Elo de acesso a Q(1,9) Elo de acesso v

s Elo de acesso a Q(1,9) Elo de acesso

s Elo de acesso a Q(1,9) Elo de acesso v Q(1,3) Elo de acesso v P(1,3) Elo de

v
Q(1,3)

Elo de acesso
v
Imagem 3. Elos de acesso para localizar dados no locais.

Displays (1/3)
19

Se a profundidade de aninhamento crescer muito, pode ser necessrio seguir longas cadeias de elos para alcanar os dados de que precisamos. Uma implementao mais eficiente utiliza um arranjo auxiliar d, chamado display, que consiste em um apontador para cada profundidade de aninhamento. d[i] vai apontar para o registro mais alto da pilha para qualquer procedimento na profundidade de aninhamento i;

Displays (2/3)
20

d[1] d[2]

s Q(1,9) salvo d[2]

d[1] d[2] d[3]

s
Q(1,9) salvo d[2] Q(1,3)

d[1] d[2]

s Q(1,9) salvo d[2] Q(1,3) salvo d[2]

salvo d[2]
P(1,3)

salvo d[3]

Displays (3/3)
21

d[1] d[2] d[3]

s Q(1,9) salvo d[2] Q(1,3) salvo d[2]


P(1,3)

salvo d[3] E(1,3) Salvo d[2]

Gerenciamento do Heap
22

O Heap uma poro de memria usada para dados que residem indefinidamente, ou at que o programa os exclua explicitamente.

Procedimento P(){ Pessoa pessoa = new Pessoa(); }

O gerenciador de memria
23

O gerenciador de memria administra todo o espao livre na memria heap o tempo inteiro. Ele realiza duas funes bsicas:

Alocao Liberao

Propriedades desejveis
24

Eficincia de espao

Um gerenciador de memria dever minimizar o espao total do heap necessrio por um programa.

Eficincia de programa

Um gerenciador de memria dever fazer bom uso do subsistema de memria para permitir que os programas sejam executados mais rapidamente.

Baixo custo

Minimizar a frao do tempo de execuo gasta realizando alocao e liberao.

Hierarquia de memria de um Computador (1/2)


25

O gerenciamento da memria e a otimizao da memria precisam ser feitos levando-se em conta o comportamento da memria.

Tempo gasto para acessar diferentes partes da memria pode variar desde nanossegundos at milissegundos.

Hierarquia de memria de um Computador (2/2)


26

Tamanhos tpicos

Tempos de acesso tpico

> 2 GB

Memria Virtual (disco)

3 15 ms

256 MB 2 GB

Memria Fsica

100 150 ns

128 KB 4 MB

Memria Cache Segundo nvel

40 60 ns

16 64 KB

Memria Cache Primeiro nvel Registradores (processador)

5 10 ns

32 Words

1 ns

Imagem 4. Configuraes tpicas de hierarquia de memria

Localidade em programas (1/3)


27

A maioria dos programas exibe um alto grau de localidade; ou seja, gastam a maior parte do tempo executando uma pequena frao do cdigo e usando uma pequena frao dos dados.

Localidade temporal se for provvel que os endereos de memria que ele acessa sejam acessados novamente dentro de um curto espao de tempo. Localidade espacial se for provvel que os endereos de memria vizinhos do endereo acessado, tambm sejam acessados dentro de um curto perodo de tempo.

Localidade em programas (2/3)


28

A sabedoria convencional diz que os programas gastam 90% do seu tempo executando 10% do cdigo.

Os programas frequentemente contm muitas instrues que nunca so executadas. Os programas construdos com componentes e bibliotecas utilizam apenas uma pequena frao da funcionalidade fornecida. Apenas um pequena frao do cdigo que poderia ser invocado realmente executada em uma rodada tpica do programa.

Localidade em programas (3/3)


29

Otimizao usando a hierarquia de memria

Quando uma nova instruo executada, h alta probabilidade de que a prxima instruo tambm seja executada. A tcnica fazer com que o compilador coloque os blocos bsicos (sequncias de instrues que sempre so executadas sequencialmente) que provavelmente seguiro uns aos outros - na mesma pgina ou at na mesma linha de cache. Colocando a maioria das instrues e dados na memria rpida, porm pequena, e deixando o restante na memria lenta, porm grande.

Reduzindo a Fragmentao
30

Posicionamento de objetos best-fit e next-fit

Reduzimos a fragmentao controlando como o gerenciador de memria coloca novos objetos no heap. Descobriu-se empiricamente que uma boa estratgia para minimizar a fragmentao alocar a memria solicitada no menor buraco disponvel que seja grande o suficiente.

Referncias
31

Livro do Aho 2 Edio (Cp. 07)

You might also like