Informazioni generali (A.A. 2016-2017)
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 3 ottobre e il 23 dicembre 2016. 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
- Orario:
- lunedì 10:15-11:45, ex Poste San Lorenzo (viale dello Scalo San Lorenzo 82), aula 204 (Canale 1-AO) e aula 201 (Canale 2-PZ) - [planimetria aule]
- giovedì 10:15-13:30, ex Poste San Lorenzo (viale dello Scalo San Lorenzo 82), aula 110 (Canale 1-AO) e aula 201 (Canale 2-PZ)
- venerdì 14:30-17:00, Laboratorio Didattico Paolo Ercoli via Tiburtina 205, aule 15 e 16 (Canale 1-AO e Canale 2-PZ)
- Docenti: Camil Demetrescu (canale 1-AO), Daniele Cono D'Elia (canale 2-PZ)
- Esercitatore: Emilio Coppa
- Ricevimento studenti: su appuntamento (si prega di prenotarsi scrivendo una email al docente)
Secondo modulo (SC2): programmazione multi-threaded
- Orario: (vedere anche qui)
- lunedì 10:00-12:00 - Lezione teorica
- Canale 1-AO: Aula I Caglioti - Nuovo Edificio di Chimica (Città Universitaria)
- Canale 2-PZ: Aula 15 Scienze Statistiche - Ex Officine Ortopediche (Città Universitaria) - CU035
- mercoledì 10:00-12:00 - Lezione pratica (Laboratori via Tiburtina 205)
- Canale 1-AO: Aula 16
- Canale 2-PZ: Aula 15
- per le lezioni pratiche, è possibile scegliere liberamente l'aula 15 o 16 in base alla disponibilità dei posti
- venerdì 10:00 - 1:00 - Lezione teorica
- Canale 1-AO: Aula I Caglioti - Nuovo Edificio di Chimica (Città Universitaria)
- Canale 2-PZ: Aula 15 Scienze Statistiche - Ex Officine Ortopediche (Città Universitaria) - CU035
- Docenti: Roberto Baldoni (Canale 1-AO), Leonardo Aniello (Canale 2-PZ)
- Esercitatori: Giuseppe Laurenza (Canale 1-AO), Leonardo Aniello (Canale 2-PZ)
- Ricevimento studenti
- Leonardo Aniello: lunedì 15:00-16:00, stanza B113 (verificare sempre il sito del docente per eventuali indisponibilità)
- Giuseppe Laurenza: venerdì 16:00-17:00, stanza B221 (è consigliato prenotarsi mandando una mail a laurenza@dis.uniroma1.it)
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 ]