Design Issues in Implementation of Distributed Shared Memory in User Space Varun Chandola {chandola@cs.umn.edu } Abstract Distributed Shared Memory (DSM) [1] has become a very popular paradigm in distributed systems. A DSM is essentially a way of seamlessly sharing the physical memories of loosely connected systems. An implementation of a DSM can be categorized as page-based, shared-variable based or object based depending on the granularity of the data being shared. This paper discussed the design and implementation of an object based DSM running in user space. The design discussed the decisions made to achieve two important parameters associated with DSM viz. – performance and consistency. The implementation of the design is done in JAVA and a performance analysis of various consistency schemes is done to help users decide which scheme to use to optimize the balance between the performance of the DSM system and the consistency of the shared objects 1 Introduction Sharing data is an essential requirement of any distributed system. Note that when I refer to a distributed system it stands for a multi-computer architecture in which each node is an independent machine connected to each other through a network. Sharing data in a multi-processor architecture is relatively easier, since all of the nodes share the same system bus and hence have a uniform view of the physical memory. On the other hand a multi-computer system does not enjoy such hardware privileges. So sharing data becomes a problem which has to be tackled in the software (either inside the Operating System or as a user-level application) and not in hardware as in multi-processor systems. Traditional methods of data sharing viz. message passing via sockets are not appealing from a programmer’s perspective, in which he or she has to explicitly take care of the networking issues. A DSM provides an abstraction to the programmer of a uniform shared memory located across different machines. Since a DSM system involves moving of data from one node to another which are on typical networks, performance is an important criterion in the design of a DSM system. Just as is the case with multi-processor systems, since same copies of data might reside on different nodes, consistency between these copies is also another major issue. DSM systems can be classified into three broad categories [2]: • Page-based DSM – in which the unit of data sharing is a memory page. • Shared variable based DSM – in which the unit of data sharing is a variable. • An object based DSM – in which the unit of data sharing is an object. This paper presents design of an object based DSM that runs in the user space 1 . The choice of objects as units of granularity over a page or shared variables is because of the modularity and flexibility offered by objects. Moreover, objects eliminate false sharing which will be discussed in the next section. Another reason is that integration of object based DSM with the object oriented languages is easy to achieve. The design also provides flexibility in terms of consistency models used by allowing the user applications to specify under what consistency scheme they want a particular object to be shared. The rest of the paper is organized as follows. Section 2 addresses various issues involved with 1 The design is not a pure object based design because in typical object based DSM like CLOUDS [1] the user application cannot differentiate between a shared and a normal object. It is the responsibility of the runtime system to access the object from local store or remote location. In my design, the user application is aware of the objects which are to be shared among multi-computers. So it can be thought of as a hybrid between shared variable based and object based DSM.