Sistemas Informáticos: Una Perspectiva para Programadores (Edición Global)
Una revisión profunda sobre cómo los sistemas informáticos ejecutan programas y almacenan información. Este curso cierra la brecha entre la programación de alto nivel y el hardware subyacente, cubriendo la representación a nivel de máquina, arquitectura del procesador, jerarquía de memoria y programación concurrente.
Descripción del curso
Resumen del contenido
Una profundización completa sobre cómo los sistemas informáticos ejecutan programas y almacenan información. Este curso pone de relieve la brecha entre la programación de alto nivel y el hardware subyacente, abarcando la representación a nivel de máquina, la arquitectura del procesador, la jerarquía de memoria y la programación concurrente.
Domina el arte de la programación de sistemas comprendiendo la interfaz entre hardware y software.
Autor: Randal E. Bryant, David R. O'Hallaron
Agradecimientos: Apoyado por los estudiantes e instructores del curso 15-213 en la Universidad Carnegie Mellon. Los agradecimientos incluyen contribuciones de Manasa S. y Mohit Tahiliani.
Objetivos de aprendizaje
- Identificar cómo se representa la información usando bits y contexto dentro de un sistema.
- Rastrear las cuatro etapas del sistema de compilación desde el código fuente hasta el ejecutable.
- Describir la estructura organizativa del hardware y la naturaleza jerárquica de los dispositivos de almacenamiento.
- Convertir entre notaciones decimal, binaria y hexadecimal y explicar el direccionamiento a nivel de máquina (Endianness).
- Realizar operaciones a nivel de bits y lógicas en C y predecir los resultados de desplazamientos aritméticos.
- Analizar codificaciones de enteros para identificar posibles vulnerabilidades por desbordamiento y errores de conversión.
- Analizar la correspondencia entre construcciones en C (bucles, ramificaciones, procedimientos) y instrucciones de ensamblaje x86-64.
- Descomponer la pila en tiempo de ejecución para explicar cómo se pasan parámetros, se almacenan variables locales y se gestionan llamadas recursivas.
- Evaluar los diseños de memoria para estructuras de datos heterogéneas y aplicar reglas de alineación para calcular los requisitos totales de almacenamiento.
- Definir el estado visible por el programador Y86-64 y codificar/descodificar instrucciones en secuencias de bytes.