Coherent Shared Memory on a Distributed Memory Machine