This exam is present in the following Optional Group

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 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
Course sheet
  • Academic year: 2020/2021
  • Curriculum: Curriculum unico
  • Year: First year
  • Semester: First semester
  • SSD: INF/01
  • CFU: 6
Activities
  • Attività formative affini ed integrative
  • Ambito disciplinare: Attività formative affini o integrative
  • Exercise (Hours): 24
  • Lecture (Hours): 36
  • CFU: 6
  • SSD: INF/01