Diario delle lezioni

Per ogni lezione vengono riportati riferimenti a paragrafi dei libri di testo.

Avvertimento

L’unione dei paragrafi può non rappresentare la totalità degli argomenti trattati durante la lezione.

12/01/2022 - Esercitazione 2

11/01/2022 - Esercitazione 1

22/12/2021 - Esempi C, Aspetti di sicurezza ed Introduzione a Linux

  • Esempi codice C aspetti di sicurezza:

    • layout di programma, permesso SUID e buffer overflow

    • accenni di return-oriented programming

    • address space randomization

    • canary tag

    • memorizzazione di password

  • Introduzione a Linux:

    • utente root

    • Filesystem Hierarchy Standard

    • terminale e shell

    • redirezionamento stdin e stdout (<,>,>>,|)

    • utenti e gruppi

    • /etc/passwd e /etc/groups

    • configurazione /etc/sudoers

Riferimenti e libri di testo

Approfondimenti

21/12/2021 - Esempi di programmazione C

  • Esempi codice C in Linux:

    • pattern produttore/consumatore

    • layout di programma, permesso SUID e buffer overflow

Riferimenti

15/12/2021 - File management parte 3

  • Esempi codice C in Linux:

    • copia di file regolare in C

    • redirezionamento I/O in C

    • memoria condivisa tramite shm_open e file su /dev/shm

Riferimenti

14/12/2021 - File management parte 2

  • Allocazione su hard disk

  • File system Unix:

    • inode

    • attributi

    • servizi per la manipolazione di file e directory

    • descrittore

    • in-memory file system

  • Recovery e file locking

Riferimenti libro di testo

  • [t1] Sezione 12.7, 12.8, 12.9

  • [t2] Sezione 14.4, 14.4.1, 14.4.2, 14.4.3, 14.6, 14.7, 14.7.1, 14.7.2, 15.5

Approfondimenti

07/12/2021 - File management parte 1

  • Concetto di file

  • Operazioni su file

  • File pointer

  • Metodo di accesso

  • Directory

  • Protezione

Riferimenti libro di testo

  • [t1] Sezione 12.1, 12.2, 12.4, 12.5

  • [t2] Sezione 13.1, 13.1.1, 13.1.2, 13.1.5, 13.2, 13.2.1, 13.2.2, 13.2.3, 13.3, 13.3.1, 13.3.2, 13.3.3, 13.3.4, 13.4, 13.4.1, 13.4.2

01/12/2021 - Gestione di I/O parte 2

  • Hard disk

  • HDD e SSD scheduling

Riferimenti libro di testo

  • [t1] Sezione 11.5

  • [t2] Sezione 11.1, 11.1.1, 11.1.2, 11.1.2.1, 11.2, 11.3

Approfondimenti

30/11/2021 - Gestione di I/O parte 1

  • Caratteristiche dei dispositivi di I/O

  • Modello di organizzazione dei moduli di I/O

  • I/O Buffering

  • I/O Scheduling

Riferimenti libro di testo

  • [t1] Sezione 11, 11.1, 11.2, 11.3, 11.4

  • [t2] Sezione 12.2.2, 12.2.3, 12.3, 12.4, 12.4.1, 12.4.2, 12.4.7

Approfondimenti

  • [t2] Capitolo 12

24/11/2021 - Gestione della memoria parte 5

  • Caricamento delle pagine

  • Posizionamento delle pagine

  • Sostituzione delle pagine: metodologia di valutazione, FIFO, Ottimo, LRU, algoritmi a stack, clock

  • Anomalia di Belady

  • Resident set management: Working set, Page fault frequency

  • Thrashing

Riferimenti libro di testo

  • [t1] Sezione 8.2

  • [t2] Sezione 10.4, 10.4.1, 10.4.2, 10.4.3, 10.4.4, 10.4.5, 10.5, 10.5.1, 10.5.2, 10.5.3, 10.5.4, 10.6, 10.6.1, 10.6.2, 10.6.3

23/11/2021 - Gestione della memoria parte 4

  • Memoria virtuale

  • Gestione di page fault

  • Performance della memoria virtuale

  • Aspetti generali per la gestione della memoria virtuale

Riferimenti libro di testo

  • [t1] Sezione 8.2

  • [t2] Sezione 10.1, 10.2, 10.2.1, 10.2.2, 10.2.3

17/11/2021 - Gestione della memoria parte 3

  • Segmentazione

  • Segmentazione paginata

  • Mappatura dello spazio di indirizzamento e relativi system call Linux

  • Introduzione alla memoria virtuale

Riferimenti libro di testo

  • [t1] Sezione 7.4, 8.1

  • [t2] Sezione 9.6, 10.1


16/11/2021 - Gestione della memoria parte 2

  • Binding di indirizzi

  • Concetto di rilocazione

  • Paginazione

  • Tabella delle pagine, Traslation Lookaside Buffer, Paginazione gerarchica

Riferimenti libro di testo

  • [t1] Sezione 7.3, 8.1 paragrafo Paging

  • [t2] Sezione 9.1.1, 9.1.2, 9.1.3, 9.3, 9.3.1, 9.3.2, 9.3.3, 9.3.2, 9.4, 9.4.1


10/11/2021 - Sincronizzazione parte 4 - Gestione della memoria parte 1

  • Semafori POSIX

  • Introduzione a gestione della memoria

  • Partizioni fisse

  • Partizioni dinamiche

  • Politiche di placement: Best fit, Worst fit, First fit, Next fit

  • Buddy system

  • Frammentazione interna ed esterna

Riferimenti libro di testo

  • [t1] Sezione 7.1, 7.2

  • [t2] Sezione 6.6, 7.3.2, 9.1, 9.1.1, 9.2, 9.2.1, 9.2.3

Link di approfondimento


09/11/2021 - Sincronizzazione parte 3

  • Read-Modify-Write

  • Algoritmi di mutua esclusione basati su RMW

  • Spin lock, Mutex POSIX

Riferimenti libro di testo

  • [t1] Sezione 5.3

  • [t2] Sezione 6.4, 6.5, 6.6, 7.3.1

Link di approfondimento


03/11/2021 - Sincronizzazione parte 2

  • Mutua Esclusione

  • Errori Comuni: Deadlock e Livelock

  • Algoritmo di Peterson

  • Algoritmo del panettiere (Lamport)

Riferimenti libro di testo

  • [t1] Sezione 5.1, 5.2, 6.1

  • [t2] Sezione 6.3, 6.8, 8.2, 8.3

Link di approfondimento


02/11/2021 - CPU scheduling parte 4 - Sincronizzazione parte 1

  • Scheduler UNIX System V Release 4

  • Linux Complete Fair Scheduler

  • Introduzione alla sincronizzazione

Riferimenti libro di testo

  • [t1] Sezione 10.3, 10.4, 5

  • [t2] Sezione 5.7.1, 6.1, 6.2

Link di approfondimento


27/10/2021 - CPU scheduling parte 3

  • Multi-level feedback queue

  • Fair-share scheduling

  • Multiprocessor scheduling

  • Load sharing

  • Load balancing

  • Affinity

Riferimenti libro di testo

  • [t1] Sezione 9.2, 10.1

  • [t2] Sezione 5.5

Link di approfondimento


26/10/2021 - CPU scheduling parte 2

  • First Come First Serve

  • Shortest Job First

  • Round Robin

  • Priority Scheduling

Riferimenti libro di testo

  • [t1] Sezione 9.2

  • [t2] Sezione 5.3


20/10/2021 - Threads parte 2 - CPU scheduling parte 1

  • pthread_create, pthread_join, pthread_exit

  • Processi UNIX: stati, gerarchie e threads

  • Processi Linux: concetto di task, stati, accenni di task_struct

  • Introduzione al CPU scheduling: metriche di prestazionali e non per l’utente ed il sistema, preemtive e non-preemptive scheduling

Riferimenti libro di testo

  • [t1] Sezione 3.6, 9.1, 9.2

  • [t2] Sezione 3.2, 4.6.4, 4.7.2, 5.1, 5.2

Link di approfondimento


19/10/2021 - Processi parte 5 - Threads parte 1

  • Concetto di thread

  • User-Level threads e Kernel-level threads

  • POSIX threads

  • Variabili per thread

  • Librerie thread-safe e non

Riferimenti libro di testo

  • [t1] Sezione 4.1, 4.2

  • [t2] Sezione 4.1, 4.2, 4.3, 4.4, 4.4.1, 4.6.4

Link di approfondimento


13/10/2021 - Processi parte 4

  • Posix fork

  • Layout di programma C

  • Famiglia di funzioni POSIX exec

  • Ambiente e variabili di ambiente

  • Famiglia di funzioni POSIX getenv, putenv, setenv, unsetenv

  • Utilizzo documentazione online e da riga di comando Linux (man)

  • Shell Linux: ls, man, fg, bg, top e token !

Riferimenti libro di testo

  • [t1] Sezione 2.3

  • [t2] Sezione 3.1.2, 3.3.1

  • [t3] Sezione 3.2, 3.3

Link di approfondimento


12/10/2021 - Processi parte 3

  • Process switch

  • Cambio di modo e cambio di contesto

  • Servizi di sistema per la gestione di processi

  • POSIX fork, exit, wait

  • Gerarchie di processi

  • Utilizzo documentazione online e da riga di comando Linux (man)

  • Shell Linux: ls, man, fg, bg e token !

Riferimenti libro di testo

  • [t1] Sezione 3.4,

  • [t2] Sezione 3.2.3, 3.3.1, 3.3.2

  • [t3] Sezione 1.2, 3.1

Link di approfondimento


06/10/2021 - Processi parte 2

  • Stato di un processo e code: 5 stati

  • Strutture di controllo di un Sistema Operativo

  • Long, mid, short term scheduling

  • Process switch

Riferimenti libro di testo

  • [t1] Sezione 3.2, 3.3, 9.2

  • [t2] Sezione 2.3.1, 2.3.2, 2.8, 3.1.2, 3.2


05/10/2021 - Introduzione parte 3 - Processi parte 1

  • Introduzione:

    • System call

    • Librerie Standard

    • Architettura dei Sistemi Operativi

  • Processi:

    • Immagine

    • Process Control Block

    • Stato di un processo: 2 stati, 3 stati

    • Code di processi

Riferimenti libro di testo

  • [t1] Sezione 2.7, 2.8, 3.1, 3.2

  • [t2] Sezione 2.3.1, 2.3.2, 2.8, 3.1.1, 3.1.3


29/09/2021 - Introduzione parte 2

  • Sistemi operativi: elementi chiave

  • Interrupt: eventi, supporto hardware

  • Interrupt-driven os: protezione delle risorse (istruzioni privilegiate, protezione memoria, timer) e accesso a codice di sistema operativo (system call)

Riferimenti libro di testo

  • [t1] Sezione 1.1, 1.2, 1.3, 1.4

  • [t2] Sezione 1.2, 2.3.1, 2.3.2

Link di approfondimento

  • Codice sorgente Linux Kernel: IDT


28/09/2021 - Introduzione parte 1

  • Sistemi operativi: definizione ed obiettivi

  • Evoluzione dei sistemi operativi: Sistemi seriali, Sistemi batch, Sistemi time-sharing, Sistemi Real time, Multicore, Dark silicon

  • Sincronizzazione e Speedup: concetto di lock e legge di Amdahl

Riferimenti libro di testo

  • [t1] Sezione 2.1, 2.2, 2.3, 4.3

  • [t2] Sezione 1.1, 1.4, 2.7

Link di approfondimento