1 Research Focuses Ph.D.Research Plan 2004-2005

Distributed systems consist of a set of independent processes (no shared clock, no shared memory) that cooperate on the top of a message passing system. Communication and coordination are focal to guarantee cooperation among independent processes in such a system. Traditionally, these last are provided through a set of services composing a software layer interposed between the operative system layer and the application layer, namely the middleware. In particular, this set of services comprises basic services like a simple reliable communication service (a sent message is eventually received by the intended receivers) or more complex services as group communications (Reliable [27], FIFO, Causal, Atomic [28]) or shared memories with different consistency criteria (PRAM [31], causal [25], sequential [30], atomic [33]). The application programmer will choose the right level of abstraction provided by these services to easily design its application. In addition, since it is unfeasible thinking that each process knows each other process in the system, the above said middleware layer should provide communication and coordination abstractions in an anonymous way, i.e. data-centric paradigms. Distributed Shared Memory (DSM) is one of the most interesting abstraction providing data-centric communication among a set of application processes which are decoupled in time, space and flow. This abstraction allows programmers to design solutions by considering the well-known shared variables programming paradigm, independently of the system (centralized or distributed) that will run his program. Moreover, there are a lot of problems (in numerical analysis, image or signal processing, to cite just a few) that are easier to solve by using the shared variables paradigm rather than using the message passing one. Distributed shared memory abstraction is traditionally realized through a distributed memory consistency system(MCS) on top of a message passing system providing a communication primitive with a certain quality of service in terms of ordering and reliability [6]. Such a system consists of a collection of nodes. On each node there is an application process and a MCS process. An application process invokes an operation through its local MCS process which is in charge of the actual execution of the operation. To improve performance, the implementation of MCS is based on replication of variables at MCS processes and propagation of the variable updates [17]. As variables can be concurrently accessed (by read and write operations), users must be provided with a consistency criterion that precisely defines the semantics of the shared memory. Such a criterion defines the values returned by each read operation executed on the shared memory. Many consistency criteria have been considered, e.g., from more to less constraining ones: Atomic [20], Sequential [19], Causal [4] and PRAM [21]. Less constraining MCS are easier to implement, but, conversely, they offer a more restricted programming model. The Causal consistency model has gained interest because it offers a good tradeoff between memory access order constraints and the complexity of the programming model as well as of the complexity of