Recomendaciones de libros: ¿Cuál es el mejor libro sobre programación de sistemas?

Pensé que los libros de W. Stevens eran muy útiles cuando comencé a hacer una programación básica de sistemas de nivel de aplicación, y hoy son tan útiles como lo fueron hace una década [1] [2].

Sin embargo, la pregunta formulada es similar a preguntar “¿Cuál es el mejor libro sobre aprender a conducir?”

Debido a su propia naturaleza, la programación de sistemas es una de esas cosas donde no hay sustituto para la implementación real, los libros no son particularmente útiles.

El código fuente es el mejor libro de texto que puedes encontrar, y en la actualidad hay muchos proyectos de sistemas interesantes que son de código abierto.

Tome el código fuente de un “sistema” abiertamente disponible de su elección: un servidor web, por ejemplo, es probablemente uno de los más fáciles con los que puede comenzar.

Ensuciarse las manos, corregir errores con él, pasar a un sistema más complejo, repetir repetidamente. Lea el código fuente del kernel para las llamadas al sistema que usan sus aplicaciones y descubra cómo se implementan.

Una vez que esté familiarizado con los sistemas de nivel de aplicación y desee realizar alguna programación del núcleo, busque un trabajo en el campo o participe en un proyecto de código abierto.

Aplique la misma filosofía de aprendizaje en trozos pequeños para desarrollar los principales componentes de los sistemas y, posteriormente, diseñar sus propios sistemas completos.

[1] http://www.amazon.com/Programmin…

[2] http://www.amazon.com/UNIX-Netwo…

Si solo tiene un libro para leer sobre Computer Systems, entonces recomendaría encarecidamente Computer Systems: A Programmer’s Perspective de Randal Bryant y David O’Hallaron. http://csapp.cs.cmu.edu/

Este libro (CS: APP2e) es la segunda edición de un libro que surge del curso introductorio de sistemas informáticos que desarrollamos en la Universidad de la Universidad Carnegie Mellon, que comenzó en el otoño de 1998, llamado “Introducción a los sistemas informáticos” (ICS). La presentación se basa en los siguientes principios, cuyo objetivo es ayudar a los estudiantes a convertirse en mejores programadores y ayudarlos a prepararse para los cursos de sistemas de nivel superior:

  • Los estudiantes deben ser introducidos a los sistemas informáticos desde la perspectiva de un programador, más bien desde la perspectiva más tradicional de un implementador de sistemas. ¿Qué significa esto?
  • Los estudiantes deben tener una vista del sistema completo, que comprende el hardware, el sistema operativo, el compilador y la red.
  • Los estudiantes aprenden mejor desarrollando y evaluando programas reales que se ejecutan en máquinas reales.

Cubrimos representaciones de datos, representaciones a nivel de máquina de programas en C, arquitectura de procesador, optimizaciones de programas, jerarquía de memoria, vinculación, flujo de control excepcional (excepciones, interrupciones, procesos y señales de Unix), memoria virtual y gestión de memoria, nivel de sistema I / O, programación básica de red y programación concurrente. Estos conceptos están respaldados por una serie de divertidas y prácticas tareas de laboratorio. Vea el Prefacio del manuscrito para más detalles.

Consulte también http://www.cs.cmu.edu/~213/ para ver las tareas de laboratorio del curso 213.

Estos dos libros lo convertirán en un programador de sistemas ** rockstar ** al brindarle las dos perspectivas a nivel de usuario y programación a nivel de kernel.

Programación de sistemas Linux – Robert Love.

Para la programación de sistemas a nivel de usuario, que se ocupa de escribir herramientas del sistema como gcc, bash, servidores web, etc. Esto lo hará competente en el uso de las llamadas al sistema, las funciones de libc y la comprensión de las funcionalidades del núcleo.

Programación del sistema Linux: Hablar directamente con el núcleo y la biblioteca C: Robert Love: 9781449339531: Amazon.com: Libros

Desarrollo del kernel de Linux – Robert Love.

Esta es la otra parte de la programación del sistema que implica escribir módulos del núcleo, controladores de dispositivos, etc. Love describe las implementaciones subyacentes del núcleo, como los programadores de procesos, la gestión de dispositivos y memoria, implementaciones de llamadas al sistema, estructuras de datos del núcleo y mucho más. Poco a poco, también le presentará el código fuente y la comunidad de Linux.

Amazon.com: Linux Kernel Development (3rd Edition) (9780672329463): Robert Love: Libros