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).
Patterson, Hennessy: "Computer Organization and Design"
Hennessy, Patterson: "Computer Architecuture: A Quantitative Approach"
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.)
Intel 64 and IA-32 Architectures Optimization Reference Manual
Many details about the microarchitectures (Nehalem, Sandy Bridge, Haswell) and their specific behavior.
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)
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"
Drepper: "What every programmer should know about memory" Link
Programming and Algorithms
- Kerningham & Richie: "The C Programming Language"
- there are translations (e.g. German), but they are not up to date with the English version.
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"
General basics on operating systems:
Tanenbaum: "Modern Operating Systems"
Stallings: "Operating Systems: Internals and Design Principles"
Silberschatz: "Operating System Concepts"
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"
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)
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: "x86 Disassembly"