Indice
Programma A.A. 2012/13
Obiettivi di apprendimento
Il corso è strutturato in due moduli: il primo modulo presenta i fondamenti dei sistemi operativi e il secondo modulo di laboratorio mostra un’applicazione concreta dei concetti teorici presentati nel primo modulo. Il primo modulo introduce i principi ed i concetti su cui si basano i sistemi operativi e analizza la loro realizzazione nei sistemi reali. In particolare, vengono presentate le tecniche che consentono di coordinare e gestire le risorse di un sistema di elaborazione e che permettono di trasformare la macchina fisica in una macchina astratta, dotata di funzionalità più convenienti per l'utente. Il corso lascia ampio spazio alla descrizione e all'esemplificazione di come i vari concetti presentati sono realizzati nei sistemi Unix/Linux e in quelli della famiglia Microsoft Windows. Il secondo modulo fornisce le conoscenze di base relative alla programmazione C con chiamate di sistema Unix/POSIX. In particolare, vengono prese in considerazione le chiamate standard per il trattamento di file e directory, processi, thread, segnali, pipe, socket e vari meccanismi di sincronizzazione.
Conoscenze. Lo studente raggiungerà la conoscenza delle problematiche dei sistemi operativi e delle caratteristiche dei sistemi attualmente più usati
Capacità. Lo studente raggiungerà la capacità di realizzare programmi in C usando librerie e chiamate di sistema UNIX/Posix.
Comportamenti. Il corso non si pone obiettivi di apprendimento in termini di comportamenti attesi.
Descrizione
Il corso tratta i fondamenti dei moderni sistemi operativi, presentando i concetti di base e la loro applicazione nei sistemi reali. I principali argomenti trattati sono:
- Struttura dei sistemi operativi, nucleo. chiamate di sistema
 - Processi e threads
 - Gestione della memoria e dei dispositivi di ingresso/uscita
 - Archivi e sistema di archiviazione
 - Sistemi reali: Unix/Linux, Windows
 - Programmazione in C di sistemi UNIX/Posix
 
Modulo 1: Sistemi Operativi
Introduzione (2 ore)
- Il sistema operativo: ruolo, funzionalità e struttura;
 - Evoluzione dei sistemi operativi: batch, multiprogrammazione, time-sharing
 - Richiami sul funzionamento dell’elaboratore: interruzioni e loro gestione, I/O,
 - Stato del processore, chiamate di sistema.
 
Organizzazione dei Sistemi Operativi (2 ore)
- Funzionalità
 - Struttura: sistemi monolitici e modulari; sistemi stratificati; sistemi a microkernel
 - Organizzazione e funzionalità dei sistemi operativi Unix e Windows.
 
I processi (8 ore)
- Il concetto di processo
 - Stati dei processi
 - Realizzazione dei processi nel Sistema Operativo
 - Operazioni sui processi
 - Processi e thread
 - La gestione dei processi e dei thread in Unix e in Windows: stati, rappresentazione, gestione (scheduling), operazioni e comandi
 
Interazione tra processi (8 ore)
- Interazione mediante memoria condivisa: sincronizzazione; sezioni critiche e mutua esclusione; strumenti hardware per la mutua esclusione: test-and-set; semafori
 - Interazione mediante scambio di messaggi: comunicazione diretta/indiretta, simmetrica/asimmetrica; buffering.
 - Interazione tra processi in Unix: pipe e FIFO; segnali
 - Interazione tra processi in Windows
 
Gestione del processore (4 ore)
- Concetti generali e politiche di scheduling
 - Algoritmi di scheduling: FCFS,SJF, con priorità, Round Robin, con code multiple.
 - Scheduling in Unix e in Windows.
 
Gestione della Memoria (10 ore)
- Concetti generali: spazio degli indirizzi logico/fisico; collegamento
 - Allocazione della memoria: contigua: a partizione singola e partizioni multiple; frammentazione;
 - Allocazione della memoria non contigua: segmentazione; paginazione
 - Memoria virtuale
 - Gestione della memoria in Unix e in Windows.
 
Gestione dei dispositivi di I/O (6 ore)
- I dispositivi di I/O e la loro gestione: concetti generali
 - Organizzazione e gestione dei dischi
 - RAID
 
Gestione degli Archivi (8 ore)
- File system e sua realizzazione
 - Struttura logica; metodi di accesso
 - Struttura fisica; allocazione dei file
 - Protezione
 - Il file system di Unix: organizzazione logica e fisica, comandi e system calls per la gestione e l’accesso a file e directories
 - Il file system di Windows
 
Modulo 2: Laboratorio
Strumenti per la programmazione C in ambiente GNU (e dintorni) (2h lez + 2h ese)
- compilazione e linking
 - suddivisione di un programma in moduli: gestione(make) e archiviazione (ar)
 - debugging
 - cenni ad altri tool
 
Unix e la shell (6h lez + 6h ese)
- Unix: concetti di base, comandi/utility
 - La shell di Unix:
- introduzione alla shell
 - cenni agli script
 - personalizzazione con alias ed opzioni e variabili
 - espansione (alias, storia, tilde, percorso, variabili, sostituzione di comando, espressioni aritmetiche)
 - quoting
 - Controllo dell'I/O: ridirezione
 - Exit status
 - Combinare comandi
 - pipelining
 - sequenza non condizionale
 - sequenze condizionali &&, ||
 - comandi composti (uso di {…} e (…) )
 - Operatori su stringhe (pattern matching)
 - Costrutti di controllo :condizionale (if) e test, iterazione limitata (for), scelta multipla (case), iterazione illimitata (while e do/while), menu' con select.
 - Read, exec, eval
 
 
C e la programmazione di sistema (1h lez)
- cos'e' una System Call
 - gestione sistematica degli errori
 - consigli pratici di programmazione
 - convenzioni e commenti
 
I file (2h lez + 2 h ese)
- concetti base dei FS Unix
 - operazioni di base (open, read, write, close, lseek)
 - link: concetti e system call per la gestione
 - manipolare e accedere alle informazioni sui file (stat, fcntl, ioctl) (brevi cenni)
 - gestione delle directory (opendir,readdir,…,closedir) (brevi cenni)
 - duplicazione di descrittori (dup e dup2)
 
I processi (2h lez + 2h ese)
- il modello fork/exec
 - gestione dei figli (wait), exit status
 - atexit(), _atexit()
 
I thread (3h lez + 4h ese)
- i modello a thread
 - creazione e distruzione
 - mutex e variabili di condizione
 - soluzione ti tipici problemi di concorrenza
 
Maccanismi di IPC : Pipe (2h lez + 2h ese)
- Pipe anonime
 - Pipe con nome (FIFO)
 
Maccanismi di IPC : Socket (2h lez + 2h ese)
- Modello client-server
 - Socket per comunicazione locale (AF_UNIX)
 - Socket per comunicazione in rete (AF_INET)
 
Segnali (2h lez + 2h ese)
- Concetti generali: eventi asincroni, gestori di eventi
 - Ignorare, gestire, mascherare ed attendere i segnali
 - Segnali, processi e thread
 
Ore lezione: 52 Ore esercitazione: 40
Bibliografia
Libri di testo
- Paolo Ancilotti, Maurelio Boari, Anna Ciampolini, Giuseppe Lipari: Sistemi Operativi (Seconda Edizione), Mc Graw-Hill, 2008.
 - Marc J. Rochkind. Advanced UNIX Programming 2nd Edition, Addison-Wesley Professional Computing Series, 2004.
 
Altri Testi Consigliati:
- Andrew S. Tanenbaum. I Moderni Sistemi Operativi (Terza Edizione). Pearson Prentice Hall, 2009
 - Andrew S. Tanenbaum. Modern Operating Systems (Third Edition). Pearson-Prentice Hall, 2008
 - A. Silbershatz, P. Galvin, G. Gagne: Sistemi Operativi (5^ edizione), Apogeo, 2005
 
