Systems Programming - Fall 2021
Instructor: Antonio Carzaniga
Elia Rafael De Lima Batista
All announcements are available here.
Type of course:
Monday 10:30–12:30, Wednesday 10:30–10:30,
, Bachelor, 2nd-year)
Instructors' Office Hours:
Assistants' Office Hours:
What is systems
programming? In a way it is just
programming. But it is also more specific: it means developing
programs that interact with other programs or "systems", as opposed to
human users. Systems require specific interactions, usually with very
specific and sometimes rigid formats. Systems also have non-trivial
structures and architectures, with specific performance
characteristics that might be crucially important for the programmer.
Some systems might also have non-traditional execution models that,
effectively, change the way we program. Examples of such systems are
database systems, networked systems, operating systems, specialized
devices, special purpose processors, or even general purpose
architectures with non trivial architectures (e.g., any non-trivial
The primary language of systems programming is the C programming
language. So, the first objective of this course is to learn C,
meaning programming as well as reading and understanding relatively
large C programs. Rather than studying the design of the language
per-se or its linguistic features, this course is intended to provide
a practice-oriented introduction to programming in C. This course
does not require any previous knowledge of C, although it requires
some elementary notions of computer programming.
The second objective of this course is to learn how to write
programs that interact with a non-trivial system. Once again, the
approach is pragmatic, and the learning path will be based on examples
and direct experimentation.
The course will cover:
- Basic features of the C language, including basic types, literals,
control structures, basic notion of expression operators and their
precedence, structures, functions, parameter semantics, arrays.
- Advanced language features, including a deeper understanding of
the memory model, structures and unions, pointers, memory
management, execution model.
- Elements of the C standard library, including file I/O, formatted
I/O, and memory allocation and deallocation.
- A brief introduction to C++.
- Multi-file projects as well the necessary notions related to the
language and to the build process, including symbols, extern
declarations, and their relations to compilation units and the
- Using make to manage the build process and other
- A minimal practical introduction to symbolic debugging.
- System interfaces: network primitives, asynchronous I/O, signals.
Useful documents and material:
Additional information is available on the following pages.
- Policies - including evaluation
criteria and communications.
- Lectures - lectures, topics,
assignments, and links to various specific course material.
- Announcements - all communications will be
posted on this page.
- Exercises - including solutions.
- Exam exercises.
- Previous edition - Schedule
and class material of the previous edition of the course.