Fornire (1) competenze sulla struttura di un generico sistema operativo moderno, (2) competenze sulla struttura di un sistema operativo Unix con particolare riferimento al sistema Linux, (3) conoscenza delle particolari metodologie usate per risolvere le problematiche tipiche della gestione delle risorse in un sistema operativo moderno, (4) abilità nel usare e una piattaforma Unix a livello utente, (5) abilità nella programmabilità di un sistema Unix (scripting), (6) abilità di base nella programmazione di sistema.
scheda docente materiale didattico
- Panoramica sui sistemi operativi moderni: definizione di sistema operativo, scopi, architettura a strati, kernel/user mode, caratteristiche salienti
- Processi e Thread: dispatching, stati, descrizione e controllo, modelli tipici di sistemi operativi e di uso della memoria nei processi
- Memoria: allocatori di memoria, partitioning, best/first/next fit, buddy algorithm, paging, segmentation, memoria virtuale e sua gestione hardware/software
- Scheduling: a breve medio e lungo termine, algoritmi per cpu scheduling
- I/O e File Management: Disk scheduling, RAID, UNIX File Management, inode, Linux VFS, ext2
- Sincronizzazione: primitive di sincronizzazione, RMW, mutex, semafori
- Introduzione a Linux: comandi di utilizzo frequente (e.g., gestione file e directory), variabili di ambiente, piping, redirection, segnali, espressioni regolari (sed e grep), scripting (bash, awk), linux filesystem management
- Debugger: utilizzo di gdb stepping, breakpoints, watching, backtrace, comandi gdb.
- Programmazione di Sistema: Gestione in C dei processi/thread su ambiente linux
- Virtualizzazione: Concetti generali, container, Docker
[t1] Operating Systems: Internals and Design Principles - William Stallings - Prentice Hall, quinta edizione (o superiori). Riferimento: nona edizione.
[t2] Sistemi operativi: Concetti ed Esempi - Silberschatz Abraham, Galvin Peter Baer, Gagne Greg - Addison Wesley/Pearson, nona edizione (o superiori). Riferimento: tenth global edition.
Tuttavia alcuni argomenti sono trattati solo sulle slide pubblicate nel materiale didattico.
Programma
- Richiami di calcolatori elettronici: architettura di un elaboratore, CPU, registri, esecuzione di una istruzione, interrupt, gerarchie di memoria, localita', I/O, chiamate di procedura- Panoramica sui sistemi operativi moderni: definizione di sistema operativo, scopi, architettura a strati, kernel/user mode, caratteristiche salienti
- Processi e Thread: dispatching, stati, descrizione e controllo, modelli tipici di sistemi operativi e di uso della memoria nei processi
- Memoria: allocatori di memoria, partitioning, best/first/next fit, buddy algorithm, paging, segmentation, memoria virtuale e sua gestione hardware/software
- Scheduling: a breve medio e lungo termine, algoritmi per cpu scheduling
- I/O e File Management: Disk scheduling, RAID, UNIX File Management, inode, Linux VFS, ext2
- Sincronizzazione: primitive di sincronizzazione, RMW, mutex, semafori
- Introduzione a Linux: comandi di utilizzo frequente (e.g., gestione file e directory), variabili di ambiente, piping, redirection, segnali, espressioni regolari (sed e grep), scripting (bash, awk), linux filesystem management
- Debugger: utilizzo di gdb stepping, breakpoints, watching, backtrace, comandi gdb.
- Programmazione di Sistema: Gestione in C dei processi/thread su ambiente linux
- Virtualizzazione: Concetti generali, container, Docker
Testi Adottati
Il corso è in parte basato sui seguenti testi:[t1] Operating Systems: Internals and Design Principles - William Stallings - Prentice Hall, quinta edizione (o superiori). Riferimento: nona edizione.
[t2] Sistemi operativi: Concetti ed Esempi - Silberschatz Abraham, Galvin Peter Baer, Gagne Greg - Addison Wesley/Pearson, nona edizione (o superiori). Riferimento: tenth global edition.
Tuttavia alcuni argomenti sono trattati solo sulle slide pubblicate nel materiale didattico.
Modalità Erogazione
Lezioni frontali in presenzaModalità Frequenza
Frequenza non obbligatoriaModalità Valutazione
Domande di teoria (65% del voto) Esercizi di programmazione (35% del voto)