CS4414: Systems Programming
|Instructor: Ken Birman.
3 credits, letter grades only. Fall 2021, Tuesday and Thursday 2:25-4:00pm
(Malott Hall 228-Bache Aud). Recitation Friday 3:45PM - 4:35PM (101 Phillips Hall).
The ugrad TAs will run additional coding workshops
each week with hands-on demos building and debugging C++/Linux applications.|
Please plan ahead: We have in-person exams on the evenings on
October 14 (a Thursday), and November 23 (a Tuesday). If you will
be away for the Nov 23 exam, you can take a makeup in the official "finals"
slot for our course. The difficulty will be the same, but it won't be the identical content -- the second
version would be cummulative to the last lecture.
Systems programming aims at students who are proficient in an object-oriented
programming language like Java or Python, and have completed a course on data
structures, but would like a deeper understanding of how "real world"
computing systems are built. In CS4414 you will learn an additional
programming language, C++, and will learn to use the Linux system as a way to
create high quality software. This pair of technologies has gained
nearly universal adoption at every level, from small devices hidden within
"smart things" to the world's largest cloud computing systems. As such,
the skills you gain in CS4414 are very broadly relevant, no matter what you
plan to do in your career.
We expect a mix of students: some may have only taken CS2110 and be taking
this as a second or third course in computing; others could be declared CS
majors, ECE majors. We also welcome MEng students
seeking to broaden their programming skills, but be aware that you cannot
count a 4xxx course towards your MEng degree requirements. CS4414 may also be of interest to students
exploring embedded device programming in
robotics, digital agriculture, Internet of Things, or other settings where
sensors and actuators are deployed. Because we will meet in person and
the room size imposes a size limit, we are
capping enrollment, using the standard CS policies to prioritize the wait
list. However, we have tried to find rooms large enough for everyone to
attend, and will continue to do so as enrollment grows in the future.
Among our practical goals will to learn to leverage existing Linux tools, to
learn how to write correct code in C++, and how to achieve performance and
efficiency. Like any programming language, you really teach yourself by
doing, but we will present C++ and Linux in the required section.
Assigned readings and homeworks will help you build up hands-on
proficiency. C++ and Linux are easy to learn if you are comfortable in
some other object oriented programming language like Java, so we will move
quickly (this is not a course for people who struggle with programming or who
have never seen object-oriented code and learned about data structures). You'll also be reading a famous C++ self-teaching textbook,
written by the inventor of the language. This will begin early in the semester, so
be ready to work hard in the first few weeks!
CS4414 thinks of coding as a skill and a tool, but this is really not a programming course, or a Linux course.
The core intellectual material focuses on the way that modern applications are
often created by combining two or more programs, which talk to one-another
over some mixture of pipes, files, mapped files (shared memory),
networking (messages sent over tcp), etc. We will discuss and security
abstractions for isolation and authorization, and the best ways of building
applications that use these technologies in correct ways. All of these
are concepts you'll find valuable in your work, no matter where computing
might lead you.
Modern computers are based on NUMA processors (chips with multiple CPUs in the
single machine), and leveraging NUMA sometimes entails writing programs with
multiple threads running in parallel while sharing memory. NUMA computers have a variety of interesting
features that include hardware support for parallelism (such as for image
processing, computer vision tasks, machine learning), multiple levels of
hardware caching (important for performance), and can support many styles of
locking and synchronization. We'll focus on monitors, an
approach that is highly flexible, nicely supported in C++, and promotes
correctness. Late in the semester, we will also look at some distributed
systems abstractions that extend the idea of correct synchronization to cover
applications spanning more than one computer, specifically state machine
replication, leader election and crash-failure tolerance.
Although there is some overlap between CS4414 and other CS courses, such as
CS3410 (computer architecture), ECE3400 (computer architecture and embedded
systems) and CS4410 (operating systems), most material
in CS4414 isn't covered in any other existing class, and this course is not
really intended as a replacement for any of those, nor do we assume you
have taken any of them.
Prerequisites: CS4414 has no explicit course prerequisites, but
you do need to be proficient in an object-oriented programming language such as
Java or Python.
CS Major: Satisifies the systems-area course requirement.
|| Lecture schedule, slides, recitation notes, readings, and code
|| We post the assignments and quizzes on CMS.
|| In person on Thursday Oct 14 and Tues Nov 23, with a makeup for the second
exam on the "official finals" day/time. Cornell sets these
dates and times, and the professor does not have any say in it. Cornell
posts the rooms and exact times on a website they call the "exam schedule" or
| Lab Machines
|| Instructions for using the lab machines are on the CS ugrad/MEng web
|| Additional course resources are listed in the right-hand column on the
||See the course syllabus for details.
||Tuesday and Thursday 3pm-4:30pm, with a required
recitation Monday 4:10-5:25
Randal E. Bryant and David R. O'Hallaron,
Computer Systems: A
Programmer's Perspective, Third Edition, Pearson, 2016
A Tour of C++ (2nd Edition), Addison-Wesley Professional, (July 9,
||  Linux. In fact we are not going to
recommend a Linux book, although there are a great
many of them.
Linux has online documentation for all the commands we expect you to use, and
also for the "system calls" your code will use from C++. Moreover,
there is a built-in help feature in
the bash shell, so you can easily
obtain a list of shell commands, or details on how each specific
works and what arguments to use if you want custom behavior. We prefer
that you use
these standard ways of getting help. Linux textbooks
are fine but not really better in any sense.
|| 3 credits
||In fall 2021, grading will be 50% exam performance, 50% assignments. |
||There will be 6 or 7 "project-style" homeworks.
||We will have two in-person exams.
office hours, email
||We are using the department's CMS system for this course,
||435 Gates Hall
| Office Hours
Tuesday and Thursday 1:30-2:30 via Zoom (link).