+%include "common.mgp"
+%%
+%page
+%nodefault
+%center, size 7, font "standard", back "white", fore "black"
+
+Manejo de memoria y Valgrind
+%size 4
+
+
+%bar "gray" 5 10 80
+
+Alberto Bertogli (albertito@gmail.com)
+Leandro Lucarella (llucare@fi.uba.ar)
+
+LUGFI
+
+11 de Mayo de 2005
+
+
+%page
+
+De que vamos a hablar
+
+ Memoria fisica
+ Memoria virtual (VM)
+ MM en aplicaciones
+ Valgrind
+ Ejemplos
+
+%page
+
+Mini repaso
+
+ Relación entre el procesador y la memoria
+ Accesos a memoria desde assembler
+ Sistema operativo y múltiples procesos
+
+%page
+
+Memoria física
+
+ Direcciones físicas
+ Problemas y restricciones
+
+%page
+
+VM - Que nos permite I
+
+ Virtualización de recursos
+ Aislamiento de la información
+ Aislamiento de fallas
+ Trucos locos (más adelante)
+
+%page
+
+VM - Como funciona
+
+ Páginas de memoria
+ MMU
+ Tablas de traducción (page tables)
+ Permisos y controles de acceso
+ Flags útiles (Dirty, Accessed, Present, etc.)
+ TLB
+ Page faults
+
+%page
+
+VM - Que nos permite II
+
+ Multiproceso e hilos
+ Control de acceso (r, w, x)
+ Swap
+ COW
+ Overcommit / Demand paging
+ mmap()
+ Cache de disco
+ Shared memory
+
+%page
+
+MM en aplicaciones
+
+ Stack
+ malloc()/free()
+ Patrones de acceso
+ Fragmentación de memoria
+ Leaks
+ Accesos a memoria no inicializada
+
+%page
+
+Valgrind - lo qué?
+
+ Framework para hacer herramientas
+ Herramientas para _supervisar_ programas
+ Profilers
+ Detectores de errores (memoria, threads)
+ Visualización / comprensión / análisis
+ valgrind core + skin = herramienta de supervisión
+
+%page
+
+Valgrind - Ventajas
+
+ Traducción binaria dinámica (LD_PRELOAD)
+ No require recompilar
+ No require relinkear
+ No necesita el código fuente
+ Supervisa _todo_ el código en userspace (programa + bibliotecas)
+ Tiene forma de supervisar parcialmente incluso código manejado por el kernel (ej: señales)
+
+%page
+
+Valgrind - Funcionamiento
+
+ LD_PRELOAD de valgrind.so
+ Trap al CPU y toma el control
+ El programa corre en un CPU simulado
+ El programa no se entera
+ valgrind compila el código via JIT x86-x86 (u otras)
+ El skin instrumenta la supervisión
+ No se ejecuta código original del programa, sólo el código compilado (supervisado)
+
+%page
+
+Valgrind - Skins actuales
+
+ Profiling
+ Massif: heap profiler
+ Cachegrind: cache profiler
+ Callgrind: como Cachegrind con información del grafo de llamadas
+ Debug
+ Memcheck: chequeo de memoria
+ Accesos a memoria inválidos
+ Uso peligroso de memoria no inicializada
+ Pérdidas de memoria
+ Liberación de memoria inválida (no heap, ya liberada, etc.)
+ Manipulación de memoria superpuesta (memcpy y amigos)
+ Pasaje de áreas de memoria inválidas a system calls
+ Acceso a áreas inválidas del stack
+ Helgrind: chequeos de concurrencia (pthreads)
+ Ayuda a encontrar condiciones de carrera
+ Relativamente experimental
+ Visualización / Análisis
+ Kcachegrind: No es un skin (usa Callgrind)
+
+%page
+
+Valgrind - Invocacion
+
+ Invocación del programa normal: ./programa argumento1
+ Invocación con valgrind: valgrind --tool=[skin]
+%pause
+
+ Basta de Cháchara! Vamos a los ejemplos...
+