SlideShare una empresa de Scribd logo
1 de 33
Descargar para leer sin conexión
Notas de curso de Programación y
estructuras de datos. Memoria dinámica
                     Nikos Mylonakis, Fernando Orejas
                            nicos@lsi.upc.edu


                                   ´                      ´
Dept. Llenguatges i Sistemes Informatics Universitat Politecnica de Catalunya
                                 Barcelona




                                                 Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.1/33
Contenido


•   Introducción a los LP
•   Memoria dinámica
•   Control de datos
•   Tipos de datos
•   Especificación algebraica
•   Implementación de tipos abstractos de datos




                                 Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.2/33
Introducción a los LP


•   Qué es un lenguaje de programación. Clases de
    lenguajes
•   Criterios de diseño.
•   Componentes de un LP.
•   Implementación de un LP




                                 Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.3/33
•   LP. Notación formal que permite escribir todos los
    programas que pueden ser ejecutados por un
    computador.
•   Los lenguajes que describiremos son de alto nivel
•   Diferencia entre algoritmo y programa




                                  Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.4/33
Clases de LP


•   Imperativos y orientados a objetos (OO)
    •   Tiene instrucción de asignación
    •   No tienen transparencia referencial
•   Declarativos
    •   Tienen transparencia referencial
    •   Implementación más ineficiente




                                   Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.5/33
Criterios de diseño


•   Distinción cualitativa entre LP dependiendo del
    próposito del LP
•   Los criterios más importantes son:
    •   Eficiencia en la implementación
    •   Fiabilidad
    •   Usabilidad




                                  Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.6/33
Eficiencia


•   En los años 50-60 era EL criterio de diseño
•   Hoy en día también se valora la facilidad de
    programar
•   Ejemplo1: derivador simbólico en Prolog (25-30
    líneas y en C++ (3.000))
•   Sólo si la aplicación se ha de utilizar muchas
    veces al día C++ es más interesante
•   Ejemplo2: Java es menos eficiente que C++ pero
    más portable y seguro



                                   Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.7/33
Fiabilidad


•   Facilidad del LP para detectar un error lo antes
    posible.
•   La comprobación de tipos en tiempo de
    compilación ayuda a detectar errores antes de la
    ejecución.
•   Ejemplo 1: i:=i+’a’ i:natural
•   Hay comprobaciones que no se pueden realizar
    en tiempo de compilación
•   Ejemplo 2: Rango del índice de los vectores (t[i*2]
    i:natural t:tabla [1..N] de entero

                                    Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.8/33
Usabilidad


•   Hay LP que se diseñan para resolver una cierta
    clase de problemas
•   La evaluación de un LP ha de ser para su dominio
    de aplicación
•   Por tanto un LP puede ser mejor para una clase
    de problemas y peor para otras




                                 Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.9/33
Componentes de un LP. Tipos de
                                         datos


•   Se ha de determinar sus tipos básicos,
    constructores de tipos, relación de subtipos
•   Se ha de determinar la comprobación de tipos que
    se hace en tiempo de compilación
•   Y la que se hace en tiempo de ejecución (ej:
    índice de tablas)




                                  Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.10/33
Control de secuencia


•   No hablaremos en la asignatura.
•   Determina cómo se regula el flujo de los
    programas
•   En LP imperativos tenemos composiciones
    condicionales e iterativas.
•   Ejemplos de control más avanzados son la
    reescritura de términos y el paralelismo




                                 Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.11/33
Control de datos (CD) y Unidades de
                               programas (UP)


•   CD: Mecanismo que ofrecen los LP para acceder,
    modificar o mover los datos de un programa
•   Ejemplos: Paso de parámetros, ámbito de las
    variables y parámetros
•   UP: Forma de estructurar los programas
•   Ejemplos: Clases en LPOO, módulos, funciones




                                Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.12/33
Implementación de un LP


•   Compilación: Proceso de traducción de un
    programa en un LP a código máquina.
•   Interpretación: Programa que va ejecutando un
    programa a medida que lo va leyendo.
•   Tradicionalmente se hablaba de compiladores (+
    eficientes) e intérpretes (-eficientes)
•   Hoy en día no existen LP 100% compilados ni
    100% interpretados




                                Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.13/33
•   Hoy en día los intérpretes compilan y optimizan el
    código de los bucles
•   Y los compiladores utilizan máquinas virtuales
    intermedias por ejemplo para E/S mediante el uso
    de librerías. Por eso es necesario linkar los
    programas
•   Otro motivo que justifica la necesidad de linker es
    la programación modular




                                  Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.14/33
Memoria dinámica


•   Gestión de memoria en pila y en heap
•   Punteros y operaciones básicas. Ejemplos
•   Asignación y liberación de memoria dinámica
•   Algoritmos de garbage collection




                                 Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.15/33
Gestión de memoria en pila


•   Veamos como gestionar la memoria de las
    variables requeridas en un programa con un
    conjunto de acciones
•   Ejemplo

       accion P rincipal accion A1           accion A2
        var x, y, z : . . . var a, b : . . .  var c, d : . . .
        fvar                fvar              fvar
         .
         .                    .
                              .                           .
                                                          .
         .                    .                           .
         A1;                  A2;                         A2;
         .
         .                    .
                              .                           .
                                                          .
         .                    .                           .
       faccion               faccion                 faccion
                                        Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.16/33
Memoria requerida después de ejecutar la acción
principal, A1,A2 y una llamada recursiva



           x   y   z   a   b   c   d c       d


Descripción del proceso de obtención y liberación de
espacio y el concepto de bloque de activación.




                                         Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.17/33
•   La estructura de datos requerida para gestionar la
    memoria de este tipo de variables es una pila.
•   Como ya vimos una pila es una estructura lineal
    cuyas operaciones principales son las de apilar y
    desapilar.
•   Esta estructura de datos es facilmente
    implementable mediante una tabla




                                  Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.18/33
•   En el ejemplo la obtención de memoria se haría
    con la operación apilar y la liberación de memoria
    con desapilar.
•   Esta gestión de memoria es limitada.
•   Para tener estructuras de datos dinámicas
    mediante el uso de punteros esta gestión de
    memoria no es suficiente.
•   La gestión de memoria para el caso de datos
    general requiere de la estructura de datos de un
    heap.


                                  Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.19/33
Heap


•   Mediante un heap la memoria libre y ocupada en
    general está entremezclada.
•   Cuando se requiere una cierta cantidad de
    memoria libre se busca en la zona libre un espacio
    que cubra esa cantidad.
•   También es posible liberar memoria que ya no es
    requerida por el programa.
•   Representación gráfica




                                 Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.20/33
•   La gestión de memoria mediante heap es más
    costosa
•   Para asignar memoria se requiere realizar una
    búsqueda por las zonas libres
•   Aparece el problema de fragmentación. La
    solución es compactar que agrava la ineficiencia




                                 Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.21/33
Punteros o referencias


•   Para poder definir estructuras de datos dinámicas
    los LP ofrecen los punteros o referencias
•   Los punteros son constructores de tipos donde se
    requiere un tipo adicional (generalmente básico o
    una tupla)
•   La sintaxis es ↑ T . Ej: x: ↑ entero
•   Los valores de ↑ T son direcciones de memoria
    donde se guardan elementos de tipo T más la
    dirección distinguida N IL.
•   En el ejemplo x denota la dirección de memoria de
    una variable entera y x ↑ es una variable entera
                                     Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.22/33
Operaciones sobre punteros


•   Nosotros asumiremos que el valor inicial de un
    puntero es la dirección N IL.
•   Para asignarle un espacio de memoria del tipo
    determinado se tiene la operación reservar(x)
•   Podemos realizar la asignación de punteros
    (aliasing) pero normalmente no se tienen
    operaciones aritméticas (en C++ sí que existen)
•   Ejemplo

                   var y, x :↑ entero fvar
                   reservar(x);
                   y := x;
                                   Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.23/33
•   Liberación de la zona de memoria mediante la
    acción liberar(x).
•   El efecto es que x vuelve a tomar el valor N IL y la
    zona anteriormente asignada a x pasa a la zona
    libre
•   Problema de esta operación con aliasing
•   En el ejemplo y pasa a ser referencia colgada
    (dangling pointer). (En Java no es posible)

                var y, x :↑ entero fvar
                reservar(x); y := x; liberar(x)

                                    Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.24/33
Algoritmos de asignación y
                liberación de memoria dinámica


•   Presentamos diferentes algoritmos para las
    acciones de reservar y liberar memoria
•   La representación del heap es normalmente
    mediante una lista encadenada de zonas libres
•   Un posible algoritmo para reservar es buscar la
    primera zona libre con la suficiente memoria
    requerida




                                 Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.25/33
•   Problema de fragmentación. Ejemplo: zonas libres
    de 500, 200 y 300 y se realizan las acciones reser-
    var(200);reservar(150);reservar(250);reservar(250)
•   Alternativas: Empezar la búsqueda por la última
    zona libre usada de forma circular (first fit)
•   Buscar la zona de memoria que mejor se ajusta a
    la zona requerida (best fit)
•   Buscar la zona de memoria que peor se ajusta a
    la zona requerida (worst fit)
•   Estudios estadísticos demuestran que el first es
    en general el mejor
                                  Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.26/33
Liberación de memoria


Para liberar una direccion d de longitud N de una zona
ocupada podemos:
 •   Liberar sin actualizar la lista de libres
 •   Actualizar la lista de libres recorriéndola.
 •   Resolver problemas de fragmentación en el caso
     en que la zona liberada es contigua a una zona
     libre




                                      Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.27/33
Recolector de basura (Garbage
                                       collector)


•   Se entiende por basura la memoria que no está en
    la zona libre y no es alcanzable por los punteros
    de un programa.
•   Un recolector de basura se encarga de recoger la
    basura situándola en la zona libre
•   Hay dos tipos:
     • Los de parada/recogida se clasifican en los que
       realizan copia y los que realizan marcado y
       búsqueda (mark/scan).
     • Los continuos pueden realizarse mediante
       contador de referencias o sobre la marcha
       (on-the-fly)
                                  Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.28/33
Parada/recogida Copia


•   Divide el heap en dos partes iguales. Una mitad
    nunca se utiliza porque va alternándose.
•   Cuando se requiere memoria se empieza la copia
    de forma compacta sin copiar la basura
•   Así la memoria libre crece pero la mitad copiada
    queda ahora sin utilizar
•   La copia de toda la memoria referenciada es
    costosa y complicada
•   Si hay mucha basura el algoritmo es más eficiente
    pues lo más costoso es la copia

                                 Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.29/33
Parada/recogida Mark/scan


•   En este caso se utiliza toda la zona de memoria
    disponible
•   Hay un proceso de marcado de la zona ocupada
    para diferenciarla de la basura
•   Posteriormente se compacta y se desmarca
•   El algoritmo es complicado
•   Si hay poca basura el algoritmo es más eficiente
    pues lo más costoso es la compactación




                                 Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.30/33
Continuo contador de referencia


•   Cada zona de memoria referenciable tiene un
    contador de referencias
•   Si realizamos aliasing el contador se incrementa y
    si liberamos se decrementa
•   Cuando el contador vale 0 la zona de memoria se
    asigna a la zona libre
•   Existen problemas cuando hay referencias
    circulares sin nombres. Al eliminar las con
    nombres el contador no se hace 0 y no se liberan.



                                 Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.31/33
Continuo on-the-fly


•   Continuo on-the-fly es mediante un proceso
    paralelo al programa que se ejecuta y puede
    realizar tanto los algoritmos de copia como de
    mark-scan
•   En la tabla resumen +/- significa bueno si hay
    mucha basura y -/+ bueno si hay poca. o significa
    neutro




                                  Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.32/33
Tabla resumen

                      COPY   MARK−SCAN                      CONTADOR−REF

EFICIENCIA TIEMPO     +/−      −/+                                      O

EFICIENCIA ESPACIO    −         +                                       −

LISTA ESPACIO LIBRE   NO       SI                                     SI

SIN OVERHEAD CON
                      SI        SI                                   NO
ESPACIO LIBRE




                                     Nikos Mylonakis, UPC (Spain)   February 15, 2007 – p.33/33

Más contenido relacionado

Destacado (20)

prenatal unapuno
prenatal unapunoprenatal unapuno
prenatal unapuno
 
Met2 07 01-introduccion_poo
Met2 07 01-introduccion_pooMet2 07 01-introduccion_poo
Met2 07 01-introduccion_poo
 
Lp13
Lp13Lp13
Lp13
 
Poo 01
Poo 01Poo 01
Poo 01
 
Poo 03
Poo 03Poo 03
Poo 03
 
Transp objetos
Transp objetosTransp objetos
Transp objetos
 
Lto tema1
Lto tema1Lto tema1
Lto tema1
 
Tema3
Tema3Tema3
Tema3
 
Web 3.0 educacion aldo zanabria
Web 3.0 educacion aldo zanabriaWeb 3.0 educacion aldo zanabria
Web 3.0 educacion aldo zanabria
 
Estructuras de Control
Estructuras de ControlEstructuras de Control
Estructuras de Control
 
Cadena Juan Bastidas
Cadena Juan BastidasCadena Juan Bastidas
Cadena Juan Bastidas
 
Desarrollo De Sistemas De Informaci N
Desarrollo De  Sistemas De  Informaci NDesarrollo De  Sistemas De  Informaci N
Desarrollo De Sistemas De Informaci N
 
Memoria dinámica en el lenguaje de programación c
Memoria dinámica en el lenguaje de programación cMemoria dinámica en el lenguaje de programación c
Memoria dinámica en el lenguaje de programación c
 
obstruccion intestinal
obstruccion intestinalobstruccion intestinal
obstruccion intestinal
 
marketing digital
marketing digitalmarketing digital
marketing digital
 
AdministracióN De Proceso De ImplantacióN Del Sistema
AdministracióN De Proceso De ImplantacióN Del SistemaAdministracióN De Proceso De ImplantacióN Del Sistema
AdministracióN De Proceso De ImplantacióN Del Sistema
 
Sistemas de información distribuidos
Sistemas de información distribuidosSistemas de información distribuidos
Sistemas de información distribuidos
 
Analisis e Ingenieria de Procesos
Analisis e Ingenieria de ProcesosAnalisis e Ingenieria de Procesos
Analisis e Ingenieria de Procesos
 
c++
c++c++
c++
 
Estructuras en C++
Estructuras en C++Estructuras en C++
Estructuras en C++
 

Similar a Memoria dinamica

Arquitectura de computadores
Arquitectura de computadoresArquitectura de computadores
Arquitectura de computadoresdegarden
 
Los lenguajes de programación pasado presente y futuro
Los lenguajes de programación pasado presente y futuroLos lenguajes de programación pasado presente y futuro
Los lenguajes de programación pasado presente y futuroFacultad de Informática UCM
 
Presentacion unidad u1_estructura_de_datos_victor_uex
Presentacion unidad u1_estructura_de_datos_victor_uexPresentacion unidad u1_estructura_de_datos_victor_uex
Presentacion unidad u1_estructura_de_datos_victor_uexvictoruex
 
¿Por qué usar R y no otro? Perspectiva desde la opinión de un usuario asiduo ...
¿Por qué usar R y no otro? Perspectiva desde la opinión de un usuario asiduo ...¿Por qué usar R y no otro? Perspectiva desde la opinión de un usuario asiduo ...
¿Por qué usar R y no otro? Perspectiva desde la opinión de un usuario asiduo ...Luis Alan Navarro
 
Definición, estructura Estudios de Caso
Definición, estructura Estudios de CasoDefinición, estructura Estudios de Caso
Definición, estructura Estudios de CasoFUNDET ECUADOR
 
Creación de materiales didácticos
Creación de materiales didácticosCreación de materiales didácticos
Creación de materiales didácticosavrmoda
 
Cpr utrillas competencia digital resumido
Cpr utrillas competencia digital resumidoCpr utrillas competencia digital resumido
Cpr utrillas competencia digital resumidojjquintana
 
Trabajo Práctico N° 0 - Windows
Trabajo Práctico N° 0 - WindowsTrabajo Práctico N° 0 - Windows
Trabajo Práctico N° 0 - Windowsprofe_regio
 
Objetos: 2. Introducción a la programación orientada a objetos
Objetos: 2. Introducción a la programación orientada a objetosObjetos: 2. Introducción a la programación orientada a objetos
Objetos: 2. Introducción a la programación orientada a objetosjeavilah
 
Antecedentes de las computadoras y sistemas operativos
Antecedentes de las computadoras y sistemas operativos Antecedentes de las computadoras y sistemas operativos
Antecedentes de las computadoras y sistemas operativos karenhostmins
 

Similar a Memoria dinamica (20)

Arquitectura de computadores
Arquitectura de computadoresArquitectura de computadores
Arquitectura de computadores
 
Los lenguajes de programación pasado presente y futuro
Los lenguajes de programación pasado presente y futuroLos lenguajes de programación pasado presente y futuro
Los lenguajes de programación pasado presente y futuro
 
2.+Deep+Learning.pdf
2.+Deep+Learning.pdf2.+Deep+Learning.pdf
2.+Deep+Learning.pdf
 
Presentacion unidad u1_estructura_de_datos_victor_uex
Presentacion unidad u1_estructura_de_datos_victor_uexPresentacion unidad u1_estructura_de_datos_victor_uex
Presentacion unidad u1_estructura_de_datos_victor_uex
 
¿Por qué usar R y no otro? Perspectiva desde la opinión de un usuario asiduo ...
¿Por qué usar R y no otro? Perspectiva desde la opinión de un usuario asiduo ...¿Por qué usar R y no otro? Perspectiva desde la opinión de un usuario asiduo ...
¿Por qué usar R y no otro? Perspectiva desde la opinión de un usuario asiduo ...
 
Sorribas
SorribasSorribas
Sorribas
 
Intro (1)
Intro (1)Intro (1)
Intro (1)
 
Modelo Dinamico
Modelo DinamicoModelo Dinamico
Modelo Dinamico
 
Definición, estructura Estudios de Caso
Definición, estructura Estudios de CasoDefinición, estructura Estudios de Caso
Definición, estructura Estudios de Caso
 
La traducción del género instructivo: manuales de instrucciones y tutoriales ...
La traducción del género instructivo: manuales de instrucciones y tutoriales ...La traducción del género instructivo: manuales de instrucciones y tutoriales ...
La traducción del género instructivo: manuales de instrucciones y tutoriales ...
 
Manual 2 mwinqsb
Manual 2 mwinqsbManual 2 mwinqsb
Manual 2 mwinqsb
 
Manual winqsb
Manual winqsbManual winqsb
Manual winqsb
 
Creación de materiales didácticos
Creación de materiales didácticosCreación de materiales didácticos
Creación de materiales didácticos
 
Cpr utrillas competencia digital resumido
Cpr utrillas competencia digital resumidoCpr utrillas competencia digital resumido
Cpr utrillas competencia digital resumido
 
Trabajo Práctico N° 0 - Windows
Trabajo Práctico N° 0 - WindowsTrabajo Práctico N° 0 - Windows
Trabajo Práctico N° 0 - Windows
 
Objetos: 2. Introducción a la programación orientada a objetos
Objetos: 2. Introducción a la programación orientada a objetosObjetos: 2. Introducción a la programación orientada a objetos
Objetos: 2. Introducción a la programación orientada a objetos
 
Poo presentacion
Poo presentacionPoo presentacion
Poo presentacion
 
Antecedentes de las computadoras y sistemas operativos
Antecedentes de las computadoras y sistemas operativos Antecedentes de las computadoras y sistemas operativos
Antecedentes de las computadoras y sistemas operativos
 
Experiencias en el Uso del Software Libre y Propietario
Experiencias en el Uso del Software Libre y PropietarioExperiencias en el Uso del Software Libre y Propietario
Experiencias en el Uso del Software Libre y Propietario
 
R Introducción
R IntroducciónR Introducción
R Introducción
 

Más de Aldo Hernán Zanabria Gálvez

“PERSPECTIVAS DEL DESARROLLO ECONÓMICO REGIONAL EN EL CONTEXTO DEL CAMBIO CLI...
“PERSPECTIVAS DEL DESARROLLO ECONÓMICO REGIONAL EN EL CONTEXTO DEL CAMBIO CLI...“PERSPECTIVAS DEL DESARROLLO ECONÓMICO REGIONAL EN EL CONTEXTO DEL CAMBIO CLI...
“PERSPECTIVAS DEL DESARROLLO ECONÓMICO REGIONAL EN EL CONTEXTO DEL CAMBIO CLI...Aldo Hernán Zanabria Gálvez
 
Organizadores visuales sobre las corrientes contemporaneas aldo zanabria ga...
Organizadores visuales sobre las corrientes contemporaneas   aldo zanabria ga...Organizadores visuales sobre las corrientes contemporaneas   aldo zanabria ga...
Organizadores visuales sobre las corrientes contemporaneas aldo zanabria ga...Aldo Hernán Zanabria Gálvez
 
Resumen final - Seminario Taller TIC Emprede Turismo
Resumen final - Seminario Taller TIC Emprede TurismoResumen final - Seminario Taller TIC Emprede Turismo
Resumen final - Seminario Taller TIC Emprede TurismoAldo Hernán Zanabria Gálvez
 
Clase de Tecnologías de la Información y Comunicaciones
Clase de Tecnologías de la Información y ComunicacionesClase de Tecnologías de la Información y Comunicaciones
Clase de Tecnologías de la Información y ComunicacionesAldo Hernán Zanabria Gálvez
 

Más de Aldo Hernán Zanabria Gálvez (20)

“PERSPECTIVAS DEL DESARROLLO ECONÓMICO REGIONAL EN EL CONTEXTO DEL CAMBIO CLI...
“PERSPECTIVAS DEL DESARROLLO ECONÓMICO REGIONAL EN EL CONTEXTO DEL CAMBIO CLI...“PERSPECTIVAS DEL DESARROLLO ECONÓMICO REGIONAL EN EL CONTEXTO DEL CAMBIO CLI...
“PERSPECTIVAS DEL DESARROLLO ECONÓMICO REGIONAL EN EL CONTEXTO DEL CAMBIO CLI...
 
mejorando la web guia de html 5
mejorando la web guia de html 5mejorando la web guia de html 5
mejorando la web guia de html 5
 
Guía de Prácticas word beta.pdf
Guía de Prácticas word beta.pdfGuía de Prácticas word beta.pdf
Guía de Prácticas word beta.pdf
 
emprendimiento en la era del conocimiento.pptx
emprendimiento en la era del conocimiento.pptxemprendimiento en la era del conocimiento.pptx
emprendimiento en la era del conocimiento.pptx
 
Fundamentos de Programación
Fundamentos de ProgramaciónFundamentos de Programación
Fundamentos de Programación
 
Organizadores visuales sobre las corrientes contemporaneas aldo zanabria ga...
Organizadores visuales sobre las corrientes contemporaneas   aldo zanabria ga...Organizadores visuales sobre las corrientes contemporaneas   aldo zanabria ga...
Organizadores visuales sobre las corrientes contemporaneas aldo zanabria ga...
 
didactica
didacticadidactica
didactica
 
Tarea1 aldo zanabria
Tarea1 aldo zanabriaTarea1 aldo zanabria
Tarea1 aldo zanabria
 
Tarea 2 aldo zanabria
Tarea 2 aldo zanabriaTarea 2 aldo zanabria
Tarea 2 aldo zanabria
 
Carolinos del milenio pasado - Puno
Carolinos del milenio pasado - PunoCarolinos del milenio pasado - Puno
Carolinos del milenio pasado - Puno
 
ingenieria de sistemas
ingenieria de sistemasingenieria de sistemas
ingenieria de sistemas
 
Electricidad con recursos renovables
Electricidad con recursos renovablesElectricidad con recursos renovables
Electricidad con recursos renovables
 
Variables
VariablesVariables
Variables
 
Estructura y modelo organizacional estatal
Estructura y modelo organizacional estatal Estructura y modelo organizacional estatal
Estructura y modelo organizacional estatal
 
Calidad de Agua
Calidad de AguaCalidad de Agua
Calidad de Agua
 
Resumen final - Seminario Taller TIC Emprede Turismo
Resumen final - Seminario Taller TIC Emprede TurismoResumen final - Seminario Taller TIC Emprede Turismo
Resumen final - Seminario Taller TIC Emprede Turismo
 
Clase de Tecnologías de la Información y Comunicaciones
Clase de Tecnologías de la Información y ComunicacionesClase de Tecnologías de la Información y Comunicaciones
Clase de Tecnologías de la Información y Comunicaciones
 
Plan de Trabajo Integración de la Mujer
Plan de Trabajo Integración de la MujerPlan de Trabajo Integración de la Mujer
Plan de Trabajo Integración de la Mujer
 
peritaciones y tasación puno
peritaciones y tasación punoperitaciones y tasación puno
peritaciones y tasación puno
 
producción en la empresa turística
producción en la empresa turísticaproducción en la empresa turística
producción en la empresa turística
 

Memoria dinamica

  • 1. Notas de curso de Programación y estructuras de datos. Memoria dinámica Nikos Mylonakis, Fernando Orejas nicos@lsi.upc.edu ´ ´ Dept. Llenguatges i Sistemes Informatics Universitat Politecnica de Catalunya Barcelona Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.1/33
  • 2. Contenido • Introducción a los LP • Memoria dinámica • Control de datos • Tipos de datos • Especificación algebraica • Implementación de tipos abstractos de datos Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.2/33
  • 3. Introducción a los LP • Qué es un lenguaje de programación. Clases de lenguajes • Criterios de diseño. • Componentes de un LP. • Implementación de un LP Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.3/33
  • 4. LP. Notación formal que permite escribir todos los programas que pueden ser ejecutados por un computador. • Los lenguajes que describiremos son de alto nivel • Diferencia entre algoritmo y programa Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.4/33
  • 5. Clases de LP • Imperativos y orientados a objetos (OO) • Tiene instrucción de asignación • No tienen transparencia referencial • Declarativos • Tienen transparencia referencial • Implementación más ineficiente Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.5/33
  • 6. Criterios de diseño • Distinción cualitativa entre LP dependiendo del próposito del LP • Los criterios más importantes son: • Eficiencia en la implementación • Fiabilidad • Usabilidad Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.6/33
  • 7. Eficiencia • En los años 50-60 era EL criterio de diseño • Hoy en día también se valora la facilidad de programar • Ejemplo1: derivador simbólico en Prolog (25-30 líneas y en C++ (3.000)) • Sólo si la aplicación se ha de utilizar muchas veces al día C++ es más interesante • Ejemplo2: Java es menos eficiente que C++ pero más portable y seguro Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.7/33
  • 8. Fiabilidad • Facilidad del LP para detectar un error lo antes posible. • La comprobación de tipos en tiempo de compilación ayuda a detectar errores antes de la ejecución. • Ejemplo 1: i:=i+’a’ i:natural • Hay comprobaciones que no se pueden realizar en tiempo de compilación • Ejemplo 2: Rango del índice de los vectores (t[i*2] i:natural t:tabla [1..N] de entero Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.8/33
  • 9. Usabilidad • Hay LP que se diseñan para resolver una cierta clase de problemas • La evaluación de un LP ha de ser para su dominio de aplicación • Por tanto un LP puede ser mejor para una clase de problemas y peor para otras Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.9/33
  • 10. Componentes de un LP. Tipos de datos • Se ha de determinar sus tipos básicos, constructores de tipos, relación de subtipos • Se ha de determinar la comprobación de tipos que se hace en tiempo de compilación • Y la que se hace en tiempo de ejecución (ej: índice de tablas) Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.10/33
  • 11. Control de secuencia • No hablaremos en la asignatura. • Determina cómo se regula el flujo de los programas • En LP imperativos tenemos composiciones condicionales e iterativas. • Ejemplos de control más avanzados son la reescritura de términos y el paralelismo Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.11/33
  • 12. Control de datos (CD) y Unidades de programas (UP) • CD: Mecanismo que ofrecen los LP para acceder, modificar o mover los datos de un programa • Ejemplos: Paso de parámetros, ámbito de las variables y parámetros • UP: Forma de estructurar los programas • Ejemplos: Clases en LPOO, módulos, funciones Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.12/33
  • 13. Implementación de un LP • Compilación: Proceso de traducción de un programa en un LP a código máquina. • Interpretación: Programa que va ejecutando un programa a medida que lo va leyendo. • Tradicionalmente se hablaba de compiladores (+ eficientes) e intérpretes (-eficientes) • Hoy en día no existen LP 100% compilados ni 100% interpretados Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.13/33
  • 14. Hoy en día los intérpretes compilan y optimizan el código de los bucles • Y los compiladores utilizan máquinas virtuales intermedias por ejemplo para E/S mediante el uso de librerías. Por eso es necesario linkar los programas • Otro motivo que justifica la necesidad de linker es la programación modular Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.14/33
  • 15. Memoria dinámica • Gestión de memoria en pila y en heap • Punteros y operaciones básicas. Ejemplos • Asignación y liberación de memoria dinámica • Algoritmos de garbage collection Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.15/33
  • 16. Gestión de memoria en pila • Veamos como gestionar la memoria de las variables requeridas en un programa con un conjunto de acciones • Ejemplo accion P rincipal accion A1 accion A2 var x, y, z : . . . var a, b : . . . var c, d : . . . fvar fvar fvar . . . . . . . . . A1; A2; A2; . . . . . . . . . faccion faccion faccion Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.16/33
  • 17. Memoria requerida después de ejecutar la acción principal, A1,A2 y una llamada recursiva x y z a b c d c d Descripción del proceso de obtención y liberación de espacio y el concepto de bloque de activación. Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.17/33
  • 18. La estructura de datos requerida para gestionar la memoria de este tipo de variables es una pila. • Como ya vimos una pila es una estructura lineal cuyas operaciones principales son las de apilar y desapilar. • Esta estructura de datos es facilmente implementable mediante una tabla Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.18/33
  • 19. En el ejemplo la obtención de memoria se haría con la operación apilar y la liberación de memoria con desapilar. • Esta gestión de memoria es limitada. • Para tener estructuras de datos dinámicas mediante el uso de punteros esta gestión de memoria no es suficiente. • La gestión de memoria para el caso de datos general requiere de la estructura de datos de un heap. Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.19/33
  • 20. Heap • Mediante un heap la memoria libre y ocupada en general está entremezclada. • Cuando se requiere una cierta cantidad de memoria libre se busca en la zona libre un espacio que cubra esa cantidad. • También es posible liberar memoria que ya no es requerida por el programa. • Representación gráfica Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.20/33
  • 21. La gestión de memoria mediante heap es más costosa • Para asignar memoria se requiere realizar una búsqueda por las zonas libres • Aparece el problema de fragmentación. La solución es compactar que agrava la ineficiencia Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.21/33
  • 22. Punteros o referencias • Para poder definir estructuras de datos dinámicas los LP ofrecen los punteros o referencias • Los punteros son constructores de tipos donde se requiere un tipo adicional (generalmente básico o una tupla) • La sintaxis es ↑ T . Ej: x: ↑ entero • Los valores de ↑ T son direcciones de memoria donde se guardan elementos de tipo T más la dirección distinguida N IL. • En el ejemplo x denota la dirección de memoria de una variable entera y x ↑ es una variable entera Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.22/33
  • 23. Operaciones sobre punteros • Nosotros asumiremos que el valor inicial de un puntero es la dirección N IL. • Para asignarle un espacio de memoria del tipo determinado se tiene la operación reservar(x) • Podemos realizar la asignación de punteros (aliasing) pero normalmente no se tienen operaciones aritméticas (en C++ sí que existen) • Ejemplo var y, x :↑ entero fvar reservar(x); y := x; Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.23/33
  • 24. Liberación de la zona de memoria mediante la acción liberar(x). • El efecto es que x vuelve a tomar el valor N IL y la zona anteriormente asignada a x pasa a la zona libre • Problema de esta operación con aliasing • En el ejemplo y pasa a ser referencia colgada (dangling pointer). (En Java no es posible) var y, x :↑ entero fvar reservar(x); y := x; liberar(x) Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.24/33
  • 25. Algoritmos de asignación y liberación de memoria dinámica • Presentamos diferentes algoritmos para las acciones de reservar y liberar memoria • La representación del heap es normalmente mediante una lista encadenada de zonas libres • Un posible algoritmo para reservar es buscar la primera zona libre con la suficiente memoria requerida Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.25/33
  • 26. Problema de fragmentación. Ejemplo: zonas libres de 500, 200 y 300 y se realizan las acciones reser- var(200);reservar(150);reservar(250);reservar(250) • Alternativas: Empezar la búsqueda por la última zona libre usada de forma circular (first fit) • Buscar la zona de memoria que mejor se ajusta a la zona requerida (best fit) • Buscar la zona de memoria que peor se ajusta a la zona requerida (worst fit) • Estudios estadísticos demuestran que el first es en general el mejor Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.26/33
  • 27. Liberación de memoria Para liberar una direccion d de longitud N de una zona ocupada podemos: • Liberar sin actualizar la lista de libres • Actualizar la lista de libres recorriéndola. • Resolver problemas de fragmentación en el caso en que la zona liberada es contigua a una zona libre Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.27/33
  • 28. Recolector de basura (Garbage collector) • Se entiende por basura la memoria que no está en la zona libre y no es alcanzable por los punteros de un programa. • Un recolector de basura se encarga de recoger la basura situándola en la zona libre • Hay dos tipos: • Los de parada/recogida se clasifican en los que realizan copia y los que realizan marcado y búsqueda (mark/scan). • Los continuos pueden realizarse mediante contador de referencias o sobre la marcha (on-the-fly) Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.28/33
  • 29. Parada/recogida Copia • Divide el heap en dos partes iguales. Una mitad nunca se utiliza porque va alternándose. • Cuando se requiere memoria se empieza la copia de forma compacta sin copiar la basura • Así la memoria libre crece pero la mitad copiada queda ahora sin utilizar • La copia de toda la memoria referenciada es costosa y complicada • Si hay mucha basura el algoritmo es más eficiente pues lo más costoso es la copia Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.29/33
  • 30. Parada/recogida Mark/scan • En este caso se utiliza toda la zona de memoria disponible • Hay un proceso de marcado de la zona ocupada para diferenciarla de la basura • Posteriormente se compacta y se desmarca • El algoritmo es complicado • Si hay poca basura el algoritmo es más eficiente pues lo más costoso es la compactación Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.30/33
  • 31. Continuo contador de referencia • Cada zona de memoria referenciable tiene un contador de referencias • Si realizamos aliasing el contador se incrementa y si liberamos se decrementa • Cuando el contador vale 0 la zona de memoria se asigna a la zona libre • Existen problemas cuando hay referencias circulares sin nombres. Al eliminar las con nombres el contador no se hace 0 y no se liberan. Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.31/33
  • 32. Continuo on-the-fly • Continuo on-the-fly es mediante un proceso paralelo al programa que se ejecuta y puede realizar tanto los algoritmos de copia como de mark-scan • En la tabla resumen +/- significa bueno si hay mucha basura y -/+ bueno si hay poca. o significa neutro Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.32/33
  • 33. Tabla resumen COPY MARK−SCAN CONTADOR−REF EFICIENCIA TIEMPO +/− −/+ O EFICIENCIA ESPACIO − + − LISTA ESPACIO LIBRE NO SI SI SIN OVERHEAD CON SI SI NO ESPACIO LIBRE Nikos Mylonakis, UPC (Spain) February 15, 2007 – p.33/33