Jürgen Assfalg's Homepage - Teaching

Overview| Operating Systems| Internet Engineering
Teaching

versione stampabile

Sistemi Operativi: Programma a.a. 2004-2005

  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

  • Introduzione a Java [ documento PDF (aggiornato il 18/5/2005) ], [ sorgenti Java ]; per approfondimenti sulle principali problematiche di Java trattate nel corso, si vedano i capitoli da 1 a 5 di Moka(the)Book, http://www.mokabyte.it/mokabook/ (gratuito; richiede registrazione)
  • Multiprogrammazione
    • Analisi quantitativa dei benefici [ documento PDF ] (aggiornato il 13/3/2005)
    • Gestione di processi in C (Linux/UNIX) [ documento PDF ]
    • Esempi su processi [ sorgenti C per UNIX/Linux ], [ sorgenti Java (aggiornato il 18/5/2005) ]
    • Threads in Java: creazione di threads, sincronizzazione elementare mediante Thread.join() (package so.esempi.threads) [ sorgenti Java ] (aggiornato il 14/3/2005)
  • Scheduling
    • Sistemi tempo-reale: schedulabilità, algoritmi RMS ed EDF [ documento PDF ] (aggiornato il 13/3/2005)
    • Inversione di priorità ed ereditarietà della priorità [ documento PDF ] (aggiornato il 13/3/2005)
    • Lo scheduler di Linux [ documento PDF ] (aggiornato il 13/3/2005)
  • Sincronizzazione
    • problema produttore-consumatore (package so.esempi.prodcons), realizzato mediante memoria limitata (Object[]) e memoria illimitata (LinkedList) [ sorgenti Java ]
    • Algoritmo del fornaio e relativa dimostrazione [ documento PDF ]
    • esempi Java (packages so.esempi.sincronizzazione.regione_critica_1, so.esempi.sincronizzazione.regione_critica_2, so.esempi.sincronizzazione.monitor, so.esempi.sincronizzazione.variabile_condizione oltreché, per comodità una replica di parte del package so.esempi.prodcons) [ sorgenti Java ]
  • I/O
    • lettura asincrona mediante thread servers TCP [ sorgenti Java ]
  • Comunicazione
    • Produttore-consumatore mediante area di memoria condivisa [ sorgenti C per UNIX/Linux ] (attenzione: l'esempio non prevede alcuna forma di sincronizzazione)
    • realizzazione di servizi TCP e modelli di multiprogrammazione del web server Apache [ documento PDF ]
    • servers TCP [ sorgenti Java ]

Nota: i contenuti dei diversi pacchetti contenenti codice sorgente vengono aggiornati periodicamente (ultimo aggiornamento: 18/5/2005).

Per approfondimenti
  • Per la gestione dei processi sotto Linux si veda anche GAPIL (in particolare, le sezioni 2.1, 3.1, e 3.2)
  • Specifica della Java Virtual Machine [ documento HTML (Sun) ]

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

  • A. Silberschatz, P.G. Galvin, G. Gagne, “Operating Systems Concepts with Java”, J. Wiley & Sons, 6th edition, 2004
    oppure in italiano, anche se non è proprio la stessa cosa (manca la parte su Java):
    A. Silberschatz, P.G. Galvin, G. Gagne, “Sistemi Operativi”, sesta edizione, Pearson Education Italia, 2002
  • S. Oaks, H. Wong, "Java Threads", O'Reilly, 2nd edition, 1999.
Per approfondimenti su Linux
Per approfondimenti su Java
  • H.M. Deitel, P.J. Deitel, “Java 2 Fondamenti di programmazione”, Apogeo, 2000.
  • H.M. Deitel, P.J. Deitel, “Java Tecniche avanzate di programmazione”, Apogeo, 2001.
  • Moka(the)Book, http://www.mokabyte.it/mokabook/
  • B. Eckel, “Thinking in Java“, 3rd Edition, http://www.mindview.net/Books/TIJ/ (in inglese).
  • Ron Hitchens, Java NIO, O'Reilly, 2002
© 2001-2005 Jürgen Assfalg