CIS 505: Homework assignments


Homework 0: Using the Virtual Machine Image

This very simple assignment will show you how to use the virtual machine image we have prepared for you. You will need the following:

VMware Workstation has been installed on the Linux labs, including M100A, M204 (Ketterer Lab), and Towne-M70, and VirtualBox is also available in all the Windows labs, so you only need to download it if you prefer using your own computer for the homework assignments. Please keep in mind that any code you save in the virtual machine is lost if you delete the VM image itself, unless you check it into your git repository.

Homework 1: Processes and Threads

This assignment – a simple parallel sorting program – will give you some hands-on experience with concurrency and its impact on application performance, as well as with several basic UNIX primitives. You will need the HW1 handout, as well as some framework code that has already been checked into your Git repository. You should continue using the virtual machine image you installed for Homework 0.

Homework 2: Email servers

For this assignment, you will build a pair of simple email servers (SMTP and POP3) that can be used with a real email client. The assignment involves socket programming, server design, as well as working with RFC-style protocol specifications. You will need the following:

You should continue using the virtual machine image you installed for Homework 0.

Homework 3: Chat server

For this assignment, you will build a replicated chat server that uses multicast to distribute the chat messages. The server should support three different ordering modes: unordered, FIFO, and total multicast. You will need the HW3 handout, as well as some testing tools, which have already been checked into your Git repository. You should continue using the virtual machine image you installed for Homework 0.

Final project: PennCloud

For the final project, you will build a small cloud platform in groups of four. The cloud platform should support a webmail service and a storage service, and it should be based on a distributed key-value store. You will need the project handout, and you should maintain your code in a shared Git repository that we will create for each team.

If you would like to deploy your platform on a truly distributed setting, one option would be to use AWS, in combination with AWS Educate (which gives some free AWS credits to Penn students). This Amazon EC2 deployment handout should help you get started with deploying your project on Amazon EC2.

Return to the main page

Web site contact: Linh Thi Xuan Phan