Corso di Laurea in Ingegneria Informatica Università di Roma Tor Vergata AA. 2025/2026
Docente: Francesco Quaglia
AVVISI
27/2/2026 - Questa pagina e' stata pubblicata
Orario delle lezioni
Giorno
Orario
Aula
Lunedì
11:30 - 13:15
Aula A4
Mercoledì
11:30 - 13:15
Aula A4
Giovedì
11:30 - 13:15
Aula A4
Obiettivi del corso
Il corso ha l'obbiettivo di presentare allo studente concetti basici riguardanti la strutturazione dei moderni sistemi operativi, unitamente alle funzionalita' che essi offrono sia all'utenza che agli sviluppatori di applicazioni.
Particolare attenzione verra' dedicata ai supporti che i sistemi operativi offrono per lo sviluppo del software in linguaggio C.
I concetti introdotti verrano calati su due studi di caso, riguardanti la famiglia dei sistemi Unix (Posix) e quella dei sistemi Windows.
Prerequisiti
Conoscenza di base del linguaggio C
Conoscenza di base della tool-chain di compilazione (es. gcc)
Conoscenza dell'architettura di massima di un sistema di calcolo
Nozioni di programmazione e strutturazione del software di livello assembler (ASM)
Modalità d'esame
L'esame richiede il superamento di una prova scritta e di una prova pratica di programmazione in linguaggio C (in tecnologia Posix o Win-API a scelta dello studente) da svolgersi in laboratorio. La prova scritta vale un massimo di 21 punti, con 12 come soglia per la sufficienza. La prova pratica in laboratorio vale un massimo di 11 punti, con 6 come soglia per la sufficienza. Il voto d'esame risultera' pari alla somma dei punteggi conseguiti alle due prove. Per la lode e' richiesto un punteggio complessivo di almeno 31.
Nel caso in cui lo studente consegua la sufficienza solo ad una delle due prove, nell'ambito dello stesso anno accademico egli sara' esonerato dal dover rieseguire la prova in cui e' risultato gia' sufficiente. Potra' quindi (ri)sostenere la prova (scritta o di programmazione) dove non ha riportato la sufficienza ad un appello successivo dello stesso anno accademico.
Sviluppo di una tesina (opzionale)
Allo studente e' data la possibilita' di sviluppare una tesina (un progetto) in linguaggio C, da svolgersi individualmente o in gruppo formato da al piu' 2 persone, che vale fino ad un massimo di ulteriori 5 punti, i quali si sommeranno alla valutazione ottenuta come somma dei punteggi della prova scritta e della prova di programmazione in laboratorio. Si potra' usufruire dei punti addizionali dati dalla tesina solo nel caso in cui si sia gia' conseguita una valutazione di almeno 18 alla prova d'esame.
L'assegnazione della tesina ha validita' per l'anno accademico corrente. La consegna della tesina (se si e' scelto di svilupparla) dovra' quindi avvenire nello stesso anno accademico in cui viene svolta la prova d'esame. Per consegnare la tesina basta richiedere un appuntamento al docente via email.
Seguire questo link per accedere al sistema di assegnazione delle tesine via Web.
Testi consigliati
[T1] Silberschatz et al. - Sistemi Operativi
[T2] Stallings - Operating Systems
[T3] Kernighan & Ritchie - C/ANSI-C
Link utili
Link alla pagina dell'ambiente Microsoft Visual Studio (Express Edition - Now Community) per lo sviluppo di applicazioni software in tecnologia C/Windows (Win-API)
Link alla pagina dell'ambiente VirtualBox per la virtualizzazione delle macchine -
NOTA: per utilizzare correttamente il software di virtualizzazione attivare nel BIOS il relativo supporto hardware (VT-x/AMD-v)
Link per il dowload di una immagine di sistema Linux/Suse/x86-64 (VDI virtual disk) - formato compresso da 2.5 GB - credenziali dell'utente amministratore: username="so" - password="sistemioperativi"
Link alla pagina dell'ambiente Wine per lo sviluppo e l'esecuzione di applicazioni Windows su sistemi Linux/MacOS.
Programma previsto per l'a.a. 2025-2026
(NOTA IMPORTANTE:
per coloro che devono sostenere l'esame da 6CFU le parti del programma in rosso sono escluse sia dalla prova scritta che dalla prova di programmazione in laboratorio)
Introduzione ai sistemi operativi
Richiami sull'organizzazione di un sistema di calcolo
Obiettivi dei sistemi operativi
Sistemi batch uniprogrammati
Sistemi batch multiprogrammati
Sistemi time-sharing
Architettura di massima dei sistemi UNIX/Windows
Ambienti di esecuzione
Aspetti basici sulla sicurezza del software
Processi e thread
Esecuzione e stati di processi
Multiprogrammazione e Swapping
Strutture di controllo di processi
Immagine di un processo
Liste di processi e scheduling
Processi in sistemi UNIX/Windows
Supporti per il multi-threading
Threads in sistemi UNIX/Windows
Scheduling della CPU
Metriche di riferimento
Algorithmi di scheduling classici
Scheduling in sistemi UNIX/Windows
Virtual File System ed I/O
Concetti basici
Metodi di accesso e di allocazione dei file
Implementazione del virtual file system
Gestione dei buffer di I/O
Schedulazione di I/O
Gestione delle utenze e dei permessi di accesso
Concetti basici di crittografia ed autenticazione
Virtual file system ed I/O in sistemi UNIX/Windows
Comunicazione
Pipe
Pipe con nome
Scambio di messaggi
Comunicazione in sistemi UNIX/Windows
Gestione della memoria
Binding degli indirizzi
Partizioni fisse e variabili
Paginazione e segmentazione
Memoria virtuale
Memoria condivisa e file-mapping
Gestione della memoria in sistemi UNIX/Windows
Sincronizzazione
Spinlocks, mutex e semafori
Supporti per la sincronizzazione in sistemi UNIX/Windows
Eventi
Meccanismi di segnalazione e gestione di eventi sincroni ed asincroni
Supporti in sistemi UNIX/Windows
Servizi di sistema per la programmazione di rete
Stack di protocolli di comunicazione
Sockets in sistemi UNIX/Windows
Materiale didattico
(NOTA: le slides non sono un libro di testo, sono solo il canovaccio per le lezioni)