| Time | Tuesdays and Thursdays, 1:15–2:40 PM |
| Place | EB G7 |
| Instructor |
E-mail: Please do not send e-mail to me directly. Send it to the mailing list at csN-internal@cs.binghamton.edu†. This list is read by both me and the TA. Office Hours: Tuesdays and Thursdays, 4:00-5:00, in EB G7 or T-10. If you are not going to be there at the beginning of the hour, please send e-mail first, 24 hours in advance, so that I will know to stay and wait. Phone (do not leave voice mail): 777-7320 |
| Office | EB T-10 |
| Web Page | http://www.cs.binghamton.edu/~kchiu/cs557/ |
| Mailing Lists |
Public, for announcements and discussion: csN@cs.binghamton.edu†. Subscribe at http://www.cs.binghamton.edu/mailman/listinfo/cs557/. Private to me and the TA: csN-internal@cs.binghamton.edu†. |
This course is designed to provide a solid foundation and background in the field of distributed systems. It is appropriate for those planning on going on to do research in the area, or for those interested in roles of system architect, etc. I will try to strike a balance between learning about practical, modern technologies used in the real world, such as web services, and the foundations and principles of distributed systems.
A solid background in undergraduate operating systems and networking is required. You should also have a solid background in network programming in C++. Java may also be acceptable, though C++ is preferred. You should also have experience with developing on UNIX/Linux systems.
For background in OS, any relatively modern OS textbook can be used. A popular textbook is Silbershatz's Operating System Concepts: 6th Edition.
For C, I recommend Kernighan and Ritchie's The C Programming Language (Second Edition). For C++, I recommend Lippman's The C++ Primer (3rd Edition). For UNIX systems programming, I recommend Steven's Advanced Programming in the UNIX Environment (2nd Edition). All of these are just recommendations, however. You should feel free to use any book of your choosing.
If you are using C++, you need to be familiar with POSIX threads programming (pthreads). I will cover this some in class, but some prior experience will be helpful. I recommend Butenhof's Programming with POSIX Threads.
Here are some things you should be familiar with. It is not exhaustive by any means, but is just meant to give you a sample:
fork(), pipe(),
read(), write(), sockets, etc.
ls, find, grep,
mkdir, etc.
gdb debugger.
You'll find that using a debugger greatly increases your
productivity,
and is well worth the time investment.
If you have other topics you would like to cover, please suggest them.
Lecture slides will be available via the course web page. Lecture slides are not a substitute for class attendance, since (i) they will not be complete and (ii) significant parts of lectures may not come from the class notes. Also, I sometimes take exam questions from questions asked by myself or others during class.
Class participation during lectures is highly encouraged, and will affect your grade. If you don't understand something, please interrupt, since it's likely that others also don't understand. The more effort you make to understand the material during lecture, the less you will need to study for the exams.
Also note that the ability to ask questions is in itself an important, and valuable skill.
There is one required textbook for this course. Distributed Systems: Principles and Paradigms, 2nd ed. by Andrew Tanenbaum and Maarten van Steen. For another reference, I suggest Distributed Systems: Concepts and Design by George Coulouris, Jean Dollimore, and Tim Kindberg. The second book is not required, however.
We will also cover a few research papers in distributed systems.
| 4 × 10% = 40% | Four tests, 10% each |
| 7% | Warmup programming assignment |
| 3 × 16% = 48% | Three full programming assignments, 16% each |
| 5% | Class participation |
Grading will be scaled (on a curve), so the absolute score is not significant. In other words, it is how well you do against your classmates that really matters. All requests for changes of grades must be made in writing, not in person, and you must wait 24 hours after receiving the grade before requesting a change. Resubmit your homework or exam to me, along with a written statement describing why you feel you deserve more points, and I will consider your case.
This course is not about teaching programming, so generally speaking, I will not “grade” your source code. That said, well-written code is easier for you to debug, and if your code doesn't work, it will be easier for me to give you partial credit if I can understand it.
Please follow the instructions for submitting assignments exactly. We want to use scripts for as much of the grading process as possible, so your cooperation here will make things much easier, and put the TA in better mood when grading your assignment.
Extensions to programming assignments will not usually be granted, especially when requested at the last minute.
Assignments will always be due at 11:59 PM on the day that they are due. Assignments will lose 10% for each day that they are late. Each student will be alloted seven free late days for which they can be late without penalty.
Each test will be one half hour long. Tests will be open book, and notes, but you will not be allowed to use laptops during tests. The tests will not be cumulative.
Due to the difficulty of preparing extra exams in a fair manner, I will not reschedule exams for individual people, except in the case of medical emergency, with the appropriate documentation.
Class participation will be graded by randomly choosing names from the roster to answer questions. If you are not in attendance that day, you will lose a proportional score from the 5% given to participation. So, if you are absent 1 out of 5 times that I call on you, you will lose 20% from your class participation score.
Everyone will be granted five free excused absences, but you must send e-mail prior to class to use your excused absence.
Some of you will be asking me later for recommendation letters, or to support you as a TA. For me to be able to write a strong recommendations, you will need to interact with me and participate in class. Without something more, the only thing I can say is that you did or did not show up in class, and list your grade. That will not be a very strong recommendation, even if you receive an A in the class.
You are free to discuss assignments with one another at a high level. However, each of you must write your own code; please do not show your work directly to other students, and do not look at other students' code. Students submitting programming assignments or exams that I decide are too similar, will receive no credit on that assignment, and the maximum grade those students can receive for the class is a C. If necessary, we will be using source code comparison programs to check programs against one another.
My door is usually open if I'm in. If so, please come in or knock. If my door is closed, I'm either not in, or on the phone or otherwise engaged. Please don't knock, unless you have an urgent matter or a prior appointment.
If you wish to come to office hours, but will not arrive at the beginning of the period, let me know one day in advance. Otherwise, I will leave early. If you find this policy inconvenient, let me know. If you have made an appointment, a reminder the day before would be helpful.
If you verbally arrange a meeting with me or ask me to do something, please follow up with an e-mail so that I will have a written record. Otherwise, it is almost guaranteed that I will forget.
If you would like to talk on the phone, please arrange it first with e-mail.
Also, do not leave voice mail. Since my phone does not have a visible indication that I have voice mail, sometimes several days pass before I realize that I have voice mail.
There are two mailing lists for this course. The first list, csN@cs.binghamton.edu† is an open, public list. Subscribe at http://www.cs.binghamton.edu/mailman/listinfo/cs557/. It will be used by me for announcements, and may be used by students for questions and discussion. This list should be read carefully, and will often contain hints and tips for the programming assignments. The second list, csN-internal@cs.binghamton.edu,† is read only by me and the TA, and may be used for administrative issues. You are encouraged to use the public list for questions of a general nature.
Please use the e-mail lists rather than sending questions directly to me. The lists automatically archive e-mails, for future reference. I can then go back to these e-mails later to improve the course.
I may sometimes lose track of what e-mail I've responded to, so don't hesitate to remind me if I seem to have forgotten about your e-mail or request. I never ignore e-mail on purpose.
We reserve the right to make changes to this schedule. The topic timing and list is definitely tentative.
Slides for lectures that have not yet been given should be considered
very rough drafts, and have been labeled as “preliminary”.
After the last lecture on a topic, the final version of the slides will be posted.
| Date | Topic | Slides | Documents and/or Files | Notes | |
|---|---|---|---|---|---|
| Tuesday, August 26th, 2008 | Course overview | Overview [PPT] | |||
| Thursday, August 28th, 2008 | Introduction | Introduction [PPT] | Chapter 1 (T. 2e) [PDF] | ||
| Tuesday, September 2, 2008 | Introduction | ||||
| Thursday, September 4, 2008 | Architectures | Architectures [PPT] | Chapter 2 (T. 2e) [PDF] | ||
| Monday, September 8, 2008 | Warmup programming assignment due | ||||
| Tuesday, September 9, 2008 | Architectures | ||||
| Thursday, September 11, 2008 | Processes | Processes [PPT] | Chapter 3 (T. 2e) [PDF] | ||
| Tuesday, September 16, 2008 | Processes | ||||
| Thursday, September 18, 2008 | No lecture, but in-class test (instructor is out-of-town) | ||||
| Test 1, 30 minutes, in-class | |||||
| Tuesday, September 23, 2008 | Processes | ||||
| Thursday, September 25, 2008 | Communication | Communication [PPT] | Chapter 4 (T. 2e) [PDF] | ||
| Tuesday, September 30, 2008 | No class, Rosh Hashanah | ||||
| Thursday, October 2, 2008 | Communication | ||||
| Tuesday, October 7, 2008 | Naming | Naming [PPT] | Chapter 5 (T. 2e) [PDF] | ||
| Thursday, October 9, 2008 | No class, Yom Kippur | ||||
| Tuesday, October 14, 2008 | Naming | ||||
| Thursday, October 16, 2008 | Garbage collection | Garbage Collection [PPT] | To be determined | ||
| Tuesday, October 21, 2008 | Synchronization | Synchronization [PPT] | Chapter 6 (T. 2e) [PDF] | ||
| Test 2, 30 minutes, in class | |||||
| Thursday, October 23, 2008 | Synchronization | ||||
| Tuesday, October 28, 2008 | Consistency and replication | Consistency and Replication [PPT] | Chapter 7 (T. 2e) [PDF] | ||
| Thursday, October 30, 2008 | Consistency and replication | ||||
| Tuesday, November 4, 2008 | Consistency and replication | ||||
| Thursday, November 6, 2008 | Fault tolerance | Fault Tolerance [PPT] | Chapter 8 (T. 2e) [PDF] | ||
| Tuesday, November 11, 2008 | Fault tolerance | ||||
| Thursday, November 13, 2008 | Fault tolerance | ||||
| Test 3, 30 minutes, in class | |||||
| Tuesday, November 18, 2008 | Security | Security [PPT] | Chapter 9 (T. 2e) [PDF] | ||
| Thursday, November 20, 2008 | Security | ||||
| Tuesday, November 25 2008 | Distributed file systems | Pending | Chapter 11 (T. 2e) [PDF] | ||
| Thursday, November 27, 2008 | No class, go eat! | ||||
| Tuesday, December 2, 2008 | Distributed file systems | ||||
| Thursday, December 4, 2008 | To be determined | ||||
| Tuesday, December 9, 2008 | To be determined | ||||
| Thursday, December 11, 2008 | No lecture, but in-class test (instructor is out-of-town) | ||||
| Test 4, 30 mins, in class | |||||
†Replace the N with the course number, which in this case is “557”.