SISTEMI OPERATIVI A - L

Anno accademico 2021/2022 - 2° anno
Docenti: Lucia LO BELLO e Gaetano PATTI
Crediti: 6
SSD: ING-INF/05 - Sistemi di elaborazione delle informazioni
Organizzazione didattica: 150 ore d'impegno totale, 100 di studio individuale, 35 di lezione frontale, 15 di esercitazione
Semestre:
ENGLISH VERSION

Obiettivi formativi

Conoscenza e capacità di comprensione: Al completamento del corso, il discente avrà acquisito la conoscenza dei concetti di base inerenti il progetto di sistemi operativi e la stesura di programmi che sfruttano le System Call in ambiente Linux/UNIX. Alla fine del corso gli allievi: conosceranno la struttura dei Sistemi Operativi, le relative problematiche di progetto e le politiche utilizzate per la virtualizzazione e per la gestione delle risorse (CPU, memoria centrale, memoria di massa, periferiche); avranno acquisito conoscenze sui concetti di processo e di thread e sulla loro gestione; avranno acquisito conoscenze sulle tecniche di gestione della concorrenza su risorse mutuamente esclusive; avranno acquisito familiarità nell’interazione con la shell di Linux.

Capacità di applicare conoscenza e comprensione: a fine corso gli allievi saranno in grado di scrivere applicazioni contenenti system call per: creazione e gestione di processi, invio/gestione segnali, interazione e comunicazione tra processi; gestire la concorrenza sulle risorse condivise; creare applicazioni multithread.

Autonomia di giudizio. Al termine del corso, lo studente sarà in grado di scegliere una adeguata soluzione software basata su API Linux per ciascuno degli argomenti trattati all'interno del corso.

Abilità comunicative. Al termine del corso, lo studente può comunicare le sue conclusioni e raccomandazioni sulla progettazione e sull'utilizzo dei sistemi operativi con l'argomentazione della conoscenza e della logica alla base di questi, a un pubblico sia specialista che non specialista in modo chiaro e inequivocabile.

Capacità di apprendimento. Al termine del corso, lo studente sarà in grado di continuare a studiare in un modo che può essere ampiamente autodiretto o autonomo.


Modalità di svolgimento dell'insegnamento

Il corso si basa essenzialmente su lezioni frontali, che includono lo svolgimento di esercizi da parte del docente. Gli esercizi proposti vengono affrontati dal docente tramite l'uso di computer connesso a proiettore. Il corso prevede anche esercitazioni pratiche svolte dagli studenti. Tali esercitazioni vengono svolte anche nelle aule multimediali dell'Ateneo. Ad ogni studente viene assegnato un compito che deve essere svolto al calcolatore. Il docente supervisiona il lavoro degli studenti fornendo le spiegazioni e gli aiuti didattici necessari per il completare i compiti assegnati.
Le modalità di svolgimento dell'insegnamento appena descritte permettono il raggiungimento degli obiettivi formativi prefissati, che includono l’acquisizione di conoscenze e la capacità di applicare la conoscenza.

Qualora l'insegnamento venisse impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato in precedenza, al fine di rispettare il programma previsto e riportato nel syllabus.

I docenti sono disponibili anche a incontri di ricevimento in modalità telematica, previo appuntamento


Prerequisiti richiesti

Requisiti necessari ad affrontare con successo gli argomenti del corso:

-Conoscenza generale dell’architettura del calcolatore, in particolare: CPU, interruzioni, registri, memorie, tipologie di architetture multiprocessore, dispositivi di I/O.

-Sulla programmazione:

“familiarità con l’uso dei parametri argc e argv nella funzione main()”

“uso dei puntatori e dei vettori in ANSI C”

“uso dei vettori di strutture in ANSI C”

“implementazione di liste, pile e code in ANSI C”

“programmazione con funzioni e passaggio di parametri per valore e per riferimento”

“puntatori a funzione”

“tabelle hash”.


Frequenza lezioni

La frequenza è fortemente consigliata.


Contenuti del corso

Gli asterischi (*) indicano le competenze minime.

  • Generalità sui sistemi operativi. Gestione delle risorse. Interfaccia utente. Concetto di Kernel. •Il sistema GNU/Linux. Struttura dei sistemi operativi: monolitici, microkernel, ibridi, client/server. System call. System call di Unix/Linux. (*)
  • Software libero e relative licenze d'uso. GPL.
  • Generalità su UNIX e sullo standard POSIX.
  • Classificazione dei sistemi operativi. Scelte progettuali relative alle diverse tipologie di SO.
  • Sistemi operativi per architetture multiprocessore. Virtualizzazione. Macchine virtuali. Hypervisor di livello 1 e 2. Esempi: WMware e Virtual Box
  • Concetto di Processo. Diagramma a stati di un processo. • Interruzioni hardware e software e loro gestione nei sistemi operativi. • System call per creazione e gestione di processi: fork(), wait(), waitpid(). Famiglia delle exec(). (*)
  • Segnali e loro gestione. System call kill(), signal(), alarm(), sigaction(). Esempi di programmi che impiegano tutte le system call menzionate. (*)
  • Thread. Generalità, caratteristiche. Implementazione dei thread: user space, kernel space, ibride (con riferimento alle scelte progettuali dei principali SO). (*)
  • Attivazione dello Scheduler, upcall. Dati specifici dei thread. Gruppi di thread.
  • La libreria Pthread. Funzioni pthread_create(), pthread_join(), pthread_exit(), pthread_detach, pthread_attr_init(). • Cancellazione di thread. • Esempi di programmi che usano la libreria Pthread. (*)
  • Linux: Esercitazione sui comandi di shell. (*)
  • Programmazione della shell.
  • Esercitazioni sui contenuti precedenti (*)
  • Sezione critica. Mutua esclusione con attesa attiva. Semafori. • Problema del produttore e del consumatore e sua soluzione tramite semafori. • Mutex. Implementazione con thread in user space. Funzioni pthread_mutex. (*)
  • IPC in Linux. Semafori: semget(), semop(), semctl(). Code di messaggi: msgget(), msgsnd(), msgrcv(), msgctl(). Shared memory: shmget(), shmat(), shmdt(), shmctl(). Esempi di programmi. (*)
  • Comunicazione nei sistemi client-server: socket. (*)
  • Deadlock. Definizione del problema e strategie di gestione. (*)
  • Schedulazione della CPU. Obiettivi. Algoritmi classici: FIFO, Round-robin, Schedulazione basata su priorità. Il problema della Starvation. Code multiple. (*)
  • Cenni sullo scheduling nei sistemi real-time. • Cenni sullo scheduling di Linux: Completely Fair Scheduler.
  • File System e System call sui file. (*)

Testi di riferimento

1) Per la parte teorica: In alternativa

Andrew S. Tanenbaum, “I moderni sistemi operativi 4/Ed.", 2016, ISBN 9788891901019.
oppure

Abraham Silberschatz, Peter Baer Galvin, Greg Gagne, “Sistemi Operativi, Concetti e esempi”, Nona Edizione, Pearson, ISBN 9788865183717.2)

Ad integrazione della parte teorica e per tutta la parte pratica: R. Stones, N. Matthew, “Beginning Linux Programming”, 4th edition, Wrox Press, 2007. Disponibile in rete



Programmazione del corso

 ArgomentiRiferimenti testi
1UNITÀ DIDATTICA 1: EVOLUZIONE, STRUTTURA E CLASSIFICAZIONE DEI SISTEMI OPERATIVI. IL SISTEMA GNU/LINUX. VIRTUALIZZAZIONE.Generalità sui sistemi operativi. Gestione delle risorse. Interfaccia utente. Concetto di Kernel. •Il sistema GNU/Linux. Struttura dei sistemi operativi: monolitici, microkernel, ibridi, client/server. System call. System call di Unix/Linux, WindowsSilbershatz: Cap.1, 2. Tanenbaum: Cap.1. Dispense dei docenti su STUDIUM, nell'area dedicata all'insegnamento. 
2UNITÀ DIDATTICA 1: EVOLUZIONE, STRUTTURA E CLASSIFICAZIONE DEI SISTEMI OPERATIVI. IL SISTEMA GNU/LINUX. VIRTUALIZZAZIONE.Software libero e relative licenze d'uso. GPL.Dispense dei docenti su STUDIUM, nell'area dedicata all'insegnamento. 
3UNITÀ DIDATTICA 1: EVOLUZIONE, STRUTTURA E CLASSIFICAZIONE DEI SISTEMI OPERATIVI. IL SISTEMA GNU/LINUX. VIRTUALIZZAZIONE.Cenni su UNIX e sullo standard Posix.Dispense dei docenti su STUDIUM, nell'area dedicata all'insegnamento. 
4UNITÀ DIDATTICA 1: EVOLUZIONE, STRUTTURA E CLASSIFICAZIONE DEI SISTEMI OPERATIVI. IL SISTEMA GNU/LINUX. VIRTUALIZZAZIONE.Classificazione dei sistemi operativi. Scelte progettuali relative alle diverse tipologie di SO. Sistemi operativi per architetture multiprocessore. Virtualizzazione. Macchine virtuali. Hypervisor di livello 1 e 2.Silbershatz: Cap. 2, 16 Tanenbaum: Cap.1, Cap.8.1.2 (multiprocessore) Dispense dei docenti su STUDIUM, nell'area dedicata all'insegnamento. 
5UNITÀ DIDATTICA 2: PROCESSI E THREAD. Concetto di Processo. Diagramma a stati di un processo. • Interruzioni hardware e software e loro gestione nei sistemi operativi. • System call per creazione e gestione di processi: fork(), wait(), waitpid(). Famiglia delle exec(). Silbershatz: Cap.3. Tanenbaum: Cap.2.1. Beginning Linux Programming: Cap.11. Dispense dei docenti su STUDIUM, nell'area dedicata all'insegnamento. 
6UNITÀ DIDATTICA 2: PROCESSI E THREAD. Segnali e loro gestione. System call kill(), signal(), alarm(), sigaction(). • Esempi di programmi che impiegano tutte le system call menzionate. Beginning Linux Programming: Cap.11. Dispense dei docenti su STUDIUM, nell'area dedicata all'insegnamento. 
7UNITÀ DIDATTICA 2: PROCESSI E THREAD. Thread. Generalità, caratteristiche. • Implementazione dei thread: user space, kernel space, ibride (con riferimento alle scelte progettuali dei principali SO).Silbershatz: Cap.4 Tanenbaum: Cap. 2.2 Beginning Linux Programming: Cap.12. Dispense dei docenti su STUDIUM, nell'area dedicata all'insegnamento. 
8UNITÀ DIDATTICA 2: PROCESSI E THREAD. Attivazione dello Scheduler, upcall. Dati specifici dei thread. Gruppi di thread. Silbershatz: Cap.4 Tanenbaum: Cap. 2.2. Dispense dei docenti su STUDIUM, nell'area dedicata all'insegnamento. 
9UNITÀ DIDATTICA 2: PROCESSI E THREAD. La libreria Pthread. Funzioni pthread_create(), pthread_join(), pthread_exit(), pthread_detach, pthread_attr_init(). • Cancellazione di thread. • Esempi di programmi che usano la libreria Pthread.Silbershatz: Cap.4 Tanenbaum: Cap. 2.2 Beginning Linux Programming: Cap.12. Dispense dei docenti su STUDIUM, nell'area dedicata all'insegnamento. 
10UNITÀ DIDATTICA 2: PROCESSI E THREAD. Linux: Esercitazione sui comandi di shell. Beginning Linux Programming: Cap. 2. 
11UNITÀ DIDATTICA 2: PROCESSI E THREAD. Programmazione della shell.Beginning Linux Programming: Cap. 2. 
12UNITÀ DIDATTICA 2: PROCESSI E THREAD. Esercitazioni sui contenuti precedenti Dispense dei docenti su STUDIUM, nell'area dedicata all'insegnamento. 
13UNITÀ DIDATTICA 3: GESTIONE DELLA CONCORRENZA, INTER PROCESS COMMUNICATION, DEADLOCK. Sezione critica. Mutua esclusione con attesa attiva. Semafori. • Problema del produttore e del consumatore e sua soluzione tramite semafori. • Mutex. Implementazione con thread in user space. Funzioni pthread_mutex.Silbershatz: Cap.3, Cap.5 Tanenbaum: Cap.2.3. Beginning Linux Programming: Cap. 12 (mutex). Dispense dei docenti su STUDIUM, nell'area dedicata all'insegnamento. 
14UNITÀ DIDATTICA 3: GESTIONE DELLA CONCORRENZA, INTER PROCESS COMMUNICATION, DEADLOCK. IPC in Linux. Semafori: semget(), semop(), semctl(). Code di messaggi: msgget(), msgsnd(), msgrcv(), msgctl(). Shared memory: shmget(), shmat(), shmdt(), shmctl(). Esempi di programmi.Beginning Linux Programming: Cap. 14. Dispense dei docenti su STUDIUM, nell'area dedicata all'insegnamento. 
15UNITÀ DIDATTICA 3: GESTIONE DELLA CONCORRENZA, INTER PROCESS COMMUNICATION, DEADLOCK. Comunicazione nei sistemi client-server: socket.Beginning Linux Programming: Cap. 13, 15. Dispense dei docenti su STUDIUM, nell'area dedicata all'insegnamento. 
16UNITÀ DIDATTICA 3: GESTIONE DELLA CONCORRENZA, INTER PROCESS COMMUNICATION, DEADLOCK. Deadlock. Definizione del problema e strategie di gestione. Silbershatz:Cap.7. Tanenbaum: Cap.6. Dispense dei docenti su STUDIUM, nell'area dedicata all'insegnamento. 
17UNITÀ DIDATTICA 4: SCHEDULAZIONE DELLA CPU. Schedulazione della CPU. Obiettivi. Algoritmi classici: FIFO, Round-robin, Schedulazione basata su priorità. Il problema della Starvation. Code multiple. Silbershatz: Cap.6, Cap.7 Tanenbaum: Cap.2.4. Dispense dei docenti su STUDIUM, nell'area dedicata all'insegnamento. 
18UNITÀ DIDATTICA 4: SCHEDULAZIONE DELLA CPU.Cenni sullo scheduling nei sistemi real-time. • Cenni sullo scheduling di Linux: Completely Fair Scheduler.Dispense dei docenti su STUDIUM, nell'area dedicata all'insegnamento. 
19UNITÀ DIDATTICA 5: GESTIONE DELLA MEMORIA CENTRALE, MEMORIA DI MASSA E I/O. File System e System call sui file. Silbershatz, Cap.8, Cap 11, 13 Tanenbaum, Cap.4 (File system). Dispense dei docenti su STUDIUM, nell'area dedicata all'insegnamento. 

Verifica dell'apprendimento

Modalità di verifica dell'apprendimento

Gli appelli sono fissati di concerto con il CdS in ottemperanza alle modalità stabilite dal calendario accademico. Prenotazione obbligatoria tramite portale di Ateneo. La data di chiusura delle prenotazioni è fissata di norma uno-due giorni prima dell’esame per questioni logistiche (il numero di postazioni limitate per la prova scritta al calcolatore richiede la necessità di programmare più turni nello stesso appello).

L’esame si compone di una prova scritta, seguita da una prova orale facoltativa. La prova scritta, della durata di 3 ore, è rappresentata da un elaborato al calcolatore, del valore di 18 punti, e da una sezione teorica, composta da quesiti a risposta aperta, del valore complessivo di 12/30 punti. La prova scritta si intende superata se il voto è maggiore o uguale a 18/30. Sul sito della materia disponibile su Studium (www.studium.it) è presente un fac simile della prova scritta che specifica sia le tipologie di problemi somministrati sia le relative votazioni. La prova orale è facoltativa e può essere svolta solo nello stesso appello in cui la prova scritta è stata superata. La prova orale verte sugli argomenti teorici svolti a lezione.

La verifica dell’apprendimento potrà essere effettuata anche per via telematica, qualora le condizioni lo dovessero richiedere.


Esempi di domande e/o esercizi frequenti

System call per la gestione dei processi e dei segnali.

Differenze tra thread e processi.

Implementazioni di thread.

La libreria dei thread.

Mutua esclusione e relative soluzioni.

Meccanismi di Inter Process Communication.