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ì 21 - venerdì 25 febbraio 2022 (Coppa-Demetrescu)
- 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
- Sistemi Operativi: obiettivi e compiti (panoramica)
- Materiale didattico:
Argomenti settimana 2: lunedì 28 febbraio - venerdì 4 marzo 2022 (Coppa-Demetrescu)
- 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, cenni sintassi Intel
- 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
)
- 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)
- Rappresentazioni big-endian e little-endian.
- Esempi
- Materiale didattico:
Argomenti settimana 3: lunedì 7 - venerdì 11 marzo 2022 (Coppa-Demetrescu)
- 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
.
- Uso di puntatori: modi di indirizzamento indiretto a registro con base, indice, scala e spiazzamento.
- Aritmetica dei puntatori.
- Uso di stringhe C.
- Esercizi svolti in classe.
- Materiale didattico:
Argomenti settimana 4: lunedì 14 - venerdì 18 marzo 2022 (Coppa-Demetrescu)
- ABI (Application Binary Interface)
- Calling convention System V: registri callee-save e caller save, istruzioni
PUSH
e POP
(semantica e uso)
- Chiamata e ritorno da funzione: istruzioni
CALL
e RET
(semantica e uso)
- Passaggio dei parametri: allocazione della memoria nello stack frame
- 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 5: lunedì 21 - venerdì 25 marzo 2022 (Coppa-Demetrescu)
- 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 6: lunedì 28 marzo - venerdì 1 aprile 2022 (Querzoni-Demetrescu)
- Codice di terminazione di un programma con return da main, exit, _exit, abort, assert (cenni alle macro in C)
- 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
- Funzioni più comuni sulle stringhe: strlen, strcpy, strcat, strcmp, strtok, atoi, sprintf, sscanf
- Esercizi sulle stringhe
- Materiale didattico:
- Codice visto in classe: 4.1-strings
- Video degli argomenti trattati:
Argomenti settimana 7: lunedì 4 - venerdì 8 aprile 2022 (Querzoni-Demetrescu)
- Funzioni su memoria: memcpy, memset, memcmp
- Funzioni sui file: fopen, fclose, fprintf, fscanf (richiami), fread, fwrite, fseek, ftell
- 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
- Cenni all’uso dei tool di analisi ltrace e strace
- Uso del tool Valgrind
- Uso di GDB (comandi utili)
- 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)
- Materiale didattico:
Argomenti settimana 8: lunedì 11 - Venerdì 22 aprile 2022 (Querzoni-Demetrescu) (include periodo di vacanze pasquali)
- 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:
Argomenti settimana 9: lunedì 25 - venerdì 29 aprile 2022 (Querzoni-Coppa)
- Processi
- Immagine di memoria di un processo
- 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
- Stati di un processo
- Schedulazione
- Preemption
- Time-sharing
- System call fork, wait, getpid, getppid, exec
- Materiale didattico:
Argomenti settimana 10: lunedì 2 - venerdì 6 maggio 2022 (Querzoni-Coppa)
- 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ì 9 - venerdì 13 maggio 2022 (Querzoni-Coppa)
- 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ì 16 - venerdì 20 maggio 2022 (Querzoni-Coppa)
- Gestione dei files
- struttura del file system
- Operazioni su file e directories
- Link
- Materiale didattico:
Argomenti settimana 13: lunedì 24 - venerdì 28 maggio 2022 (Querzoni-Coppa)
- Shell
- Variabili d’ambiente
- Esercizi su debugging con gdb
- Esercizi riassuntivi
- Materiale didattico:
- Video degli argomenti trattati:
[
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
]