Il corso è suddiviso in due moduli, denominati "Sistemi" e
"Laboratorio". I docenti sono A.Formisano e P.Melacci.
Prerequisiti
Sono richieste nozioni di Architettura degli elaboratori.
Obiettivi
Il corso si propone di fornire competenze relative ai concetti di base
comuni ai sistemi operativi, alla loro architettura e loro principali
funzionalità. Parimenti si vuole fornire nozioni e competenze relative
alle tecnologie e tecniche HW e SW sviluppate per la soluzione delle
principali problematiche insite nel processo di progetto, realizzazione ed
utilizzo di un sistema operativo.
Modalità d'esame
L'esame consta di:
lo svolgimento di un semplice progetto (sugli argomenti
del modulo di laboratorio),
una prova scritta (sul programma di entrambi i moduli),
un colloquio orale.
Per poter sostenere la prova scritta è
necessario consegnare il progetto
prima
della data fissata per la prova scritta.
Il progetto è individuale.
Il progetto ha validità per UNA sessione d'esame.
Il tema del progetto, le modalità di assegnamento e di
consegna saranno rese note al più presto.
La prova scritta è composta da domande
aperte e/o chiuse e/o esercizi sugli argomenti del programma.
Per il superamento dell'esame è necessario ottenere una
valutazione sufficiente del compito scritto.
Durante l'esame non è consentito l'utilizzo di libri,
dispense, appunti, calcolatori, tel.cellulari, ecc..
Gli studenti che vogliono sostenere l'esame scritto sono invitati ad
iscriversi alla apposita lista disponibile presso l'ufficio del
docente, oppure ad inviare una email allo stesso (possibilmente, almeno due giorni
prima della data dell'appello).
Per orari e aule per le prove scritte si può consultare il sito
del
corso di laurea
o il sistema
goad.
Modulo "Sistemi":
Programma in breve
Generalità sui sistemi operativi.
Processi e thread.
Scheduling della CPU.
Sincronizzazione dei processi.
Blocco critico.
Gestione della memoria centrale.
Memoria virtuale.
File system.
Memoria secondaria.
Nozioni base sul sistema di I/O.
Ricevimento studenti
I semestre: Martedì dalle 17:00, Giovedì dalle 17:00, (o su appuntamento).
Argomenti delle lezioni
(Questa sezione verrà
completata durante lo svolgimento del corso, in
parallelo con il susseguirsi delle lezioni.)
Generalità sui sistemi operativi (lezione del 5 ottobre).
Cosa è un Sistema Operativo.
Organizzazione di un sistema di calcolo.
Architettura degli elaboratori.
Struttura del sistema operativo.
Attività del sistema operativo.
Gestione dei processi.
Gestione della memoria.
Gestione della memoria di massa.
Protezione e sicurezza.
[SGG06]: Capitolo 1.
Struttura e Servizi dei Sistemi Operativi (lezione del 7 ottobre).
Servizi di un sistema operativo.
Interfaccia con l'utente del sistema operativo.
Le system call.
Categorie di system call.
Programmi di sistema.
Progettazione e realizzazione di un sistema operativo.
Struttura del sistema operativo.
Macchine virtuali.
Generazione di sistemi operativi.
Avvio del sistema.
[SGG06]: Capitolo 2.
Processi (lezioni del 12, 14, 19 ottobre).
Concetto di processo. Stato di un processo. Il PCB.
Code di processi.
Scheduling dei processi. Short/mid/long term scheduler.
Il caso di UNIX.
Operazioni sui processi. Il meccanismo exit/wait in UNIX.
UNIX:Esempio di uso di fork e wait: forkWait.c.
UNIX:Esempio di uso di fork e exec: forkExecWait.c.
Cooperazione tra processi.
Comunicazione tra processi. Memoria condivisa.
Scambio messaggi.
Comunicazione diretta/indiretta e sincrona/asincrona.
Comunicazione nei sistemi client-server.
UNIX:Esempio di uso di memoria condivisa: shmem.c.
[SGG06]: Capitolo 3.
Scheduling della CPU. (lezioni del 21, 26 ottobre, ...).
Concetti fontamentali sullo scheduling. Ciclicità delle
fasi di elaborazione: CPU-burst e I/O-burst. Scheduler e
dispatcher. Criteri e obiettivi di scheduling.
Scheduling con o senza prelazione.
Algoritmi di scheduling. Algoritmo FCFS. Algoritmo SJF. Algoritmo SRTF.
Stima delle durate dei CPU-burst. Algoritmo HRRF. Uso di
priorità. Tecnica di aging. Round robin (RR). Scheduling con
code multiple e con retroazione. Comparazione vantaggi e
svantaggi dei vari algoritmi. Cenni allo
scheduling in UNIX e Linux. Scheduling di thread.
Esercizi ed esempi.
[SGG06]: Capitolo 5.
[Sta05]: Capitolo 9.
Sincronizzazione. (lezioni del 28 ottobre, 2, 4, 9 novembre).
Introduzione. Concorrenza e problematiche connesse.
Nozioni di sezione critica, race condition, mutua esclusione,
deadlock, starvation. Esempio: produttore/consumatore con
buffer limitato.
Problema della sezione critica e sua soluzione.
Semplici tentativi di soluzione e soluzione di Peterson.
Hardware per la sincronizzazione.
I semafori
(Semafori Mutex e gestione della sezione critica.
Semafori di sincronizzazione.
Spin-lock.
Semafori senza busy-waiting.)
Problemi: deadlock e starvation.
Problemi tipici di sincronizzazione: Produttori e consumatori
con buffer limitato; Lettori e scrittori (con priorità a
lettori o a scrittori); I cinque filosofi. Soluzioni di questi
problemi tramite l'uso dei semafori.
Soluzioni che evitano deadlock e starvation.
Motivazioni per l'introduzione dei monitor.
Il costrutto di monitor.
Soluzione di problemi tipici di
sincronizzazione con l'uso di monitor.
Il codice di alcune delle soluzioni viste a lezione (.ps.gz).
(a chi servisse...:
Ghostscript, Ghostview
and GSview o
anche qui; e
gzip).
[SGG06]: Capitolo 6.
Thread. (lezioni del 16 novembre).
I thread: motivazioni, vantaggi e svantaggi.
Modelli di programmazione multithread.
Stato e operazioni sui thread.
Semplici esempi di programmazione multithread.
User level thread e Kernel level thread.
Questioni di programmazione multithread.
[SGG06]: Capitolo 4.
[Sta05]: Capitolo 4.
Deadlock. (lezioni del 18, 23, 25 novembre).
Introduzione: Il problema del deadlock.
Modello del sistema.
Caratterizzazione delle situazioni di stallo.
Metodi per la gestione del deadlock.
Algoritmo "dello struzzo".
Deadlock prevention.
Deadlock avoidance.
Deadlock detection&recovery.
Approccio combinato.
Esercizi ed esempi.
Alcuni esempi (.ps.gz).
[SGG06]: Capitolo 7.
Gestione della Memoria Principale. (lezioni del 2, 7, 9, 14 dicembre).
Nozioni generali. Spazio degli indirizzi. Binding. Collegamento
statico e dinamico. Caricamento statico e dinamico. Swapping.
Rilocazione.
Tecniche di allocazione contigua della memoria.
Problema della frammentazione.
Il "buddy system".
Paginazione.
Tecniche di implementazione per la tabella delle pagine.
Condivisione di pagine.
Segmentazione.
Confronto tra paginazione e segmentazione.
Segmentazione paginata.
Cenni al caso di Linux/Pentium.
Memoria Virtuale: concetti generali e motivazioni. Paginazione
su richiesta. Sostituzione delle pagine. Anomalia di Belady.
Allocazione dei frame.
Paginazione degenere. Working-set e page-fault frequency.
Esercizi ed esempi.
[SGG06]: Capitoli 8 e 9.
Cenni al File System. (lezioni del 16 dicembre).
Concetto di file e sue caratteristiche. Directory.
Strutturazione e realizzazione del file system,
Metodi di allocazione. Spazio libero.
Esercizi ed esempi.
[SGG06]: Capitoli 10 e 11.
Esercizi ed esempi su tutto il programma. (lezioni del 11, 12, 13 gennaio).
(N.B: la sesta edizione di questo
libro differisce in alcuni punti dalla settima,
presenta inoltre una numerazione di capitoli e paragrafi
diversa rispetto a quella sopra indicata.)
Le fonti per eventuale materiale integrativo verranno indicate a lezione.
Si tenga presente che gli
argomenti trattati nel corso possono essere studiati o approfonditi
anche consultando uno (o più) dei seguenti testi.
[DDC05] --- P.Deitel, H.Deitel, D.Choffnes. Sistemi
Operativi. Terza edizione, 2005.
[KA03] --- G.Glass e K.Ables. Unix for Programmers and Users. Terza edizione, 2003.
[RR03] --- K.A.Robbins, S.Robbins. Unix system programming.
2004.
[Sta05] --- W.Stallings. Operating Systems.
Internals and design Principles. Quinta edizione (anche in italiano). 2005.