Additions:
~- Esercizio per casa "unrolled linked list": [[Eserc06AA1617 testo]] (vedere esercizio 2) | [[SolEserc06AA1617 soluzione]]
Deletions:
~- Esercizio per caso: unrolled linked list [[Eserc06AA1617 testo]] (vedere esercizio 2) | [[SolEserc06AA1617 soluzione]]
Additions:
~- Esercizio per caso: unrolled linked list [[Eserc06AA1617 testo]] (vedere esercizio 2) | [[SolEserc06AA1617 soluzione]]
Additions:
~- ##coppa@SC1:~$ echo Buon Natale! In bocca al lupo per l'esame##
Deletions:
~- ##coppa@sc:~$ echo Buon Natale! In bocca al lupo per l'esame##
Additions:
~- ##coppa@sc:~$ echo Buon Natale! In bocca al lupo per l'esame##
Deletions:
~- ##echo Buon Natale! In bocca al lupo per l'esame##
Additions:
~- ##echo Buon Natale! In bocca al lupo per l'esame##
Additions:
==Venerdì 22 dicembre 2017 (Lezione 21 - 150 min) - Coppa==
~- [[Materiale171222 Esercizi sulle system call POSIX]]
Deletions:
~- Pattern di accesso a memoria: sequenze di indirizzi e sequenze di numeri di pagina
No differences.
Additions:
==Giovedì 14 dicembre 2017 (Lezione 18 - 150 min) - Coppa==
~- Come è strutturata la memoria? (parte II) [[[http://www.cs.cmu.edu/~213/lectures/10-memory-hierarchy.pdf ref1]], [[http://www.cs.cmu.edu/~213/lectures/12-cache-memories.pdf ref2]]]
~~- gerarchie di memoria:
~~~- registri, cache L1 (D+I), L2, L3, memoria, disco
~~~- trasferimento dati a blocchi tra livelli successivi di una memoria gerarchica
~~~- analisi di costo/dimensione/[[https://gist.github.com/hellerbarde/2843375 velocità]] dei livelli di una memoria gerarchica
~~~- caso di studio: Intel Core i7, gerarchia di memoria (L1i, L1d, L2, L3, DDR3) [[[http://www.cs.cmu.edu/~213/lectures/18-vm-systems.pdf ref1]]][[[http://www.tomshardware.com/picturestory/514-intel-cpu-processor-core-i7.html ref2]]]
~~- ottimizzazioni del codice nell'uso della memoria:
~~~- allineamento e padding:
~~~~- stack frame a 16 byte prima di una call
~~~~- allineamento dei campi delle struct: riordinare le struct per ridurre il padding [[[http://www.catb.org/esr/structure-packing/ rif]]]
~- Come viene gestita la memoria? [[[http://www.cs.cmu.edu/~213/lectures/17-vm-concepts.pdf ref1]], [[http://www.cs.cmu.edu/~213/lectures/18-vm-systems.pdf ref2]]]
~~- memoria fisica (gestita dal sistema operativo) e memoria virtuale (visibile ai processi)
~~- allocazione dinamica della memoria
~~~- frammentazione interna ed esterna
~~~- qualità di un allocatore: tempo e spazio
~~~- cenni ad implementazione di un allocatore: malloc/free, sbrk(2)
~~- allocazione nella memoria fisica: memoria virtuale
~~~- mapping tra indirizzi virtuali e indirizzi fisici: MMU
==Martedì 19 dicembre 2017 (Lezione 19 - 100 min) - Coppa==
~- Panoramica sui vari allocatori presenti in un sistema di calcolo:
~~- allocazione dello spazio ai vari processi da parte del kernel
~~- allocazione dello spazio a un singolo processo da parte dell'allocatore libc
~- Allocazione nella memoria fisica: memoria virtuale
~~- limiti dei sistemi con accesso diretto alla memoria fisica: frammentazione estenra
~~- paginazione
~~- frammentazione interna nelle pagine
~~- come avviene il mapping degli indirizzi logici su quelli fisici?
~~- paginazione con bit di validità
~~- condivisione di pagine,: es.comuncazione tra processi, librerie dinamiche
~~- page fault memoria virtuale e loro gestione, protection fault (SIGSEGV)
~~- Paginazione con bit di validità e swapping su disco: gestione page fault
~~- Working set e thrashing
==Giovedì 21 dicembre 2017 (Lezione 20 - 150 min) - Coppa==
~- Pattern di accesso a memoria: sequenze di indirizzi e sequenze di numeri di pagina
~- Riepielogo meccanimsmo memoria virtuale, paginazione, swap, traduzione indirizzi logici in fisici
~- [[EsercMemoria1617 Esercizi sulle gerarchie di memoria e pattern di allocazione]]
Additions:
==Martedì 12 dicembre 2017 (Complementi C - 100 min) - Coppa==
Additions:
~~~- esempi di analisi: somma degli elementi di un array, prodotto di matrice, scansione lineare di un array vs. lista collegata
Deletions:
~~~- esempi di analisi: somma degli elementi di un array, scansione lineare di un array vs. lista collegata
==Martedì 12 ottobre 2017 (Complementi C - 100 min) - Coppa ==
Additions:
~~- Comandi di base ([[https://github.com/season-lab/sistemi-di-calcolo/blob/master/gdb/README.md sintesi]], [[https://sourceware.org/gdb/onlinedocs/gdb/ documentazione]]): ##run##, ##start##, ##quit##, ##break##, ##step##, ##cont##, ##next##, ##finish##, ##print##, ##delete##, ##info break##, ##backtrace##, ##frame##, ##where##
Deletions:
~~- Comandi di base ([[https://github.com/season-lab/sistemi-di-calcolo/blob/master/gdb/README.md sintesi]], [[https://sourceware.org/gdb/onlinedocs/gdb/ documentazione]]): ##file##, ##run##, ##quit##, ##break##, ##step##, ##cont##, ##next##, ##finish##, ##print##, ##x##, ##delete##, ##info break##, ##backtrace##, ##frame##
Additions:
==Martedì 12 ottobre 2017 (Complementi C - 100 min) - Coppa ==
~- Valgrind ([[https://github.com/season-lab/sistemi-di-calcolo/tree/master/valgrind codice esempi]]):
~~- uninitialized data: ##unitialized-var.c##, ##unitialized-conditional-jump-and-ptr.c##
~~- invalid access: ##invalid-heap-memory.c## (use-after-free), ##invalid-stack-memory.c##, ##offset-by-one-heap.c##, ##offset-by-one-stack.c##
~~- double free / invalid free: ##double-free.c##, ##invalid-free.c##
~~- memory leak: ##memory-leak.c##
~- Gnu Debugger (gdb)
~~- Concetto di debugger
~~- Comandi di base ([[https://github.com/season-lab/sistemi-di-calcolo/blob/master/gdb/README.md sintesi]], [[https://sourceware.org/gdb/onlinedocs/gdb/ documentazione]]): ##file##, ##run##, ##quit##, ##break##, ##step##, ##cont##, ##next##, ##finish##, ##print##, ##x##, ##delete##, ##info break##, ##backtrace##, ##frame##
~~- Esempi ([[https://github.com/season-lab/sistemi-di-calcolo/tree/master/gdb codice]]: ##somma.c##, ##nullptr.c##, ##overflow.c##
Deletions:
~~- altri usi delle cache in un sistema di calcolo (es. disco, browser)
Additions:
==Giovedì 7 dicembre 2017 (Lezione 17 - 150 min)==
~~- evoluzione negli ultimi decenni: legge di Moore, crescita esponenziale numero transistor, avvento delle architetture multicore [[[http://www.gotw.ca/publications/concurrency-ddj.htm Moore's Law]]]
~- Come è strutturata la memoria? (parte I) [[[http://www.cs.cmu.edu/~213/lectures/10-memory-hierarchy.pdf ref1]], [[http://www.cs.cmu.edu/~213/lectures/12-cache-memories.pdf ref2]]]
~~- astrazione con modello lineare
~~- transazioni di lettura e scrittura: configurazione del bus, trasferimenti da CPU a memoria e viceversa
~~- divario tra velocità CPU (cycle time) e velocità accesso a memoria, evoluzione del trend
~~- principio di località, località spaziale e temporale
~~- caching come strategia di duplicazione della memoria oppure per memorizzare risultati di computazioni ricorrenti
~~- cache come buffer per compensare divario tra velocità di processamento e velocità di accesso ai dati sfruttando il principio di località
~~~- partizionamento in blocchi, dimensione blocco (linea di cache), cache hit e cache miss, cenni a strategia di replacement
~~~- esempi di analisi: somma degli elementi di un array, scansione lineare di un array vs. lista collegata
~~- altri usi delle cache in un sistema di calcolo (es. disco, browser)
Deletions:
[[[http://www.gotw.ca/publications/concurrency-ddj.htm Moore's Law]]]
Additions:
~~- aspetti prestazionali: clock e frequenza del processore, IPC e CPI
~~- cenni ad esecuzione parallela: CPU multicore e instruction-level parallelism (es. AVX, pipelining)
~~- cenni ad architetture CISC e RISC
[[[http://www.gotw.ca/publications/concurrency-ddj.htm Moore's Law]]]
Deletions:
~~- aspetti prestazionali: clock e frequenza del processore, IPC e CPI [[[http://www.gotw.ca/publications/concurrency-ddj.htm Moore's Law]]]
Additions:
==Martedì 4 dicembre 2017 (Lezione 16 - 100 min) - Coppa==
~- Esecuzione programmi sulla CPU:
~~- ciclo fetch-decode-execute
~~- architetture superscalari, pipelining, hazard e stalli, branch prediction
~~- aspetti prestazionali: clock e frequenza del processore, IPC e CPI [[[http://www.gotw.ca/publications/concurrency-ddj.htm Moore's Law]]]
~~- ottimizzazioni del codice sfruttando la pipeline: istruzioni branchless, instruction scheduling
Additions:
~- Segnali:
~~- effetto arrivo segnale su esecuzione system call: esempio con ##pause## e installazione gestore ##SIGINT##
~- Gestione dei permessi:
~~- permessi sulle risorse (rwx)
~~- visione utente: ##chmod## (ottale)
~- Gestione dei file:
~~- system call ##open##, ##read##, ##write## e ##close##
~~- esempio: realizzazione comando ##cat##
~~- operazioni di I/O interrotte da segnali, gestione errore ##EINTR## su ##read## interrotta prima di leggere almeno un byte
~- Esercizi: implementazione di una semplice shell con uno o più comandi e supporto di comandi interni
~- [[Materiale171127 Materiale aggiuntivo per la lezione]]
Deletions:
~- Gestore di un segnale:
~- System call file descriptor:
~~- ##open##, ##close##, ##read##, ##write##
Additions:
~- Gestore di un segnale:
~- System call file descriptor:
Deletions:
~ Gestore di un segnale:
~ System call file descriptor:
Additions:
~~- ##open##, ##close##, ##read##, ##write##
Deletions:
~~ ##open##, ##close##, ##read##, ##write##