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 C. UNIX/Linux system call. Programmazione di sistema e comunicazione tra processi in ambiente UNIX/Linux. Cenni di Programmazione Kernel.
Teoria
Testo adottato: Sistemi Operativi. A.Silberschatz & P.B.Galvin & G.Gagne, 10ed., 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 (testi di consultazione)
- The Linux Command Line, W. Shotts.
- C didattica e programmazione, A. Kelley, I. Pohl, Pearson, 2nd Edition.
- Understanding the Linux kernel, D. Bovet, M. Cesati, O’Reilly.
- J. Erickson, L’arte dell’Hacking, vol 1, 2008.
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: 48 ore.
Attività di laboratorio: 36 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: di solito il martedì dalle 14.00 alle 15.30, prendere un appuntamento tramite 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 (con peso 2/3 sulla determinazione del voto finale) ed una riguardante la parte di laboratorio (con peso 1/3).
La prova di teoria consiste in un esame orale che verte su tutti gli argomenti del programma svolto a lezione. Oltre a domande di teoria, la prova potrà richiedere lo svolgimento di esercizi da risolvere tramite l'applicazione pratica della teoria. La prova orale mira a valutare la comprensione della struttura interna dei sistemi operativi, delle funzionalità delle loro principali componenti e dei problemi inerenti alla loro progettazione e implementazione. Oltre alla conoscenza degli argomenti presentati a lezione e alla capacità di applicare le conoscenze acquisite per la risoluzione di problemi nuovi, saranno altresì valutate la chiarezza dell’esposizione, l’uso appropriato del lessico specialistico e la capacità di mettere in relazione fra loro argomenti diversi del programma.
La prova di laboratorio consiste in i) sviluppare un progetto software, con una breve relazione, in gruppi di massimo 3 studenti, e ii) una prova orale che include la discussione del progetto e la verifica della conoscenza degli argomenti trattati nel modulo di laboratorio. Il voto della prova di laboratorio è determinato dalla media dei punteggi conseguiti nella valutazione del progetto software e nella prova orale. Il progetto è valutato secondo i criteri: i) qualità della relazione; ii) qualità del codice; iii) qualità della struttura e organizzazione dei file; iv) qualità del processo di compilazione; v) corretto comportamento funzionale del progetto. La verifica degli argomenti trattati nel corso tramite prova orale, una volta assodato che il progetto e la relativa discussione sono sufficienti, si basa su due insiemi di domande (GRUPPO A, composto da 20 domande, e GRUPPO B, composto da 80 domande), che saranno resi disponibili sul sito del corso. In particolare, come condizione necessaria per il superamento della prova orale, non sono ammesse lacune nella risposta alle domande del GRUPPO A. Rispondere soltanto a domande del GRUPPO A permette di ottenere un punteggio per la parte del modulo di laboratorio non superiore a 20.
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. Programmazione Kernel.