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
]