Sistemi operativi
A.A. 2018/2019
Obiettivi formativi
Il corso consentirà allo studente di comprendere i principali concetti su cui è basata la realizzazione di un sistema operativo, le sue funzionalità principali nonchè acquisire padronanza nell'uso delle principali API del sistema operativo Linux. Al fine di fornire agli studenti una migliore comprensione dei diversi temi affrontati verrà affrontato lo studio delle componenit principali di un sistema operativo didattico: il sistema operativo JOS. L'ispezione del codice sorgente di JOS, permetterà agli studenti di apprendere come sono implementate su architetture reali le principali funzionalità di un sistema operativo e le relazioni che intercorrono tra i vari componenti del sistema operativo. In laboratorio gli studenti saranno messi in grado di modificare il codice sorgente del kernel di JOS modificando o aggiungendo alcune funzionalità. In tal modo potranno anche imparare le nozioni di base della programmazione di sistema.
Risultati apprendimento attesi
Non definiti
Periodo: Secondo semestre
Modalità di valutazione: Esame
Giudizio di valutazione: voto verbalizzato in trentesimi
Corso singolo
Questo insegnamento non può essere seguito come corso singolo. Puoi trovare gli insegnamenti disponibili consultando il catalogo corsi singoli.
Programma e organizzazione didattica
Linea Milano
Responsabile
Periodo
Secondo semestre
Programma
PARTE I: Concetti Generali
Introduzione ai sistemi operativi: principi, struttura ed evoluzione storica
Processi: concetti e implementazione
API per la gestione dei processi
Tecniche per lo scheduling dei processi
Memory management
Tecniche di memoria virtuale: paginazione, segmentazione,segmentazione paginata
API per la gestione della memoria
Introduzione alla programmazione concorrente
I thread: concetti e implementazione
APi per la gestione dei thread
Soluzioni al problema della mutua esclusione
I meccanismi di Interprocess communication
Deadlock: il problema e le soluzioni
Tecniche per la gestione dei dispositivi di INPUT/OUTPUT
Il File system
PARTE II: Aspetti implementativi
Introduzione all'architettura IA-32
GNU ASSEMBLER LANGUAGE
Eccezioni e Interrupt in IA-32
Analisi e implementazione di un programma elementare di bootstrap e di un bootloader
Analisi e implementazione di un gestore delle Eccezioni
Analisi e implementazione di un gestore degli Interrupt
Analisi e implementazione di un gestore della Memoria
Analisi e implementazione di un gestore dei processi
Analisi e implementazione di un gestore di syscall
Introduzione ai sistemi operativi: principi, struttura ed evoluzione storica
Processi: concetti e implementazione
API per la gestione dei processi
Tecniche per lo scheduling dei processi
Memory management
Tecniche di memoria virtuale: paginazione, segmentazione,segmentazione paginata
API per la gestione della memoria
Introduzione alla programmazione concorrente
I thread: concetti e implementazione
APi per la gestione dei thread
Soluzioni al problema della mutua esclusione
I meccanismi di Interprocess communication
Deadlock: il problema e le soluzioni
Tecniche per la gestione dei dispositivi di INPUT/OUTPUT
Il File system
PARTE II: Aspetti implementativi
Introduzione all'architettura IA-32
GNU ASSEMBLER LANGUAGE
Eccezioni e Interrupt in IA-32
Analisi e implementazione di un programma elementare di bootstrap e di un bootloader
Analisi e implementazione di un gestore delle Eccezioni
Analisi e implementazione di un gestore degli Interrupt
Analisi e implementazione di un gestore della Memoria
Analisi e implementazione di un gestore dei processi
Analisi e implementazione di un gestore di syscall
Informazioni sul programma
Propedeuticità
Programmazione, Architetture I e II, Algoritmi
Prerequisiti
Il corso richiede dimestichezza con la programmazione in C (con liste e puntatori) e i principi base delle architetture dei calcolatori e della programmazione assembly
L'esame è costituito da tre prove: scritta, orale e pratica. Le prove scritta e orale verteranno sul programma del corso svolto durante le lezioni di teoria.
La prova scritta è costituita da: 20 domande a risposta multipla;
lo svolgimento di un esercizio di programmazione con l'uso della libreria Pthread o con l'uso delle API Unix viste a lezione;
lo svolgimento di un esercizio di programmazione consistente nella modifica o stesura delle procedure del sistema operativo JOS viste a lezione.
Il superamento della prova scritta è requisito necessario per l'accesso alla prova orale. Durante la prova scritta lo studente potrà accumulare sino a 3 punti che saranno poi sommati al voto finale della prova orale. Le prove scritta e orale devono essere sostenute nello stesso appello mentre la prova di laboratorio può essere sostenuta in appelli diversi purché entro la fine dell'anno accademico in corso. La prova scritta può essere sostenuta anche attraverso due compitini intermedi, in questo caso gli studenti dovranno sostenere la prova orale ENTRO l'appello di Luglio.
La prova pratica in laboratorio è composta da tre parti:
1. partizionamento di una memoria di massa
2. esercizio di programmazione shell
3. esercizio di programmazione kernel (JOS)
Per raggiungere la sufficienza è necessario superare le parti 1. e 2. Voti maggiori di 24 sono riservati agli studenti che abbiano affrontato in modo adeguato anche l'esercizio 3.
Il voto finale dell'esame sarà formato sommando ai 2/3 del voto ottenuto nelle prove di teoria, 1/3 del voto ottenuto nella prova pratiche in laboratorio.
L'esame è costituito da tre prove: scritta, orale e pratica. Le prove scritta e orale verteranno sul programma del corso svolto durante le lezioni di teoria.
La prova scritta è costituita da: 20 domande a risposta multipla;
lo svolgimento di un esercizio di programmazione con l'uso della libreria Pthread o con l'uso delle API Unix viste a lezione;
lo svolgimento di un esercizio di programmazione consistente nella modifica o stesura delle procedure del sistema operativo JOS viste a lezione.
Il superamento della prova scritta è requisito necessario per l'accesso alla prova orale. Durante la prova scritta lo studente potrà accumulare sino a 3 punti che saranno poi sommati al voto finale della prova orale. Le prove scritta e orale devono essere sostenute nello stesso appello mentre la prova di laboratorio può essere sostenuta in appelli diversi purché entro la fine dell'anno accademico in corso. La prova scritta può essere sostenuta anche attraverso due compitini intermedi, in questo caso gli studenti dovranno sostenere la prova orale ENTRO l'appello di Luglio.
La prova pratica in laboratorio è composta da tre parti:
1. partizionamento di una memoria di massa
2. esercizio di programmazione shell
3. esercizio di programmazione kernel (JOS)
Per raggiungere la sufficienza è necessario superare le parti 1. e 2. Voti maggiori di 24 sono riservati agli studenti che abbiano affrontato in modo adeguato anche l'esercizio 3.
Il voto finale dell'esame sarà formato sommando ai 2/3 del voto ottenuto nelle prove di teoria, 1/3 del voto ottenuto nella prova pratiche in laboratorio.
Metodi didattici
Didattica frontale
Materiale di riferimento
Operating Systems: Three Easy Pieces di Remzi H. Arpaci-Dusseau e Andrea C. Arpaci-Dusseau
INF/01 - INFORMATICA - CFU: 12
Laboratori: 48 ore
Lezioni: 72 ore
Lezioni: 72 ore
Turni:
Docente:
Bruschi Danilo Mauro
Turno cognomi A-I
Docente:
Monga MattiaTurno cognomi L-Z
Docente:
Re' MatteoDocente/i
Ricevimento:
Concordare via email e/o su piattaforma Microsoft Teams. Per specifici corsi fare riferimento al sito Ariel del corso.
Milano - via Celoria 18 (stanza 3010) e/o Ms Teams/Zoom