Sistemi operativi (2008/2009)

Corso a esaurimento

L'insegnamento è organizzato come segue:
Modulo Crediti Settore disciplinare Periodo Docenti
Teoria 6 ING-INF/05-SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI 2° Q, 3° Q Graziano Pravadelli
Laboratorio 4 ING-INF/05-SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI 3° Q Graziano Pravadelli

Obiettivi formativi

Modulo: Teoria
-------
Il corso fornisce una introduzione ai principi e al progetto di sistemi operativi, essenziali per coordinare le attività e le risorse di un sistema di calcolo. Sono affrontati i principali temi dalle architetture software alla gestione dei processi e delle risorse del sistema (es. memoria). Nel corso di Laboratorio viene studiato un sistema operativo reale della famiglia UNIX.
Il corso di teoria viene svolto in 48 ore (6 crediti) di lezione/esercitazione frontale. A queste vanno aggiunte 48 ore di laboratorio (4 crediti).


Modulo: Laboratorio
-------
Il corso, svolto in 48 ore di lezione/esercitazione (4 crediti), fornisce una introduzione alla programmazione di sistema facendo riferimento ai sistemi operativi UNIX system V e Linux. Al termine del corso lo studente avrà acquisito la capacità di realizzare script di shell e programmi C per gestire le problematiche riportate nel programma sottostante.

Programma

Modulo: Teoria
-------
* Introduzione: Ruolo del sistema operativo e sua evoluzione. Elementi architetturali. Struttura e funzioni di un sistema operativo.

* Gestione dei Processi: Processi. Stati dei processi. Cambiamento di contesto. Creazione e terminazione di processi. Thread: thread a livello utente e a livello kernel. Cooperazione e comunicazione fra processi: memoria condivisa, messaggi. Comunicazione diretta ed indiretta.

* Scheduling: Modello a ciclo di burst di CPU-I/O. Scheduling a lungo, medio, breve termine. Scheduling con prelazione e cooperativo. Criteri di scheduling. Algoritmi di scheduling: FCFS, SJF, a priorità, RR, a code multiple con e senza feedback. Valutazione degli algoritmi: modelli deterministici e probabilistici, simulazione.

* Sincronizzazione fra processi: Coerenza di dati condivisi, operazioni atomiche. Sezioni critiche. Approccio software alla mutua esclusione: algoritmi di Peterson e Dekker, algoritmo del panettiere. Supporto hardware per la mutua esclusione: test and set, swap. Costrutti per sincronizzazione: semafori, mutex, monitor. Deadlock, starvation. Alcuni problemi tipici di sincronizzazione: produttore/consumatore, lettori/scrittore, problema dei filosofi.

* Deadlock: Condizioni per l'innesco di un deadlock. Rappresentazione dello stato di un sistema con grafi di allocazione. Tecniche di prevenzione, rilevazione e ripristino. Algoritmo del banchiere.

* Gestione della memoria: Memoria primaria. Indirizzamento logico e fisico. Rilocazione, binding degli indirizzi. Swapping. Allocazione contigua della memoria. Frammentazione interna ed esterna. Paginazione. Supporti hardware alla paginazione: TLB. Tabella delle pagine. Paginazione a piu' livelli. Segmentazione. Tabella dei segmenti. Segmentazione con paginazione.

* Memoria Virtuale: Paginazione su richiesta. Gestione di page fault. Algoritmi di sostituzione delle pagine: FIFO, ottimale, LRU, approssimazioni LRU. Buffering di pagine. Allocazione di frame in memoria fisica, allocazione locale o globale. Thrashing. Località dei riferimenti. Modello del working set. Controllo della frequenza di page fault. Blocco di pagine in memoria.

* Memoria secondaria Struttura logica e fisica dei dischi. Tempo di latenza. Scheduling del disco: algoritmi FCFS, SSTF, SCAN, C-SCAN, LOOK, C-LOOK. Gestione della memoria di paginazione.
Sistema di I/O: Sistemi di Input/Output, Hardware per I/O. Tecniche di I/O: programmato, con interrupt, con DMA. Device driver e interfaccia verso le applicazioni. Servizi del kernel per I/O: scheduling, buffering, caching, spooling.

* File System: Concetto di file, attributi e operazioni relative. Tipi di file. Accesso sequenziale e diretto. Concetto di directory. Struttura di directory. Protezioni nell'accesso a file. Attributi e modalità di accesso. Semantica della consistenza. Struttura di un file system. Montaggio di un file system. Metodi di allocazione dello spazio su disco: contiguo, concatenato, indicizzato. Gestione dello spazio libero su disco: tramite vettore di bit, tramite liste. Realizzazione delle directory: liste lineari, tabelle hash.

* Casi di studio: Il sistema UNIX: struttura del kernel, strutture dati, implementazione delle funzionalità principali.


Modulo: Laboratorio
-------
* Introduzione alla programmazione C: compilatore, linker, librerie e programma make.

* La struttura di un programma C: variabili, istruzioni, funzioni e passaggio dei parametri, puntatori e allocazione della memoria dinamica, gestione di I/O e stringhe.

* Programmazione di sistema
- La programmazione tramite script di shell (bash)
o La struttura del programma di shell
o La selezione e l'iterazione
o L'input e l'output
o Le variabili
o I comandi di sistema
- La programmazione di sistema in C
o File e cartelle
o Processi (fork / exec)
o Pipe e named pipe
o Semafori
o Memoria condivisa
o Code di messaggi
- Le threads:
o La programmazione tramite threads
o La sincronizzazione delle threads

Modalità d'esame

Modulo: Teoria
-------
L'esame consiste in una prova scritta, contenente domande teoriche ed esercizi.
Sono previste due prove intermedie durante il corso.
Per la parte di laboratorio si veda il relativo corso.
Il voto finale si ottiene dalla seguente media pesata:
Voto = Voto_teoria*0,6 + Voto_laboratorio*0,4
Per chi sostiene le prove intermedie il voto di teoria si ottiene dalla seguente media pesata:
Voto_teoria = 2/3*Voto_prova_1 + 1/3*Voto_prova_2

L'esame deve essere completato (teoria+laboratorio) entro 4 sessioni a partire da quella in cui è stata sostenuta con successo la prova di teoria o la prova di laboratorio (a seconda di quale delle due viene superata per prima).
Esempio: Uno studente che supera la prova di teoria (o laboratorio) in uno degli appelli della sessione autunnale dell'anno X, dovrà superare la prova di laboratorio (o teoria) entro la sessione estiva dell'anno X+1, pena l'annullamento del voto della prova di teoria (o laboratorio).


Modulo: Laboratorio
-------
L'esame può essere superato in due modi: orale, scritto.

Modalità orale:
Durante il corso lo studente dovrà consegnare alcuni elaborati rispettando le scadenze elencate nel calendario delle lezioni. Quindi, al termine del corso, nella seconda metà di giugno, lo studente sosterrà una prova orale in cui verranno discussi gli elaborati.
Chi non consegna tutti gli elaborati non può fare l'orale e deve sostenere l'esame come indicato nella modalità "scritto".
L'accesso alla prova orale è subordinato al superamento di una prova di programmazione C che si terrà nella data indicata nel calendario delle lezioni.


Modalità scritto:
L'esame consiste nel risolvere alcuni problemi di programmazione di sistema (tramite programmi C o script di shell) durante uno degli appelli ufficiali.

Per le modalità di superamento della prova del modulo di teoria si veda il relativo corso. Tuttavia, l'esame (teoria+laboratorio) deve essere completato entro 4 sessioni a partire da quella in cui è stata sostenuta con successo la prova di teoria o la prova di laboratorio (a seconda di quale delle due viene superata per prima).
Esempio: Uno studente che supera la prova di teoria (o laboratorio) in uno degli appelli della sessione autunnale dell'anno X, dovrà superare la prova di laboratorio (o teoria) entro la sessione estiva dell'anno X+1, pena l'annullamento del voto della prova di teoria (o laboratorio).

Statistiche per i requisiti di trasparenza (Attuazione Art. 2 del D.M. 31/10/2007, n. 544)

Statistiche esiti
Esiti Esami Esiti Percentuali Media voti Deviazione Standard
Positivi 20.13% 25 3
Respinti 34.72%
Assenti 40.27%
Ritirati 4.86%
Annullati --
Distribuzione degli esiti positivi
18 19 20 21 22 23 24 25 26 27 28 29 30 30 e Lode
10.3% 0.0% 10.3% 3.4% 3.4% 6.8% 10.3% 3.4% 13.7% 6.8% 10.3% 3.4% 13.7% 3.4%

Valori relativi all'AA 2008/2009 calcolati su un totale di 144 iscritti. I valori in percentuale sono arrotondati al numero intero più vicino.