08574 - SISTEMI OPERATIVI

Anno Accademico 2011/2012

  • 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.
Come peso sul voto finale, all'incirca: 30% scritto, 30% pratica, 40% colloquio

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