You are on page 1of 37

Representacin en Ejecucin

Repaso
Unidades de programa
Atributos:
Nombre
Declaracin/invocacin

Alcance
Dnde se conoce el identificador nombre Rutina
Ambiente de referencia de la Rutina: global, local, no local

Tipo
Dado por los parmetros y valor de retorno. Signatura

L-Valor:
Relacionado a dnde se almacena las sentencias en la memoria

R-Valor:
Relacionado al momento en que se hace la referencia a esa Rutina

Diferencias entre Declaracin y Definicin


Extensin del alcance

Comunicacin entre Rutinas


Pasaje parmetros y entorno global

Repaso
Procesador Abstracto - Memoria
Sentencias:
Set
Para asignar valores. Ej: set 10,D[20]; set 20, read; set
write,D[50]

Jump y jumpt
Bifurcacin incondicional y condicional. Ej: jump 47, jumpt
47,D[13]>D[8]
ip

C: Zona de cdigo

D: Zona de datos

Repaso
Esquemas de ejecucin - C1 y C2
Esquemas de ejecucin
Esttico, basado en pila y dinmico

Esttico:
C1:
Programa sencillo sin bloques internos, solo cdigo
programa principal
En zona de datos: SOLO datos locales
C2:
Programa con bloques internos SIN anidamientos
Compilacin junta y separada (C2)
En zona de datos: datos locales + pto. de retorno
4

C3
C2 + recursin y valor de
retorno

Esquema basado en pila


Rutinas con capacidad de llamarse a si
mismas (recursin directa) o de llamar a
otra rutina en forma recursiva (recursin
indirecta).
Rutinas con la capacidad de devolver
valores, es decir, funciones.

C3: Funcionamiento
El registro de activacin de cada unidad ser de tamao fijo
y conocido, pero no se sabr cuantas instancias de
cada unidad se necesitarn durante la ejecucin.
Igual que en C2 el compilador puede ligar cada variable
con su desplazamiento dentro del correspondiente
registro de activacin. El desplazamiento es esttico
La direccin donde se cargar el registro de activacin,
es dinmica, por lo tanto, la ligadura con la direcciones
absolutas en la zona de Datos de la memoria, solo puede
hacerse en ejecucin.
Cada nueva invocacin aloca un nuevo registro de
activacin y se establecen las nuevas ligaduras ente el
segmento de cdigo y el nuevo registro de activacin.
6

C3: Ejemplo del factorial


int n;

int fac()
{
int loc;
if (n>1) {
loc= n--;
return loc * fact();
}
else return 1;
}

main ()
{
get (n);
if (n>0) print (fact());
else print( input error);
}

Recursin
+
Valor de
retorno

C3: Funcionamiento

Una
int x invocacin
a P implica

Un molde del RA
de P para cada
activacin

En el caso C2:
D(P,0)
D(P,1)

0 Pto Retorno
1 x
?

pto de retorno
x

Qu informacin necesitariamos adicionar en


el RA en este caso?
8

C3: Funcionamiento
Ahora hay que tener en cuenta que:
Cuando la instancia actual de la unidad termine de
ejecutarse, su registro de activacin no se necesitar
mas, por lo tanto se puede liberar el espacio ocupado
por su registro de activacin y dejar el espacio
disponible para nuevos registros de activacin y que..
Las unidades pueden devolver valores (funciones) y
esos valores NO deberan perderse cuando se
desactive la unidad. Entonces.
P

int x
P

0
1

P
2
3

Pto retorno

x
Valor Retorno
Link dinmico
Pto retorno

x
Valor Retorno
Link dinmico

C3: Datos necesarios


Para manejar la alocacin dinmica necesitamos
nuevos elementos:
Como vimos . se necesita el:
Valor de retorno: Al terminar una rutina se desaloca

su RA, por lo tanto la rutina lllamante debe guardar en su


RA sel valor de retorno de la rutina llamada.
Link dinmico: Contiene un puntero a la direccin
base del registro de activacin de la rutina llamadora

Pero adems . se necesita:


Current: Direccin base del registro de activacin de la
unidad que se este ejecutando actualmente
Free: Prxima direccin libre en la pila

Cadena dinmica: cadena de links dinmicos originada


en la secuencia de registros de activacin activos.
Representa la secuencia dinmica de unidades activadas

10

C3: Moldes
D
0
punto retorno
link dinmico

current
free

valor de retorno

11

C3: Ejemplo
Supongamos la siguiente estructura de programa y
el siguiente esquema de llamado..
link dinmico

En la zona de Datos

current
free

current
free

current
free

B
B
Se llama a
C

C
pto de retorno
valor de retorno

A llama a
B
12

B llama a C

C3: Qu sucede cuando se


llama o retorna de una rutina?
free

ip+4

call

free + 1

set 1,D[1]+1
set D[1],ip+4
set D[1]+1,D[0]
set 0,D[1]
set 1,D[1]+ size
jump comienzo

Aloca espacio para el v. de retorno


Salva el punto de retorno al cdigo
Salva el link dinmico 0 current
Actualiza el current
1 free
Actualiza el free
Transfiere el control a la unidad
llamada

return
set 1,D[0]
set 0,D[D[0]+1]
jump D[D[1]]

Reestablece el free
Reestablece el current
Bifurca al punto de retorno

link
dinamico

13

C3: semntica del call - return


Cuando se llama
set 1,D[1]+1
set D[1],ip+4
set D[1]+1,D[0]
set 0,D[1]
set 1,D[1]+ size
jump comienzo
Cuando se retorna
set 1,D[0]
set 0,D[D[0]+1]
jump D[D[1]]

int f1()
{
int a;
...
}
void main ()
{
int b;
...
f1();
..
}
14

C3: Ejemplo del factorial


Basndonos en el primer ejemplo: llamada recursiva a la funcin factorial
tenemos:

int n;
int fact()
{
int loc;
if (n>1) {
loc = n--;
return loc*fact();
}
else
return 1;

}
reg act
global y
main

main()
{
get(n);
if (n>=0)
print(fact());
else
print(error entrada);
}
reg act fac

loc
15

C3: Ejemplo del efecto en memoria


de la ejecucin de factorial
main

fac

fac

int n;
int fact()
{
int loc;
if (n>1) {

else

Invocacin a fac con n=2


Current
Free
n

loc = n--;
return loc*fact();
}
return 1;

loc

fac

fac = 1

fac

loc

print(error

main

fac = 2

}
main()
{
get(n);
if (n>=0)
print(fact());
else
entrada);
}

X2 1

imprime 2
16

C4: Estructura de bloque


C4
permite que dentro de las
sentencias compuestas aparezcan
declaraciones locales

C4
permite la definicin de una rutina
dentro de otras rutinas.
(anidamiento de rutinas)

Estas caractersticas conforman el concepto de estructura


de bloque:
controla el alcance de las variables,
define el tiempo de vida de las variables
divide el programa en unidades mas pequeas.
Los bloques pueden ser:
disjuntos (no tiene porcin comn)
anidados (un bloque esta completamente contenido en otro)
17

C4: Anidamiento va
sentencias compuestas
Un bloque tiene forma de una sentencia
compuesta:
{<lista de declaraciones>;<lista de sentencias>}
Las variables tienen alcance local: son visibles
dentro de la sentencia compuesta, incluyendo
cualquier sentencia compuesta anidada en ella
Si en el anidamiento, hay una nueva declaracin
de un nombre, la declaracin interna enmascara
la externa del mismo nombre.
18

C4: Sentencias compuestas


int f();
{

1
2

5
}

ALCANCE

int x,y,w:
while (..)
{
int x,z:
while (.)
{
int y;
3
}
if(..)
{
int x, w;
4
}
}
if ()
{
int a,b,c,d
}

x x y y

w w

a,b,c,d

19

C4: Sentencias compuestas


1

alocacin: implementacin

2
3

5
4

int f();
dinmico
{ int x,y,w:
link dinmico
while (..)
{
int x,z:
incluir las
alocar el
x de 1
while (.)
necesidades espacio
y de 1
1
3
dentro del
dinmicamen
{ int y;
w de 1
registro de
te cuando se
2
}
x
de
2
a
de
5
activacin de ejecutan las
if(..)
la unidad a
sentencias
z de 2
b de 5
{int x, w;
4
la que
}
y de 3 x de 4 c de 5
pertenece
}
w de 4
d de 5
if ()
5 {int a,b,c,d
simple y eficiente
eficiente en
20
}
en tiempo
espacio
}
esttico

punto de retorno

C4: Rutinas anidadas


main ();
{
int z,t;

//file
int x,y,z;
f1()
{
int t,u;
f2()
{
int x,w;
f3()
{

}
//end file

Alcance de los nombres de rutinas:


f3
local a f2 no local en f3
f2

int y,w,t;

}
x = y + t + w + z;
x=y+t+w+z

local a f1

no local en f2 y f3

valen las mismas reglas de alcance


en f3

visibles y,w,t locales


visibles x,u,z no locales

f1
local global local

global

21

C4: Rutinas anidadas


acceso al ambiente no-local
//file
int x,y,z;
f1()
{
int t,u;
f2()
{
int x,w;
f3()
{
int y,w,t;
}
x = y + t + w + z;
}
}

main ();
{
current
int z,t;
}
//end file

Secuencia de
llamadas:
main f1 f2 f3 f2

global

x, y, z

main

z, t

f1
f2
f3
f2

t, u
x, w

cadena dinmica

x=y+t+w+z
f1
local global local

global

y, t, w
xw

La cadena dinmica no sirve


para localizar esas referencias
no locales, en lenguajes que
22
siguen la cadena esttica

C4: Acceso al ambiente no


local
link esttico: apunta al registro de activacin de
la unidad que estticamente la contiene
anidamiento
esttico

punto retorno
link dinmico

link esttico

la secuencia de links estticos se denomina


cadena esttica
23

C4: Qu sucede cuando se llama


o retorna de una rutina?
free

ip+45

call

free + 1

set 1,D[1]+1
set D[1],ip+45
set D[1]+1,D[0]
set 0,D[1]
set 1,D[1]+ size
jump comienzo

aloca espacio para el v. de retorno


salva el punto de retorno
salva el link dinmico
actualiza
el current
Con el link
dinmico se agrega
actualiza
el free
una sentencia:
transfiere el control a la unidad
Colocar en D[1] + 2 el link esttico
llamada

set 1,D[0]
set 0,D[D[0]+1]
jump D[D[1]]

reestablece el free
reestablece el current
bifurca al punto de retorno
return

link
dinamico

24

C4: Cadena esttica


global
main
f1
f2
f3
current

f2

x, y, z
z, t
t, u
x, w

x=y+t+w+z
f1
local global local

global

y, t, w
xw

Con la cadena esttica


podemos localizar esas
referencias no locales, en
lenguajes que siguen la 25
cadena esttica

C4: Ejemplo de lenguajes


C4

C4

Pascal

C++

Modula
ADA
26

Cadena esttica = Cadena dinmica


ACB
A

boolean b= true
B
print b

esttico
b es la de A

true

dinmico
b es la de C

false

C
boolean b= false
B

27

C5: Datos ms dinmicos


C5
Registro de
activacin cuyo
tamao se conoce
cuando se activa la
unidad.
Datos
semidinmicos

C5
Los datos pueden
alocarse durante la
ejecucin.

Datos
dinmicos
28

C5: Datos semidinmicos


Variables cuyo tamao se conoce en compilacin
Arreglos dinmicos
type VECTOR is array (INTEGER range <>);
define un arreglo con ndice irrestricto
A: VECTOR (0..N);
B: VECTOR(1..M);
N y M deben ligarse a algn valor entero para que
A y B puedan alocarse en ejecucin (referencia
al ambiente no local o parmetros)
29

C5: Implementacin de
arreglos dinmicos

COMPILACION: se reserva lugar en el registro de


activacin para los descriptores de los arreglos
dinmicos.
A (n1..n2,m1..m2)

n1
n2
m1
m2

lugar donde se
almacenara A
tamao esttico

Todos los accesos al arreglo dinmico son traducidos


como referencias indirectas a travs del puntero en el
descriptor, cuyo desplazamiento se determina
estticamente.
30

A: VECTOR (0..N);
B: VECTOR(1..M);

EJECUCION
punto retorno
link dinmico

A
li A
ls A
B
li B
ls B

COMPILACION
ACTIVACION DE LA
UNIDAD SE
EVALUAN LOS
LIMITES

link esttico
vbles locales

codigo generado
por el compilador
para implementar
este mecanismo

li A
ls A
li B
ls B

31

C5: Datos semidinmicos


EJECUCION: el registro de activacin se aloca en
varios pasos:
1. Se aloca el almacenamiento para los datos de
tamao conocido estticamente y para los
descriptores de los arreglos dinmicos.
2. Con la declaracin se calculan las dimensiones
en los descriptores y se extiende el registro de
activacin para incluir el espacio para la variable
dinmica.
3. Se fija el puntero del descriptor con la direccin
del rea alocada
32

C5: Datos dinmicos


Se alocan explcitamente durante la ejecucin
mediante instrucciones de alocacin
donde alocar el objeto
apuntado?
A

p pointer to integer
AB

new p
new p
B

el reg de Act de A no
esta en el tope
el reg de Act de B no permite
que luego se use en A

33

el tiempo de vida no depende de la sentencia de


alocacin, vivir mientras este apuntada

pila
p

la solucin es
alocarla en la
heap

heap

34

C6: LENGUAJES
dinmicos
Se trata de aquellos lenguajes que adoptan ms
reglas dinmicas que estticas.
APL, Snobol4 y algunas variantes de Lisp usan
tipado dinmico y reglas de alcance dinmicas.
Se podran tener reglas de tipado dinmicas y
de alcance esttico, pero en la practica las
propiedades dinmicas se adoptan juntas.
Una propiedad dinmica significa que las
ligaduras correspondientes se llevan a cabo en
ejecucin y no en compilacin.
35

Variables estticas C1-C2

esttico

Variables semiestticas o automticas


C3-C4
Variables semidinmicas C5
pila

Variables dinmicas C5
Tipos y alcance dinmico C6
heap

36

Ejecucin siguiendo
cadena esttica y dinmica
Pascal like
Diferentes resultados
por las diferentes
cadenas de ejecucin

37

You might also like