Sistemi operativi
Prof. Stefano Caselli | |
E-mail: stefano.caselli@unipr.it |
Finalità
Il corso si propone di presentare i principali strumenti metodologici per l'analisi e la progettazione del software di sistema, con particolare riferimento ai livelli interni dei sistemi operativi. Nella prima parte del corso vengono sviluppati gli argomenti relativi al modello a processi di un sistema operativo, unitamente alla gestione della CPU e della memoria principale. Nella seconda parte vengono illustrati i problemi relativi alla gestione delle memorie di massa, delle periferiche e dei file. Nella parte finale del corso vengono approfondite problematiche specifiche di analisi e di progettazione dei sistemi distribuiti e in tempo reale. Al termine del corso gli studenti dovro essere in grado di sviluppare applicazioni multiprocesso significative in ambiente UNIX.
Programma
Introduzione ai sistemi operativi e concetti generali.
Funzioni del sistema operativo. Organizzazione del software di base. Stadi evolutivi
dei sistemi operativi. Gestione batch. Time-sharing. Spooling. Multiprogrammazione.
Modello di un semplice sistema operativo e tecniche di incremento delle prestazioni.
Modello a processi. Sistema di protezione. Chiamate di sistema. Programmi di
sistema. Struttura a livelli del sistema operativo. Struttura cliente-servitore.
Supporti architetturali. Richiami. Ciclo fetch-execute. Modello di interazione
tra CPU e dispositivi. Sistema di interruzione. Interruzione da dispositivo
e da timer. Interruzioni e multiprogrammazione. Processo di interruzione. Modi
di funzionamento della CPU.
Introduzione ai processi. Concetto di processo. Stato del processo. Descrittore
del processo. Grafo di precedenza. Processi sequenziali. Processi indipendenti
ed interagenti. Architettura di una macchina concorrente.
Processi concorrenti asincroni. Interazione tra processi concorrenti:
cooperazione, competizione, interferenza. Mutua esclusione e sezioni critiche.
Algoritmi e meccanismi di mutua esclusione: algoritmo di Dekker, algoritmo di
Peterson, algoritmo del Fornaio, test-and-set, lock-unlock. Semafori e primitive
di sincronizzazione. Cooperazione tra processi mediante semafori: scambio di
segnali temporali, Produttore-Consumatore, accesso esclusivo a risorse multiple
condivise. Politiche di gestione delle risorse. Semafori privati.
Situazioni di blocco critico. Caratterizzazione del deadlock. Grafo di
allocazione delle risorse. Prevenzione statica. Prevenzione dinamica. Algoritmo
del Banchiere. Rilevazione ed eliminazione del deadlock.
Nucleo di un sistema a processi. Funzioni e strutture dati del nucleo.
Realizzazione di wait e signal. Il nucleo in sistemi multiprocessore (cenni).
Scheduling dei processi. Politiche di scheduling: FIFO, RR, SJF. Code
a livelli di priorita' multipli. Politiche con revoca. Lo scheduling in UNIX.
Modelli per l'analisi dei sistemi a processi: reti di Petri, reti di code (cenni).
Supporti linguistici per la programmazione concorrente. Coroutines. Fork
e join. Parbegin e parend. Il problema dei Lettori-Scrittori. Il problema dei
Dining Philosophers. Regione critica. Monitor. Realizzazione del monitor. Modelli
ad ambiente globale e a scambio di messaggi. Designazione e sincronizzazione
nel modello a scambio di messaggi. Comandi con guardia. Esempi di supporti linguistici
per la programmazione concorrente: Modula-2, ADA, CSP, Java.
Gestione della memoria. Strategie di gestione. Multiprogrammazione a
partizioni fisse e variabili. Sistemi a memoria virtuale: segmentazione, paginazione.
Sistemi a memoria virtuale: tecniche di rimpiazzamento delle pagine.
Memoria di massa e unità periferiche. Nastri e dischi magnetici.
Metodi di allocazione. Algoritmi di scheduling. Modalita' di accesso. Metodi
per il colloquio con i terminali.
File system. Organizzazione a livelli. Realizzazione del file system.
Problemi di consistenza. Struttura del file system di UNIX.
Sistemi distribuiti. Introduzione e classificazione. Modello cliente-servitore.
RPC in ambiente distribuito. Threads e processi leggeri. Librerie per il multithreading
in Solaris e POSIX.
Sistemi in tempo reale. Definizioni. Algoritmi di scheduling. Gestione
della inversione di priorita'.
Attività d'esercitazione
Una parte significativa delle esercitazioni, svolte sia in aula che in laboratorio, e' dedicata all'approfondimento del sistema operativo UNIX. In particolare vengono esaminati in modo approfondito i meccanismi di IPC di UNIX, la progettazione di applicazioni cliente-servitore mediante socket, e la programmazione mediante threads POSIX
Modalità d'esame
L'esame consiste in due prove pratiche su aspetti specifici della programmazione di applicazioni concorrenti in ambiente UNIX/C, una prova scritta finale ed una prova orale. Le prove pratiche esonerano dallo svolgimenento di parte della prova scritta e sono assegnate durante lo svolgimento del corso. Chi non frequenta il corso deve prendere contatto con il docente almeno un mese prima della data dell'appello per ricevere il testo delle prove pratiche e concordare la data di consegna degli elaborati.
Propedeuticità
Fondamenti di Informatica, Fondamenti di Informatica II, Calcolatori Elettronici.
Testi consigliati
Uno a scelta tra i primi due riferimenti che seguono può fungere da libro di testo. I successivi riferimenti contengono approfondimenti per temi specifici. Sono inoltre a disposizione presso le fotocopie dei lucidi delle lezioni.
A. Silberschatz, P. B. Galvin: " Sistemi operativi ", Quinta edizione,
Addison-Wesley, 1998.
A. S. Tanenbaum: " I moderni sistemi operativi ", Jackson Libri, 1995.
P. Ancilotti, M. Boari: " Principi e tecniche di programmazione concorrente
", UTET, 1987.
S.J. Leffler, et al.: " The Design and Implementation of the 4.3BSD UNIX
Operating System ", Addison-Wesley,1989.
M.J. Bach: " Unix - Architettura di sistema ", Jackson.
T. Chan: " Unix System Programming using C++ ", Prentice-Hall, 1997.
D.R. Butenhof: " Programming with POSIX threads ", Addison-Wesley,
1997.
Testi d'approfondimento
Aggiornato