Beruflich Dokumente
Kultur Dokumente
Organizacin de la Memoria en
Ti
Tiempo
d
de Ej
Ejecucin
i
Lenguajes y Sistemas
Informticos
Universidad de Oviedo
Contenido
Introduccin
Representacin de los datos
Organizacin de la memoria durante la ejecucin
Memoria esttica
Memoria dinmica de pila
Memoria dinmica heap
Algoritmos de recoleccin de basura
Mecanismos para el paso de parmetros
Introduccin
Anlisis y Sntesis
Hasta ahora nos hemos centrado en la parte de anlisis
esttico (lxico, sintctico y semntico) de un programa
El principal objetivo de la fase de anlisis es validar que
el programa sea vlido, acorde a la descripcin del
lenguaje
El otro gran objetivo de un traductor es la sntesis de un
programa de igual semntica que el procesado, expresado
en otro lenguaje destino
Cdigo Fuente
Analizador Lxico
Anlisis
Analizador Sintctico
Tabla de
Smbolos
Gestin
de Errores
Analizador Semntico
Generador de Cdigo
(Intermedio )
Sntesis
Introduccin
Smbolos y Tipos
Simbolo
offset
dirBase
tamanio
1
asterisco()
1
de corc hete()
1 comparac ion() a
aritmetica()
Array
Char
Integer
Float
Pointer
Introduccin
Introduccin
Tareas de un Compilador
Un compilador deber tener en cuenta el
ambiente en tiempo de ejecucin para
Introduccin
Independencia de la Plataforma
Los traductores separan el proceso dependiente de la
plataforma destino (back-end) de la parte que es
independiente de sta (front-end)
Para ello generan inicialmente cdigo intermedio para una
mquina abstracta
El ambiente en tiempo de ejecucin tambin deber ser
para ser independiente
p
de la p
plataforma y
diseado p
arquitectura destino
Front-end
Analizador Semntico
rbol Sint. Decorado
Tabla de
Smbolos
Generador de Cdigo
Intermedio
Gestin
de Errores
Cdigo Intermedio
Generador de Cdigo
Back-end
Cdigo Destino
Contenido
Introduccin
Representacin de los datos
Organizacin de la memoria durante la ejecucin
Memoria esttica
Memoria dinmica de pila
Memoria dinmica heap
Algoritmos de recoleccin de basura
Mecanismos para el paso de parmetros
Tipos
Su tamao
Su representacin en memoria
Implementacin
a implementacin
p e e tac de un
u compilador
co p ado es
En la
necesario conocer el tamao en bytes de
cualquier tipo
Dnde asignaramos esta responsabilidad en
nuestro compilador?
Implementacin
Tipo
numeroBytes():int
Caracter
Entero
Real
numeroBytes():int
numeroBytes():int
numeroBytes():int
Tipo
numeroBytes():int
Array
tamao:int
Puntero
numeroBytes():int
numeroBytes():int
Francisco Ortn Soler
Tipo
campos
*
numeroBytes():int
Campo
nombre:string
Registro
numeroBytes():int
A
a1 : int
Offsets:
C
c1 : int
B
b1 : int
b2 : int
D
d1 : int
0
4
8
12
:A
a1
:B
:C
:D
a1
b1
b2
a1
c1
a1
b1
b2
d1
B
b1 : int
b2 : int
:A
0
C
c1 : int
:B
a1
4
Offsets
Estticos: 8
:D
a1
a
b1
b2
c1
d1
b1
b2
12
16
:C
c1
d1 : int
:A
:B
:C
:D
a1
b1
b2
a1
c1
a
b1
b2
c1
d1
B
b1 : int
b2 : int
0
4
8
12
14
16
C
c1 : int
Descriptores
de Clases
(offsets estticos
fijos):
D
d1 : int
a1
b1
b2
c1
d1
a1
b1
b2
a1
c1
a
b1
b2
c1
d1
4
8
12
16
20
4
4
8
Persona
dni : int
getDni() : int
toString() : String
...
Persona p1=new Persona(10000000),
p2=new Empleado(9999999,"Informtica");
System.out.println( p1.toString() );
System.out.println( p2.toString() );
...
Persona::toString
Objeto p1
vtable
dni
Empleado
departamento : String
toString() : String
toString
equals
hashcode
Object::equals
Object::hascode
vtable
dni
departamento
Objeto p2
toString
equals
hashcode
Empleado::toString
Francisco Ortn Soler
Contenido
Introduccin
Representacin de los datos
Organizacin de la memoria durante la
ejecucin
Memoria esttica
Memoria dinmica de pila
Memoria dinmica heap
Algoritmos de recoleccin de basura
Mecanismos para el paso de parmetros
Francisco Ortn Soler
Memoria de un Proceso
Un programa, una vez compilado, ser ejecutado
por el sistema operativo creando un proceso
Un proceso tendr asignada una zona de
memoria, pudiendo crecer sta en tiempo de
j
ejecucin
La memoria de un procesador est divida en
Un conjunto de registros
La memoria de acceso directo (RAM), ms lenta
pero con mayor capacidad
Organizacin de la Memoria
El contenido de la memoria esttica est dividido en
instrucciones y datos
La memoria dinmica est organizada de dos formas
posibles
1.
Memoria de pila o stack: Se reserva y libera
dinmicamente siguiendo una poltica LIFO (Last Input,
p )
First Output)
2.
Memoria de montculo o heap: Se libera y reserva
siguiendo distintas estrategias, transparentes al
programador
Memoria Esttica
(tamao fijo)
rea de Cdigo
rea de datos Estticos
Heap
Memoria Dinmica
(tamao variable)
Pila
Francisco Ortn Soler
Contenido
Introduccin
Representacin de los datos
Organizacin de la memoria durante la ejecucin
Memoria esttica
Memoria dinmica de pila
Memoria dinmica heap
Algoritmos de recoleccin de basura
Mecanismos para el paso de parmetros
Memoria Esttica
Memoria Esttica
La memoria esttica es aqulla cuyo tamao
permanece constante a lo largo de la ejecucin
del proceso
El contenido de la memoria esttica est dividido
en instrucciones y datos
Memoria Esttica
Cdigo Procedimiento n
Francisco Ortn Soler
Memoria Esttica
Memoria Esttica
10
Memoria Esttica
rea
d d
de
datos
t
Estticos
E tti
Libre
SP
BP
Pila
IP
Cdigo
Segmento
de Datos
...
Segmento de
Cdigo
Francisco Ortn Soler
Memoria Esttica
En MAPL
La palabra es de 16 bits
Los caracteres ocupan un byte
Los enteros ocupan 2 bytes
Los reales ocupan 4 bytes
Memoria Esttica
Programa:
Si b l
Simbolo:
TipoEntero:
TipoCaracter:
TipoReal:
TipoPuntero:
TipoArray:
TipoRegistro:
Campo:
11
Memoria Esttica
Memoria Esttica
rea de Datos
Procedimiento Principal
Procedimiento 1
Procedimiento n
Datos Globales
RA Procedimiento 1
RA Procedimiento n
Memoria Esttica
maximo=10
read *,tabla(1),tabla(2)
call proc(tabla,2,temp)
print *,temp
end
subrutine proc(a,tam,ret)
common maximo
integer maximo,tam
real a(tam),ret,aux
integer k
do 10 k=1,tam
Punto de
aux=aux+a(k)
Ejecucin
ret=aux/2
return
end
maximo
tabla(1)
( )
tabla(2)
tabla(10)
temp
2
a
tam
ret
direccion de retorno
aux
k
Francisco Ortn Soler
12
Contenido
Introduccin
Representacin de los datos
Organizacin de la memoria durante la ejecucin
Memoria esttica
Memoria dinmica de pila
Memoria dinmica heap
Algoritmos de recoleccin de basura
Mecanismos para el paso de parmetros
Memoria Dinmica
La memoria dinmica est organizada de dos
formas posibles
1.
2.
Memoria Dinmica
rea de Cdigo
rea de datos Estticos
Heap
Memoria Dinmica
(tamao variable)
Pila
Francisco Ortn Soler
13
14
Recursividad
Recordemos que los mbitos de ejecucin totalmente
estticos
no permiten recursividad
Reservan el mismo tamao de memoria (el mximo)
independientemente del flujo de ejecucin de la
aplicacin
La recursividad implica tantos registros de activacin como
invocaciones se hayan realizado en tiempo de ejecucin
El modo ms comn de ofrecer este mecanismo es
mediante un mbito de ejecucin basado en pila
Cada vez que se invoque a una funcin, se crea su
registro de activacin en el tope de la pila
Una vez finalizada la invocacin, se desapila su registro
de activacin
La pila de registros de activacin recibe el nombre de pila
de ejecucin
Francisco Ortn Soler
Ambientes
A
bi t d
de ejecucin
j
i para lenguajes
l
j
sin
i
funciones locales: Aquellos lenguajes que no
permiten crear funciones locales a otras funciones
No es posible anidar funciones (C)
Ambientes de ejecucin para lenguajes con
funciones locales: Se permite declarar funciones
locales a otras funciones (Pascal)
En este caso, las reglas de mbito y ocultacin de
variables es ms compleja y deber ser tenida en
cuenta
Francisco Ortn Soler
15
}
Punto ejecucin
bp-4
bp
(fp)
bp+n
local
Informacin
Administracin
argumento
4
Francisco Ortn Soler
Modificacin del FP
Qu sucede en la siguiente ejecucin?
int g(int a) {
int n=1;
return a+n;
}
void f(int argumento) {
int local;
g(3);
local = argumento;
}
bp-4
bp
(fp)
Punto ejecucin
bp+n
local
Informacin
Administracin
argumento
Modificacin del FP
El valor de FP (BP) se actualiza (y se pierde)
bp-4
bp
int g(int a) {
(fp)
int n=1;
return a+n;
Punto ejecucin
}
bp+n
void f(int argumento) {
int local;
g(3);
local = argumento;
}
Informacin
Administracin
3
local
4
4
Informacin
Administracin
argumento
16
Informacin de Administracin
Por tanto, ser necesario almacenar el registro fp antes
de la invocacin a una funcin
As, una vez retornado de dicha invocacin, podr
recuperarse el valor antiguo de fp pudiendo acceder a
las variables locales del registro de activacin actual
int g(int a) {
int n=1;
return a+n;
}
void f(int argumento) {
int local;
g(3);
local = argumento;
}
bp-4
bp
(fp)
n
bp (anterior)
Ms Info Admon.
bp+n
4
n
3
local
bp (anterior)
4
4
Ms Info Admon.
argumento
4
Francisco Ortn Soler
Informacin de Administracin
Cuando finaliza una funcin, cmo se retorna (salta) a la
invocacin a sta?
Tambin es necesario almacenar el registro contador
de instrucciones (IP) en el registro de activacin
int g(int a) {
int n=1;
return a+n;
}
void f(int argumento) {
int local;
g(3);
local = argumento;
}
bp(fp)
ip
n
bp (anterior)
ip (anterior)
Ms Info Admon.
3
local
bp (anterior)
ip (anterior)
Ms Info Admon.
argumento
Informacin de Administracin
Por tanto, en este tipo de lenguajes, la informacin de
administracin de un registro de activacin deber
almacenar
El valor anterior del fp (bp) antes de la creacin del
marco actual) tambin llamado vnculo de control
La direccin de retorno de la invocacin actual
En funcin de la implementacin, podra almacenarse otra
informacin como el valor de otros registros o el valor de
retorno
Espacio para las variables locales
FP (BP)
Direccin de Retorno
Argumentos (parmetros reales)
Francisco Ortn Soler
17
Caso Prctico
Analizaremos el siguiente caso void f(int a) {
int b;
prctico
b=a*2;
Lenguaje C
Direcciones bajas
}
Compilador GNU para Win32
sobre i386
Sobre esta plataforma, el registro EBP-4
b
d marco de
de
d pila
il se llama
ll
EBP
EBP
Sobre esta plataforma, el registro
EBP
de activacin est compuesto por
Dir. Ret.
Argumentos (a es EBP+8) de
EBP+8
derecha a izquierda
a
Direccin de retorno
...
EBP anterior
Variables locales (b es EBP-4)
El valor de retorno se devuelve
en EAX (en st0 si es real)
4
4
4
4
Direcciones altas
Francisco Ortn Soler
SP
Pila
Francisco Ortn Soler
(4)
(3)
(2)
(1)
Francisco Ortn Soler
18
(1) Funcion:
funcion tipo ID declaracion* sentencia*
(2) Simbolo:
declaracion tipo ID
Secuencia de Llamada
Direcciones bajas
variables
locales
fp antiguo
Direccin
de retorno
argumentos
...
Direcciones altas
Francisco Ortn Soler
19
Paso
g++/win32/i386
MAPL
Evaluacin de expresiones
Evaluacin de expresiones
call
id
call
id
call
id
call
id
push
ebp
call
id
mov
ebp,esp
call
id
sub
esp,bytes_var_loc
enter
bytes_var_loc
Secuencia de Retorno
Direcciones bajas
variables
locales
fp
(bp)
fp antiguo
Direccin
de retorno
argumentos
...
Direcciones altas
Francisco Ortn Soler
Paso
add
pop
ebp
ret
bytes_var_loc
ret
bytes_var_loc
add
esp, bytes_params
push
eax
MAPL
esp,bytes_var_loc
20
Ejemplo
program programa;
procedure p;
var n: integer;
procedure q;
begin
end; (* q *)
fp
procedure r(m:integer);
begin;
q;
end; (* r *)
begin (* p *)
n:=1;
r(2);
q;
end;(* p *)
begin (* main *)
p;
end.
En ambos casos, el
acceso a la variable
n sera distinto
q
p
main
fp ant.
dir. ret.
di
t
fp ant.
dir. ret.
m=2
fp
fp ant.
dir. ret.
n=1
fp ant.
dir. ret.
n=1
fp ant.
dir. ret.
Reg. Act.
main
Reg. Act.
main
Francisco Ortn Soler
21
Ejemplo
q
r
p
main
program programa;
procedure p;
var n: integer;
procedure q;
begin
end; (* q *)
Ahora la variable n es
accesible desde ambas
invocaciones a q (adems
de serlo desde r)
fp
procedure r(m:integer);
fp antiguo
begin;
enlace acceso
q;
dir. retorno
end; (* r *)
fp
m=2
fp antiguo
enlace acceso
dir. retorno
n=1
fp ant.
enlace acceso
dir. retorno
n=1
fp ant.
enlace acceso
dir. retorno
Registro de
Activacin main
Registro de
Activacin main
begin (* p *)
n:=1;
r(2);
q;
end;(* p *)
begin (* main *)
p;
end.
q
p
main
fp antiguo
enlace acceso
dir. retorno
Displays
Como hemos visto, el acceso a las variables de un nivel de
anidamiento menor se hace mediante una indireccin por
cada cambio de mbito, empleando el enlace de acceso
Si los niveles de anidamiento son elevados, esto provoca
una prdida de rendimiento
Por lo g
general,, no suele ser comn un nivel de
anidamiento mayor de dos
En el caso de que se d un nmero elevado de
anidamientos, puede emplearse una estructura de datos
tipo display:
Se aumenta el registro de activacin con tantos enlaces
de acceso como nivel de anidacin tenga la funcin (un
vector)
Conociendo en la tabla de smbolos el nivel de
anidamiento de toda variable local, se emplear el
display para que todos accesos tendrn sola indireccin
Contenido
Introduccin
Representacin de los datos
Organizacin de la memoria durante la ejecucin
Memoria esttica
Memoria dinmica de pila
Memoria dinmica heap
Algoritmos de recoleccin de basura
Mecanismos para el paso de parmetros
22
Memoria Heap
La memoria dinmica heap permite
C, C++ o Pascal
Permiten controlar exactamente el ciclo de vida de
las variables u objetos
En
estn
E lla actualidad,
t lid d llos llenguajes
j
iimperativos
ti
t
optando por asignacin explcita y liberacin
implcita
Java, C# o Python
La liberacin de la memoria es llevada a cabo por
un hilo denominado recolector de basura
Lisp o ML
23
Longitud de Bloques
Otra clasificacin de la gestin de bloques heap en
lenguajes de programacin es en funcin de la longitud de
sus bloques
Gestin de bloques de longitud fija
Gestin de bloques de longitud variable
La gestin de bloques de longitud fija consiste en
asignar bloques de un (o varios) tamao(s) fijo(s)
Este tipo de gestin de memoria heap slo es posible en un
tipo determinado de lenguajes
Lisp permite manejar estructuras dinmicas de lista
cuyos bloques son todos del mismo tipo y tamao (o un
tomo o una lista)
Supone un mecanismo muy sencillo de implementar
No produce el problema de la fragmentacin de la memoria
(que veremos a continuacin)
Francisco Ortn Soler
Estructura de un Bloque
libre
24
Asignacin de un Bloque
siguiente
asignado=i
asignado
i
libre=0
siguiente
asignado=i
libre=n-i
asignado
libre
n
n-i
libre
asignado
siguiente
asignado=j
libre=m
asignado
libre
i
m
Fragmentacin de Memoria
asignado
libre
asignado
asignado
asignado
asignado
libre
libre
asignado
asignado
asignado
libre
libre
libre
Francisco Ortn Soler
Fragmentacin Externa
Este proceso de
descomposicin de la memoria
total disponible se denomina
fragmentacin externa
Le pidamos un bloque de
tamao m
Posea ms de m bytes libres
Sin embargo no puede asignar
un bloque de dicho tamao
(por la fragmentacin)
libre
asignado
libre
asignado
libre
25
Fragmentacin Interna
asignado
libre
asignado
libre
asignado
asignado
libre
libre
Francisco Ortn Soler
Asignacin de Memoria
El grado de fragmentacin de la memoria est fuertemente
ligado al modo en el que sta se asigna
Veremos una serie de tcnicas empleadas para asignar la
memoria
La idoneidad de cada una de ellas es dependiente de las
caractersticas del lenguaje
g
p
p ((first-fit))
Asignacin
primero el q
que cumpla
Asigna el primer bloque que sea mayor o igual al pedido
(partiendo del puntero de la lista)
Es un mtodo con un alto rendimiento
Produce una elevada fragmentacin interna
Asignacin primero que cumpla circular (next-fit)
Modificacin del primero que cumpla
Contina las bsqueda en el punto en el que finaliz la
anterior asignacin
Eficiente y distribuye los bloques pequeos
(fragmentacin interna) a lo largo de toda la lista
(facilita la fusin de bloques)
Francisco Ortn Soler
Asignacin de Memoria
El resto de algoritmos se basan en la ordenacin de los
bloques en funcin de distintos criterios
Su rendimiento es menor que los dos anteriores
Asignacin mejor que cumpla u ptimo (best-fit)
Ordenacin de bloques por tamao ascendentemente
(menor rendimiento)
Se toma el bloque que realice un menor
desaprovechamiento de la memoria
Reduce la fragmentacin interna
Asignacin peor que cumpla (worst-fit)
Ordenacin de bloques por tamao descendentemente
No genera una elevada fragmentacin interna
Posee un bajo rendimiento
Etiquetas lmite
Ordenacin de bloques por su direccin de memoria
Reduce la fragmentacin externa, puesto que los asigna
de un modo ordenado (permitiendo fusionar bloques)
Francisco Ortn Soler
26
Liberacin de Memoria
Al igual que la asignacin de memoria, la
liberacin puede ser llevada a cabo
27
Fusin de Bloques
En el ejemplo, una liberacin de memoria sin fusin de
bloques generara tres bloques libres
Con fusin de boques se obtendra un nico bloque libre de
mayor tamao (la suma de los tres anteriores)
asignado
i
d
asignado
i
d
asignado
asignado
libre
libre
asignado
libre
Liberacin
del bloque
Francisco Ortn Soler
Compactacin de Memoria
Otra tcnica utilizada para evitar la fragmentacin externa es la
compactacin de memoria
Todos los bloques usados se mueven a otra zona de memoria
Se consigue eliminar toda la fragmentacin externa
Sin embargo, es necesario
1.
Tener ms memoria heap disponible
2.
Modificar todos los punteros o referencias del programa
3.
Ralentiza la ejecucin del programa
Este mecanismo es ms empleado en la liberacin implcita de
memoria (recoleccin de basura)
libre
asignado
asignado
Compactacin
asignado
libre
libre
asignado
Francisco Ortn Soler
Implementacin
28
Contenido
Introduccin
Representacin de los datos
Organizacin de la memoria durante la ejecucin
Memoria esttica
Memoria dinmica de pila
Memoria dinmica heap
Algoritmos de recoleccin de basura
Mecanismos para el paso de parmetros
Recoleccin de Basura
Como hemos visto con anterioridad, existen lenguajes
que ofrecen liberacin implcita de memoria
El programador no deber especificar ni cundo ni
qu memoria se ha de liberar
Aquellos bloques de memoria que no sean accesibles
desde ninguna referencia (puntero) del programa
reciben el nombre de basura (garbage)
La memoria basura deber ser liberada por un
lenguaje con liberacin implcita de memoria heap
Este proceso de liberacin implcita de memoria recibe
el nombre de recoleccin de basura (garbage
collection)
La recoleccin de basura es un proceso dinmico
En el caso de un compilador, deber generar cdigo
encargado de realizar esta operacin (D, Go)
Francisco Ortn Soler
Ejemplo
El siguiente programa Java posee bloques inaccesibles
(basura) en el punto de ejecucin indicado
Heap
class Lista {
int valor;
Lista sig;
public Lista(int v,
Lista s) {
valor=v;
sig=s;
}
}
Variables
1
Basura
class Arbol {
int valor;
Arbol izq,der;
public Arbol(int v,
Arbol i,Arbol d) {
valor=v;
izq=i;
der=d;
}
}
Punto de Ejecucin
Francisco Ortn Soler
29
Algoritmos de Recoleccin
Veremos las siguientes tcnicas de recoleccin de
basura
Ejemplo
Heap
1
Variables
a
...
5
Bloques Libres
30
Caractersticas de Algoritmo
El algoritmo de marcar y borrar
Implementaciones
Contador de Referencias
La primera parte del algoritmo marcar y borrar detecta si
los bloques heap son accesibles desde las variables
referencia
El algoritmo de contador de referencias se basa mantener
esta informacin a lo largo de la ejecucin del programa
Todo bloque es aumentado con un campo contador de
referencias
Cada vez que a una referencia se le asigne el valor de un
bloque, su contador ser incrementado
Cada vez que se deje de hacer referencia a un bloque
(se elimina la referencia o pasa a apuntar a otro bloque)
su contador ser decrementado
Si el contador de referencias de un bloque alcanza el valor 0
ste es aadido a la lista de bloques libres
Se decrementan todas los contadores de las referencias
que existan en dicho bloque
Francisco Ortn Soler
Contador de Referencias
Heap
2.
3
Variables
a
4
1
5
1
31
Contador de Referencias
Hay dos posibles soluciones al problema de las
referencias cclicas
32
Destino
Destino
3
Variables
Recoleccin
con copia
Origen
Variables
Recoleccin Generacional
Esta tcnica se apoya sobre una serie de criterios
empricos detectados en la mayora de los
lenguajes de programacin [Lieberman]
En la mayora de programas se produce que
1.
2.
33
Recoleccin Generacional
En esta tcnica la memoria heap es dividida en
generaciones (Gi)
Caso Especial
Existe un caso especial a tener en cuenta que provoca que
bloques accesibles sean identificados como basura
Este caso se da cuando hay una referencia de otra
generacin apuntando a un bloque de G0
Por el modo en le que se construyen los objetos y
variables en los lenguajes de programacin, se ha
demostrado empricamente que este caso se produce en
escasas ocasiones [Lieberman]
La
pasa por almacenar
este
L solucin
l i a este
t problema
bl
l
t tipo
ti
de referencias y aadirlas a las variables raz antes del
proceso de recoleccin
variables
variables
G0
Recoleccin
Generacional
G1
G2
G0
G1
G
Recoleccin Generacional
Tras una serie de recolecciones de G0, en G1 se podr haber
generado una serie de bloques basura
Puesto que existir un conjunto de enlaces entre los elementos del
mdulo G0 y los de G1, ser menos costoso realizar la recoleccin
para ambas generaciones simultneamente
Toda recoleccin en Gi se realiza junto a todas sus
generaciones anteriores
Un
U bloque
bl
promociona
i
de
d Gi a Gi+1 tras sobrevivir
b
i i a2o3
recolecciones de Gi
Esta promocin puede realizarse de un modo sencillo
empleando recoleccin con copia (evitando adems la
fragmentacin)
Los estudios empricos con lenguajes funcionales y OO con
recoleccin de basura han concluido
Se elimina en torno al 90% de los bloques de G0 cada vez que
se pasa el recolector
Llevar a cabo este proceso supone una complejidad logartmica
respecto al nmero de bloques (las generaciones crecen
Francisco Ortn Soler
exponencialmente)
34
Tiempo empleado
[GC [DefNew: 147K->63K(576K), 0.0069869 secs]
[Tenured: 31K->95K(1408K), 0.0510101 secs]
Se ampla la tenured!
147K->95K(1984K), 0.0582292 secs]
(promocin de bloques)
[GC [DefNew: 512K->51K(576K), 0.0060298 secs]]
[GC [
[
[DefNew: 563K->51K(576K),
(
), 0.0076222 secs]]
]] Se recoje el 90%
[GC [DefNew: 563K->51K(576K), 0.0076088 secs]]
[GC [DefNew: 563K->51K(576K), 0.0076518 secs]]
[GC [DefNew: 563K->51K(576K), 0.0086422 secs]]
Tamaos Disponibles
...
[GC [DefNew: 563K->51K(576K), 0.0077566 secs]
[Tenured: 1448K->1499K(1536K), 0.1011562 secs]
1960K->1499K(2112K), 0.1091994 secs]
[GC [DefNew: 512K->51K(576K), 0.0047098 secs]]
[GC [DefNew: 563K->51K(576K), 0.0076496 secs]]
[GC [DefNew: 563K->51K(576K), 0.0077122 secs]]
[GC [DefNew: 563K->51K(576K), 0.0076499 secs]]
[GC [DefNew: 563K->51K(576K), 0.0076999 secs]]
...
781 milisegundos.
Francisco Ortn Soler
35
Dijkstra y Lamport
Steele
Boehm, Demers & Dhenker
Baker
Appel, Ellis & Li
36
Destino
Origen
6
7
Se solicita un
nuevo bloque
3
2
4
3
Variables
a
8
4
...
672 milisegundos (781 ms, la versin secuencial)
Francisco Ortn Soler
37
Contenido
Introduccin
Representacin de los datos
Organizacin de la memoria durante la ejecucin
Memoria esttica
Memoria dinmica de pila
Memoria dinmica heap
Algoritmos de recoleccin de basura
Mecanismos para el paso de parmetros
Paso de Parmetros
Hemos visto cmo en la llamada a una funcin, los
argumentos (parmetros reales) corresponden a valores
existentes en el registro de activacin
Estos valores son almacenados en la secuencia de
llamada previamente a la invocacin
De este modo
modo, un parmetro (formal) representa dentro
del cdigo de una funcin un modo de acceder a los valores
de los argumentos
El modo de acceso es mediante desplazamientos
(offsets) dentro del registro de activacin
El lenguaje de programacin describir el mecanismo que
establece la dependencia entre los valores de los
argumentos y de los parmetros
Esta dependencia se define como el mecanismo de
paso de parmetros
Francisco Ortn Soler
38
poseen
valores que no pueden ser modificados
En otros lenguajes como C o Pascal, representan
variables similares a las variables locales
No requiere una implementacin compleja
No es posible modificar el argumento dentro del cdigo de
la funcin
void inc(int x) { ++x; } // No tiene utilidad
El programador, puede conseguirlo con indirecciones:
void inc(int *x) { ++(*x); } // Se invocaFrancisco
inc(&a)
Ortn Soler
39
Ejercicio
(thunk)
40
Bibliografa
Construccin de Compiladores Principios y
Prctica.
K.C. Louden.
Thomson. 2004.
Modern compiler implementation in Java.
A Appel
A.
Cambridge University Press. 2002.
Programming Language Processors in Java.
D.A. Watt, D.F. Brown.
Prentice Hall, 2000.
Intrpretes y Diseo de Lenguajes de
Programacin.
J.E. Labra, J.M. Cueva, R. Izquierdo, A.A. Juan,
M.C. Luengo, F. Ortn.
Servitec. 2003.
41
Procesadores de Lenguaje
Francisco Ortn Soler
Organizacin de la Memoria en
Ti
Tiempo
d
de Ej
Ejecucin
i
Lenguajes y Sistemas
Informticos
Universidad de Oviedo
42