Overview

These are books (some free on the web, some not), that every programmer and computer engineer should know (at least). I try to keep most of them in my L1 cache (i.e. on my desk).

Hardware

  • Patterson, Hennessy: "Computer Organization and Design"

  • Hennessy, Patterson: "Computer Architecuture: A Quantitative Approach"

x86 Architecture

Intel 64 and IA-32 Architectures Software Developer Manuals

The reference for programming Intel's x86 processors on the operating system level.

  • Volume 1: Basic Architecture (important foundation)
  • Volume 2 (a, b): Instruction Set Reference (explains all assembly instructions in detail)
  • Volume 3 (a, b, c): System Programming (details about subsystems and features, such as cache, interrupts, power management, etc.)

Download link (if link is outdated, go to Intel's Website and search for "Software Developer Manual").

Intel 64 and IA-32 Architectures Optimization Reference Manual

Many details about the microarchitectures (Nehalem, Sandy Bridge, Haswell) and their specific behavior.

Download link (if link is outdated, go to Intel's Website and search for "Optimization Reference Manual").

Intel Chipsets

There are also manuals for Intel's chipsets (e.g. ICH 8/9/10), where their configuration is described (e.g. the details on the I/O APIC).

AMD64 Architecture Programmer's Manual

The reference for programming AMD's processors on the operating system level.

  • Volume 1: Application programming
  • Volume 2: System Programming
  • Volume 3: General Purpose and System Instructions (Assembler Reference)
  • Volume 4: 128-bit and 256 bit media instructions (SSE and AVX Reference)
  • Volume 5: 64-Bit Media and x87 Floating-Point Instructions (MMX and FPU Reference)

Download link (if link is outdated, go to AMD's Website and search for "Developer Guides and Manuals").

Also on that page:

  • Software Optimization Guide (with Details on specific processor versions)

Low-level Details for Optimization

This selections is biased for x86 systems and the PC architecture (which is also employed in most HPC systems).

  • Hager: "Introduction to High Performance Computing for Scientists and Engineers"

  • Fog: "Software Optimization Manuals"

  • Drepper: "What every programmer should know about memory" Link

Programming and Algorithms

  • Sedgewick

C Programming

  • Kerningham & Richie: "The C Programming Language"

Programming Tools

  • Version control with Subversion

    • there are translations (e.g. German), but they are not up to date with the English version.
  • Git Book

    thorough introduction and documentation to the distributed source code version control system Git

    • also in other languages, e.g. German

Shell Programming and Bash

  • Powers, Peek, O'Reilly, and Loukides: "Unix Power Tools"

Python

  • ...

Operating Systems

General basics on operating systems:

  • Tanenbaum: "Modern Operating Systems"

  • Stallings: "Operating Systems: Internals and Design Principles"

  • Silberschatz: "Operating System Concepts"

Linux Kernel

  • Bovet: "Understanding the Linux Kernel"

  • Love: "Linux Kernel Development"

  • Corbet: "Linux Device Drivers"

Linux Application Development

  • Kerrisk: "The Linux Programming Interface"

  • Rochkind: "Advanced UNIX Programming"

Special topics

  • Nichols, Buttlar, and Proulx Farrell: "Pthreads Programming"

  • Gallmeister: "Posix.4: Programming for the real world"

Parallel systems and concurrent programming

  • Herlihy: "The Art of Multiprocessor Programming"

  • Vajda: "Programming Many-Core Chips" (2011)

Real-Time Systems

  • Liu: "Real-Time Systems"

  • Burns: "Real-Time Systems and Programming Languages"

Multi-processors in Real-Time

  • Moyer: "Multicore Embedded Systems" (2013)

    • Very thorough textbook about multi-processor systems in embedded and real-time applications
  • Domeika: "Software Development for Embedded Multi-core Systems" (2008)

    • Subtitle: "A Practical Guide for Using Embedded Intel Architecture"
    • concentrates on the x86 architecture for embedded systems

More free books

Wikibooks: "A Little C Primer"

Wikibooks: "C Programming"

Wikibooks: "LaTeX"

Wikibooks: "x86 Disassembly"

social