====== 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