5 %center, size 7, font "standard", back "white", fore "black"
7 Manejo de memoria y Valgrind
13 Alberto Bertogli (albertito@gmail.com)
14 Leandro Lucarella (llucare@fi.uba.ar)
35 Relación entre el procesador y la memoria
36 Accesos a memoria desde assembler
37 Sistema operativo y múltiples procesos
44 Problemas y restricciones
48 VM - Que nos permite I
50 Virtualización de recursos
51 Aislamiento de la información
53 Trucos locos (más adelante)
61 Tablas de traducción (page tables)
62 Permisos y controles de acceso
63 Flags útiles (Dirty, Accessed, Present, etc.)
69 VM - Que nos permite II
72 Control de acceso (r, w, x)
75 Overcommit / Demand paging
87 Fragmentación de memoria
89 Accesos a memoria no inicializada
95 Framework para hacer herramientas
96 Herramientas para _supervisar_ programas
98 Detectores de errores (memoria, threads)
99 Visualización / comprensión / análisis
100 valgrind core + skin = herramienta de supervisión
106 Traducción binaria dinámica (LD_PRELOAD)
107 No require recompilar
109 No necesita el código fuente
110 Supervisa _todo_ el código en userspace (programa + bibliotecas)
111 Tiene forma de supervisar parcialmente incluso código manejado por el kernel (ej: señales)
115 Valgrind - Funcionamiento
117 LD_PRELOAD de valgrind.so
118 Trap al CPU y toma el control
119 El programa corre en un CPU simulado
120 El programa no se entera
121 valgrind compila el código via JIT x86-x86 (u otras)
122 El skin instrumenta la supervisión
123 No se ejecuta código original del programa, sólo el código compilado (supervisado)
127 Valgrind - Skins actuales
130 Massif: heap profiler
131 Cachegrind: cache profiler
132 Callgrind: como Cachegrind con información del grafo de llamadas
134 Memcheck: chequeo de memoria
135 Accesos a memoria inválidos
136 Uso peligroso de memoria no inicializada
138 Liberación de memoria inválida (no heap, ya liberada, etc.)
139 Manipulación de memoria superpuesta (memcpy y amigos)
140 Pasaje de áreas de memoria inválidas a system calls
141 Acceso a áreas inválidas del stack
142 Helgrind: chequeos de concurrencia (pthreads)
143 Ayuda a encontrar condiciones de carrera
144 Relativamente experimental
145 Visualización / Análisis
146 Kcachegrind: No es un skin (usa Callgrind)
150 Valgrind - Invocacion
152 Invocación del programa normal: ./programa argumento1
153 Invocación con valgrind: valgrind --tool=[skin]
156 Basta de Cháchara! Vamos a los ejemplos...