Systems Programming - Fall 2022

announcements
Dec 19: Graded Homework Assignment n. 3 is out. Submission deadline is Friday, December 23, 2022 at 22:00.
Nov 29: Graded Homework Assignment n. 2 is out. Submission deadline is Tuesday, December 6, 2022 at 22:00.
Nov 28: Reading assignment n. 7: read and practice with the chapter on C++.
Nov 21: Reading assignment n. 6: read and practice with the chapter on Modules and Object-Oriented Programming in C.
Nov 14: Graded Homework Assignment n. 1 is out. Submission deadline is Sunday, November 20, 2022 at 22:00.
Nov 14: Reading assignment n. 5: read and practice with the updated chapter on Expressions.
Oct 17: Programming assignment n. 5: solve the deletedigits problem and the concatenate string problem. This is a non-graded assignemnt. The exercise will be discussed in class on Monday 24 October.
Oct 10: Programming assignment n. 4: solve the twotimes problem and the sortstrings problem. This is a non-graded assignemnt. The exercise will be discussed in class on Monday 17 October.
Oct 10: Reading assignment n. 4: read and practice with the updated chapter on Pointers, Arrays, and Strings (basics).
Oct 3: Programming assignment n. 3: solve the shellcomments problem and the flipline problem. This is a non-graded assignemnt. The exercise will be discussed in class on Monday 10 October.
Oct 3: Reading assignment n. 3: read and practice with the notes on Defining and Invoking Functions and those on Pointers, Arrays, and Strings (basics).
Sep 26: Programming assignment n. 2: solve the diamond problem. This is a non-graded assignemnt. The exercise will be discussed in class on Monday 3 October.
Sep 26: Reading assignment n. 2: read and practice with the notes on Control Structures in C and C++.
Sep 19: Programming assignment n. 1: solve the wordcount problem. This is a non-graded assignemnt. The exercise will be discussed in class.
Sep 19: Reading assignment n. 1: read and practice with the notes on Getting Started with C and Systems Programming.
Sep 19: Welcome to Systems Programming!
Instructor: Antonio Carzaniga
Assistants: Mangipudi Shamiek, Arnaud Fauconnet, Claudio Milanesi
Lecture schedule: Monday 10:30–12:30, Wednesday 10:30–12:30. See the course weekly schedule or the third-semester Bachelor schedule for details and updates
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:

Useful Links

Additional information is available through the following links and pages.

Lectures and Material

this page is maintained by Antonio Carzaniga and was updated on December 25, 2022