Nombres y Asociación

Anuncio
Nombres y Asociaciones
Nombres vs. Objetos
Lenguajes de Programación I
Nombres y Asociación
Ernesto Hernández-Novich
<[email protected]>
Copyright (c) 2007-2010
Nombres y Asociaciones
Nombres vs. Objetos
Definiciones
Nombre
Cadena alfanumérica
mnemónica para
denotar un elemento de
interés.
Indispensable para
lograr la abstracción,
objetivo de los lenguajes
de programación.
Asociación (Binding)
Relación entre un
nombre y el elemento
que denota.
Son creadas y
destruidas según las
decisiones tomadas por
el diseñador.
Nombres y Asociaciones
Nombres vs. Objetos
¿Qué es el Momento de Asociación?
Binding Time
Momento de tiempo en el cual se establece la relación
entre el nombre y el elemento denotado por este.
Su duración depende de la decisión de diseño tomada.
Asociación temprana, mejorará la eficiencia de ejecución.
Asociación tardía, mejorará la flexibilidad de uso.
Nombres y Asociaciones
Nombres vs. Objetos
Lo más temprano posible
Al momento de Diseñar el Lenguaje
(Language Design Time)
Palabras reservadas.
Tipos primitivos y sus constructores.
Al momento de Implantar el Lenguaje
(Language Implementation Time)
Precisión para representar elementos.
Disposición de elementos almacenados en memoria.
Acoplamiento con el subsistema de I/O.
Nombres y Asociaciones
Nombres vs. Objetos
Mientras se escribe el programa
Al momento de Escribir el Programa
(Program Writing Time)
El Programador puede escoger los nombres de:
Tipos y sus constructores.
Variables.
Funciones o Procedimientos.
Módulos.
Siempre y cuando no entren en conflicto con lo que
decidieron Diseñador e Implantador.
Nombres y Asociaciones
Nombres vs. Objetos
Mientras se produce el programa ejecutable
Al momento de Compilar el Programa
(Compile Time)
Asociar construcciones de Alto Nivel con las equivalentes
de Bajo Nivel – código ejecutable y datos.
Generación de símbolos para asignar espacio de memoria.
Al momento de Enlazar el Programa
(Link Time)
Resolver referencias entre módulos.
Decidir la distribución final de memoria.
Nombres y Asociaciones
Nombres vs. Objetos
Mientras se ejecuta el programa
Al momento de Cargar el Programa
(Load Time)
Asignación de memoria física.
Asignación de recursos adicionales.
Al momento de Ejecutar el Programa
(Run Time)
Asociar valores a variables.
Variables aparecen, reaparecen y desaparecen según el
flujo de ejecución y anidamiento.
Ejecutar funciones y procedimientos.
Nombres y Asociaciones
Nombres vs. Objetos
Temprano vs. Tarde
Asociación Temprana
También llamada estática.
Apunta hacia la eficiencia.
Típica de los lenguajes compilados.
Asociación Tardía
También llamada dinámica.
Apunta hacia la flexibilidad.
Típica de los lenguajes interpretados.
Nombres y Asociaciones
Nombres vs. Objetos
¿Y el punto medio?
Momentos de
Asociación Temprana
Diseño.
Momentos de
Asociación Tardía
Ejecución.
Implantación.
Escritura.
Compilación.
Enlace.
Carga.
La frontera entre lo estático y dinámico
es bastante difusa en algunos lenguajes.
Nombres y Asociaciones
Nombres vs. Objetos
Diferentes tiempos, diferentes espacios
Creación de Objetos.
Creación de Asociaciones a Nombres.
Uso de los objetos (variables, rutinas, tipos, etc.) a través
de las Asociaciones a Nombres.
Activación y reactivación de Asociaciones suspendidas
temporalmente.
Destrucción de Asociaciones a Nombres.
Destrucción de Objetos.
El período de tiempo entre la creación y la destrucción
de una Asociación se denomina tiempo de vida (lifetime).
Nombres y Asociaciones
Nombres vs. Objetos
Disposición de almacenamiento
Memoria virtual asignada al proceso
MAXADDR
Espacio
asignado al
proceso por el
sistema de
operación.
MAXMEM –
dirección
máxima posible
según el CPU.
0
El programa
sólo puede usar
lo asociado.
Nombres y Asociaciones
Nombres vs. Objetos
Mecanismos de Asignación de Almacenamiento
El Tiempo de Vida define el Espacio
Los Objetos Estáticos tienen una ubicación fija, absoluta,
determinada a tiempo de compilación (o carga) y
mantenida durante la ejecución del programa.
Los Objetos en Pila son almacenados y removidos en la
pila de ejecución en conexión con la invocación de
subrutinas o bloques anidados.
Los Objetos en Heap son almacenados y removidos
arbitrariamente de forma implícita o explícita en conexión
con la creación de variables dinámicas.
Nombres y Asociaciones
Nombres vs. Objetos
Almacenamiento Estático
¿Cuáles son los objetos estáticos?
Código ejecutable – en general, no puede modificarse.
Variables globales.
Constantes – explícitas e implícitas.
Variables locales a subrutinas que deben preservar su
valor entre invocaciones.
Tablas de Símbolos para debugging y profiling.
En lenguajes sin recursión, el espacio para subrutinas.
Nombres y Asociaciones
Nombres vs. Objetos
Disposición de almacenamiento
Espacio estático
MAXADDR
Tamaño fijo –
calculado al
compilar.
TEXT sólo puede
ejecutarse.
DATA/BSS
TEXT
0
DATA/BSS
puede tener
datos sin
inicializar.
Nombres y Asociaciones
Nombres vs. Objetos
Almacenamiento en Pila
¿Cuáles objetos aparecen y desaparecen según el flujo?
En lenguajes con recursión, el espacio de trabajo para las
subrutinas, denominado registro de activación
Argumentos.
Variables locales.
Direcciones y valores de retorno.
El programa ejecutable debe mantener la pila:
El llamador debe respetar una secuencia de invocación
antes de llamar a la subrutina.
El llamado debe comenzar ejecutando el prólogo y
finalizar con el epílogo.
Los detalles (¡muchos!) los estudiaremos más adelante,
ahora solamente interesa la idea general.
Nombres y Asociaciones
Nombres vs. Objetos
Disposición de almacenamiento
Pila de ejecución
MAXADDR
STACK
Crece hacia las
direcciones
bajas.
Tamaño limitado
(sistema de
operación).
DATA/BSS
TEXT
0
Instrucciones
especiales
(PUSH, POP,. . . ).
Nombres y Asociaciones
Nombres vs. Objetos
Registro de Activación – Stack Frame
A tiempo de compilación...
Establece un apuntador base (frame o base pointer).
Calcular desplazamientos relativos (offset) de cada objeto
en relación al frame pointer.
Generar código para acceder a los objetos utilizando el
frame pointer como referencia.
A tiempo de ejecución...
Secuencia de llamada empila parámetros y salta a rutina.
Prólogo establece valor concreto para frame pointer y
mueve tope de la pila para reservar espacio local.
Epílogo regresa tope de pila a la base y retorna.
Nombres y Asociaciones
Nombres vs. Objetos
Registro de activación
. . . el rastro de la ejecución
← SP
locales
← BP
Sub C
MAXADDR
BP (Base Pointer) –
base de stack frame.
Sub D
argumentos
SP (Stack Pointer) –
tope de la pila.
Locales – tienen
offset negativo.
Sub B
Argumentos – tienen
offset positivo.
Sub A
Cadena dinámica –
¿quién llamó a quién?
Nombres y Asociaciones
Nombres vs. Objetos
Almacenamiento en Heap
¿Cuáles objetos aparecen y desaparecen arbitrariamente?
Heap
Región de almacenamiento en la cual pueden reservarse y
liberarse bloques arbitrariamente.
Requiere que el programa ejecutable cuente con una
estrategia de manejo de memoria:
Lista de Bloques Libres (Free List).
Política para reservar bloques:
First Fit.
Best Fit.
El programa emplea primitivas o funciones del lenguaje
para reservar y liberar los bloques.
Nombres y Asociaciones
Nombres vs. Objetos
Disposición de almacenamiento
Completa
MAXADDR
STACK
Crece hacia las
direcciones altas.
HEAP
Crece en
bloques grandes
– sbrk en Unix.
DATA/BSS
Nunca se reduce
– reutilización.
TEXT
0
Nombres y Asociaciones
Nombres vs. Objetos
Fragmentación del Heap
Memoria libre que no puedes usar
Fragmentación Interna
El objeto contenido no ocupa todo el bloque asignado.
El espacio sobrante no puede utilizarse.
Aparece cuando el tamaño de los bloques es fijo o no hay
disponible uno que ajuste mejor.
Fragmentación Externa
No hay un bloque disponible que tenga el tamaño
necesario para el objeto a almacenar.
Hay muchos bloques pequeños que no son continuos.
Nombres y Asociaciones
Nombres vs. Objetos
¿Cuánto cuesta almacenar en el Heap?
Eficiencia en espacio y tiempo
Recorrer la Lista Libre es proporcional a su longitud.
Pueden usarse varias Listas Libres cada una con bloques
de tamaño diferente.
Sistema de “panitas” (Buddy System).
Sistema Fibonacci.
Combinación de contigüos en ambos casos.
Para reducir la fragmentación externa es necesario
compactar el heap a intervalos regulares.
Nombres y Asociaciones
Nombres vs. Objetos
Liberación de Espacio en el Heap
Explícita.
Simple de implantar con alguna instrucción primitiva en el
lenguaje.
Es el método más eficiente.
Requiere que el programador identifique correctamente el
momento en que el objeto debe destruirse...
...pero suelen equivocarse y ocurren errores por
referencias colgantes o pérdida de memoria.
Implícita.
Conocida como recolección de basura (garbage
collection).
Complejo de implantar para minimizar el impacto sobre el
tiempo de ejecución.
El programador no necesita hacer nada.
Prácticamente obligatorio en lenguajes interpretados y muy
frecuente en lenguajes con Máquina Virtual.
Nombres y Asociaciones
Nombres vs. Objetos
Disposición de almacenamiento
Fallas accediendo a memoria
MAXADDR
STACK
Your fault!
HEAP
DATA/BSS
TEXT
0
Segmentation fault
El programa accede a
una dirección dentro
de su espacio, pero
sin asociación.
Descargar