Memory Management Fundamentals (Spanish)

461 views
391 views

Published on

Presentation about algorithms, data-structures and techniques for Memory Management

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
461
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Memory Management Fundamentals (Spanish)

  1. 1. Introducción a la Administración deMemoriaProf. Aníbal Gómez-EstradaInstituto Tecnológico de Costa RicaDepartamento de Ingeniería en ComputaciónAlgoritmos y Estructuras de Datos 2 - II Semestre 2010
  2. 2. Motivación• El programador no percibe muchas de las actividades quese realizan internamente en la gestión de memoria• Considere la siguiente porción de código:[1] X ref = new X();[2] ref = new X();• En [1], ¿Cómo saber los bytes qué están disponibles?• Luego de [2], ¿Cómo saber que la memoria inicialmente apuntadapor referencia ahora es inacesible y reutilizable/reciclable?• En sistemas computacionales, la memoria es un recursolimitado y por ende requiere de un manejo eficiente:• Memoria Primaria: Sistemas Operativos y Lenguajes de Programación• Memoria Secundaria: Sistemas de Archivos• NO esta de más estudiar algunos AyEdDs básicos Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias
  3. 3. Repaso• Variable es un espacio en memoria que almacena un valor• Su declaración está asociada con un (1) nombre, (2) tipode dato, (3) tamaño requerido y (4) dirección en memoria:int unEntero; X unaReferencia;• El espacio requerido se conoce en tiempo de compilación(estáticamente) y es usualmente asignado en la pila delsistema• Dependiendo del tipo de la variable, el valor que puedetomar una variable es:• Dato: un numero, caracter, booleano, etc• Referencia: la dirección de memoría donde está eldatoInstituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias
  4. 4. Repaso (2)• La inicialización o asignación de una variable estáasociada con la (1) dirección en memoria y el (2) valor:unEntero = 98; unaReferencia = new Carro();• Ante un operador new (o cons en Scheme), (1) elespacio de la estructura -que se está creando- se asignadinámicamente en la memoría heap y (2) retorna ladirección en memoria de la instanciaInstituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias
  5. 5. Repaso (3)• Al invocar una rutina foo(X, Y, Z, …), los lenguajesusualmente pasan los argumentos por la pila del sistema• Existen 2 formas de paso de parámetros:1. Por Valor: La rutina recibe una copia del valor de lavariable2. Por Referencia: La rutina recibe una referencia al valororiginal (dirección de memoria)• En (1), los cambios a la variable (dentro de la rutina) NOafectan el valor original. En (2), SI!• Java SIEMPRE usa paso de parámetros:• Por Valor: para variables de tipo primitivo• Por Referencia: para variable de tipo objetoInstituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias
  6. 6. Repaso (4)• Por defecto, C# usa un esquema similar a Java en cuantoal paso de parámetros:• Por Valor: para variables que heredan del tipoValueType (primitivos, estructuras y enumeraciones)• Por Referencia: para variable de tipo objeto (clases einterfaces)• En contraste, C# permite pasar parametros de tipoValueType Por Referencia mediante el uso de ref:void CuadradoPorReferencia(ref int x){x = x * x;}...int i = 8;CuadradoRef(ref i);...Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias
  7. 7. Introducción• Recapitulando, los lenguajes de programación asignan:• Estructuras estáticamente declaradas (variables yparámetros) en la pila del sistema• Estructuras dinámicamente creadas (objetos) en lamemoría heap• Lenguajes adoptan una forma de gestión de memoria:1. Explícita: Programa es responsable de liberar memoria (C, C++)X* ref = new X(); … ; free(ref);2. Automática: Sistema es responsable de reciclar memoria (Lisp,Scheme, Java, C#, Python). X ref = new X();• En #2, el programador no “ve” direcciones de memoria• Ambos casos requieren manejo eficiente de memoría heapInstituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias
  8. 8. Introducción (2)Al ejecutar un programa,el espacio de memoriadinámica, se comparte yreutiliza a medida quelos objetos crecen y secontraen de maneraarbitrariaInstituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias
  9. 9. Introducción (3)Varios aspectos inciden en la forma de gestionar memoria:1. Tamaño de los Objetos:Fijo: como en celdas de Scheme o bloques de archivosVariable: como objetos de Java o C#2. Liberación de Memoria:Explícita: liberar una porción particular de memoria ante el mandatodel programaAutomática: liberar las porciones de memoria no usadas (recolectarbasura) ante una petición de memoria que no puede satisfacerseEXPLICITA AUTOMATICAFIJO Sistemas de Archivos Lisp o SchemeVARIABLESistemas Operativos Multi-tarea (ASM, C, C++)Java o C#Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias
  10. 10. Bloques de Tamaño FijoConsidere un esquema dememoria simplificado(como en Lisp/Scheme) endonde:• Un bloque es una celda que contiene 2 campos que puedenser un dato (átomo) o un puntero a otra celda• Una variable corresponde con un puntero a una celda• La celda puede pertenecer a otras estructuras de datos• Las celdas vacías se enlistan como espacio disponibleInstituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias
  11. 11. Bloques de Tamaño Fijo (2)• Las celdas nuevas se quitan de la lista de espacio disponible• Las celdas usadas pueden separarse de las variables delprograma• Es deseable que las celdas separadas puedan usarse luego:• Vuelvan a la lista de espacio disponible, o• “Recolectar basura” cuando no hay espacio disponibleInstituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias
  12. 12. Bloques de Tamaño Fijo (3)Un método simplista puede usar un Contador de Referencias:• La detección de celdas inaccesibles podría realizarsemediante la incorporación de un contador de referencias,cuyo valor sea igual a la cantidad de punteros a la celda• Cuando un puntero empieza a apuntar a una celda, seincrementa el contador de la celda• Cuando se reasigna un puntero no nulo (a nulo o a otracelda), se decrementa el contador de la celda original• Si el contador llega a cero, se puede devolver a la listade espacio disponible!• ¿En qué casos el contador de referencias NO funciona?• Son útiles sólo en estructuras que NO tienen “ciclos”Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias
  13. 13. Bloques de Tamaño Fijo (4)Algoritmo de Recolección de Basura Recursivo:• Suponga una estructura decelda similar a Lisp/Scheme• Punteros y átomos sondel mismo tamaño• Se puede agregar uncampo booleano “marca”que indica si la celda esaccesible• Suponga una estructura dememoria finita y UNA sola variableInstituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias
  14. 14. Bloques de Tamaño Fijo (5)¿Cómo detectar las celdas NO usadas por la variable?:1. Marcar todas las celdasde memoria como innacesibles2. Recorrer Primero Profundidadel grafo q sale de la variabley marcar las celdas visitadas3. Recorrer todas las celdas dememoria y agregar las celdasdesmarcadas a la listade disponiblesInstituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias
  15. 15. Bloques de Tamaño Fijo (6)¿Qué problemas podría tener el algoritmo recursivo?:• Una llamada recursiva crea un “registro de activación” en lapila que contiene los parámetros y “congela” el estado de lasvariables locales y la dirección de retorno…• Puede NO haber espacio suficiente para almacenar la pilarequerida por las llamadas recursivas a bpf• Pila podría consumir más espacio que la memoria misma!¿En que casos?¿Se rinden? Suponga que fuente apunta a una estructura de tipo listaque consume toda la memoria Afortunadamente, existe un algoritmo para marcar “en sitio”…Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias
  16. 16. Bloques de Tamaño Fijo (7)Algoritmo de Deutsch-Schorr-Waite:1. Pila de registros de activacióntiene camino desde fuente hastacelda actual en un momento dado2. ¿Se podría utilizar las mismasceldas para “recordar” comodevolvernos?2.1. Mismo campo puntero por el q “bajaría”recursión (para apuntar a la “celda padre”)2.2. Campo/bit en cada celda indique cual demis dos campos apunta a la celda padre2.3. Dos variables de control para apuntar a(1) la celda por la que voy, y (2) la celdapor donde me devuelvoInstituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias
  17. 17. Bloques de Tamaño Fijo (8)¿Cuáles pasos ó movimientos básicostengo que ponerles atención?1. Avanzar: Si celda actual tiene unpuntero NO nulos, ENTRAR por elIZQ sino el DER2. Conmutar: Si celda actual es “hija”IZQ y no tiene punteros o ya fuevisitada, MOVER al hermano DER3. Replegar: Si no tengo a “hijos” aquien visitar (solo tengo átomos oya los visité), VOLVER a “mi papá”Campo/bit puede requerir byte extra=> Máscara de bits con patrónInstituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias
  18. 18. Bloques de Tamaño VariableInstituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | ReferenciasConsidere un esquemade memoria máscomplejo (como enC/Java/C#) en donde:1. Un bloque tiene tamaño variable (de datos)2. Los datos NO contienen punteros a otros bloques3. Cada bloque es bastante grande para contener:3.1. Un contador (al inicio) que indica tamaño del espacio3.2. Un bit para indicar si el bloque está vacío o lleno3.3. Un puntero para apuntar al siguiente bloque vacío
  19. 19. Bloques de Tamaño Variable (2)Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias1. ¿Qué factor facilita el proceso de marcado?NO requiere recursión pues sólo se necesita seguir laslas variables y marcar los bloques referenciados2. ¿Qué factores dificultan la administración de memoria?2.1. Fragmentación y Compactación2.2. Selección de Bloques Disponibles
  20. 20. Bloques de Tamaño Variable (3)Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | ReferenciasFragmentación y Compactación1. Suponga que el valor de la variable Y cambia:1.1. El bloque debe devolverse/recolectarse para reuso1.2. Más fácil agregarlo al inicio de la lista de disponibles2. Espacio disponible queda partido en 3 bloques y ni siquieraestán en el mismo orden de la lista de disponibles!2.1. No satisface petición de 2000 bytes aunque hay suficiente espacio!3. ¿Qué se puede hacer al respecto?1. Combinar bloques vacíos adyacentes, y/o2. Compactar el almacenamiento
  21. 21. Bloques de Tamaño Variable (4)Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | ReferenciasCombinación de bloques vacíos adyacentesSea (p, c) = (dirección, tamaño) de bloque actual1. Encontrar bloque a la derecha es sencillo…1.1. La posición es p + c. Peero..1.2 ¿Cómo hallar al predecesor para desenlazarlo de lista de disponibles?1.2.1. Buscar el que apunte a p + c en lista de disponibles, o1.2.1. Usar doble enlace en lista de disponibles2. Encontrar bloque a la izquierda NO es fácil =>2.1. Buscar puntero a p1 + c1 = p en lista de disponibles , o2.2. Usar enlace al bloque IZQ entre TODOS los bloques¿Lista grande? vs. ¿Punteros adicionales despreciables?Combinar por demanda puede ser preferible en caso real!
  22. 22. Bloques de Tamaño Variable (5)Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | ReferenciasCompactación del almacenamientoLa combinación de bloques vaciospuede NO ser suficiente!Espacio disponible NO está contiguo!1. Usar varios bloques para el conjunto de datos:1.1. Requiere apuntar al siguiente bloque y mejor bloques de tamaño fijo1.2. Tiende a consumir mucho espacio. Si los bloques son:1.2.1. Pequeños: espacio “administrativo” es cada vez más significativo1.2.2. Grandes: desperdicia mucho espacio cuando datos son pequeños1.3. ¿Cuando sería preferible?=> Cuando datos son grandes! (como en Sistemas de Archivos)
  23. 23. Bloques de Tamaño Variable (6)Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias2. Mover datos en la estructuraDejar bloques usados en extremoIZQ y bloque grande de espaciodisponible en extremo DERPunteros deben seguir apuntando al mismo dato luego de corrimiento!2.1. Dirección de avance es la posición actual menos la suma de todo elespacio vacío (posición en que quedaría) y es fácil calcularla:2.2. Una estrategia sencilla para la compactación consiste en:2.2.1. Revisar todos los bloques (vacíos o no) desde la IZQ2.2.2. Calcular y almacenar la dirección de avance de cada bloque2.2.3. Reemplazar valor de cada puntero al “heap” con la dirección deavance contenida en el bloque al que apunta2.2.4. Mover los bloques llenos a su dirección de avance
  24. 24. Bloques de Tamaño Variable (7)Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | ReferenciasPara calcular dirección de avance (2.2.2)…Para mover los bloques (2.2.4)…
  25. 25. Bloques de Tamaño Variable (8)Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | ReferenciasSelección de bloques disponibles1. ¿Qué parte de un bloque vacío (con contador c) se debeusar ante una petición de memoria de d < c bytes?Escoger los últimos d bytes pues:1.1. Sólo se debe reemplazar el contador por c - d1.2. Bloque vacío puede seguir en la lista de disponibles2. ¿Qué bloque vacío escoger ante una petición de memoria?2.1. Primer Ajuste: Recorrer lista de disponibles y escoger el primerbloque que satisfaga la petición (tamaño)2.2. Mejor Ajuste: Recorrer la lista de disponibles y escoger el bloquevacío más pequeño que satisfaga la petición
  26. 26. Bloques de Tamaño Variable (9)Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias1. ¿Cuál es más lenta? Mejor ajuste recorre TODA la lista de disponibles2. ¿Cuál produce menos fragmentación? Mejor ajuste produce bloques vacíos muy pequeños(abandonados) peeero tienden a ocupar menos espacio Primer ajuste produce bloques vacíos de tamaño medio3. Hay secuencias de peticiones que la estrategia de primerajuste satisface pero la de mejor ajuste no, y viceversa…4. Definir un espectro de estrategias intermedias, por ejemplo:4.1. Buscar primer ajuste entre los primeros k bloquesdisponibles para algún valor fijo de k…
  27. 27. Bloques “Manejados”Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias1. Hasta ahora, algoritmos para bloques de tamaño:1.1. Fijo: detección de basura en bloques con punteros a otros bloques1.2. Variable: manejo de fragmentación/compactación2. Lenguajes orientados a objetos con esquema de “memoriamanejada” (como Java ó C#) usan:2.1. Tamaño de bloque variable (objetos o instancias)2.2. Bloques que SI contienen punteros a otros bloques3. Especificación de máquina virtual de Java o .Net no dicencomo se maneja internamente la memoria:3.1. Variables de referencia3.2. Recolección de basura4. Peeero…
  28. 28. Bloques “Manejados” (2)Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias1.El algoritmo “marcar y compactar” es una técnica paraadministrar “memoria manejada” y procede en 2 fases:1.1. Marcado: de objetos accesibles1.2. Compactación: mover y reciclar objetos2. Sean las raíces, las variables locales o estáticas quereferencian directamente un objeto:2.1. Un objeto es accesible si es referenciado por una raíz o por uncampo de un objeto accesible ([in]directamente) desde una raíz2.2. Sino, el objeto es basura3. Una técnica común para implementar variables de referencia(en JVM o .Net) es a través de un arreglo de Handles…
  29. 29. Bloques “Manejados” (3)Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias3. Referencias son índices al handle del objeto referenciado:¿Desventajas? ¿Ventajas?3.1. Una referencia requiere desreferenciar el handle 3.2. En compactación, sólo hay que actualizar el handle 4. Manejo de memoria utiliza los algoritmos ya vistos :4.1. Bloques de tamaño fijo en el arreglo de Handles (marcado/selección)4.2. Bloques de tamaño variable en el heap (compactación/selección)1. Todo objeto tiene un handle2. Un Handle contiene:2.1. Referencia a clase del objeto2.2. Banderas de marcado2.3. Puntero a posición del heap donde estándatos de la instancia
  30. 30. ReferenciasInstituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Administración de Memoria - II Semestre 2010Motivación | Repaso | Introducción | Bloques Fijos | Bloques Variables | Referencias1. Aho, Alfred V., John E. Hopcroft y Jeffrey D. Ullman.Estructuras de Datos y Algoritmos. Addison WesleyLongman: México, 1988 (Capítulo 12)2. Preiss, Bruno R. Data Structures and Algorithms withObject-Oriented Design Patterns in Java. Wiley and Sons:Canada,1999 (Capítulo 13)3. http://www.brpreiss.com/books/opus5/html/page428.html
  31. 31. Introducción a la Administración deMemoriaProf. Aníbal Gómez EstradaInstituto Tecnológico de Costa RicaDepartamento de Ingeniería en ComputaciónAlgoritmos y Estructuras de Datos 2 - II Semestre - 2010

×