This information is advisory only. The authoritative course description and requirements for a given semester are defined by the course syllabus.
This course is a cross-listed graduate/undergraduate course titled Distributed Systems for both graduate and undergraduate students. Both versions of the course are project-heavy.
OfferingsSpring 2018, Spring 2021
Current Offering: Spring 2021
|Lecture||A: MWF 13:50-14:40, Location/method TBD|
M 10:00-11:00, Zoom
Th 14:00-16:00, Zoom
|TA Office Hours||(See Piazza)|
|The Internet (pt. 1) (pdf)||2021-02-03|
|The Internet (pt. 2) (pdf)||2021-02-05|
|Go Projects and Idioms (pdf)||2021-02-07|
|Go Methods and Interfaces (pdf)||2021-02-10|
|The Go Language continued||2021-02-12|
|A Model of Distributed Systems (pdf)||2021-02-15|
|Failure and Failure Detection (pdf)||2021-02-17|
|Logical Time (pdf)||2021-02-24|
|Global States (pdf)||2021-02-26|
|Naming in Distributed Systems (pdf)||2021-03-01|
|Distributed Hash Tables (pdf)||2021-03-03|
|Distributed Hash Tables continued||2021-03-05|
|Broadcast and Multicast (pdf)||2021-03-08|
|Kademlia Routing review||2021-03-10|
|Ordered Multicast (pdf)||2021-03-12|
|Gossip Protocols (pdf)||2021-03-15|
|Leader Election (pdf)||2021-03-17|
|Midterm Review (pdf)||2021-03-22|
|Byzantine Agreement (pdf)||2021-04-05|
|Mutual Exclusion (pdf)||2021-04-07|
|Software Development for Coursework (pdf)||2021-04-09|
|The Raft Consensus Protocol (pdf)||2021-04-12|
Students are expected to have a thorough understanding of data structures and fundamental algorithms, as well as meaningful familiarity with the Internet architecture and networking (including the TCP/IP protocol suite) and operating systems concepts. In addition, students are expected to have done some systems programming (e.g., using threads and sockets). Students must either have some experience in the Go programming language or be capable of picking it up rapidly.
Undergraduate students must have completed CSE 250 or an equivalent course at another institution with appropriate articulation.
There is no required text for this course. Readings will be assigned from publications in the scientific literature and other sources.
This is a project-heavy course. Students will be expected to implement several non-trivial applications in the Go programming language. Projects will make up about half of the final course grade, with the remainder being quizzes and exams.
There will be one midterm examination and one final examination.
There are no graded homeworks for this course. Homeworks may be assigned to help students understand the material, and any material covered in homeworks may appear on exams or quizzes.
All programming assignments for this course will be in Go. The version of Go used this semester is 1.13. Go is a systems programming language with a flavor not dissimilar to C, but providing much higher-level support for strings, buffers, message passing, and concurrency.
All projects in this course must compile and run correctly on a virtual machine image provided by the instructor (see Virtual Machine, below). You may develop your projects on a different platform at your own risk.
Students considering this course or wishing to do some preparation before the semester begins may wish to complete A Tour of Go to get a feel for the environment.
Note that this VM is newly updated for Spring 2021! Make sure that you have downloaded and installed the correct virtual machine image.
Students wishing to prepare themselves for this course may review the following resources:
- A Tour of Go
If you are unfamiliar with the Go programming language, this resource will help you come up to speed. It is a series of in-browser programming exercises to accomplish trivial tasks in Go, intended to teach you the basic syntax and structure of Go.
- Operating Systems in Three Easy
OSTEP is a quality, free operating systems textbook. If your background in OS concepts is weak, you may find it helpful to review some of the information in OSTEP (or another good operating systems textbook). Some familiarity with Part I Chapter 7 (CPU Scheduling) and Part II (Concurrency) will be valuable. We are not using C or a POSIX API, so take that information with a grain of salt.