From: Leandro Lucarella Date: Thu, 22 Jul 2010 21:32:04 +0000 (-0300) Subject: Agregar charla de manejo de memoria X-Git-Url: https://git.llucax.com/personal/documentos.git/commitdiff_plain/f6c207b2aa6a8c2908ee29fd05a2c90f1ce833c0?ds=sidebyside;hp=c656ee615ac33959a9f0ab919263e2bebdb9ec21 Agregar charla de manejo de memoria --- diff --git a/charla_mm/common.mgp b/charla_mm/common.mgp new file mode 100644 index 0000000..b275f1f --- /dev/null +++ b/charla_mm/common.mgp @@ -0,0 +1,28 @@ +%% +%% 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 +%% diff --git a/charla_mm/ejemplos/no_ini.c b/charla_mm/ejemplos/no_ini.c new file mode 100644 index 0000000..e198c63 --- /dev/null +++ b/charla_mm/ejemplos/no_ini.c @@ -0,0 +1,14 @@ + +int f(int i) +{ + if (i) + return 1; + else + return 0; +} + +int main() +{ + int i; + return f(i); +} diff --git a/charla_mm/mm.mgp b/charla_mm/mm.mgp new file mode 100644 index 0000000..b8191e9 --- /dev/null +++ b/charla_mm/mm.mgp @@ -0,0 +1,157 @@ +%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... +