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.
ATTIVITA' FORMATIVE
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).
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.