1. Introducción
1.1. Fundamentación
1.2. Objetivos y metodología
1.3. Contribuciones
1.4. Organización de la tesis
2. Marco teórico: errores de programación
2.1. Introducción
2.2. Depuración de programas secuenciales
2.3. Programas concurrentes
2.4. Errores de concurrencia
2.4.1. Condiciones de carrera
2.4.2. Deadlock
2.4.3. Violación de orden
2.4.4. Violación de atomicidad simple
2.4.5. Violación de atomicidad multivariable
2.4.6. ¿Qué tan frecuentes son estos errores
2.5. Resumen
3. Caso de estudio: detección de violaciones de atomicidad
3.1. Introducción
3.2. Antecedentes
3.3. Método de análisis de interleavings
3.4. Implementación de AVIO
3.5. Resultados experimentales del capítulo
3.5.1. Plataforma de experimentación
3.5.2. Benchmarks
3.5.3. Capacidad de Detección de Errores
3.5.4. Análisis de Rendimiento
3.6. Resumen
4. Definición del problema
4.1. Introducción
4.2. Ejecución de programas concurrentes
4.2.1. Soporte hardware
4.2.2. Soporte software
4.2.3. Modelo de ejecución
4.3. Implementación de algoritmos de detección
4.3.1. Instrumentación
4.3.2. Extensiones hardware
4.4. Oportunidades de optimización
4.4.1. Overhead causado por la instrumentación
4.4.2. Hipótesis
4.5. Resumen
5. Eventos de hardware
5.1. Introducción
5.2. Contadores hardware
5.2.1. Soporte hardware
5.2.2. Soporte software
5.3. Uso de los contadores
5.4. Identificar el evento que se desea detectar
5.4.1. Protocolo de coherencia cache
5.5. Microbenchmarks representativos de eventos
5.6. Resultados experimentales del capítulo
5.6.1. Validación del evento candidato
5.6.2. Indicador de accesos inseguros
5.6.3. Patrones de accesos a datos compartidos
5.6.4. Frecuencia y distribución de interleavings no serializables
5.7. Resumen
6. Instrumentación dinámica guiada por eventos
6.1. Introducción
6.2. Muestreo de eventos
6.3. Modelo Simple
6.4. Modelo para aplicaciones paralelas
6.4.1. Gestor de Interrupciones (GI)
6.4.2. Programa Objeto de Estudio (POE)
6.5. Modelo de Instrumentación Dinámica Guiado por Eventos
6.5.1. Activado de la rutina de análisis
6.5.2. Desactivado de la rutina de análisis
6.5.3. Aspectos de diseño
6.6. Resumen
7. Experimentación y resultados obtenidos
7.1. Introducción
7.2. AVIO Consciente de Compartición
7.2.1. Detalles de implementación
7.3. Configuración experimental
7.3.1. Elección de un intervalo de muestreo óptimo
7.4. Rendimiento
7.5. Capacidad de detección
7.5.1. Prueba de detección en los kernels
7.5.2. Prueba de detección en aplicaciones reales
7.5.3. Comparación de bugs informados entre AVIO y AVIO-SA
7.6. Discusión
7.6.1. Interleavings detectados como criterio de comparación
7.6.2. Comparación basada en re-ejecución
7.7. Resumen
8. Conclusiones y Líneas de Trabajo Futuras
8.1. Líneas futuras
Apéndices
A. Detección de condiciones de carrera
A.1. Happens before
A.2. Lockset
B. Benchmaks
B.1. Introducción
B.1.1. Benchmarks para evaluar capacidad de detección
B.1.2. Benchmarks para desempeño
C. SPLASH-2: distribución de eventos
C.1. Introducción
D. SPLASH-2: distribución de interleavings
D.1. Introducción
E. Apache
E.1. Introducción
E.2. Compilación e instalación
E.3. Configuración
E.4. Ejecución