Nuova ricerca

Letizia LEONARDI

Professore Ordinario
Dipartimento di Ingegneria "Enzo Ferrari"

Insegnamento: Progettazione di Sistemi Operativi

Ingegneria informatica (Offerta formativa 2020)

Obiettivi formativi

L'obiettivo dell'insegnamento è di far raggiungere allo studente una buona conoscenza e capacità di comprensione di ogni livello/gestore di cui si compone un Sistema Operativo allo scopo di poter capire le problematiche di progettazione di un Sistema Operativo sia riguardo ai meccanismi di funzionamento che alle relative politiche. L'applicazione di queste conoscenze riguarda gli aspetti di progettazione dei Sistemi Operativi.
Questo insegnamento rappresenta il completamento delle conoscenze rispetto all'insegnamento di Sistemi Operativi della Laurea triennale.

Prerequisiti

Non esistono propedeuticità obbligatorie. Agli studenti non laureati in Ingegneria Informatica presso la nostra sede, si consiglia di accertarsi di avere come conoscenze pregresse quella derivanti dagli esami di Sistemi Operativi e Laboratorio di Sistemi Operativi (della Laurea D.M. 509) o di Sistemi Operativi e Lab. (della Laurea D.M. 270).

Programma del corso

Gli argomenti teorici che verranno affrontati saranno:
1) Generalità sui Sistemi Operativi
Evoluzione storica: dai primi sistemi ai moderni sistemi operativi.
Classificazione dei Sistemi Operativi: sistemi mono- e multi-utente, sistemi batch e interattivi, sistemi in time-sharing e real-time.
Elementi di base di un Sistema Operativo: punto di vista esterno (utente o programmatore di sistema) e punto di vista interno.
2) Sistema Operativo come insieme di gestori delle risorse. In particolare:
a) Gestione della CPU
Punto di vista esterno - tecniche di programmazione concorrente: modelli dei processi ad ambiente globale e ad ambiente locale; strumenti per la sincronizzazione di processi in ambiente globale (semafori, monitor, etc.) e locale (scambio di messaggi, RPC, etc.).
Punto di vista interno - progettazione del nucleo: strutture dati e primitive; progettazione di algoritmi di scheduling; soluzioni al problema del blocco dei processi (deadlock).
b) Gestione della memoria
Punto di vista esterno - programmi: assoluti, rilocabili staticamente, rilocabili dinamicamente.
Punto di vista interno - progettazione dei metodi di allocazione: contigua (partizionamento statico e dinamico); swapping; segmentazione; non contigua (paginazione); gestione della memoria virtuale.
c) Gestione del File System
Punto di vista esterno - organizzazione logica dei direttori e proprietà dei file; livello di programmazione.
Punto di vista interno - progettazione dell'allocazione fisica in memoria secondaria: metodo contiguo; metodi non contigui (concatenamento e indicizzazione).
Quando necessario, questi argomenti saranno esemplificati rivedendone l'implementazione in UNIX/Linux.

Gli argomenti pratici che verranno affrontati in questo insegnamento saranno svolti utilizzando il linguaggio di programmazione di sistema C.

Metodi didattici

ATTENZIONE: Le lezioni teoriche verranno svolte a distanza in modo sincrono con registrazione (consultate Dolly2020 per avere aggiornamenti a riguardo) a causa della situazione sanitaria COVID19, mentre le esercitazioni di laboratorio verranno svolte sempre a distanza ma in modo sincrono (streaming).
La metodologia didattica utilizzata per l’insegnamento si compone sia di lezioni teoriche e sia di esercitazioni pratiche: la percentuale di ore di lezioni teoriche è 2/3 delle ore totali e quella di lezioni in laboratorio è 1/3.
Le lezioni teoriche affrontano, con l’ausilio di slide (fornite preventivamente agli studenti), sia gli aspetti teorici che progettuali/realizzativi dei sistemi operativi. Le esercitazioni consentiranno agli studenti di approfondire aspetti di progettazione di un sistema operativo.
Sulla pagina Web (gestita direttamente dal docente) gli studenti possono trovare i file pdf delle slide (protetti da password di lettura che verrà comunicata agli studenti nella prima lezione).

Testi di riferimento

Le slide della parte teorica sono disponibili via WEB alla URL: http://www.agentgroup.ing.unimo.it/wiki/index.php/Principi_di_Sistemi_Operativi_-_LM

Testi di riferimento possono essere:

J. Peterson, A. Silberschatz: "Operating System Concepts", Addison Wesley, 1990 (anche versione italiana: SILBERSCHATZ A., GALVIN P., G. GAGNE: "Sistemi Operativi: concetti ed esempi - sesta edizione", Casa Editrice Addison-Wesley, 2002).

M. Milenkovic: "Sistemi Operativi", McGraw-Hill, 1990.

Per il sistema operativo xv6 si faccia riferimento alla documentazione online https://pdos.csail.mit.edu/6.828/2016/overview.html

Verifica dell'apprendimento

L'esame si compone di una prova orale e da una tesina facoltativa che, nel caso, deve essere discussa prima della prova orale. Una volta sostenuta la prova orale, NON sarà possibile presentare alcuna tesina.
La prova orale spazia su tutto il programma che verrà svolto: come case-study verrà fatto riferimento al Sistema Operativo UNIX/Linux.
Il voto della prova orale è espresso in trentesimi e può arrivare ad un massimo di 27/30. Tale voto potrà essere incrementato di un valore da 1-4 punti nel caso di svolgimento e discussione della tesina facoltativa secondo quanto sotto illustrato.
La tesina è facoltativa. L'argomento della eventuale tesina va concordato e avrà come ambito quello della programmazione di sistema. La discussione della tesina deve avvenire prima della prova orale: il voto preso dallo studente nella tesina influirà sul voto finale andando ad incrementare il voto della prova orale di un valore da 1 a 4 punti.
ATTENZIONE: Le prove potrebbero essere svolte in presenza o a distanza a seconda dell'evoluzione della situazione COVID19.

Risultati attesi

Conoscenza e comprensione
- Conoscere e comprendere ogni livello/gestore di cui si compone un Sistema Operativo a livello di meccanismi di funzionamento e delle relative politiche.

Capacità di applicare conoscenza e comprensione
- Sapere identificare le varie funzionalità di un Sistema Operativo, sapere valutare le scelte più opportune in base al suo utilizzo e sapere progettare i vari gestori di cui si compone un sistema operativo.

Autonomia di giudizio
- autonomia di giudizio nell'analizzare e progettare sistemi complessi, valutando l'impatto delle soluzioni informatiche nel contesto applicativo, sia relativamente agli aspetti tecnici che agli aspetti organizzativi e dimostrando di partecipare attivamente al processo decisionale in contesti anche interdisciplinari.
- autonomia di giudizio nel valutare le implicazioni economiche, sociali ed etiche associate alle soluzioni individuate.

Abilità comunicative
- interagire efficacemente con interlocutori sia non specialisti che specialisti di diversi settori applicativi al fine di comprenderne le specifiche esigenze per la realizzazione di sistemi complessi;
- descrivere a tali interlocutori in modo chiaro e comprensibile informazioni, idee, problemi e soluzioni oltre che aspetti tecnici.

Capacità di apprendimento
- capacità di apprendimento che consente di affrontare in modo efficace le mutevoli problematiche lavorative connesse con l'innovazione propria dell'area dell'Ingegneria Informatica;
- capacità di riconoscere la necessità di apprendimento autonomo durante tutto l'arco della vita, dato l'elevato tasso di innovazione tecnologica e metodologica nell'area dell'Ingegneria Informatica;
- capacità di acquisire in modo autonomo nuove conoscenze specialistiche dalla letteratura scientifica e tecnica del settore, sia nell'ambito delle tematiche approfondite nel proprio percorso formativo, sia in altri ambiti dell'Ingegneria Informatica.