Systems Programming
People
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
- Bachelor of Science in Informatics, Lecture, 2nd year