]> git.llucax.com Git - personal/documentos.git/commitdiff
Agregar charla de manejo de memoria
authorLeandro Lucarella <llucax@gmail.com>
Thu, 22 Jul 2010 21:32:04 +0000 (18:32 -0300)
committerLeandro Lucarella <llucax@gmail.com>
Thu, 22 Jul 2010 21:32:04 +0000 (18:32 -0300)
charla_mm/common.mgp [new file with mode: 0644]
charla_mm/ejemplos/no_ini.c [new file with mode: 0644]
charla_mm/mm.mgp [new file with mode: 0644]

diff --git a/charla_mm/common.mgp b/charla_mm/common.mgp
new file mode 100644 (file)
index 0000000..b275f1f
--- /dev/null
@@ -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 (file)
index 0000000..e198c63
--- /dev/null
@@ -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 (file)
index 0000000..b8191e9
--- /dev/null
@@ -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...
+