Sistemi operativi i

A.A. 2019/2020
6
Crediti massimi
48
Ore totali
SSD
INF/01
Lingua
Italiano
Obiettivi formativi
L'insegnamento si propone di introdurre 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 componenti principali di un sistema operativo didattico.
Risultati apprendimento attesi
Al termine dell'insegnamento lo studente sarà in grado di: individuare le principali caratteristiche di un sistema operativo, valutarne le criticità ed i punti di forza, scrivere programmi che usano le principali API di sistema operativo, leggere e commentare codice di un sistema operativo reale.
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

Edizione unica

Responsabile
Periodo
Primo semestre

Programma
PARTE I: Virtualizzazione delle risorse
Concetti Generali
Introduzione ai sistemi operativi: principi, struttura ed evoluzione
storica
CPU Virtualization
Processi: concetti e implementazione
API per la gestione dei processi
Tecniche per lo scheduling dei processi
Memory Virtualization
Address Space
La trasformazione degli indirizzi
API per la gestione della memoria
Il memory manager
Segmentazione
Paginazione, Segmentazione Paginata
TLB
Gestione dello swap space
PARTE II: Introduzione alla programmazione concorrente
I thread: concetti e implementazione
API per la gestione dei thread
Soluzioni al problema della mutua esclusione
Lock
Le variabili condizione
I semafori
Il problema Produttori/Consumatori
Il problema dei 5 Filosofi
Deadlock: il problema e le soluzioni
PARTE III: persistence
I Dispositivi di I/O: principi di funzionamento
Hard Disk
RAID
Il File system
Files & Directory
Implementazione di un file system elementare
FSCK e Journaling
Parte IV: Il Kernel del sistema operativo JOS
La fase di bootstrap
La gestione della memoria virtuale
La gestione dei processi
La gestione di interrupt/eccezioni
Le system call

Un elenco dettagliato degli argomenti trattati, lezione per lezione, viene pubblicato e aggiornato sul sito web dell'insegnamento.
Prerequisiti
Saper scrivere programmi, preferibilmente in liguaggio C, di media difficoltà che utilizzano strutture dati dinamiche elementari (liste e code) con particolare enfasi sull'uso dei puntatori.
Conoscere le principali componenti di un calcolatore, i loro principi di funzionamento e le modalità di interazione tra le diversi componenti con particolare attenzione ai meccanismi di interazione hardware-software (eccezioni, interrupt). Saper scrivere ed eseguire programmi elementari in linguaggio Assembler.
Il superamento dell'esame di Programmazione è propedeutico all'insegnamento di Sistemi Operativi i. E' inoltre fortemente consigliato il superamento dell'esame di Architetture degli Elaboratori.
Metodi didattici
La parte di teoria viene svolta mediante lezioni frontali. La parte di laboratorio alterna lezioni frontali a esercitazioni e attività pratiche svolte individualmente.
Materiale di riferimento
SITO WEB dell'Insegnamento:
per la parte di teoria --> https://dbruschiso1.ariel.ctu.unimi.it
Per la parte di laboratorio --> https://mameli.docenti.unimi.it/solab

LIBRO DI TESTO:
Remzi H. Arpaci-Dusseau e Andrea C. Arpaci-Dusseau, "Operating Systems: Three Easy Pieces", (https://ostep.org)

Materiale integrativo per la parte IV dell'insegnamento e per la parte di laboratorio, reperibile sul sito web dell'insegnamento:

Programmer's Reference Manual Intel 386
xv6: a simple Unix-like teaching operating system
xv6 source code
System Programming Guide - Part I by Intel Corporation
System Programming Guide - Part II by Intel Corporation

Ulteriore materiale integrativo, preparato dai docenti, viene reso disponibile sul sito web dell'insegnamento.
Modalità di verifica dell’apprendimento e criteri di valutazione
L'esame consiste di una prova scritta, di una prova di laboratorio e di una prova orale. Nella prova scritta, della durata di due ore, sono proposte 20 domande a risposta multipla e viene richiesta la risoluzione di due esercizi che richiedono l'uso e la conoscenza dei seguenti temi: programmazione concorrente con l'uso di Pthread, le API del Sistema Operativo Linux e il Sistema operativo JOS.
Il superamento della prova scritta consente l'accesso alla prova orale che verte sulla discussione di alcuni degli argomenti trattati durante le lezioni teoriche tenute in aula. Al termine della prova orale viene formulata una prima valutazione espressa in trentesimi,
tenendo conto dei seguenti parametri: grado di conoscenza degli argomenti, capacità di applicare le conoscenze alla risoluzione di problemi concreti, capacità di ragionamento critico, chiarezza
espositiva e proprietà di linguaggio.
La prova di laboratorio si svolge indipendentemente dalle prove scritta e orale, la sua durata di 2 ore circa richiede lo svolgimento di 3 esercizi: partizionamento di una memoria di massa, scrittura di uno script di shell, esercizio di programmazione kernel in JOS. Al termine della prova di laboratorio viene formulata un'ulteriore valutazione in trentesimi tenendo conto dei seguenti parametri: capacità di saper applicare le nozioni acquisite a situazioni reali e concrete, grado di approfondimento degli argomenti trattati.
Al termine delle tre prove viene formulata la valutazione complessiva, espressa in trentesimi ottenuta come media pesata dei voti ottenuti nelle prove scritta/orale e laboratorio. Il peso assegnato alla prima è di 2/3 quello assegnato alla seconda di 1/3.
INF/01 - INFORMATICA - CFU: 6
Lezioni: 48 ore
Turni:
Docente/i
Ricevimento:
su appuntamento e-mail: [email protected]
Stanza 8011 via Celoria 18