|
|
Sistemi Operativi: Programma a.a. 2003-2004
- 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à); thread scheduling
nella macchina virtuale Java (green threads e threads nativi);
- Sincronizzazione di processi: primitive Java per attendere
completamento threads e processi; il problema della sezione critica,
con soluzioni SW e HW; 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;
- Comunicazione tra processi: processi cooperanti; IPC tramite memoria condivisa e scambio di messaggi;
- 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;
- 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 ], [ 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/
- Specifica della Java Virtual Machine [ documento
HTML (Sun) ]
- Per la gestione dei processi sotto Linux si veda GAPIL
(in particolare, le sezioni 2.1, 3.1, e 3.2)
- Gestione di processi in C (Linux/UNIX) [ documento
PDF ]
- Esempi su processi [ sorgenti
C per UNIX/Linux ], [ sorgenti
Java ]
- Lo scheduler di Linux [ documento PDF ]
- Dimostrazione per l'algoritmo del fornaio [ documento PDF ]
- Produttore-consumatore mediante area di memoria condivisa [ sorgenti C per UNIX/Linux ];
attenzione: l'esempio non prevede alcuna forma di sincronizzazione.
- Esempi in Java [ sorgenti Java ]
- creazione di Threads, sincronizzazione elementare mediante Thread.join() (packages assfalg.esempi.threads e assfalg.esempi.sincronizzazione.elementare)
- problema produttore-consumatore (package assfalg.esempi.prodcons), realizzato mediante
- memoria limitata (Object[]),
- memoria illimitata (LinkedList)
- sincronizzazione
- regione critica, mediante costrutto synchronized(object)
{ ... } (package assfalg.esempi.sincronizzazione.regione_critica)
- monitor, mediante metodi sincronizzati e wait() / notify() (package assfalg.esempi.sincronizzazione.monitor)
- variabili di condizione (applicazione al problema del buffer limitato) (package assfalg.esempi.sincronizzazione.variabile_condizione)
- lettura asincrona mediante thread (package assfalg.esempi.io)
- servers TCP (package assfalg.esempi.tcpserver)
- realizzazione di server TCP con multiprogrammazione e readiness selection;
i modelli di multiprogrammazione del web server Apache [ documento PDF ]
- (...in via di definizione...)
Nota: i contenuti dei diversi pacchetti contenenti codice
sorgente vengono aggiornati periodicamentte (ultimo aggiornamento:
13/6/2004).
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", J. Wiley & Sons, 6th
edition, 2001
disponibile anche in italiano: 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.
- Ron Hitchens, “Java NIO”, O'Reilly, 2002
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).
|