CS377
Course Description
Large-scale software systems like Google - deployed over a world-wide network of hundreds of thousands of computers - have become a part of our lives. These are systems success stories - they are reliable, available ("up" nearly all the time), handle an unbelievable amount of load from users around the world, yet provide virtually instantaneous results. On the other hand, many computer systems don't perform nearly as well as Google - hence the now-cliche "the system is down." In this class, we study the scientific principles behind the construction of high-performance, scalable systems. The course begins with a discussion of the relevant features of modern architectures, and moves up the stack from there to programming language runtime systems, concurrency and synchronization, a focus on key operating system features, I/O and networking, and distributed services.
Textbook
There is no required text for this course.
Course Information
Class meetings: TuTh 11:15AM - 12:30PM, CMPS 142
Discusion Section (led by TA): Wednesday 1:25-2:15 (ELAB 304 -- in older brick building next to Computer Science building)
Final Exam: Wednesday, May 20, 4PM ECSC 119 (The auditorium in the big silver building next to the CS Building)
For questions and answers about class assignments, etc., please visit the bulletin board. Please create a username similar to your real name (no spacegirl99), it makes it easier to answer questions. If you are accessing the bb from outside the University, you need to login first using cs377 and cS377Mc.
Office Hours
Mark Corner Tuesday 1:30-2:30pm, Thursday 1:00-2:00pm (CMPSCI 330).
Jim Partan Friday, 1pm-2pm, Edlab (rooms 223/225 LGRT).
Tongping Liu Monday 5-6PM, Wednesday 5-6PM, Edlab (rooms 223/225 LGRT)
Grading
Your grades are based on the following:
- 5% Project 1
- 15% Project 2
- 15% Project 3
- 15% Project 4
- 25% Exam #1
- 25% Exam #2
The first project is individual. Projects 2,3 and 4 are to be done in groups of three or less. At the end of each project you will evaluate the other members of your group. I reserve the right to deduct points from group members that do not contribute. These deductions may be significant (such as all of the points).
Plagiarism policy
All projects in this course are to be done by you (or your group, if it's a group project). Violation will result in a zero on the project in question and initiation of the formal procedures of the University. We use an automated program and manual checks to correlate projects with each other and with prior solutions. At the same time, we encourage students to help each other learn the course material. As in most courses, there is a boundary separating these two situations. You may give or receive help on any of the concepts covered in lecture or discussion and on the specifics of programming language syntax. You are allowed to consult with other students in the current class to help you understand the project specification (i.e. the problem definition). However, you may not collaborate in any way when constructing your solution: the solution to the project must be generated by you or your group working alone. You are not allowed to work out the programming details of the problems with anyone or to collaborate to the extent that your programs are identifiably similar. You are not allowed to look at or in any way derive advantage from the existence of project specifications or solutions prepared elsewhere.
If you have any questions as to what constitutes unacceptable collaboration, please talk to the instructor right away. You are expected to exercise reasonable precautions in protecting your own work. Don't let other students borrow your account or computer, don't leave your program in a publicly accessible directory, and take care when discarding printouts.
University Academic Honesty policy
Projects
You will be using the autograder to submit your projects. You might want to check out the Eclipse development environment, which now has reasonable C++ support.
Here's a brief introduction to C++ for Java programmers.
For lots more info about C++, visit this C++ FAQ, written by Bjarne Stroustrup (creator of C++).
And here is a Programmer's Guide to the C++ STL from SGI.
Previous page: CS491L
Next page: Using the Autograder