SISTEMI OPERATIVI
cod. 05613

Anno accademico 2014/15
2° anno di corso - Secondo semestre
Docente
Settore scientifico disciplinare
Sistemi di elaborazione delle informazioni (ING-INF/05)
Field
Ingegneria informatica
Tipologia attività formativa
Caratterizzante
42 ore
di attività frontali
6 crediti
sede:
insegnamento
in - - -

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 calcolo con obbiettivi 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 capacità di applicare le conoscenze e comprensione elencate risultano essere in particolare:
- 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 (UNIX)
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.
Attività di esercitazione (massimo 240 caratteri)
Esercitazioni in laboratorio informatica di base (Linux Suse 11
virtualizzato con Virtualbox)
su interazione utente e programmazione di sistema Linux.

Programma esteso

Teoria
Introduzione al corso. Programma e modalità di esame. Introduzione a Linux e alle possibilità di installazione. S.O come gestore di risorse. Attività del OS per gestione risorse. Tipi e utenti di SO. SO proprietari e standard. Introduzione a evoluzione storica dei sistemi di calcolo e dei OS Sistemi Batch. Time Sharing. Spooling. Gestione I/O Gestione I/O a polling. Sovrapposizione di attività di I/O. Gestione delle interruzioni. (4 ore)
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 OS con esempi (UNIX, MSDOS, Windows NT/7). Concetti e tecniche di virtualizzazione. Nucleo del S.O (5 ore)
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. (5 ore)
Deadlock e tecniche di gestione (2 ore)
Livelli di scheduling. Criteri per la valutazione degli algoritmi. Algoritmi di scheduling della CPU (FCFS, SJF, Priorità, Round-robin). Metodi per la valutazione. Scheduling UNIX. Cenni allo scheduling real.time. (3 ore)
UNIX
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. (4 ore)
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. (4 ore)

Primitive per la gestione dei processi (fork, wait, exec). Esempi. Esercitazione UNIX in laboratorio su primitive di gestione processi. Presentazione dell'assegnamento opzionale sulla gestione dei processi. (4 ore)
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 (5 ore)

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 (4 ore)
Esercizi d'esame. (2 ore).

Bibliografia

Sistemi operativi - Concetti ed esempi - 8/ed, A. Silberschatz, P. B. Galvin,
G. Gagne
Pearson Education 2009, ISBN 9788871925691
(oppure)
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 laboratorio informatica di base (Linux Suse 11
virtualizzato con Virtualbox)
su interazione utente e programmazione di sistema Linux.

Modalità verifica apprendimento

Una prova scritta con tre domande aperte sulla parte di teoria (Parte I)
oppure
prova in itinere (20 aprile circa).
Assegnamento opzionale di programmazione sulla gestione di processi
UNIX.
Una prova pratica al calcolatore costituita da un esercizio in C/C++ sulla
interazione tra processi UNIX (Parte II).
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 quindi compresa), ed e' possibile ripetere,
al più una volta, una prova per migliorare il voto conseguito. In ogni caso
si mantiene il voto migliore tra quelli conseguiti per ciascun tipo di prova
(teoria o UNIX).
Per calcolare il voto finale, sarà eseguita una media pesata dei risultati
ottenuti nei due tipi di prova (con pesi 0.6 per la prova UNIX e 0.4 per la
prova di teoria).

Altre informazioni

Sito del corso su http://lea.unipr.it