|
|
versione stampabile
Sistemi Operativi: Programma a.a. 2004-2005
- Introduzione: cos'è un sistema operativo, diversi tipi di s.o. (batch, multiprogrammato, time-sharing, ...);
- Struttura di un calcolatore: funzionalità, I/O, gestione delle interruzioni, meccanisimi di protezione hardware;
- Struttura di un s.o.: componenti, servizi, system calls, programmi di sistema, struttura
- Introduzione alla programmazione Java: la virtual machine ed il linguaggio di programmazione;
- Multiprogrammazione: processi (con particolare riferimento al sistema operativo Linux) e threads (con particolare riferimento a Java);
- 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;
- 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;
- 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;
- 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;
- 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;
- Gestione della memoria: binding degli indirizzi; spazio di indirizzamento logico e fisico; caricamento dinamico, linking dinamico, overlays; swapping; allocazione della memoria (contigua, paginazione, segmentazione).
- 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
- 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
|