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: struttura del kernel, strutture
dati, implementazione delle funzionalità principali.