Sistemi operativi e laboratorio
Docente
- Prof. Marina Lenisa
- Prof. Ivan Scagnetto
Indirizzo e-mail
marina.lenisa@uniud.it
ivan.scagnetto@uniud.it
Indirizzo Pagina Web Personale
http://www.dimi.uniud.it/members/marina.lenisa/
http://people.uniud.it/page/ivan.scagnetto
Crediti
12 CFU
Finalità e Obiettivi Formativi
I sistemi operativi sono parte essenziale di un sistema di calcolo. Nella maggior parte dei casi, essi implementano la vera piattaforma sulla quale si svolge tutta l'attività di analisi, sviluppo, implementazione ed esecuzione dei sistemi software, incapsulando ed astraendo dal sistema hardware sottostante.
È` pertanto necessario che uno studente di Informatica possieda le basi per comprendere le principali problematiche relative all'efficace utilizzo (da utente, da progettista, da programmatore, da amministratore) di un sistema operativo moderno.
Allo scopo di fornire tali basi, durante il corso verranno discussi alcuni concetti fondamentali relativi ai sistemi operativi e alle loro funzionalità primarie (gestione dei processori, della memoria e dei dispositivi di ingresso/uscita).
Inoltre verranno illustrate tecniche di programmazione concorrente e gli aspetti concernenti il calcolo parallelo e distribuito.
Programma
Parte di teoria (9 CFU)
1. Aspetti generali:
* ruolo del sistema operativo (SO) in un sistema di calcolo;
* evoluzione dei SO; tipi di SO (batch/interattivi, time-sharing/dedicati, real-time, paralleli, distribuiti, sistemi embedded...);
* richiami sull'architettura di un sistema di calcolo (livelli di esecuzione delle istruzioni, gestione delle interruzioni, gestione dell'I/O);
* il SO come gestore di risorse: processi, memoria, dispositivi, file, interazione con l'utente;
* il SO come macchina virtuale: il nucleo, le chiamate di sistema;
* struttura di un sistema operativo (monolitico, a livelli, macchine virtuali, exokernel, microkernel client-server);
* esempi: Unix tradizionale, Linux, Solaris, Mach, Windows.
2. Processi e Thread:
* il concetto di processo: definizione e ruolo, il descrittore di processo;
* la manipolazione dei processi: la creazione/terminazione di un processo, grafo degli stati di un processo, la commutazione di contesto, lo scheduling di processi;
* i processi leggeri (threads): modello a thread, thread a livello utente vs. a livello kernel, soluzioni ibride, thread pop-up, passaggio da thread singolo a multithread;
* ruolo del nucleo: gestione interruzioni e traps, operazioni di wait e signal su condizioni di attesa;
* lo scheduling dei processori: concetti di base, criteri di scheduling, algoritmi di scheduling, scheduling di sistemi a multiprocessore, scheduling real-time.
3. Programmazione concorrente:
* race condition e sezioni critiche;
* mutua esclusione;
* sincronizzazione tra processi e memorie condivise;
* scambio messaggi;
* primitive di comunicazione e sincronizzazione: semafori, mutex, monitor, scambio di messaggi;
* problemi classici: produttore/consumatore, filosofi, lettori/scrittori, barbiere;
* stallo: definizione, modelli per lo stallo, identificazione, prevenzione.
4. Gestione della memoria:
* gerarchie di memoria: registri, cache, memoria centrale, memoria virtuale, dischi;
* il binding degli indirizzi, spazi logici e fisici di indirizzamento, la rilocazione;
* tecniche di allocazione: contigua, la paginazione, la segmentazione; la frammentazione;
* la memoria virtuale: paginazione a richiesta, algoritmi di sostituzione delle pagine, il thrashing, il modello Working set.
5. Input/Output:
* tipi di dispositivi di I/O - principi dell'hardware di I/O;
* gestione a basso livello dei dispositivi di I/O - PIO, DMA, DVMA;
* il trattamento delle interruzioni, i driver di I/O - I/O bloccante, non bloccante, asincrono - interfaccia per le applicazioni;
* i dischi - algoritmi di schedulazione dei dischi.
6. Il file system:
* il file, attributi, operazioni, struttura fisica;
* metodi di accesso sequenziale, diretto, a indice;
* le directory e la struttura logica di un file system: piatta, gerarchica, a grafo;
* la protezione; la consistenza;
* implementazione dei file system: organizzazione, allocazione e gestione spazio libero, backup e restore;
* struttura di un disco: gestione delle partizioni, gestione delle aree di swap;
* il caso di Unix: UFS, EXT2. Tabelle in kernel. Il Virtual File System. Risoluzione dei nomi in inode;
* operazioni su dischi, partizioni e file system;
* cenni ai journaled file system.
Attività di Laboratorio
Tutte le lezioni si svolgono in laboratorio (3 CFU).
1. Il sistema Operativo UNIX: struttura, interfaccia utente, varianti (Solaris, Linux).
La shell UNIX:
• ruolo e varianti,
• procedura di login,
• organizzazione del file system,
• manuale online,
• la shell bash: espansione del pathname, ridirezione del I/O, pipe, job in background, il comando history, editing della linea di comando, completamento di comandi,
• gli editor vi e (X)Emacs,
• il comando make.
Comandi principali della shell:
• gestione di file,
• gestione di processi,
• monitoraggio della memoria,
• comandi filtro: ricerca, ordinamento, editing.
Shell script:
• variabili,
• passaggio dei parametri,
• strutture di controllo,
• login script.
2. Basi di Linguaggio C.
3. Programmazione di sistema:
• controllo di processi,
• file system,
• comunicazione tra processi,
• thread e multithreading.
Prerequisiti
Programmazione e laboratorio (necessario).
Architettura degli elaboratori (necessario).
Bibliografia
- Trasparenze usate in aula dal docente
- A. Silberschatz, P.B. Galvin, G. Gagne, Sistemi operativi (ottava ed.). Pearson, 2009.
- A. Tanenbaum, I moderni sistemi operativi (terza ed.). Pearson (Prentice Hall), 2009.
- Algebra lineare, di S. Lang
Modalità d'esame
Prova scritta + prova di laboratorio (scritta) + prova orale facoltativa.
Orario di ricevimento
Lunedì 10.00-11.00 oppure su appuntamento.