Dettaglio insegnamento

ARCHITETTURA DEGLI ELABORATORI 1

MF0789

Insegnamento
ARCHITETTURA DEGLI ELABORATORI 1
Codice
MF0789
Anno Accademico
2025/2026
Anno regolamento
2025/2026
Corso di studio
INFORMATICA
Curriculum
000 - CORSO GENERICO
Responsabile didattico
CFU
6
Ore di lezione
48
Settore Scientifico Disciplinare (SSD)
INF/01 - INFORMATICA
Tipo di insegnamento
Attività formativa monodisciplinare
Fruizione insegnamento
OBB - Obbligatoria
Anno
1
Periodo
Primo Semestre
Sede
ALESSANDRIA
Lingua insegnamento
Italiano
Contenuti
Il corso fornisce le basi per comprendere l'architettura dei calcolatori moderni e come questa possa influenzare le prestazioni del software. Viene analizzata l'impressionante crescita delle prestazioni e la contemporanea riduzione dei costi dei computer, offrendo anche una breve prospettiva storica di questa evoluzione.
Durante il corso, si affrontano concetti chiave come i vari livelli di astrazione utilizzati per analizzare un calcolatore, i compromessi che guidano la scelta delle istruzioni elementari di un processore e l'importanza fondamentale dell'esecuzione parallela a diversi livelli per migliorare le performance. Si comprende anche il ruolo all’interno di un sistema delle memorie, che variano per dimensione, velocità e costo.
Si approfondisce poi la codifica binaria di numeri interi e in virgola mobile e le relative operazioni aritmetiche.
Si introducono l'algebra di Boole, le porte logiche e i circuiti logici sia combinatori che sequenziali.
Infine, il corso mostra come, assemblando questi circuiti, sia possibile creare parte del cammino dei dati di un moderno processore, prendendo come riferimento l'architettura open source RISC-V. L'architettura completa del RISC-V è trattata in un corso successivo.

Testi di riferimento
D.A. Patterson, J.L. Hennessy. Struttura e Progetto dei Calcolatori. Progettare con RISC-V. Seconda Edizione Italiana. Zanichelli 2023
Obiettivi formativi
In questo corso saranno introdotti i principi base che guidano il progetto dei calcolatori: definire diversi livelli di astrazione, progettare in funzione delle prestazioni, per esempio sfruttando il parallelismo e organizzando in modo efficiente le memorie. Saranno analizzate le differenze tra i linguaggi di programmazione di alto livello, e i linguaggi di basso livello (assembler e linguaggio macchina), la motivazione per cui sono richiesti entrambi i livelli, e i metodi per passare dal primo tipo di linguaggi al secondo.
Saranno richiamate le principali tappe nella storia dei calcolatori da metà del ‘900 ad oggi (introducendo l’architettura di Von Neumann), osservando come lo sviluppo della tecnologia ha influito su dimensioni, costi, velocità ed affidabilità dei calcolatori.
Si definiranno gli elementi di base della rappresentazione digitale dei dati, e successivamente saranno illustrate in modo formale e tramite esempi la rappresentazione digitale di numeri, con e senza segno, interi e frazionari (questi ultimi in virgola fissa e in virgola mobile) e del testo. Saranno forniti gli algoritmi per la codifica e decodifica dei dati dei diversi tipi.
Un altro obiettivo è mostrare come utilizzando l’algebra di Boole si possano definire (in forma di espressioni algebriche) le funzioni di base che svolgono il processore o altri componenti del sistema. Sarà poi spiegato il legame tra operatori booleani e porte logiche, tra espressioni booleane e circuiti logici combinatori, anche tramite l’applicazione in esercizi. Successivamente saranno illustrati alcuni semplici circuiti sequenziali (con memoria) mostrando prima le componenti elementari e poi la loro combinazione per ottenere registri o memorie.
Una volta appresi i circuiti base si svilupperanno alcuni esempi semplificati di circuiti più articolati che realizzano il cammino dei dati (data path) di un processore, in grado di eseguire alcuni tipi di istruzioni (principalmente aritmetico-logiche) sotto il controllo di opportuni segnali. Questo porrà le basi per introdurre parte della struttura del processore RISC-V che sarà approfondita in un corso successivo.
Verranno poi introdotti vari tipi di memoria, ed inseriti in diverse categorie, con diverse caratteristiche di costo, velocità, dimensione, e si evidenzierà il ruolo di ciascuna di esse nell’architettura di un calcolatore, considerando anche gli aspetti legati alle prestazioni.
Prerequisiti
Nessuno
Metodi didattici
Gli argomenti trattati nel corso sono esposti prevalentemente tramite lezioni frontali. Durante le lezioni viene usato uno strumento (Wooclap) che permette di interagire con gli studenti tramite quiz anonimi e interattivi accessibili tramite smartphone. In questo modo è possibile stimolare la riflessione e rilevare eventuali criticità nel processo di apprendimento.
Per ogni argomento trattato vengono proposti esercizi o quiz formativi. Vengono inoltre proposti incontri a piccoli gruppi alla presenza di un tutor, per svolgere e discutere esercizi (simili a quelli proposti nelle prove scritte).
Altre informazioni
Sulla piattaforma DIR sono disponibili: la copia elettronica delle slide utilizzate a lezione, esempi di testi d’esame, quiz di autovalutazione, informazioni generali sul corso e avvisi relativi allo svolgimento del corso e sugli esami.
Tramite un forum specifico sul DIR vengono pubblicate informazioni generali sul corso, avvisi relativi allo svolgimento del corso e informazioni riguardanti gli esami. Inoltre sono attivi forum dove gli studenti possono porre domande sugli argomenti del corso e sugli esercizi proposti, e rispondere a domande pubblicate da altri partecipanti.
Le studentesse e gli studenti con disabilità o con Disturbi Specifici dell’Apprendimento (DSA) o con Bisogni Educativi Speciali (BES) possono richiedere servizi e strumenti specifici a loro dedicati rivolgendosi allo Staff Sviluppo e Coordinamento Carriere e Servizi alle Studentesse e agli Studenti e consultando la pagina dedicata del sito di Ateneo: https://uniupo.it/it/servizi/servizi-studenti- disabili-e-dsa. Le studentesse e gli studenti con disabilità, DSA, BES, una volta preso contatto con lo Staff di Ateneo, possono contattare la/il docente titolare dell’insegnamento in relazione alla declinazione delle modalità di esame, in merito agli aspetti didattici.
Modalità di verifica dell'apprendimento
L’esame di norma è scritto ma è possibile richiedere l’orale; inoltre una integrazione orale può essere proposta (dopo lo scritto) dalla docente quando sia necessario chiarire qualche punto oscuro dello scritto. Possono essere proposte prove in itinere (come supporto al superamento dell’esame finale) che possono anche assumere la forma di esercizi da svolgere in laboratorio. La prova comprende da quattro a sei domande che possono essere articolate in sottopunti e comprendono anche esercizi di applicazione delle nozioni apprese ad esempi concreti. La prova è superata se si raggiunge un punteggio di almeno il 60% dei punti totalizzabili sull’insieme di domande.
Programma esteso
Gli argomenti trattati nel corso sono principalmente tratti dal libro di testo (specifiche sezioni dei primi 4 capitoli e una appendice). Per alcuni argomenti sono forniti materiali aggiuntivi di aiuto allo studio.
1) Architettura degli elaboratori e principi di progettazione
Tipi di calcolatori e loro caratteristiche. Principi di progettazione delle architetture degli elaboratori: Utilizzo delle astrazioni per semplificare il progetto; Rendere veloci le operazioni più frequenti; Migliorare le prestazioni tramite il parallelismo, la pipeline e la predizione; sfruttare la gerarchia delle memorie.
Dai linguaggi di alto livello al linguaggio macchina.
Principali componenti di un calcolatore e in particolare del processore. Influenza dello sviluppo tecnologico sulle caratteristiche dei calcolatori elettronici. Cenni sull’evoluzione storica dei calcolatori. La macchina di von Neumann e i calcolatori moderni.
Definizione e misura degli indici di prestazione dei processori.
[Rappresentazione digitale dei dati]
Rappresentazione digitale dei dati: bit, byte e multipli. Rappresentazione di interi con e senza segno e operazioni aritmetiche sui numeri binari. Rappresentazione del testo: codici ASCII e Unicode. Numeri in virgola mobile: lo standard IEEE 754.
2) Circuiti logici e Implementazione di un processore
Algebra di Boole: variabili booleane, funzioni booleane di più variabili, espressioni booleane e principali leggi dell’algebra booleana. Le porte logiche. Dalle espressioni booleane ai circuiti logici combinatori. Alcuni circuiti combinatori utili per realizzare una Unità Aritmetico Logica (ALU). Latch e Flip Flop: i circuiti sequenziali e le memorie.
Uno schema semplice di implementazione di un primo processore ispirato al RISC-V.
3) La Gerarchia delle Memorie
La gerarchia delle memorie: le memorie volatili (Registri, Cache, RAM) e non volatili (dischi magnetici e SSD, dischi ottici). Velocità, dimensioni e costo delle memorie.
Risultati di apprendimento attesi
Al termine del corso si sarà in grado di:
Descrivere le caratteristiche dei principali tipi di calcolatori. Descrivere i principi ricorrenti nel progetto dei calcolatori: astrazioni; migliorare le prestazioni ottimizzando le situazioni più frequenti, sfruttando il parallelismo, eseguendo le operazioni in pipeline, anticipando le operazioni attraverso predizioni; impatto delle memorie nelle prestazioni di un calcolatore; come rendere più affidabili i sistemi attraverso la ridondanza. Comprendere le caratteristiche dei linguaggi di programmazione a diversi livelli e come avviene la traduzione da linguaggi di alto livello al linguaggio macchina (con interpreti e compilatori). Spiegare come l’evoluzione tecnologica ha influito su dimensione, costo e prestazioni dei calcolatori, determinando anche la diffusione capillare dei calcolatori. Definire come si possono misurare le prestazioni dei calcolatori. Elencare le principali tappe nella storia dei calcolatori, dalla metà del ‘900 ad oggi.
Comprendere le basi della rappresentazione digitale dei dati (in particolare dei numeri interi con e senza segno, frazionari con virgola fissa o mobile, del testo secondo i principali standard). Definizione di bit, byte, e dei multipli (Kilo, Mega, Giga, Tera). Descrivere le caratteristiche della notazione posizionale per la rappresentazione dei numeri interi (senza segno), saper applicare la definizione con diverse basi (in particolare per le basi 10, 2, 8 e 16). Ricordare gli algoritmi di conversione dei numeri tra basi e saperli applicare. Definire la rappresentazione in modulo e segno e in complemento a due dei numeri interi con segno. Definire la rappresentazione dei numeri frazionari in virgola mobile secondo lo standard IEEE 754. Eseguire operazioni aritmetiche su numeri binari. Comprendere ed esemplificare le conseguenze della rappresentazione dei dati su un numero finito di bit: overflow e underflow. Descrivere gli standard ASCII (base ed esteso) e Unicode di codifica del testo, e i metodi di rappresentazione dei codepoint Unicode (UCS-2, UTF-8, UTF-16). Applicare le diverse codifiche a brevi testi in varie lingue eseguendo esercizi di codifica e di decodifica. Spiegare i metodi Little Endiand e Big Endian di memorizzazione di dati codificati su più byte.
Definire l’Algebra di Boole: variabili, operatori, espressioni booleane, enunciare le principali leggi dell’algebra. Eseguire esercizi di semplificazione di espressioni booleane applicando tali leggi. Descrivere funzioni booleane di n variabili attraverso tavole di verità ed espressioni booleane; applicare i metodi di derivazione delle espressioni booleane in forma normale somma di prodotto o prodotto di somme dalla tavola di verità. Definire insiemi minimi di operatori necessari per descrivere una qualsiasi funzione booleana: dimostrare che ciascuno di tali insiemi minimi permettono di realizzare circuiti equivalenti a tutti gli altri operatori. Definizione delle porte logiche che realizzano gli operatori booleani. Saper ricavare da una espressione booleana il corrispondente circuito logico combinatorio e viceversa. Descrivere alcuni circuiti combinatori base per l’implementazione di CPU: multiplexer, decoder, sommatori, ALU. Descrivere i circuiti con memoria: latch, flip flop; spiegare il loro funzionamento (diretto da un clock) e descrivere come combinarli per ottenere registri o memorie.
Descrivere come collegando circuiti combinatori base e impostando opportuni segnali di controllo in modo coordinato, si possa ottenere un primo prototipi di “cammino dei dati” (data path) capace di eseguire alcune istruzioni fondamentali appartenenti al linguaggio macchina.
Descrivere i diversi livelli della “gerarchia delle memorie”, spiegando le caratteristiche dei diversi tipi di memorie (velocità, capacità, volatilità). Descrivere alcune tecnologie utilizzate per implementare memorie ai diversi livelli della gerarchia.
Ultimo aggiornamento:09-09-2026 00:14:31