Diario delle lezioni
Questa pagina riporta l’elenco, i contenuti e i video delle lezioni.
Le lezioni vengono inoltre registrate e conservate tramite strumenti digitali. Si ricorda che le registrazioni risultanti saranno riutilizzabili solo alle condizioni previste dalla normativa vigente sul riuso dei dati pubblici (direttiva comunitaria 2003/98/CE e d. lgs. 36/2006 di recepimento della stessa), in termini compatibili con gli scopi per i quali sono state raccolte e registrate, ovvero esclusivamente a fini didattici e nel rispetto della normativa in materia di protezione dei dati personali.
Argomenti settimana 1: lunedì 20 - venerdì 24 febbraio 2023 (Assaiante-Coppa)
- Struttura generale dell’hardware di un sistema di calcolo: macchina di Von Neumann
- Porte logiche AND, OR, NOT, XOR e tabelle di verità
- Realizzazione porte logiche mediante resistenze e transistor con demo pratica
- Cenni a tecnologie VLSI e al processo litografico per la creazione di wafer (rif1, rif2, rif3)
- Circuiti combinatori: addizionatore parziale e completo, addizionatore a più bit
- Circuiti sequenziali: flip-flop, nozione di stato e di clock
- Strumenti di debugging:
- Materiale didattico:
Argomenti settimana 2: lunedì 27 febbraio - venerdì 3 marzo 2023 (Assaiante-Coppa)
- Pipeline compilazione
gcc
(-E
, -c
, -S
, -o
)
- Linguaggio assembly vs. linguaggio macchina (codice binario)
- Tool
objdump -d
per disassemblare codice binario
- Spiegazione layout memoria segmento eseguibile con istruzioni giustapposte con formato variabile
- Esempio di scrittura di file
.s
,
- Comando
file
per analizzare il tipo di file
- Primi elementi di sintassi assembly AT&T:
- Traduzione C->IA32: assegnamento
- istruzione
mov
e suffisso l
(movl
) per indicare movimento di 4 byte da sorgente a destinazione
- letterali costanti
$
- Traduzione C->IA32: ritorno da funzione
- istruzione
ret
- registro
%eax
come valore di ritorno a 32 bit
- Nozione ISA (es. IA32 vs. AMD64/x86-64/x64)
- Focus su sintassi AT&T
- Registri interi a 32 bit (general-purpose e speciali):
A
, B
, C
, D
, SI
, DI
, BP
, SP
- Struttura generale delle istruzioni IA32 binarie e unarie, operandi sorgente e destinazione
- Operandi immediati, registro e memoria
- Corrispondenza suffissi IA32 e tipi (
b
, w
, l
)
- Operatori logici (
not
, and
, or
, xor
) e aritmetici (neg
, add
, sub
, imul
, inc
, dec
, div
)
- Traduzione C->IA32: calcolo di espressioni aritmetiche
- Traduzione C->IA32: accesso ai parametri passati a una funzione
- registro
%esp
(stack pointer), layout della stack caller-callee, indirizzo di ritorno
- modo di indirizzamento registro con spiazzamento
d(%esp)
- Esempi
- Materiale didattico:
Argomenti settimana 3: lunedì 6 - venerdì 10 marzo 2023 (Assaiante-Coppa)
- Istruzioni di salto incondizionato (istruzione
jmp
) e condizionato (famiglia jcc
)
- Etichette che denotano indirizzi (target di salti)
- Traduzione di schemi
if
, if ... else
, while
e for
in forma if ... goto
direttamente traducibile in IA32
- Cenni a registro
EFLAGS
e suo ruolo nel registrare informazioni che collegano azioni effettuate da operazioni aritmetico-logiche e successive istruzioni di salto condizionato.
- Condition code relative al risultato della precedente istruzione aritmetico-logica:
e
, ne
, l
, le
, g
, ge
, a
, ae
, b
, be
(signed e unsigned). Non trattate condizioni che definiscono i condition code in funzione dei bit ZF, OF, CF, ecc, di EFLAGS (fuori degli obiettivi del corso).
- Pattern
sub-jcc
, cmp-jcc
, test-jcc
.
- Esercizi svolti in classe.
- Materiale didattico:
Argomenti settimana 4: lunedì 13 - venerdì 17 marzo 2023 (Assaiante-Querzoni-Coppa)
- Uso di puntatori: modi di indirizzamento indiretto a registro con base, indice, scala e spiazzamento.
- Aritmetica dei puntatori.
- Uso di stringhe C.
- ABI (Application Binary Interface)
- Chiamata e ritorno da funzione: istruzioni
CALL
e RET
(semantica e uso)
- Passaggio dei parametri: allocazione della memoria nello stack frame
- Calling convention System V: registri callee-save e caller save, istruzioni
PUSH
e POP
(semantica e uso)
- Esercizi svolti in classe.
- Materiale didattico:
Argomenti settimana 5: lunedì 20 - venerdì 25 marzo 2023 (Querzoni-Coppa)
- Conversioni di tipo intero (type cast): istruzioni
MOVZ
e MOVS
- Variabili locali: allocazione della memoria nello stack frame e allineamento %esp a 4 byte
- Istruzione
LEA
per il calcolo di indirizzi ed espressioni: esempio del calcolo di indirizzi di variabili locali in stack e calcolo di espressioni aritmetiche
- Espressioni booleane: istruzione
SETcc
e regola del cortocircuito in C
- Esercizi svolti in classe.
- Materiale didattico:
Argomenti settimana 6: lunedì 27 - venerdì 31 marzo 2023 (Querzoni-Coppa)
- Consultazione del manuale Application Binary Interface (ABI) [rif]
- Consultazione del manuale Intel (ISA, Volume 1 e 2) [rif]
- Accenno alla sintassi ASM Intel [rif]
- Regole di allineamento oggetti in memoria, vincolo allineamento 4 byte su
ESP
- Struct in C e sue regole di allineamento e padding [rif]
- Allocazione struct in stack
- Assegnamento condizionato con istruzione
CMOV
- Shift logico
SHL
/SHR
ed aritmetico SAL/SAR: applicazione su rappresentazioni con e senza segno, moltiplicazione e divisione intera per 2^S
- Divisione intera
IDIV
- Vincoli su alcune istruzioni (IMUL, CMOV, TEST, CMP, MOVZ/MOVS)
- Panoramica sull’architettura x86_64 e ABI x86_64/Linux
- Esercizi svolti in classe.
- Materiale didattico:
Argomenti settimana 7: lunedì 3 aprile - venerdì 14 aprile 2023 (Querzoni-Coppa) (include periodo di vacanze pasquali)
- Metriche prestazionali: latenza, throughput, spazio, energia (cenni)
- Scala della latenza degli eventi in un sistema di calcolo
- Speedup, legge di Amdahl e studio porzioni da ottimizzare in un programma
- Profilazione manuale delle prestazioni: clock_gettime e getrusage
- Latenza e risoluzione timer, esperimenti, funzione clock_getres (cenni)
- Tool di profilazione gprof
- Aspetti chiave delle ottimizzazioni, livello di intervento: algoritmo e codice
- Ottimizzazioni applicate dal compilatore e ottimizzazioni applicate dal programmatore
- Importanza delle ottimizzazioni come “moneta” per “comprare” altre qualità del software
- Legge di Moore (trend transistor, frequenza di clock, watt, numero di core negli ultimi 40 anni)
- Ottimizzazioni del work:
- constant folding
- constant propagation
- common subexpression elimination
- loop-invariant code motion
- loop unrolling
- function inlining
- Ottimizzazioni del costo delle istruzioni:
- register allocation
- operator strength reduction
- memory alignment
- Materiale didattico:
* Esempi di codice visti in classe: 5.1-profiling.zip, 5.2-work-opt, 5.3-cost-opt.zip
Argomenti settimana 8: lunedì 17 aprile - venerdì 28 aprile 2023 (Querzoni-Coppa) (include ponte del 25 Aprile)
- Sistemi Operativi:
- obiettivi e compiti (panoramica)
- accenno modalità di esecuzione: utente vs supervisore
- POSIX vs libreria C vs system calls
- Uso di
man
per accedere alla documentazione di sistema
- Cenni all’uso dei tool di analisi ltrace e strace
- Codice di terminazione di un programma con return da main, exit, _exit, abort, assert
- Gestori atexit e cenni alle espressioni di tipo in C (es. puntatori a funzione)
- Gestione degli errori: errori recuperabili e non recuperabili
- Pattern di gestion errori recuperabili, cenni a variabile errno e perror
- Funzioni più comuni sulle stringhe: strlen, strcpy, strcat, strcmp, strtok, atoi, sprintf, sscanf
- Funzioni su memoria: memcpy, memset, memcmp
- Funzioni sui file: fopen, fclose, fprintf, fscanf (richiami), fread, fwrite, fseek, ftell
- Funzione sui file: open, read, write, close
- Esercizio sul caricamento di un file in un buffer in memoria
- Funzioni di ordinamento e ricerca, comparatori: qsort e bsearch
- Funzioni matematiche (cenni) e uso di -lm per la compilazione
- Esercizi sulle stringhe
- Materiale didattico:
Argomenti settimana 9: martedì 2 Maggio - venerdì 5 Maggio 2023 (Querzoni-Agostinelli)
- Processi
- Immagine di memoria di un processo
- Stati di un processo
- System call fork, wait, getpid, getppid, exec
- Materiale didattico:
Argomenti settimana 10: lunedì 8 - venerdì 12 Maggio 2023 (Assaiante-Agostinelli)
- Esecuzione di una singola istruzione: stadi (esempio 5 stadi presa in prestito da processori RISC)
- Pipelining come catena di montaggio, hazard e stalli strutturali, sui dati e sul controllo
- Schedulazione
- Preemption
- Time-sharing
- Flusso del controllo eccezionale: interrupt e segnali
- Chiamate a sistema con INT 0x80
- Scrittura wrapper syscall
- Segnali: kill, sigaction, pause, alarm
- Materiale didattico:
Argomenti settimana 11: lunedì 15 - venerdì 19 maggio 2023 (Querzoni-Assaiante-Agostinelli)
- Richiami su kilo, mega, giga, tera, ecc.
- Allocazione dinamica della memoria: frammentazione interna ed esterna
- Qualità di un allocatore: tempo e spazio
- Allocazione in cascata
- Memoria fisica e memoria virtuale
- Mapping tra indirizzi virtuali e indirizzi fisici: MMU
- Paginazione
- Bit di validità
- Memoria virtuale e thrashing
- Paginazione su richiesta
- Allocazione dinamica della memoria logica: malloc e free
- Cache: località temporale e spaziale, associatività, tipi di cache miss
- Gerarchie di memoria
- Materiale didattico:
Argomenti settimana 12: lunedì 22 - venerdì 26 maggio 2023 (Querzoni-Agostinelli)
- Gestione del file system: inode e blocchi
- Struttura del file system
- Permessi dei file e notazione ottale
- Tabella dei descrittori di file
- Operazioni su file e directories
- Gestione dei files: file ad accesso sequenziale, file ad accesso casuale
- Mount, umount, link e unlink, readdir
- Materiale didattico:
Argomenti settimana 13: lunedì 29 - mercoledì 31 maggio 2023 (Querzoni/Assaiante-Coppa/Agostinelli)
- Shell
- Variabili d’ambiente (getenv e setenv)
- Redirezione dell’output
- Esecuzione in foreground e background di un processo
- Esercizi riassuntivi: link
- Esercizi d’esame
- Materiale didattico:
[
A.A. 2014-2015 |
A.A. 2015-2016 |
A.A. 2016-2017 |
A.A. 2017-2018 |
A.A. 2018-2019 |
A.A. 2019-2020 |
A.A. 2020-2021 |
A.A. 2021-2022
]