Sistemi Operativi (9 CFU)
Corso di Laurea in Ingegneria Informatica
Università di Roma Tor Vergata
AA. 2024/2025
Docente: Francesco Quaglia
AVVISI
12/3/2025 - I primi due appelli d'esame (sessione estiva) si svolgeranno secondo il seguente calendario e le seguenti modalita':
- Primo appello: Prova scritta il giorno 16/6/2025 - Prova di programmazione il giorno 17/6/2025
- Secondo appello: Prova scritta il giorno 14/7/2025 - Prova di programmazione il giorno 16/7/2025
2/3/2025 - Per l'AA 2024/2025 il tutoraggio del corso verra' svolto dall'Ing. Pasquale Caporaso. Il tutoraggio avra' luogo ogni lunedi alle ore 9:30 in aula A3, a partire da lunedi' 10/3/2025. Per il materiale relativo al tutoraggio ci si puo' riferire a questo link
26/2/2025 - 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.
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 Microsoft Learn
- 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. 2024-2025
(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 IMPORTANTE: le slides non sono un libro di testo, sono solo il canovaccio per lo svolgimento delle lezioni)
Esempi di precedenti prove d'esame