Systems Programming - Fall 2021
news
All announcements are available here.
Instructor: Antonio Carzaniga
Assistants:
Elia Rafael De Lima Batista,
Riccardo Felici.
Type of course: lecture
Lecture Hours: Monday 10:30–12:30, Wednesday 10:30–10:30,
(
weekly schedule, Bachelor, 2nd-year)
Instructors' Office Hours: by appointment
Assistants' Office Hours: by appointment
Objectives
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
memory structure).
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.
Contents
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
linker.
- Using make to manage the build process and other
non-trivial processes.
- A minimal practical introduction to symbolic debugging.
- System interfaces: network primitives, asynchronous I/O, signals.
Links
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.