Struttura e principali funzioni di un sistema operativo; processi, thread e scheduling della CPU; caratterizzazione e gestione dello stallo; gestione della memoria principale e virtuale; interfaccia e implementazione del file system; struttura dei dispositivi di massa e gestione del sistema di I/O.
Uso interattivo della shell in UNIX/Linux. Il linguaggio di programmazione C. UNIX/Linux system call. Programmazione di sistema e comunicazione tra processi in ambiente UNIX/Linux.
Teoria
Testo adottato: Sistemi Operativi. A.Silberschatz & P.B.Galvin & G.Gagne, 9ed., Addison-Wesley.
Testi di consultazione:
- Sistemi Operativi. P.Ancillotti & M. Boari & A. Ciampolini & G. Lipari, 2ed., McGraw-Hill.
- I Moderni Sistemi Operativi. A.S. Tanenbaum & H. Bos, 4ed., Pearson.
Laboratorio
BASH Programming – Introduction HOWTO. http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html
Programming in C - UNIX System Calls and Subroutines using C. http://www.cs.cf.ac.uk/Dave/C/CE.html
The Linux Kernel Module Programming Guide - P.J.Salzman, 2007. http://www.tldp.org/LDP/lkmpg/2.6/lkmpg.pdf
Obiettivi Formativi
Conoscenza e capacità di comprensione:
struttura interna dei sistemi operativi; funzionalità delle componenti dei sistemi operativi; problematiche inerenti progettazione e implementazione delle varie componenti dei sistemi operativi. Conoscenza e capacità di comprensione applicate:
comprensione approfondita dei legami hardware/software e dell'interazione dei sistemi operativi con i programmi utente; uso più consapevole ed efficace dei sistemi operativi e degli strumenti che forniscono.
Prerequisiti
Corsi vincolanti: Programmazione, Architetture degli Elaboratori
Metodi Didattici
Lezioni in aula: 60 ore.
Attività di laboratorio: 24 ore.
Altre Informazioni
Frequenza alle lezioni in aula e alle attività di laboratorio: raccomandata.
Strumenti a supporto della didattica UNIFI E-Learning: https://e-l.unifi.it/.
Ricevimento studenti Prof. Pugliese: per appuntamento. Contattare il docente per e-mail (rosario.pugliese@unifi.it).
Ricevimento studenti Dott. Ceccarelli: per appuntamento. Contattare il docente per e-mail (andrea.ceccarelli@unifi.it).
Modalità di verifica apprendimento
L'esame è composto di due prove, una riguardante la parte di teoria ed una riguardante la parte di laboratorio.
La prova di teoria consiste in un esame scritto comprendente domande di teoria ed esercizi da risolvere tramite l'applicazione pratica della teoria. Su richiesta dello studente o del docente, nel caso in cui lo studente abbia conseguito un punteggio pari o superiore a 16 nello scritto, è possibile sostenere anche una prova orale. In questo caso, il voto della prova di teoria è determinato tramite media aritmetica dei punteggi conseguiti nella prova scritta e nell'orale.
La prova di laboratorio consiste nello sviluppo di un progetto software, in gruppi di 2-3 studenti, e di una prova orale che include la discussione del progetto. Il voto della prova di laboratorio è determinato tramite media aritmetica dei punteggi conseguiti nella valutazione del progetto e nella prova orale.
Il voto finale dell'esame è determinato effettuando una media pesata del voto conseguito nella prova di teoria (con peso 2/3) e del voto conseguito nella prova di laboratorio (con peso 1/3).
Programma del corso
Funzioni principali di un sistema operativo. Modalità di funzionamento. Interruzioni. System call. I processi. Diagramma degli stati. Operazioni sui processi. Processi e threads. Gestione della CPU. Politiche di scheduling. Tecniche di prevenzione e rilevamento dello stallo. Gestione della memoria centrale. Allocazione contigua. Paginazione. Segmentazione. Memoria virtuale. Tecniche di sostituzione delle pagine. Gestione della memoria secondaria. Il file system. Directory e file. Metodi di accesso ai file. Allocazione dei file su disco. Interfaccia ed implementazione del file system. Gestione delle periferiche di I/O: polling, interrupt, DMA. Politiche di scheduling delle richieste al disco. Casi di studio: implementazione di alcuni concetti in Windows e UNIX/Linux.
Modulo di laboratorio: Comandi di shell in UNIX/Linux. Il linguaggio di programmazione C. UNIX/Linux system call. Programmazione di sistema e comunicazione tra processi in ambiente UNIX/Linux. Concetti di base di amministrazione dei sistemi UNIX/Linux.