Informazioni generali
More computing sins are committed in the name of efficiency (without necessarily achieving it)
than any other single reason - including blind stupidity. -- Bill Wulf
Il corso è diviso in due moduli erogati durante tutto l'anno accademico. Le lezioni del primo modulo si tengono nel periodo compreso tra il 25 settembre e il 21 dicembre 2017. Il secondo modulo sarà erogato nel periodo compreso tra marzo e maggio 2017.
Contesto e obiettivi
I moderni sistemi di calcolo forniscono una grande potenza computazionale frutto di una notevole complessità architetturale. Sfruttare anche in parte questa potenza è una sfida che richiede una conoscenza interna dell'hardware, una comprensione degli algoritmi alla base delle computazioni, e una buona dose di creatività per ottenere implementazioni che utilizzino in modo ottimale le risorse di calcolo disponibili.
Il corso fornisce una panoramica dal punto di vista del programmatore su come i sistemi di calcolo eseguono programmi, memorizzano informazioni e comunicano fra loro, discutendo aspetti come prestazioni, portabilità e robustezza. Nel primo modulo del corso, gli studenti vengono introdotti ai princìpi di funzionamento di base di un calcolatore moderno, mostrando come programmare sfruttando i servizi offerti dai sistemi operativi, come i compilatori traducono codice C in linguaggio assembly e come scrivere programmi efficienti sfruttando le caratteristiche dell'hardware e come analizzarne le prestazioni. Il secondo modulo del corso affronta la programmazione di sistemi di calcolo su più larga scala, sfruttando le infrastrutture e le astrazioni offerte dai sistemi operativi e dalle reti di calcolatori, con particolare enfasi sui princìpi generali, fra cui stratificazione, modularizzazione, virtualizzazione e sicurezza.
Primo modulo (SC1): programmazione single-threaded
- Aule:
- Orari: [link corso di laurea]
- Canale 1 (A-G informatica e automatica e tutto sistemi informatici):
- lunedì 16:00-19:00, aula Gini
- venerdì 14:00-16:00, laboratorio Via Tiburtina aula 16
- Canale 2 (H-Z informatica e automatica):
- giovedì 8:15-11:00, aula Gini
- martedì 14:00-16:00, laboratorio Via Tiburtina, aula 15
- Docenti: Camil Demetrescu (canale 1-AG), Emilio Coppa (canale 2-HZ)
- Esercitatore: da comunicarsi
- Ricevimento studenti: su appuntamento (si prega di prenotarsi scrivendo una email al docente)
Secondo modulo (SC2): programmazione multi-threaded
La prima lezione del corso si terrà venerdì 9 marzo.
- Aule:
- Orari:
- Canale 1 (A-L):
- lunedì 14:00-17:00, aula Gini
- venerdì 10:15-12:30, laboratorio Via Tiburtina aula 16
- Canale 2 (M-Z):
- lunedì 14:00-17:00, aula Ginestra
- venerdì 10:15-12:30, laboratorio Via Tiburtina aula 15
- Docenti: Daniele Cono D'Elia (canale 1-AL), Riccardo Lazzeretti (canale 2-MZ)
- Esercitatore: Luca Massarelli
- Ricevimento studenti: su appuntamento (si prega di prenotarsi scrivendo una email al docente)
Prerequisiti
Nozioni di base sul modello di macchina di Von Neumann, algebra booleana, rappresentazione dei numeri interi con e senza segno, rappresentazione dei numeri in virgola mobile, conoscenza del linguaggio C (in particolar modo i tipi array, i puntatori, gli operatori */& e l'aritmetica dei puntatori).
[
A.A. 2014-2015 |
A.A. 2015-2016 |
A.A. 2016-2017 ]