Search for contacts, projects,
courses and publications

Systems Programming

People

Carzaniga A.

Course director

Di Lauro F.

Assistant

Polverino P.

Assistant

Description

The course focuses on the features of the C language and libraries that are particularly useful in programming systems. This includes the memory model, input/output, modularization, its relevant language features, and its relation to the build process. 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.
  • Modularization in C. Object-oriented programming in C.
  • 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. 

Objectives

What is systems programming? In a way it is just programming. But it is also more than that: it means developing programs that interact with other programs or "systems", as opposed to human users. Systems require specific interactions, usually with rigid formats. Systems also have non-trivial structures and architectures, with specific performance characteristics that might be crucially important for the programmer. 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. C and C++ are also very important application languages. This course is a practice-oriented introduction to programming in C and, to a limited extent, C++. The goal is not only to learn how to write good C programs, but also to understand their execution model in depth. This course does not require any previous knowledge of C, although it requires some elementary notions of computer programming.

Teaching mode

In presence

Learning methods

This is a practice-driven course. All topics are introduced and explained through concrete working examples.

Examination information

The evaluation is based on concrete programming problems, possibly with one or two homework assignments, but primarily with exams also consisting of programming exercises.

Education