Sistemi Operativi: Programma a.a. 2005-2006

  1. Introduzione: cos'è un sistema operativo, diversi tipi di s.o. (batch, multiprogrammato, time-sharing, ...);
  2. Struttura di un calcolatore: funzionalità, I/O, gestione delle interruzioni, meccanisimi di protezione hardware;
  3. Struttura di un s.o.: componenti, servizi, system calls, programmi di sistema, struttura
  4. Introduzione alla programmazione Java: la virtual machine ed il linguaggio di programmazione;
  5. Multiprogrammazione: processi (con particolare riferimento al sistema operativo Linux) e threads (con particolare riferimento a Java);
  6. CPU scheduling: concetti di base (CPU e I/O burst, scheduler, preemption, dispatcher), criteri di scheduling, algoritmi (first come first served, shortest job first, round robin, coda multilivello, coda multilivello con feedback); sistemi real-time (hard-realtime e soft-realtime; algoritmi RMS ed EDF; inversione della priorità ed ereditarietà della priorità); lo scheduler di Linux;
  7. Sincronizzazione di processi: primitive Java per attendere completamento threads e processi; il problema della sezione critica, con soluzioni SW (fra cui algoritmo di Dekker o di Peterson, algoritmo del fornaio) e HW (test&set, swap); semafori, regioni critiche e monitor; problema produttore/consumatore con buffer di memoria limitato, problema lettori/scrittori, problema dei 5 filosofi; esempi applicativi in Java; synchronized, monitor, mutex lock e variabili di condizione in Java;
  8. Il problema dello stallo: caratterizzazione, il grafo di allocazione delle risorse, strategie di prevenzione, strategie per evitare lo stallo (l'algoritmo del banchiere), strategie di rilevazione e rimozione;
  9. Il sottosistema di I/O: caratterizzazione dell'I/O; I/O sincrono/asincrono, bloccante/non bloccante; scheduling del disco; buffering; caching; I/O in Java mediante streams; I/O asincrono mediante threads;
  10. Comunicazione tra processi: processi cooperanti; IPC tramite memoria condivisa e scambio di messaggi; Sistemi distribuiti: comunicazione mediante sockets TCP; esempi in Java per server TCP con multi-threading o readiness selection; i moduli di multiprogrammazione di Apache;
  11. Gestione della memoria: binding degli indirizzi; spazio di indirizzamento logico e fisico; caricamento dinamico, linking dinamico, overlays; swapping; allocazione della memoria (contigua, paginazione, segmentazione).
  12. La memoria virtuale: paginazione su domanda; sostituzione delle pagine (FIFO, ottimo, LRU, LRU approssimato); allocazione della memoria fisica (numero minimo, algoritmi, locale/globale); thrashing (working set, frequenza dei page faults); prepaging, dimensione delle pagine; memory-mapped I/O.

Materiale didattico

Nota: i contenuti dei diversi pacchetti contenenti codice sorgente vengono aggiornati periodicamente (ultimo aggiornamento: 2/6/2006).

Per approfondimenti

Nota sul diritto d'autore: il materiale pubblicato su questa pagina, fatta eccezione per quello prodotto da terzi, è diffuso per il solo scopo di aiutare gli studenti del corso al superamento dell'esame. Si diffida dalla pubblicazione/copia del suddetto materiale per scopi diversi. In particolare è fatto divieto di diffusione e riproduzione con fini di lucro.

Libri consigliati

Per approfondimenti su Java
Per approfondimenti su Linux
© 2001-2006 Jürgen Assfalg