Ecole Polytechnique Fédérale de Lausanne
english only

Introduction to Distributed Systems (Summer 2007)


Course Schedule

Lectures: Tuesdays, 10:15 - 12:00, BC 04
Exercises: Tuesdays, 12:00 - 13:00, BC 07


Date Lecture (10:15 - 12:00) Exercises (12:00 - 13:00)
March 13 Introduction to Java, Java in a Nutshell Introduction to Java
March 20 Concurrent programming Safety and liveness
March 27 Concurrent programming continued. Introduction to RMI project
April 3 Remote method invocation RMI project
April 17 Remote method invocation continued. RMI project
May 8 Network programming Practice session for network programming
May 15 Network programming continued. Peer to peer project
May 22 Distributed algorithms Peer to peer project
June 5 Tales from the academic world

Teaching team

Instructor: Benoît Garbinato, office Bureau 128.3, UNIL
Assistant: Vasu Singh, office BC 344

Course Information



A distributed system is characterized by the absence of global state, i.e., distributed entities do not share a common view of the system. This makes the design of distributed programs significantly more difficult than centralized ones. This course introduces conceptual and practical tools to address this difficulty. To help students better grasp theoretical concepts, they will incrementally build a typical distributed application, throughout the semester, mainly using the Java platform. This course will address the subjects listed below.



The evalution shall be based on two mandatory projects (part of the exercises) during the semester, and a final exam at the end of the semester.


Exercise session 1 (March 13):

What do you do? Choose an IDE of your choice (Eclipse/NetBeans/command-line) and learn to run Java code. Get a basic introduction to polymorphism as covered in the lecture. Get an introduction to two different ways of creating new threads in Java. See the concurrence in output when two threads are running simultaneously.

Exercise session 2 (March 20):

What do you do? Understand by way of examples, what are the important concerns in concurrent programming. Practise on different examples to cover different safety and liveness issues.

Exercise session 3 (March 27):

What do you do? See the solution of last week's problem here. Understand the problem in the RMI project. Find the source code here.

RMI project (April 3 - May 1):

What do you do?
About the project: You are given a single user version of Phomo (Fake multiplayer). Your goal is to develop the game for multiple players on multiple machines using RMI. The date for the submission and presentation is May 1. More details about the submission will be available soon.
Steps in the project. First of all, you should go through the source code of the project, and understand the functionality of every package. Finally, you would figure out which classes need to be changed/extended to provide RMI support. (You can try running multiplayer version of the original source code to see what is the current problem). You should be able to do this by April 17. In the next step, you should extend the server and client classes so that they can communicate using RMI.
Desired form of source code. Your code should be properly commented in the parts that you have added. Make sure that you add the source code with a README file, where you specify the following: Which files you have modified in the original source code and which files you have added new into the source code. It is also recommended that you specify what each modification is for.

Socket programming

What do you do? Introduction to socket programming: Find the code and the instructions here.

Peer to peer project - Submission on June 18.

First step: As a first step in the project, you should be able to create an unreliable means of communication (where player movement messages may be lost) in a P2P setting using UDP multicast protocol. We hope you can complete this by the end of May. This will serve as a setting for developing more involved features in the project later. In the next step, we expect you to use the protocols discussed in the class and develop a reliable means of communication and make the protocol completely coherent among the peers.
Instructions in French can be found here. In English: The aim of this exercise is to develop Phomo for multiple users on multiple machines in a peer-to-peer manner. The single user version is given to you (same as the one for the RMI project). We divide the project in two parts: Upon initialization, a peer obtains an ID number and notes the total number of peers. As a first step, the total number of peers can be hard coded in each peer and the number of the peer can be shown in a graphical interface, just like we showed the address of the server in the client/server model. In the second step, this information (about the ID of a peer and total number of peers) should be obtained from a central mini server using the TCP protocol. Once the game is set up, each peer in the game sends the information about its move by multicast to all the other peers. It is important to define a protocol that makes all the peers in the game see a coherent state of the game. The points for the projects are as follows:
Group number Students Points for RMI project Points for P2P project
Group 1 Fan.Yang@epfl.ch, Jose.nuneznegrillo@epfl.ch 4.5 4.5
Group 2 Ayisha.Qureshi@unil.ch, Zied.BenRejeb@unil.ch 4 3.5
Group 3 Shuang.Wu@epfl.ch, Alexandre.Rodriguez@epfl.ch 5 4.5
Group 4 Pascal.Kirchhof@epfl.ch, Michael.Jubin@epfl.ch 6 6
Group 5 Sylvain.Luiset@epfl.ch, Eric.Bany@epfl.ch 5 5.5
Group 6 Xuan.Dinh@epfl.ch, Ari.Saadi@epfl.ch 5 5
Group 7 Marc.Bailly@epfl.ch, Feriel-Hadjira.benkortbi@epfl.ch 5.5 5.5
Group 8 Andreas.Schwarz@epfl.ch, Olivier.Combe@epfl.ch 5.5 5.5
Group 9 Julien.Herzen@epfl.ch, Jean.Respen@epfl.ch 5 5
Group 10 Nathaniel.Cohen@epfl.ch, Anthony.Durussel@epfl.ch 5 5.5
Group 11 Sylvian.Kamto@unil.ch, Iordan.Djambazov@epfl.ch 6 4
Group 12 Fabian.Kaelin@epfl.ch, Timo.Wuersch@epfl.ch 5 6
Group 13 ********** 5.5 4