PORTALE DELLA DIDATTICA

PORTALE DELLA DIDATTICA

PORTALE DELLA DIDATTICA

Elenco notifiche



Programmazione di sistema

01GRSYG

A.A. 2026/27

2026/27

Programmazione di sistema (Progetto di sistemi operativi)

L'insegnamento si articola in due parti (moduli), di cui questa affronta gli aspetti interni di un sistema operativo, illustrandone l'architettura e la progettazione dei sotto-sistemi, mentre nella parte API programming si trattano le interfacce di programmazione per l'utilizzo delle risorse di sistema e per la programmazione concorrente. La parte "progettazione di sistemi operativi" affronta i moduli di un sistema operativo, e si approfondiscono i concetti e le tecniche di gestione efficiente delle risorse di un sistema di elaborazione (processori, memorie, dispositivi periferici, file, ecc.).

Programmazione di sistema (Progetto di software di sistema)

L'insegnamento si propone di fornire agli studenti le competenze necessarie per progettare e sviluppare software di sistema robusto, sicuro ed efficiente, con particolare riferimento al linguaggio Rust come strumento paradigmatico della programmazione di sistema moderna. Partendo dalla comprensione approfondita dell'architettura della memoria e dei meccanismi di esecuzione dei programmi, il corso guida gli studenti verso la padronanza dei concetti fondamentali di possesso, prestito e tempo di vita dei riferimenti alla memoria, che costituiscono la risposta strutturale di Rust alle vulnerabilità tipiche di C e C++. Vengono inoltre sviluppate competenze nella progettazione di strutture dati composite, nella gestione degli errori, nella modularità del codice e nel polimorfismo tramite tratti. La seconda parte del corso affronta le sfide della programmazione concorrente e asincrona, preparando gli studenti a realizzare sistemi in grado di sfruttare appieno le architetture multicore e di gestire efficientemente operazioni di I/O non bloccante. Tali competenze rispondono ai profili professionali di ingegnere del software di sistema, sviluppatore di infrastrutture e middleware, e progettista di applicazioni ad alte prestazioni, figure di crescente rilevanza nel mercato del lavoro in ambito industriale, embedded e cloud.

Programmazione di sistema (Progetto di sistemi operativi)

This course is organised in two parts (modules): this part ("OS internals") introduces the architecture and the design principles of an operating system, whereas the "API programming" part describes programming interfaces for system programming and resource management, as well as concurrent programming. The "OS internals" part deals with internal operating system modules, together with the main techniques and strategies for efficient management of resources such as processors, memories, peripheral devices, files, etc.

Programmazione di sistema (Progetto di software di sistema)

The course aims to provide students with the skills needed to design and develop robust, secure, and efficient systems software, with particular reference to the Rust programming language as a paradigmatic tool for modern systems programming. Starting from an in-depth understanding of memory architecture and program execution mechanisms, the course guides students toward mastery of the fundamental concepts of memory reference ownership, borrowing, and lifetimes, which represent Rust's structural answer to the vulnerabilities typically found in C and C++. Students also develop competencies in the design of composite data structures, error handling, code modularization, and polymorphism through traits. The second part of the course addresses the challenges of concurrent and asynchronous programming, preparing students to build systems capable of fully leveraging multicore architectures and efficiently managing non-blocking I/O operations. These competencies align with the professional profiles of systems software engineer, infrastructure and middleware developer, and high-performance application designer, roles of growing relevance in the job market across industrial, embedded, and cloud computing domains.

Programmazione di sistema (Progetto di sistemi operativi)

- Conoscenza dell'architettura dei sistemi operativi come insieme di gestori di risorse - Conoscenza dei moduli del nucleo del sistema operativo, e capacità di implementare nuovi moduli - Capacità di usare system call per la creazione, sincronizzazione e terminazione di processi e thread - Conoscenza del meccanismo della memoria virtuale - Capacità di analizzare e implementare algoritmi di gestione della memoria virtuale - Conoscenza delle tecniche di gestione dei dispositivi periferici - Capacità di analizzare ed implementare device drivers - Conoscenza dell'organizzazione dei moderni file system e capacità di gestione degli stessi

Programmazione di sistema (Progetto di software di sistema)

Al termine del corso, lo/la studente dovrà conoscere i principi fondamentali dell'organizzazione della memoria nei programmi di sistema, il modello di possesso, prestito e tempo di vita di Rust e le garanzie che esso fornisce in termini di sicurezza della memoria, i meccanismi di polimorfismo basati su tratti e programmazione generica, le principali strutture dati della libreria standard e le loro proprietà computazionali, e i modelli di concorrenza e programmazione asincrona supportati dal linguaggio. Lo/la studente dovrà essere in grado di progettare e implementare programmi Rust completi e modulari, applicando le regole del sistema dei tipi per garantire la correttezza della gestione della memoria; di utilizzare i meccanismi di gestione degli errori, i tratti e le strutture dati generiche per sviluppare componenti riusabili; di scrivere test automatici per verificare la correttezza del codice prodotto; e di realizzare applicazioni concorrenti e asincrone corrette ed efficienti mediante i costrutti e le librerie offerti dall'ecosistema Rust. Il corso contribuisce a sviluppare la capacità di affrontare con autonomia e senso critico problemi complessi di progettazione del software di sistema, valutando consapevolmente i compromessi tra correttezza, prestazioni e manutenibilità.

Programmazione di sistema (Progetto di sistemi operativi)

Part I - Knowledge of the operating systems architecture as a collection of resource managers - Knowledge of operating system kernel modules, and new module implementation skills - Skill to use system calls for creation, synchronization and termination of processes and threads - Knowledge of virtual memory mechanisms - Skill to understand and implement virtual memory management algorithms - Knowledge of peripheral device management techniques - Skill to understand and implement device drivers Part II - Knowledge of modern file system organizations and skill to manage file systems and file locking - Knowledge of system programming APIs (system calls) - Skill to understand and implement programs based on system calls - Skill to understand and implement programs with advanced file system interactions, such as sequential, random and/or shared file access, and directory manipulation - Skill to understand and implement reliable/robust programs exploiting exception and signal handling - Skill to understand and implement programs with advanced memory management tachniques, such as dynamic allocation, memory mapping of files, dynamic libraries - Skill to understand and implement concurrent programs based on processes/threads - Skill to understand and implement concurrent programs exploiging - advanced synchronization, message passing, and data sharing techniques

Programmazione di sistema (Progetto di software di sistema)

Al termine del corso, lo/la studente dovrà conoscere i principi fondamentali dell'organizzazione della memoria nei programmi di sistema, il modello di possesso, prestito e tempo di vita di Rust e le garanzie che esso fornisce in termini di sicurezza della memoria, i meccanismi di polimorfismo basati su tratti e programmazione generica, le principali strutture dati della libreria standard e le loro proprietà computazionali, e i modelli di concorrenza e programmazione asincrona supportati dal linguaggio. Lo/la studente dovrà essere in grado di progettare e implementare programmi Rust completi e modulari, applicando le regole del sistema dei tipi per garantire la correttezza della gestione della memoria; di utilizzare i meccanismi di gestione degli errori, i tratti e le strutture dati generiche per sviluppare componenti riusabili; di scrivere test automatici per verificare la correttezza del codice prodotto; e di realizzare applicazioni concorrenti e asincrone corrette ed efficienti mediante i costrutti e le librerie offerti dall'ecosistema Rust. Il corso contribuisce a sviluppare la capacità di affrontare con autonomia e senso critico problemi complessi di progettazione del software di sistema, valutando consapevolmente i compromessi tra correttezza, prestazioni e manutenibilità.

Programmazione di sistema (Progetto di sistemi operativi)

- Conoscenza dell'architettura dei sistemi di elaborazione: in particolare struttura del processore e organizzazione della memoria - Conoscenza del meccanismo delle interruzioni e dei fondamenti di un linguaggio assembler - Conoscenza dei fondamentali tipi di strutture dati ed algoritmi - Capacità di sviluppare programmi in linguaggio C - Conoscenza delle tecniche di base per la programmazione concorrente - Conoscenza dell'architettura dei sistemi operativi e delle componentoi di un sistema operativo per gestire la CPU e i processi utente. Tali prerequisiti sono tipicamente soddisfatti dal completamento degli insegnamenti di Tecniche di Programmazione, Algoritmi e Strutture Dati, Calcolatori, Sistemi Operativi, Reti di Calcolatori.

Programmazione di sistema (Progetto di software di sistema)

Il corso si fonda su conoscenze e competenze che si assumono già acquisite dagli studenti al momento dell'iscrizione. Dal punto di vista della programmazione, è richiesta una conoscenza approfondita del linguaggio C, comprensiva della gestione manuale della memoria tramite puntatori, nonché la padronanza dei principali algoritmi (ricerca, ordinamento, inserimento) e delle strutture dati fondamentali (stringhe, liste, insiemi, mappe). Gli studenti dovranno inoltre saper leggere e scrivere file, gestendo conversioni di formato, segmentazione del testo e codifica di dati binari. Dal punto di vista architetturale, sono richieste conoscenze di base sull'organizzazione hardware di un elaboratore (CPU, memoria, bus, periferiche, interrupt, DMA) e sui principi fondamentali dei sistemi operativi. Trasversalmente, il corso richiede capacità di analisi e pensiero critico, in particolare la capacità di comprendere e formalizzare i requisiti di un problema, di schematizzarlo tramite opportuni diagrammi (entità/relazioni, sequenze di eventi, gerarchie), e una solida attitudine alla risoluzione di problemi complessi mediante l'elaborazione e il raffinamento progressivo di modelli mentali. Tali prerequisiti sono tipicamente soddisfatti dal completamento degli insegnamenti di Fondamenti di Informatica, Algoritmi e Strutture Dati e Architetture di Elaborazione.

Programmazione di sistema (Progetto di sistemi operativi)

- Knowledge of a computer system architecture, with a specific emphasys on the structure of the CPU and memory subsystem - Knowledge of the interrupt mechanism and basics of an assembly language - Knowledge of the foundations of data structures and algorithms - Good programming skill in C language - Knowledge of base concurrent programming techniques

Programmazione di sistema (Progetto di software di sistema)

Il corso si fonda su conoscenze e competenze che si assumono già acquisite dallo/dalla studente al momento dell'iscrizione. Dal punto di vista della programmazione, è richiesta una conoscenza approfondita del linguaggio C, comprensiva della gestione manuale della memoria tramite puntatori, nonché la padronanza dei principali algoritmi (ricerca, ordinamento, inserimento) e delle strutture dati fondamentali (stringhe, liste, insiemi, mappe). Lo/la studente dovrà inoltre saper leggere e scrivere file, gestendo conversioni di formato, segmentazione del testo e codifica di dati binari. Dal punto di vista architetturale, sono richieste conoscenze di base sull'organizzazione hardware di un elaboratore (CPU, memoria, bus, periferiche, interrupt, DMA) e sui principi fondamentali dei sistemi operativi. Trasversalmente, il corso richiede capacità di analisi e pensiero critico, in particolare la capacità di comprendere e formalizzare i requisiti di un problema, di schematizzarlo tramite opportuni diagrammi (entità/relazioni, sequenze di eventi, gerarchie), e una solida attitudine alla risoluzione di problemi complessi mediante l'elaborazione e il raffinamento progressivo di modelli mentali. Tali prerequisiti sono tipicamente soddisfatti dal completamento degli insegnamenti di Fondamenti di Informatica, Algoritmi e Strutture Dati e Architetture di Elaborazione.

Programmazione di sistema (Progetto di sistemi operativi)

Richiami di Architettura del Sistema Operativo (3 ore) - moduli di gestione delle risorse di un sistema di elaborazione - gestione di processi e thread (richiami) Gestione della memoria (9 ore) - indirizzi fisici e logici, MMU, TLB - paginazione - memoria virtuale e paginazione a richiesta Gestione delle unità periferiche (3 ore) - driver e gestione dispositivi - gestione degli accessi a disco Gestione dei file (6 ore) - organizzazione di un file system, - organizzazione e operazioni su file e direttori Sistema operativo didattico OS161 (9 ore) - architettura del sistema, struttura dei sogenti, compilazione, esecuzione, debug - creazione si semplici system calls per input/output - gestione di thread e processi user - implementazione di primitive di sincronizzazione - implementazione di semplice supporto per I/O su file - gestione di semplici operazioni di IO per dispositivo a caratteri

Programmazione di sistema (Progetto di software di sistema)

Il corso si articola nei seguenti blocchi tematici: - Fondamenti della programmazione di sistema (0.5 cfu) - Possesso e sicurezza degli accessi in memoria (0.75 cfu) - Tipi composti, errori e modularità (0.75 cfu) - Polimorfismo e testing (0.75 cfu) - Strutture dati avanzate (0.75 cfu) - Programmazione concorrente e asincrona (1.5 cfu)

Programmazione di sistema (Progetto di sistemi operativi)

Part I Review of Operating System Architecture (3 hours) - modules for the management of the resources of a computer system - process and thread management synchronization (recalls) Memory management (9 hours) - phisical and logical address spaces, MMU, TLB - Paging - Virtual memory and demand paging Peripheral Device management (3 hours) - drivers and IO device management - disk management File system management (6 hours) - file system organization and protection - management an operations on files and directories Teaching operating system OS161 (9 hours) - system level architecture, source files, compilation, execution, debug - implementation of simple system calls for standard I/O - thread and user process management - implementation of synchronization primitives - implementation of simple support for file I/O - device driver for a character device Part II Introduction to the C++ language and to concurrent programming in C11 (12 hours) - classes, inheritance and polymorphism - exception handling and runtime support - generic programming - concurrent programming Win32 and Linux system programming and concurrent programming: (12 hours) - file and directory management - process and thread management, - synchronization - exception and signal handling - memory management - synchronous and asynchronous I/O - interprocess communication Examoles of Win32 and/or Linux Application development: (5 hours) - reactive programming - graphical user interface design and implementation and user interaction handling Virtual Machines: (3 hours) - general principles - the .NET framework

Programmazione di sistema (Progetto di software di sistema)

Il corso si articola nei seguenti blocchi tematici: - Fondamenti della programmazione di sistema (0.5 cfu) - Possesso e sicurezza degli accessi in memoria (0.75 cfu) - Tipi composti, errori e modularità (0.75 cfu) - Polimorfismo e testing (0.75 cfu) - Strutture dati avanzate (0.75 cfu) - Programmazione concorrente e asincrona (1.5 cfu)

Programmazione di sistema (Progetto di sistemi operativi)

Programmazione di sistema (Progetto di software di sistema)

Programmazione di sistema (Progetto di sistemi operativi)

Programmazione di sistema (Progetto di software di sistema)

Programmazione di sistema (Progetto di sistemi operativi)

A) Lezioni/esercitazioni in aula (32 ore) B) Esercitazioni in laboratorio (18 ore) - Modificare e installare il kernel OS161 (sistema operativo didattico ispirato a Unix) - Il bootstrap di un Sistema Operativo - Creare una system call - Supporto per gestione di processi e thread - Primitive di sincronizzazione - Creazione e terminazione di un processo - Supporto per file system e struttura dei device driver C) Progetto: opzionale, realizzato in gruppi di lavoro, su approfondimenti relativi a una delle due parti del corso (progetto di sistemi operativi oppure API programming)

Programmazione di sistema (Progetto di software di sistema)

L'insegnamento si articola in 50 ore complessive, suddivise in 35 ore di lezione frontale e 15 ore di esercitazioni strutturate. Le lezioni frontali hanno lo scopo di introdurre e approfondire i concetti teorici e i costrutti del linguaggio, illustrandone la motivazione, la semantica e le implicazioni pratiche attraverso esempi di codice progressivamente più articolati. Le esercitazioni strutturate, distribuite lungo l'intero arco del corso, hanno una triplice finalità: consolidare e verificare la comprensione dei contenuti esposti nelle lezioni precedenti, approfondire temi specifici attraverso l'analisi di casi pratici e la discussione di soluzioni alternative, e confrontarsi con problemi di complessità crescente che richiedono l'integrazione di più competenze acquisite nel corso.

Programmazione di sistema (Progetto di sistemi operativi)

A) Class lectures (64 hours) B) Laboratory practice (36 hours) Part I - Customizing and installing the OS161 (Unix-like teaching operating system) kernel - OS booting - Writing a system call - OS support for process and thread management - Synchronization primitives - creating and terminating a user process - Support for file system management and structure of a device driver Part II (system call interface and concurrent programming) - System calls for file system interface, file and directory management - Concurrent programming based on thread and processes - Synchronization primitives and concurrent programming templates - Programs with exception and/or signal handling - Programs with advanced dynamic memory management, memory mapping of files, dynamic libraries, inter-process communication C) Course project: optional, achieved in working groups, on advanced topics from either of the two partr of the course

Programmazione di sistema (Progetto di software di sistema)

L'insegnamento si articola in 50 ore complessive, suddivise in 35 ore di lezione frontale e 15 ore di esercitazioni strutturate. Le lezioni frontali hanno lo scopo di introdurre e approfondire i concetti teorici e i costrutti del linguaggio, illustrandone la motivazione, la semantica e le implicazioni pratiche attraverso esempi ed esempi di codice progressivamente più articolati. Le esercitazioni strutturate, distribuite lungo l'intero arco del corso, hanno una triplice finalità: consolidare e verificare la comprensione dei contenuti esposti nelle lezioni precedenti, approfondire temi specifici attraverso l'analisi di casi pratici e la discussione di soluzioni alternative, e confrontarsi con problemi di complessità crescente che richiedono l'integrazione di più competenze acquisite nel corso.

Programmazione di sistema (Progetto di sistemi operativi)

Silberschatz, Galvin, Gagne: 'Operating System Concepts', 7th Edition, John Wiley & son, 2003, ISBN: 0-471-69466-5 - Materiale didattico a disposizione su Web - Trasparenze proiettate in aula - Esercizi e soluzioni

Programmazione di sistema (Progetto di software di sistema)

Steve Klabnik, Carol Nichols, The Rust Programming Language, 2nd edition, No Starch Press, 2023, ISBN 978-1-7185-0313-1 Mara Bos, Rust Atomics and Locks: Low-Level Concurrency in Practice, O'Reilly Media, 2023, ISBN 978-1-098-11944-7

Programmazione di sistema (Progetto di sistemi operativi)

Silberschatz, Galvin, Gagne: 'Operating System Concepts', 7th Edition, John Wiley & son, 2003, ISBN: 0-471-69466-5 W.R. Stevens "Advanced programming in the UNIX Environment", Addison-Wesley Publishing Company Johnson M. Hart, 'Windows System Programming', Addison-Wesley Publishing Company - teaching resouses available on Web - class slides - Exercises and solutions

Programmazione di sistema (Progetto di software di sistema)

Steve Klabnik, Carol Nichols, The Rust Programming Language, 2nd edition, No Starch Press, 2023, ISBN 978-1-7185-0313-1 Mara Bos, Rust Atomics and Locks: Low-Level Concurrency in Practice, O'Reilly Media, 2023, ISBN 978-1-098-11944-7

Programmazione di sistema (Progetto di sistemi operativi)

Slides; Libro di testo; Esercizi risolti; Esercitazioni di laboratorio; Esercitazioni di laboratorio risolte; Video lezioni tratte da anni precedenti; Materiale multimediale ; Strumenti di auto-valutazione;

Programmazione di sistema (Progetto di software di sistema)

Slides; Esercitazioni di laboratorio; Video lezioni dell’anno corrente;

Programmazione di sistema (Progetto di sistemi operativi)

Lecture slides; Text book; Exercise with solutions ; Lab exercises; Lab exercises with solutions; Video lectures (previous years); Multimedia materials; Self-assessment tools;

Programmazione di sistema (Progetto di software di sistema)

Lecture slides; Lab exercises; Video lectures (current year);

Programmazione di sistema (Progetto di sistemi operativi)

Modalita di esame: Prova scritta (in aula); Elaborato progettuale in gruppo; Prova scritta in aula tramite PC con l'utilizzo della piattaforma di ateneo;

Programmazione di sistema (Progetto di software di sistema)

Modalita di esame: Prova scritta in aula tramite PC con l'utilizzo della piattaforma di ateneo;

Programmazione di sistema (Progetto di sistemi operativi)

Exam: Written test; Group project; Computer-based written test in class using POLITO platform;

Programmazione di sistema (Progetto di software di sistema)

Exam: Computer-based written test in class using POLITO platform;

...

Programmazione di sistema (Progetto di sistemi operativi)

L'esame, per il modulo "progettazione di sistemi operativi", è costituito da una prova scritta, della durata complessiva di 80 minuti, con esercizi e/o domande sugli argomenti svolti a lezione Le domande si propongono di accertare tutti i relativi obiettivi formativi, sia in termini di conoscenze che di capacità acquisite. L'esame viene svolto su PC con l'utilizzo della piattaforma di ateneo. Nel caso di problemi tecnici si passa all'esame scritto su carta, con schema e contenuti immutati. Durante lo svolgimento dell’esame non è possibile consultare testi o appunti. Regole comuni ai due moduli. Gli esami delle due parti possono essere sostenuti in appelli diversi, all'interno di una finestra temporale di 4 appelli, che corrispondono a circa un anno solare. Il punteggio finale si ottiene sommando quello delle due parti, che ricevono ognuna un punteggio massimo di 15. Gli scritti possono quindi ottenere un punteggio massimo di 30. L'esame non è superato se il punteggio relativo ad una delle due parti (moduli) è inferiore a 7, oppure se la somma non raggiunge 18. Allo scritto si aggiunge un progetto (lavoro di gruppo) facoltativo su uno dei due moduli, con punteggio fino a un massimo di 6. Un voto complessivo maggiore o uguale a 31 porta a 30 con Lode. Il progetto accerta prevalentemente gli obiettivi formativi in termini di capacità acquisite. Modalità e scadenze per i progetti sono indicate dai docenti.

Programmazione di sistema (Progetto di software di sistema)

La prova è scritta e si svolge in presenza su PC, con l'utilizzo della piattaforma di ateneo. La durata della prova è di 90 minuti. Non è consentito consultare libri, appunti o materiale didattico di alcun tipo, né utilizzare strumenti di intelligenza artificiale o risorse esterne alla piattaforma. È consentito l'uso dell'ambiente di sviluppo Rust installato sulla macchina, limitatamente alla verifica della compilabilità del codice prodotto. La prova è composta da tre tipologie di esercizi, volti ad accertare progressivamente i diversi livelli di apprendimento attesi: - Comprensione e analisi del codice: agli studenti viene presentato un frammento di codice Rust e viene chiesto di descriverne il comportamento, di identificare eventuali errori di compilazione o di esecuzione, di spiegarne le cause e di motivare le scelte progettuali adottate. Questa tipologia di esercizi accerta la conoscenza del modello di possesso, del sistema dei tipi, dei meccanismi di concorrenza e degli altri costrutti del linguaggio. - Correzione e miglioramento del codice: agli studenti viene presentato un frammento di codice Rust contenente uno o più errori o inefficienze e viene chiesto di correggerlo, giustificando le modifiche apportate. Questa tipologia accerta la capacità di applicare le regole del linguaggio per garantire la correttezza della gestione della memoria, la robustezza della gestione degli errori e la sicurezza degli accessi concorrenti. - Progettazione e implementazione: agli studenti viene assegnato un problema di programmazione di sistema e viene chiesto di progettare e implementare una soluzione in Rust, rispettando i requisiti funzionali indicati e applicando i costrutti più appropriati tra quelli studiati nel corso. Questa tipologia accerta la capacità di integrare le competenze acquisite per affrontare problemi di complessità realistica.

Gli studenti e le studentesse con disabilita o con Disturbi Specifici di Apprendimento (DSA), oltre alla segnalazione tramite procedura informatizzata, sono invitati a comunicare anche direttamente al/la docente titolare dell'insegnamento, con un preavviso non inferiore ad una settimana dall'avvio della sessione d'esame, gli strumenti compensativi concordati con l'Unita Special Needs, al fine di permettere al/la docente la declinazione piu idonea in riferimento alla specifica tipologia di esame.

Programmazione di sistema (Progetto di sistemi operativi)

Exam: Written test; Group project; Computer-based written test in class using POLITO platform;

Programmazione di sistema (Progetto di software di sistema)

Exam: Computer-based written test in class using POLITO platform;

Programmazione di sistema (Progetto di sistemi operativi)

The exam consists in a written (150 min) part with exercises/questions on theoretical and practical aspects of the course. The exam is split in two parts (that can be taken at different dates): - operating system internals - system calls and concurrent programming Both parts of the exam verify the related expected learning outcomes in terms of knowledge as well as skills. A sufficient grade is required in both parts. The final grade is obtained by summing the grades of the two parts (maximun grade for each part: 13, maximun total grade: 26). A final optional (group) project, on either of the two course parts, can ad an extra (up to 6) grade. A final total grade of 31 or 32 is converted to 30 cum laude. The optional project mainly verifies the expected learning outcomes in terms of skills.

Programmazione di sistema (Progetto di software di sistema)

La prova è scritta e si svolge in presenza su PC, con l'utilizzo della piattaforma di ateneo. La durata della prova è di 90 minuti. Non è consentito consultare libri, appunti o materiale didattico di alcun tipo, né utilizzare strumenti di intelligenza artificiale o risorse esterne alla piattaforma. È consentito l'uso dell'ambiente di sviluppo Rust installato sulla macchina, limitatamente alla verifica della compilabilità del codice prodotto. La prova è composta da tre tipologie di esercizi, volti ad accertare progressivamente i diversi livelli di apprendimento attesi: - Comprensione e analisi del codice: allo/alla studente viene presentato un frammento di codice Rust e viene chiesto di descriverne il comportamento, di identificare eventuali errori di compilazione o di esecuzione, di spiegarne le cause e di motivare le scelte progettuali adottate. Questa tipologia di esercizi accerta la conoscenza del modello di possesso, del sistema dei tipi, dei meccanismi di concorrenza e degli altri costrutti del linguaggio. - Correzione e miglioramento del codice: allo/alla studente viene presentato un frammento di codice Rust contenente uno o più errori o inefficienze e viene chiesto di correggerlo, giustificando le modifiche apportate. Questa tipologia accerta la capacità di applicare le regole del linguaggio per garantire la correttezza della gestione della memoria, la robustezza della gestione degli errori e la sicurezza degli accessi concorrenti. - Progettazione e implementazione: allo/alla studente viene assegnato un problema di programmazione di sistema e viene chiesto di progettare e implementare una soluzione in Rust, rispettando i requisiti funzionali indicati e applicando i costrutti più appropriati tra quelli studiati nel corso. Questa tipologia accerta la capacità di integrare le competenze acquisite per affrontare problemi di complessità realistica.

In addition to the message sent by the online system, students with disabilities or Specific Learning Disorders (SLD) are invited to directly inform the professor in charge of the course about the special arrangements for the exam that have been agreed with the Special Needs Unit. The professor has to be informed at least one week before the beginning of the examination session in order to provide students with the most suitable arrangements for each specific type of exam.
Esporta Word