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/