MIMD parallel machines can be divided in two class according to memory architecture : shared memory machines are composed of a set of processors accessing to a single memory. The main advantage of these machines lies in their easy programming due to the fact that there are no communications between processors. However, contentions and collisions prevent applications to be actually scalable and most of shared-memory machines are limited to a small number of processors.
Distributed memory systems, on the contrary, can integrate a large number of processors. The communication model usually used is message-passing, which allows important speedups. However its programming remains difficult since end-users have to take into charge all communication operations.
In that context, by allowing the programmer to share "memory objects" without being in charge of their management, Distributed-Shared Memory Systems want to propose a trade-off between the easy-programming of shared memory machines and the efficiency and scalability of distributed memory systems.
A distributed shared memory is a mechanism allowing end-users processes to access shared data without taking into charge inter-process communications. In other words, the goal of a DSM system is to make inter-process communications transparent to end-users. Both hardware and software implementations have been proposed in the literature. From a programming point of view, two approaches have been proposed.