Distributed shared memory (DSM) provides processes with a shared address space across distributed memory systems. DSM exists virtually through abstractions that integrate local memories into a single logical shared space. Each node has CPUs, memory, and they are connected through a high-speed network. The network is used to migrate missing memory blocks between nodes on demand, without visibility to user processes. Design issues include granularity, structure of shared memory, coherence, replacement strategies, and heterogeneity.