Diario delle lezioni
Questa pagina riporta l’elenco, i contenuti e i video delle lezioni.
A causa della didattica frontale sospesa per l’emergenza sanitaria da Coronavirus, le lezioni vengono tenute live su Google Meet all’indirizzo meet.google.com/xwv-toet-mnu (canale 1) e meet.google.com/yqt-decz-mwz (canale 2) agli orari stabiliti per il corso, accedendo con la mail istituzionale uniroma1.it dello studente.
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ì 24 - giovedì 27 febbraio 2020 (Coppa-Demetrescu)
- Illustrazione modalità corso ed esercitazioni
- 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
)
- Vincoli su operandi (es. destinazione
imul
solo registro)
- 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 2: lunedì 2 - giovedì 5 marzo 2019 (Coppa-Demetrescu)
- Rappresentazioni big-endian e little-endian.
- 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.
- Uso di gdb (solo canale 1)
- Materiale didattico:
Argomenti settimana 3: lunedì 9 - giovedì 12 marzo 2020 (Coppa-Demetrescu) - in streaming
- Uso di gdb (solo canale 2)
- 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
(entrambi i canali) e regola del cortocircuito in C (solo canale 1)
- Materiale didattico:
Argomenti settimana 4: lunedì 16 - giovedì 19 marzo 2020 (Coppa-Demetrescu) - in streaming
- 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 5: lunedì 23 - giovedì 26 marzo 2020 (Coppa-Demetrescu) - in streaming
- 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
- Visualizzazione al microscopio di un wafer al silicio reale
- Circuiti combinatori: addizionatore parziale e completo, addizionatore a più bit
- Circuiti sequenziali: flip-flop, nozione di stato e di clock
- Sistemi Ooperativi: obiettivi e compiti (panoramica)
- Materiale didattico:
Argomenti settimana 6: lunedì 30 marzo - giovedì 2 aprile 2020 (Demetrescu-Napoli) - in streaming
- 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
- 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
- Materiale didattico:
Argomenti settimana 7: lunedì 6 - giovedì 9 aprile 2020 (Demetrescu-Napoli) - in streaming
- Uso del tool Valgrind
- 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)
- Seconda lezione annullata per festività pasquali
- Materiale didattico:
Argomenti settimana 8: lunedì 13 - giovedì 16 aprile 2020 (Demetrescu-Napoli) - in streaming
- 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 e ottimizzazioni del costo delle istruzioni
- Livelli di ottimizzazione in gcc: -O0, -O1, -O2, -O3, -Os
- 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
- Materiale didattico:
Argomenti settimana 9: lunedì 20 - giovedì 23 aprile 2020 (Demetrescu-Napoli) - in streaming
- 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:
- Video degli argomenti trattati:
Argomenti settimana 10: lunedì 27 - giovedì 30 aprile 2020 (Demetrescu-Napoli) - in streaming
- Flusso del controllo eccezionale: interrupt e segnali
- Chiamate a sistema con INT 0x80
- Scrittura wrapper syscall
- Segnali: kill, sigaction, pause, alarm
- 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
- Materiale didattico:
- Video degli argomenti trattati:
Argomenti settimana 11: lunedì 4 - giovedì 7 maggio 2020 (Demetrescu-Napoli) - in streaming
- Allocazione dinamica della memoria logica: malloc e free
- Cache: località temporale e spaziale, associatività, tipi di cache miss
- Gerarchie di memoria
- File e directory: percorsi assoluti e relativi
- Organizzazione di un file system
- inode e blocchi
- Tabella dei descrittori di file di un processo
- mount e umount di file system
- Operazioni su file e directory (open, close, read, write, lseek, opendir, closedir, readdir)
- Materiale didattico:
- Video degli argomenti trattati:
Argomenti settimana 12: lunedì 11 - giovedì 14 maggio 2020 (Demetrescu-Napoli) - in streaming
- Gestione dei file: link e unlink
- Soluzioni esercitazione 8/5/2020
- Appendice A dispensa
- Materiale didattico:
Argomenti settimana 13: lunedì 18 - giovedì 21 maggio 2020 (Demetrescu-Napoli) - in streaming
- Variabili d’ambiente (getenv, setenv)
- Terzo parametro main (env)
- Appendice B dispensa
- Materiale didattico:
[
A.A. 2014-2015 |
A.A. 2015-2016 |
A.A. 2016-2017 |
A.A. 2017-2018 |
A.A. 2018-2019
]