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