SISTEMI OPERATIVI

Crediti: 
6
Settore scientifico disciplinare: 
SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI (ING-INF/05)
Anno accademico di offerta: 
2016/2017
Semestre dell'insegnamento: 
Secondo Semestre
Lingua di insegnamento: 

Italiano

Obiettivi formativi

L’obiettivo del corso è fornire allo studente la capacità di comprendere come i sistemi operativi gestiscano e controllino le risorse del sistema di elaborazione con obiettivi di efficienza e facilità d’uso, e in particolare:
- il ruolo del sistema operativo come intermediario tra le applicazioni e l’hardware
- la necessità di sovrapporre attività di CPU e di I/O per aumentare l’efficienza
- il concetto di processo e i principali modelli di interazione tra processi
- i criteri e gli algoritmi di scheduling della CPU per sistemi interattivi
- le nozioni di base per l’utilizzo di UNIX/Linux e per la gestione dei comandi
- le principali chiamate di sistema offerte da UNIX/Linux alle applicazioni.

Le principali capacità di applicare le conoscenze e comprensione elencate risultano essere:
- analizzare e valutare le caratteristiche dei sistemi operativi general-purpose
- analizzare semplici interazioni tra processi in ambiente globale e individuare forme di sincronizzazione attraverso semafori
- valutare le prestazioni dei principali algoritmi di scheduling della CPU per sistemi interattivi con un workload prefissato
- analizzare interazioni tra processi UNIX, individuare gli strumenti di comunicazione interprocesso e le primitive di sistema necessari, e realizzare programmi in C che li utilizzano.

Prerequisiti

- Fondamenti di informatica + Laboratorio di programmazione
- Fondamenti di programmazione

Contenuti dell'insegnamento

Parte I (Teoria)
Introduzione ai sistemi operativi. Sistemi batch, time-sharing, spooling.
Parallelizzazione di elaborazione e I/O. Il sistema di interruzione: interruzione da dispositivo e da timer. Gestione delle interruzioni. Modello di un semplice sistema operativo e tecniche di incremento delle prestazioni.
Multiprogrammazione e modello a processi. Sistema di protezione. Modi di funzionamento della CPU. Chiamate di sistema. Gestione dell'I/O.
Struttura a livelli del sistema operativo. Virtualizzazione.
Concetto di processo. Stato del processo. Descrittore del processo.
Processi concorrenti. Modello di interazione a memoria condivisa. Mutua esclusione e sezioni critiche. Semafori e primitive di sincronizzazione.
Cooperazione e competizione tra processi mediante semafori.
Il modello di interazione a scambio di messaggi e le primitive send/receive.
Concetto di Deadlock e tecniche di gestione.
Algoritmi di scheduling della CPU.

Parte II
Introduzione a UNIX e Linux.
Struttura del file system di UNIX. Diritti e meccanismi di protezione.
Principali comandi di sistema. Redirezione e piping di comandi. Interpreti comandi. Modalità di esecuzione foreground/background.
Organizzazione fisica del file system. L'immagine in memoria di un processo UNIX. Sviluppo di programmi in UNIX/LINUX.
Primitive per la gestione dei file e dell'I/O.
Primitive per la gestione dei processi. Creazione, esecuzione e terminazione.
Sincronizzazione e comunicazione tra processi: segnali, pipe/FIFO e socket.

Esercitazioni in laboratorio informatica di base (Linux Suse 11 virtualizzato con Virtualbox) su interazione utente e programmazione di sistema Linux.

Programma esteso

Teoria (I parte)

Introduzione al corso. Programma e modalità di esame. Introduzione a Linux e alle possibilità di installazione. SO come gestore di risorse. Attività del SO per gestione risorse. Tipi e utenti di SO. SO proprietari e standard. Introduzione a evoluzione storica dei sistemi di calcolo e dei SO. Sistemi Batch. Time Sharing. Spooling. Gestione I/O Gestione I/O a polling. Sovrapposizione di attività di I/O. Gestione delle interruzioni.

Multiprogrammazione. Concetto e stati di un processo. Gestione processi. PCB. Commutazione tra processi. Sistema di protezione. Gestione del cambio di contesto. System calls. Struttura di un SO con esempi (UNIX, MSDOS, Windows NT/7). Concetti e tecniche di virtualizzazione. Nucleo del SO.

Modelli di interazione tra processi. Modello ambiente globale. Strumenti per la programmazione concorrente. Cenni sulle thread. Interazione tra processi. Esempi di interferenza. Mutua esclusione. Sezioni critiche. Semafori. Primitive wait e signal. Atomicità semafori e di wait/signal. Semafori per interazione produttore/consumatori. Modello ad ambiente locale. Classificazione designazione/sincronizzazione. Modalità di designazione diretta/indiretta. Sincronizzazione send e receive. Chiamate a procedura remota.

Deadlock e relative tecniche di gestione.

Livelli di scheduling. Criteri per la valutazione degli algoritmi. Algoritmi di scheduling della CPU (FCFS, SJF, Priorità, Round-robin, code multilivello). Metodi per la valutazione. Scheduling UNIX e in Linux.

UNIX (II parte)

Introduzione a UNIX. File system. Diritti di accesso a file/direttori. Principali comandi UNIX. Filtri. Redirezione I/O e piping. Esecuzione comandi da shell. Modalità di esecuzione dei comandi. Metacaratteri. Controllo espansione riga di comando. Script: sintassi ed esempi. Esercitazione UNIX in laboratorio su file system e comandi.

Strumenti di sviluppo UNIX. Immagine di un processo. Argomenti di invocazione e ambiente Primitive per la gestione dell'I/O (open, close, read, write, lseek, etc.). Esempi. Esercitazione UNIX in laboratorio su primitive di I/O.

Gestione segnali UNIX. Primitive per la gestione inaffidabile dei segnali. Problemi della gestione inaffidabile. Primitive per la gestione affidabile dei segnali. Esempi. Comunicazione via pipe. Esempi. Esercizi su segnali e pipe. Comunicazione via FIFO. Esercitazione UNIX in laboratorio su pipe e segnali.

Comunicazione via socket. Tipi di socket. Cenni a TCP e UDP. Primitive per la gestione delle socket. Socket connesse. Server concorrente. Socket datagram. Esempi. Primitiva select. Esercitazione UNIX in laboratorio su gestione socket.

Esercizi d'esame.

Bibliografia

Tesi consigliati:

Sono rese disponibili sul sito del corso, lezione per lezione, le diapositive utilizzate
in aula e tracce di esercizi risolti.

Libri di testo suggeriti:
* Sistemi operativi - Concetti ed esempi - 8/ed, A. Silberschatz, P. B. Galvin, G. Gagne. Pearson Education 2009, ISBN 9788871925691
* Sistemi Operativi 2/ed, P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari. McGraw Hill, ISBN: 9788838664328,
*GaPiL -- Guida alla Programmazione in Linux (http://gapil.truelite.it)

Metodi didattici

Lezioni frontali su teoria e UNIX/Linux.
Esercitazioni in laboratori informatica di base (Linux Suse 11 virtualizzato con Virtualbox) su interazione utente e programmazione di sistema in Linux.

Modalità verifica apprendimento

Una prova scritta con domande aperte sulla parte di teoria (Parte I), proposta anche come prova in itinere.

Una prova pratica al calcolatore costituita da un esercizio in C/C++ sulla interazione tra processi UNIX (Parte II). Lo studente deve fornire una soluzione funzionante ragionevolmente aderente alle specifiche per ottenere una valutazione sufficiente. Entrambe le prove devono essere superate ai fini del superamento dell'esame.

Durante il corso è inoltre proposto un assegnamento opzionale di programmazione sulla gestione di processi UNIX, che può contribuire ad incrementare il voto della prova pratica, dando pertanto maggior peso ad essa nella valutazione finale.

Gli studenti possono sostenere il giorno dell'esame una sola o entrambe le prove. I risultati parziali conseguiti rimangono validi per tutto l'anno accademico (sessione di gennaio/febbraio compresa). In caso di ripetizione di una prova già superata (teoria e/o UNIX), rimane valido l'ultimo voto ottenuto.

Il voto finale è dato dalla media dei risultati ottenuti nei due tipi di prova, eventualmente integrato con il contributo degli assegnamenti proposti durante il corso.

Altre informazioni

Portale per il sito del corso: http://elly.dii.unipr.it
Il materiale didattico e di supporto è reso disponibile sul sito del corso lezione per lezione agli studenti frequentanti.