Even though Memory barriers: a hardware view for software hackers book is considered extremely old (by it's author, seems like Paul himself answered this question) I find it as an excellent helper to build a mental model around memory ordering.
There is a little thing though that I don't understand:
Let's consider the page with a memory barrier:
Step 4 states that "b=1" is written to a store buffer because "a=1" is not written to the cache yet.
The thing that I can't get is why on the next page:
on step 3 "b=1" is written to the cache line, even though there is a memory barrier after "a=1" and "a=1" is not yet written to the cache? Following the previous page reasoning "b=1" should be written to the cache only after (or within) step 10, when a store buffer, containing "a=1" is written to the cache.