CSaP

Computer Systems and Programming (2025 - 2026)

Teacher: Danilo Francati – francati [AT] di.uniroma1.it


Class Timetable

Lectures will be delivered in presence.


Office Hours

By appointment.

Students can always use email and/or schedule a webmeeting.


CSAP Google Classroom

A group has been created in order to allow communication, sharing of information, etc.

The name of the Google Classroom is Computer Systems and Programming

Students are invited to join in order to receive last-minute communications and access the folder where code and slides will be posted. The material can be accessed only with the student institutional email lastname.studentID@studenti.uniroma1.it.


Objectives

The course is mainly focused on system programming for Unix/Linux systems.

The objective is to make students able to understand, write and modify programs interfacing with the Linux operating system and its kernel source code.
More precisely, we expect the students to acquire knowledge of:

  1. the C language and the tools normally used in the development environment (compiler, preprocessor, shell, etc.)
  2. the fundamental functions of the operating system and its main modules (Scheduler, Virtual Memory Manager, Filesystem, …)
  3. the main system primitives for the creation and synchronization of processes, exchange of messages and information (this is the core of the course)
  4. basic methods for network programming (sockets)

At the end, the students are provided by operating system and integrate them correctly into the code:


Prerequisites

Formal pre-requisites for the course are the same as the prerequisites for enrollment to the Master in Cybersecurity
(see requirements).

Our MSc takes for granted the subjects and contents covered in the Italian Bachelor’s Degree in Computer Science or Computer Engineering.
Our MSc offers an in-depth technical study aimed at training experts in Cybersecurity. Therefore, a high technological core is essential, regardless of the orientation chosen within your Study Plan.

In practice, you will need (at least):

Each student should have access to a Linux system (a VM is ok), including the compiler, development tools (make, debugger, etc.) and man pages.
Ubuntu 22.04 (or later) is the recommended platform.
To install Ubuntu using a VM see this link (virtualbox) or this link (UTM. Recommended for MACs).

Working natively on other devices, such as Mac or Windows laptop, while possible, is not recommended due to subtle differences in the compiler suite and OS interface.


Project (Final Examination)

The project is an individual work item, which must include appropriate documentation (Use cases, functional and non functional requirements, etc.).

Each academic year will have a different project.
As an example, this was the Project for AA2021-2022.

The code and the docs for the project must be sent by email a few days (3-5) before the session where it will be reviewed/discussed.

The project must constitute an original creation, therefore it is not possible to share parts of the code or copy contents from other sources.

However, discussions between students, exchanges of ideas, use of mailing lists, chats, and in general everything that helps the student to learn are legitimate and appreciated (in case of doubts regarding which forms of collaboration are considered legitimate or not, it is better to explicitly ask for clarification).

The project consists of a C language program that satisfies a set of specified requirements, using the library calls that are part of the course program. The use of other calls is generally not accepted. If in doubt, ask the teacher.

The project code must correctly compile and execute in the required software environment (compiler version, kernel version, clib version).

The final grade will be based on the quality of the code, the completeness and clarity of the documentation, and the oral discussion of the project.

Evaluation criteria


Program

These are the topics that are planned to be covered during the course.
Of course mileage may vary, depending on time available, etc.