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.)
(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.
(if link is outdated, go to Intel's Website and search for "Optimization Reference Manual").
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)
(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
- Kerningham & Richie: "The C Programming Language"
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
Nichols, Buttlar, and Proulx Farrell: "Pthreads Programming"
Gallmeister: "Posix.4: Programming for the real world"
Parallel systems and concurrent programming
Multi-processors in Real-Time
More free books
Wikibooks: "A Little C Primer"
Wikibooks: "C Programming"
Wikibooks: "x86 Disassembly"