This is an article on how memory and software interact. The article is more of a book with its 100 pages so it is split into 9 pieces. It is Linux-focused so it gives a good alternative view on the crucial interaction of HW-SW.

A highly recommended read for anyone who wants to know more about low-level programming.

Part 1 (Introduction)

Part 2 (CPU caches)

Part 3 (Virtual memory)

Part 4 (NUMA systems)

Part 5 (What programmers can do - cache optimization)

Part 6 (What programmers can do - multi-threaded optimizations)

Part 7 (Memory performance tools)

Part 8 (Future technologies)

Part 9 (Appendices and bibliography)

Source: http://lwn.net/Articles/250967/