An article in Lambda, the Ultimate, points to a piece by Chris Brumme on memory models in CLR, Microsofts Cimmon Language Runtime. CLR is the virtual machine that C# and other Microsoft languages compile to. Chris says:
So what is a memory model?Ê It?s the abstraction that makes the reality of today?s exotic hardware comprehensible to software developers.
I can remember the days when CPUs weren't so complicated. But what with n-way semetric multi-processing, multi-level caches, and whatnot, its gotten to the point where understanding the CPU design is a job for experts. CLR, JVM, and other VMs allow those experts to create a useful abstraction that the compiler writer to target. Compiler writers, of course, are another class of expert who write translators from the semantics that the language designer specifies to the semantics of the VM.