CS131

Fundamentals of Computer Systems

Dropbox

The final project for CS131 will involve creating a computer system similar to Dropbox. The system will have a similar functionality to Dropbox, but the focus will be on all the different components of the system, as opposed to the actual dynamics of file synchronization. The system will be built from the ground up and will require use of some of the concepts covered in class. The project will be incrementally built throughout the whole semester, in parts, all of which will be due individually. Since the system will be built from the ground up, you will be required to think about some of the design aspects of the system. This project will be coded in Java to emphasize system design over implementation details.

Part 1

Handout

The first part of the project will involve building a simple client and server to replicate the basic functionality of Dropbox (file synchronization). The client and server will communicate using a simple protocol (designed by you) over a socket channel. This part of the project will follow the lectures on the client/server model.

Part 2

Handout

The second part of the project will take the existing client and expand it to allow for multiple clients. The server will have to be multithreaded in order to handle multiple clients concurrently. There will also need to be basic atomicity support, although this will be expanded on later. This part of the project will follow the lectures on virtualization and OSes.

Part 3

Handout

The third part of the project will ask you to improve your system to have greater ACID guarantees for its multiple concurrent clients. This part of the project will follow the lectures on consistency and atomicity.

Part 4

Handout The fourth and last part of the project will modify your existing protocol between the client and the server to include authentication and encryption, making the communication between the two safer. This part of the project will follow the lectures on security.