Aargh!
It does not seem possible to understand the VM system in a modular
way. The interfaces between, say, the zone allocator and the swap
policy are many and varied, and you can't just look at one part and
say, "OK, I understand that, now let's look at the layer above, or
below." What a nightmare.
What up with PG_referenced? It's set only in getblk(), tested only
in the vmscan code. So it propagates page usage information from the
buffer cache into the page cache, I guess.