Obiettivi formativi
Il corso è una introduzione ai principi ed 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 (es. memoria) del sistema. Nel corso di Laboratorio viene
studiato un sistema operativo reale della famiglia UNIX.
Attività formative
Il corso viene svolto in 60 ore di lezione/esercitazione frontale,
suddivise in due periodi didattici (40 ore + 20 ore).
Programma del corso
- 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 e con feedback.
Valutazione degli algoritmi: con modelli deterministici,
probabilistici o 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, semafori binari, mutex, monitor. Deadlock, starvation.
Alcuni problemi tipici di sincronizzazione: produttore/consumatore,
lettori/scrittore, problema dei dining philosophers .
- Deadlock: Condizioni per l'innesco di un deadlock.
Rappresentazione dello stato di un sistema con grafi di
allocazione. Tecniche di deadlock prevention. Deadlock avoidance.
Algoritmo del banchiere. Deadlock detection e recovery.
- Gestione della Memoria: Memoria primaria. Indirizzamento
logico e fisico. Rilocazione, address binding. Swapping.
Allocazione contigua della memoria. Frammentazione interna ed
esterna. Paginazione. Supporti hardware alla paginazione: registri
specializzati e 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
frames in memoria fisica, allocazione locale o globale. Thrashing.
Località dei riferimenti. Working set model. 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 ed interfaccia verso le applicazioni. Servizi di kernel per
I/O: scheduling, buffering, caching, spooling.
- File System: Concetto di file, attributi ed 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. Realizzazione Struttura di un file-system. Montaggio
di file-systems. Metodi di allocazione dello spazio su disco:
contigua, concatenata, indicizzata. 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 e Windows NT:: struttura
del kernel, strutture dati, implementazione delle
funzionalità principali.