- Docente: Alessandro Ricci
- Crediti formativi: 9
- SSD: ING-INF/05
- Lingua di insegnamento: Italiano
- Moduli: Alessandro Ricci (Modulo 1) Andrea Santi (Modulo 2)
- Modalità didattica: Convenzionale - Lezioni in presenza (Modulo 1) Convenzionale - Lezioni in presenza (Modulo 2)
- Campus: Cesena
- Corso: Laurea in Ingegneria elettronica, informatica e telecomunicazioni (cod. 8196)
Conoscenze e abilità da conseguire
Al termine del corso, lo studente possiede le conoscenze di base relative alla teoria, architettura, funzionamento e implementazione dei sistemi operativi moderni, alla programmazione di sistema e ai fondamenti della programmazione concorrente / multi-threaded. In particolare, lo studente è in grado di: - utilizzare e comprendere il funzionamento dei sistemi operativi moderni, in relazione agli aspetti di teoria, per ciò che concerne in particolare la gestione dei processi, la gestione della memoria, la gestione dell'I/O, la gestione del File System e aspetti base di sicurezza; - sviluppare programmi di sistema nel linguaggio C, in particolare per ambienti POSIX; - sviluppare semplici script nel linguaggio Shell, con riferimento ad ambienti UNIX; - sviluppare programmi concorrenti di base, nel linguaggio C e nel linguaggio Java; - comprendere e, in parte, saper modificare ed estendere l'implementazione di un sistema operativo moderno. Lo studente è in grado di auto-organizzarsi nell'apprendimento delle tecnologie informatiche e di esporre in modo appropriato l'analisi e la sintesi delle stesse.
Contenuti
La parte teorica del corso è suddivisa nei seguenti moduli:
- Concetti introduttivi
- Gestione dei processi
- Gestione della memoria
- Gestione dell'I/O
- Gestione del File System
- Protezione e sicurezza
- Approfondimenti: Virtualizzazione
La parte pratica / laboratorio:
- Programmazione di sistema (programmazione in linguaggio assembly (cenni), programmazione di sistema in C)
- Shell comandi UNIX e file comandi
- Implementazione di un sistema operativo moderno: Linux kernel (Linux kernel programming)
- Introduzione alla programmazione concorrente (programmazione multi-processo in C/POSIX, programmazione multi-threaded in Java)
Testi/Bibliografia
Il testo di riferimento del corso per la parte di teoria è:
"Operating Systems Concepts (8th ed.)" (Silbershatz, Galvin,
Gagne), Wiley.
Per la parte pratica:
"Linux Kernel Development" (Robert Love), Novell.
Metodi didattici
Dei nove crediti del corso, sei crediti sono dedicati alla teoria
ed esercizi in aula (60 ore) e tre alla pratica in laboratorio (30
ore).
Modalità di verifica e valutazione dell'apprendimento
L'esame finale prevede due parti:
- una prova scritta, con esercizi sugli aspetti di teoria e di programmazione del corso
- una prova pratica, che concerne un insieme di problemi di programmazione - relativi agli argomenti trattati nel corso e affrontati nelle lore di laboratorio - da svolgere in laboratorio e a casa
- un colloquio orale, sulla teoria ed eventualmente su esercizi relativi alla prova scritta e pratica.
Strumenti a supporto della didattica
Durante le lezioni verranno proiettati lucidi, disponibili
sul sito ufficiale del corso. A supporto delle attività pratiche,
verrà utilizzato il laboratorio di informatica di base ove gli
studenti troveranno gli strumenti necessari per svolgere le
esercitazioni. Tutto il materiale è disponibile sul sito di
riferimento del corso.
Link ad altre eventuali informazioni
http://www.moodle.unibo.it/course/view.php?id=284
Orario di ricevimento
Consulta il sito web di Alessandro Ricci
Consulta il sito web di Andrea Santi