Conoscenza e capacità di comprensione: acquisire conoscenza e capacità di comprensione dei concetti fondamentali di architettura dei sistemi di calcolo e dei principi metodologici che ne ispirano lo sviluppo, nella prospettiva storica della loro evoluzione;
Capacità di applicare conoscenza e comprensione: acquisire capacità di risolvere problemi di progetto di sistemi di calcolo, cimentandosi con esercizi proposti a tal fine, e di adoperare, progettare e realizzare strumenti software, quali simulatori ed interpreti, per macchine astratte relative ai livelli più bassi della organizzazione dei sistemi di calcolo.
Autonomia di giudizio: essere in grado di confrontare e valutare la qualità di soluzioni a problemi di progetto di sistemi di calcolo.
Abilità comunicative: acquisire abilità comunicativa e proprietà di linguaggio utili alla comunicazione di problematiche inerenti il funzionamento, la progettazione, la realizzazione e la valutazione di sistemi di calcolo, anche con interlocutori non esperti.
Capacità di apprendimento: sviluppare capacita di adattamento delle proprie conoscenze alla rapida evoluzione della disciplina e di aggiomamento mediante la consultazione di fonti specialistiche del settore.
Nessun prerequisito è richiesto.
Per una piena comprensione degli argomenti del corso e delle tecniche presentate, la frequenza delle lezioni e delle esercitazioni è fortemente consigliata.
Il corso si articola in 12 lezioni (36 ore) e 12 esercitazioni orientate al laboratorio (36 ore). I contenuti dettagliati sono pubblicati nella Guida rapida all'insegnamento:
Si accede al materiale didattico attraverso la Guida rapida all'insegnamento. Il materiale didattico consta di:
Il materiale didattico è pubblicato, durante lo sviluppo dell'insegnamento, in parte attraverso collegamenti nella Guida rapida dell'insegnamento, forniti nelle suddette pagine del programma delle lezioni e delle esercitazioni, e per la parte restante nell'area di esercitazione e di consultazione e discussione dei materiali didattici, realizzata nel servizio dipartimentale Moodle, ad accesso riservato ai partecipanti all'insegnamento (ciò è necessario perché buona parte del materiale è protetto da copyright, con permesso di distribuzione limitata agli studenti dell'insegnamento).
* | Argomenti | Riferimenti testi | |
1 | L01. Finalità e organizzazione dello studio. Macchine da calcolo: cenni storici. | 1: 1.7 | |
2 | E01. Aritmetica Maya, sull'abaco e con simulatori. | 2: 1 | |
3 | * | L02. Macchine da calcolo: unità funzionali, architetture. | 1: 1.0-3, 1.6 |
4 | * | E02. Rappresentazione binaria dei numeri e dell'informazione. | 1: 1.4-5, A1.1-3 |
5 | * | L03. Strutture algebriche, algebre di Boole. | 2: 2 |
6 | * | E03. Logica della commutazione, porte logiche, sintesi di funzioni logiche. | 1: A.0-4 |
7 | * | L04. Realizzazione di porte logiche, circuiti sequenziali, flip-flop. | 1: A.5-6 |
8 | * | E04. Registri, componenti di chip di memoria e del processore, PLA, FPGA, ALU. | 1: A.7-11, 9.1 |
9 | * | L05. Architetture RISC e CISC, modi d'indirizzamento, esempi di ISA reali. | 1: 2.0-4, A2.1-2 |
10 | * | E05. Linguaggio assemblativo, direttive di assemblatore, pile e sottoprogrammi. | 1: 2.5-7, A2.3 |
11 | * | L06. Tipi e formati di istruzioni, esempi di linguaggi assemblativi reali. | 1: 2.8, 2.10.2, A2.4-5 |
12 | * | E06. Modi di indirizzamento complessi, esempi di programmi assemblativi. | 1: 2.9-10.1, 2.11-13, A2.6 |
13 | * | L07. Operazioni di I/O, controllo e servizio delle interruzioni. | 1: 3.0-2.5, A3.1 |
14 | E07. Gestione di interruzioni ed eccezioni in architetture reali. | 1: 3.2.6, A3.2-3 | |
15 | * | L08. Software di supporto, linguaggi assemblativi e C, sistema operativo. | 1: 4.0-9.2 |
16 | E08. Esempi di programmi con integrazione di linguaggi C e assemblativi. | 2: 3 | |
17 | * | L09. Struttura di base del processore, microarchitetture RISC e CISC. | 1: 5.0-4 |
18 | * | E09. Progetto di microarchitetture, microprogrammazione, pipelining. | 1: 5.5-7, 6.0-5 |
19 | * | L10. Processori ad alte prestazioni, tecniche predittive, processori superscalari. | 1: 6.6-10 |
20 | * | E10. Bus e circuiti d'interfaccia, standard d'interconnessione (cenni). | 1: 7.0-4 (7.5) |
21 | * | L11. Dispositivi di memoria principale, DMA, gerarchia delle memorie. | 1: 8.0-5 |
22 | * | E11. Memorie cache, miglioramento delle prestazioni, memoria secondaria. | 1: 8.6-7, 8.10 |
23 | L12. Circuiti efficienti per l'aritmetica binaria. | 1: 9.2-4, 9.6 | |
24 | E12. Moltiplicazione veloce, aritmetica binaria in virgola mobile (IEEE 754). | 1: 9.5, 9.7-8 |
non previste
I colloqui orali possono essere sostenuti in qualsiasi orario di ricevimento studenti; per questi non occorre prenotazione.
Nell'esempio di protocollo di arbitraggio illustrato in Figura 7.9, il master che riceve una concessione del bus mantiene la sua linea di richiesta nello stato asserito finché non è pronto a rilasciare il bus. Si assuma che sia disponibile una linea detta Busy, che viene asserita dal master che sta usando il bus. L'arbitro concede il bus solo quando Busy è inattiva. Quando un master riceve una concessione, asserisce Busy e annulla la sua richiesta, e in risposta l'arbitro annulla la concessione. Il master disattiva Busy quando ha finito di usare il bus. Tracciare un diagramma di sincronizzazione equivalente alla Figura 7.9 per questo modo di funzionamento.
Un calcolatore indirizzabile a byte ha una piccola cache di dati capace di tenere otto parole da 32 bit. Ciascun blocco della cache consiste di una parola da 32 bit. Quando un certo programma viene eseguito, il processore legge i dati sequenzialmente dai seguenti indirizzi esadecimali:
200, 204, 208, 20C, 2F4, 2F0, 200, 204, 218, 21C, 24C, 2F4
Questa sequenza di letture è ripetuta in quattro iterazioni di un ciclo. Si assuma che la cache sia inizialmente vuota. Mostrare i contenuti della cache alla fine di ciascuna iterazione del ciclo, e calcolare il tasso di successo, nell'ipotesi di cache a corrispondenza diretta.
Moltiplicare ciascuna delle seguenti coppie di numeri interi con segno in complemento a due usando l'algoritmo di Booth. Assumere in ciascun caso che A sia il moltiplicando e B il moltiplicatore.
(a) A = 010111, B = 110110
(b) A = 110011, B = 101100
(c) A = 001111, B = 001111