--- /dev/null
+%%
+%% Seteos comunes basados en el default
+%%
+%%deffont "standard" xfont "serif" "iso10646"
+%%deffont "thick" xfont "sans-serif" "iso10646"
+%%deffont "typewriter" xfont "monospace" "iso10646"
+%%deffont "standard" xfont "Vera.ttf"
+%%deffont "thick" xfont "VeraBd.ttf"
+%%deffont "typewriter" xfont "VeraMono.ttf"
+%%deffont "standard" xfont "Bitstream Vera"
+%%deffont "thick" xfont "Bitstream Vera:Bold"
+%%deffont "typewriter" xfont "Bitstream Vera Mono"
+%deffont "standard" xfont "serif"
+%deffont "thick" xfont "sans-serif"
+%deffont "typewriter" xfont "monospace"
+%%
+%default 1 area 90 90, leftfill, size 1, fore "black", back "white", font "thick"
+%default 2 size 7, vgap 10, prefix " "
+%default 3 size 2, bar "gray70", vgap 10
+%default 4 size 4, vgap 30, prefix " ", font "standard"
+%%
+%tab 1 size 4, vgap 40, prefix " ", icon box "black" 50
+%tab 2 size 3, vgap 40, prefix " ", icon arc "black" 50
+%tab 3 size 2, vgap 40, prefix " ", icon delta3 "black" 40
+%%
+%% Que cachee la pagina que sigue, sin efectos
+%default 1 pcache 1 1 0 1
+%%
--- /dev/null
+%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...
+