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 30 settembre e il 16 dicembre 2014. Il secondo modulo sarà erogato nel periodo compreso tra il 23 febbraio il 29 maggio 2015.
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 che svolgono attività concorrenti. 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-thread
- Orario: martedì 14:00-17:15 in aula 13 della sede di Via Scarpa e giovedì 14:00-15:30 in aula 13 della sede di Via Scarpa, oppure presso il laboratorio didattico di Via Tiburtina
- Docente: Camil Demetrescu
- Esercitatore: Daniele Cono D'Elia
- Ricevimento studenti: martedì 11:00-13:00 durante il corso, poi su appuntamento (si prega di prenotarsi in ogni caso scrivendo una email al docente)
Secondo modulo (SC2): programmazione multi-thread
- Orario: martedì 12:00-13:30 in Aula 1 NEC (città universitaria), martedì 14:00-15:30 in Aula 13 Via Scarpa e giovedì 12:00-13:30 presso il laboratorio didattico di Via Tiburtina (da confermare)
- Docente: Roberto Baldoni
- Esercitatori: Leonardo Aniello e Daniele Cono D'Elia
- Ricevimento studenti: Giovedi' 16:00-17:30 via Ariosto 25 stanza B112 (si prega di inviare una email un paio di giorni prima per avere conferma che il ricevimento avverrà regolarmente)
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), uso del compilatore
gcc.