versione stampabile

Sistemi Operativi: Programma a.a. 2007-2008

  1. Introduzione alla programmazione Java: la virtual machine ed il linguaggio di programmazione;
  2. Struttura di un calcolatore: funzionalità, I/O, gestione delle interruzioni, meccanisimi di protezione hardware;
  3. Un caso di studio: realizzazione di un servizio TCP;
  4. Struttura di un s.o.: componenti, servizi, primitive di sistema (system calls), programmi di sistema, struttura;
  5. Le macchine virtuali (un caso di studio: VMWare);
  6. Evoluzione storica dei sistemi operativi (batch, multiprogrammato, time-sharing, ...);
  7. Multiprogrammazione: processi (con particolare riferimento al sistema operativo Linux) e threads (con particolare riferimento a Java);
  8. 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;
  9. 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;
  10. 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;
  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.
  13. 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; i moduli di multiprogrammazione di Apache;

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-2007 Jürgen Assfalg