Computer Systems and Programming (2023 - 2024)

Teacher: *Francesco Pedulla' - francesco.pedulla@uniroma1.it

NEWS

March 15ht 2024: the extra exam session will take place on March 21st in room G0 at 2pm.

February 22nd 2024: the project specifications for the March session are the same as February. Deadline for the delivery of the project: midnight between Friday and Saturday of the week before the exam. Exam date TBD.

February 9th 2024: the February exam session will start on February 22nd at 2pm instead of 9am.

January 14th, 2024: just published the specifications for the February project. See the attached file at the bottom of the page.

December 22nd, 2023: exam enrollment open (january session).

December 17th, 2023: the OPIS code for the course is MES29B85.

December 13th, 2023: just published the Midterm results. See attached file at the bottom of the page.

December 6th, 2023: confirm that the C midterm test is scheduled on december 11th at 8:00am (room B7). Deadline to enroll (email to giorgio.richelli@gmail.com): december 6th 24:00.

December 4th, 2023: just published the specifications for the January project. See the attached file at the bottom of the page.

Class Timetable

  • Monday h.08:00/10:00- Classroom B7
  • Tuesday h.14:00/17:00 - Classroom Alfa
Lectures will be delivered in presence.

Office Hours

By previous appointment, before or (even without appointment) after the lessons. Students can always contact me via email.

Slides

All slides are located on gdrive and accessible to anybody. They are updated regularly and available at least one day before each lesson. To get access, please contact me via email or before/after the lesson.

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, debugger, make, 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. primitives for network programming (sockets)
and be able to:
  1. use the primitives provided by the operating system and integrate them correctly into the code.
  2. choose the most suitable OS component and functions, based on the needs of the applications and their execution mode.
  3. determine the complexity and how to implement a system application.
  4. describe the interaction of an application with the operating system and explain the reasons behind the choices.
  5. continue learning by examining, in detail, the architecture and programming interface of the operating system.

Prerequisites

Formal pre-requisites for the course are the same as the prerequisites for enrollment to the Master in Cybersecurity (see https://cybersecurity.uniroma1.it/admission#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, an high technological core is essential, regardless of the orientation chosen within your Study Plan.

In practice, you will need (at least):

  1. mastery of one (preferably more) programming language(s)
  2. understanding of computer architecture and operating system principles
  3. understanding of computer network protocols (preferably TCP/IP).
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 is the recommended platform.

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

Exams

In order to pass the exam you need to:

  1. Pass the midterm test on C. If you don’t pass it, the oral exam will also include questions on the C programming language.
  2. Present a project: to be developed on your PC at home on Ubuntu 22.04 (if you don’t have it, you can install it in a VM using VirtualBox).
  3. Pass the oral test: to be taken on the exam date, discussing the project.
  4. Both midterm exam and the project shall be carried out individually.
Final score will be a weighted sum of midterm test (35%) and project (65%). Students can improve (or worsen!) their score by voluntarily answering more questions on the course content during the oral test.

Write/contact me for any doubts, information, etc.

Project

MORE DETAILS IN THE SPECIFICATION FILE BELOW!

Once the project has been submitted and a sufficient grade has been obtained, it is mandatory to appear at the immediately following exam session to take the exam. The project must constitute an original creation , therefore it is not possible to share parts of the code or any report, if requested, with other students/groups, or copy contents deriving from other sources.
Discussions between students, exchanges of ideas, the 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 must be submitted according to the deadlines that will be communicated and indicated on this page several weeks beofre the end of the lessones. 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 oral exam consists of a discussion on design choices and software implementation of the project. Taking inspiration from the project work, questions may be asked on various topics that are part of the course program.

The evaluation criteria of the project are:

  1. Prerequisite: the code must correcly compile, link and start on Ubuntu 22.04.1 (gcc version 11.4.0). If it does not, you cannot take the oral exam.
  2. Correctness of the code: main evaluation element that determines (alone!) the passing of the exam.
  3. Error handling: it is an integral part of the correctness of the code!
  4. Modularity and readability of the code: division into functions, comments, function and variable names (sic!), etc...
  5. Quality of documentation: user manual, software architecture, README file, project report.

Midterm

It will cover the C programming language only. It will consist of about 20 questions with multiple answers, to be completed in 60 minutes.

Program

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

  • 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)
  • Network programming: sockets, raw sockets, sniffers

Recommended Readings

  • Daniel P. Bovet, Marco Cesati: Understanding the Linux Kernel
  • Brian Kernighan, Dennis Ritchie: The C Programming Language (2nd Ed.)
  • Richard Stevens: Advanced Programming in the UNIX Environment
  • BW Kernighan, R. Pike : The Practice of Programming
  • M. Mitchell, J. Oldham, A. Samuel: Advanced Linux Programming

Pages from Past AYs

Files

  • 11_PrjSpecs.pdf: Specification file for homework project (January 2024 session)

Course Slides

Topic attachments
I Attachment History Action Size Date Who Comment
PowerPointpptx 01_IntroLinux.pptx r1 manage 560.5 K 2024-01-17 - 06:07 FrancescoPedulla  
PowerPointpptx 02_IntroSyscall.pptx r1 manage 49.9 K 2024-01-17 - 06:07 FrancescoPedulla  
PowerPointpptx 03a_FileIO.pptx r1 manage 179.0 K 2024-01-17 - 06:07 FrancescoPedulla  
PowerPointpptx 03b_Advanced_IO.pptx r1 manage 211.0 K 2024-01-17 - 06:07 FrancescoPedulla  
PDFpdf 11_PrjSpecs.pdf r1 manage 81.0 K 2023-12-04 - 05:45 FrancescoPedulla Specification file for homework project (January 2024 session)
Edit | Attach | Watch | Print version | History: r101 < r100 < r99 < r98 < r97 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r101 - 2024-03-15 - FrancescoPedulla






 
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback