Objectives
General Objectives
Main objective of the course is to provide the basics of system programming.
Specific Objectives
Students will be able to autonomously develop programs able to interact with the operating system and exploit its services.
Knowledge and Understanding
-) Knowledge of the C programming language and of the tools normally available in the development environment (compiler, preprocessor, debugger, make, etc.).
-) Knowledge of the main functions of an operating system and its fundamental components (Scheduler, Virtual Memory Manager, Filesystem .. )
-) Knowledge of the most important primitives and interfaces in order to create and synchronize processes and threads, exchange messages and signals.
-) Knowledge of the socket framework and its API.
Applying knowledge and understanding:
-) How invoke system primitives and correctly integrate system calls in applications
-) How select the most appropriate frameworks and paradigms, depending on application requirements and runtime characteristics.
Autonomy of Judgement
Students will be able to assess the complexity and the implementation criteria of specific applications
Communication Skills
Students will be able to describe how their applications use the system call API and explain the reasons behind their choices.
Next Study Abilities
Students will be able to further develop their skills examining, with more details, the architecture and the programming interface of the operating system.
Channels
NESSUNA CANALIZZAZIONE
GIORGIO RICHELLI Teacher profile
Programme
Programming environment: compiler, make & makefiles, gdb debugger
Recap of the C programming language: variables, costants, operators, expressions, control instructions, functions, pointers, arrays, structures & unions, preprocessor directives
Operating system basics (Linux): processes, filesystem, inter-process communication primitives (signals, pipes, semaphores, shared memory)
Thread programming: pthread management, mutual exclusion, synchronization
Network programming: sockets, raw sockets, sniffers
Software vulnerabilities: buffer overflows, arc injection, file infection
Adopted texts
Daniel P. Bovet, Marco Cesati: Understanding the Linux Kernel
Brian Kernighan, Dennis Ritchie: The C Programming Language
K.C. Wang: Systems Programming in Unix-Linux
Prerequisites
Basic knowledge of the C programming language and of the Linux (Unix) Operating System
Exam modes
The evaluations will be carried out, during the course, through tests: quizzes on the C programming language and short C programs, developed by the students in the classroom.
At the end of the course, the students will be able to choose to accept the result scored with these tests, and verbalize it (perhaps after an oral discussion).
As an alternative, or if the result of the tests is not deemed as acceptable, students should develop a complete individual project, written in C, on topics pertaining the arguments seen during the course.
Exam reservation date start | Exam reservation date end | Exam date |
---|---|---|
28/12/2020 | 14/01/2021 | 15/01/2021 |
28/12/2020 | 11/02/2021 | 12/02/2021 |
08/03/2021 | 14/04/2021 | 16/04/2021 |
27/05/2021 | 17/06/2021 | 18/06/2021 |
24/06/2021 | 14/07/2021 | 16/07/2021 |
23/08/2021 | 09/09/2021 | 10/09/2021 |
27/09/2021 | 27/10/2021 | 29/10/2021 |
- Academic year: 2020/2021
- Curriculum: Curriculum unico
- Year: First year
- Semester: First semester
- SSD: INF/01
- CFU: 6
- Attività formative affini ed integrative
- Ambito disciplinare: Attività formative affini o integrative
- Exercise (Hours): 24
- Lecture (Hours): 36
- CFU: 6
- SSD: INF/01