Vinaora Nivo Slider 3.x
Laurea Triennale
Vinaora Nivo Slider 3.x
Laurea Magistrale
Vinaora Nivo Slider 3.x
Informazioni per le nuove Matricole
Vinaora Nivo Slider 3.x
F.A.Q.

Vinaora Nivo Slider 3.x
Guida dello Studente - Laurea Triennale
Vinaora Nivo Slider 3.x
Guida dello Studente - Laurea Magistrale
Vinaora Nivo Slider 3.x
Piani di Studio
Vinaora Nivo Slider 3.xVinaora Nivo Slider 3.xVinaora Nivo Slider 3.xVinaora Nivo Slider 3.x
Premio letterario Galileo per la divulgazione scientifica 2021
CyberChallenge.it
Presentazione Corso di Laurea in Ingegneria Informatica 2020/2021
Ingegneria.POT

Ultimi Avvisi

ACADEMY

Le Academy sono delle iniziative di formazione professionalizzante sviluppate dal DIETI in collaborazione con aziende quali Apple, Deloitte, CISCO, Accenture, Capgemini, TIM ed altre ancora. L'idea è di allargare le competenze fornite nei Corsi di Studio del Dipartimento con un approccio esperenziale ed a diretto contatto con il mondo del lavoro. Alcune di queste iniziative consentono anche di acquisire dei crediti formativi riconosciuti nei Corsi di Studio del nostro Dipartimento.

CANALI SOCIAL

Per ricevere aggiornamenti, puoi iscriverti ai nostri canali social su Facebook, Telegram, Instagram, LinkedIn, Twitter oppure al gruppo Teams Contact Point

UNIVERSITALY

Universitaly è il portale del Ministero dell'Istruzione, dell'Università e della Ricerca, creato appositamente per accompagnare gli studenti nel loro percorso di studi. Il sito è una vera e propria porta d’ingresso che permette di entrare nel mondo dei corsi di laurea e istruzione superiore in Italia. Link Universitaly

SCHEDA DELL'INSEGNAMENTO (SI)
SSD ING-INF/05

 

 

LAUREA TRIENNALE IN INGEGNERIA INFORMATICA

ANNO ACCADEMICO: 2022-2023

 

INFORMAZIONI GENERALI - DOCENTE

Docente: corso a canali multipli

Telefono:

Email:

 

INFORMAZIONI GENERALI - ATTIVITÀ

 

INSEGNAMENTO INTEGRATO (EVENTUALE): 
MODULO (EVENTUALE):
CANALE (EVENTUALE):
ANNO DI CORSO (I, II, III): III
SEMESTRE (I, II): I
CFU: 9

 

INSEGNAMENTI PROPEDEUTICI

(se previsti dall'Ordinamento del CdS)

PROGRAMMAZIONE, CALCOLATORI ELETTRONICI

 

EVENTUALI PREREQUISITI

...................................................................................................................................................

 

OBIETTIVI FORMATIVI

Il corso si pone l’obiettivo di fornire competenze sulle architetture di riferimento dei sistemi operativi; sulle metodologie utilizzate per la gestione delle risorse in un sistema operativo moderno; sugli strumenti per la programmazione di sistema; sull’utilizzo di una piattaforma Unix a livello utente e amministratore; sui principi base della programmazione concorrente. Le esercitazioni e le attività di laboratorio sono sviluppate in ambiente Linux e consistono in applicazioni di programmazione concorrente e la programmazione di moduli del kernel Linux

 

RISULTATI DI APPRENDIMENTO ATTESI

(Descrittori di Dublino)

Conoscenza e capacità di comprensione

Lo studente deve dimostrare: di conoscere le problematiche relative alla gestione delle risorse di calcolo in sistemi multi-utente e multi-programmati, di comprendere gli strumenti metodologici e gli algoritmi di base utilizzati per la realizzazione di sistemi di elaborazione ad alte prestazioni che utilizzino efficientemente le risorse di calcolo, di illustrare le tecniche fondamentali inerenti alla programmazione concorrente e di sistema.

 

 

Capacità di applicare conoscenza e comprensione 

Lo studente deve dimostrare di essere in grado di applicare gli strumenti metodologici appresi ai fini della progettazione dei sistemi di elaborazione, basati sull'utilizzo delle astrazioni fondamentali fornite dai sistemi operativi (es. processi, thread, filesystem, inter-process communication). Inoltre, lo studente deve dimostrare di essere in grado di applicare gli strumenti metodologici ai fini di sviluppare nuovi sistemi, utilizzando le conoscenze e le tecniche di programmazione concorrente e di sistema, e ai fini di diagnosticare i problemi dei sistemi di calcolo dovuti ad errata sincronizzazione e all'utilizzo inefficiente delle risorse di calcolo.

 

PROGRAMMA-SYLLABUS

Concetti Introduttivi. Evoluzione storica dei S.O. - Mono e multiprogrammazione - Batch, time sharing, real-time, mobile, cloud computing - Richiami di elementi di architettura a supporto di un S.O. (modalità di I/O, gestione delle interruzioni, modalità utente e supervisore, gerarchie di memoria) - Virtualizzazione delle risorse nei S.O. - Il kernel - Chiamata a supervisore - Architetture a livelli, monolitiche, modulari, microkernel.

 

Gestione e Scheduling dei Processi e Thread. Concetto di processo – Stati di un processo –  Descrittore di un processo – Code di processi – Il cambiamento di contesto – La gestione dei processi nei sistemi operativi Linux e Windows – Scheduling della CPU a breve, medio e lungo termine – Parametri di valutazione degli algoritmi di scheduling – Starvation – Preemption – Algoritmi First Come First Served,  Round Robin, Shortest Process Next, Shortest Remaining Time, a code multiple con retroazione – Confronto tra algoritmi di scheduling monoprocessore – Scheduling tradizionale UNIX  – Gli Scheduler O(1) e CFS del sistema operativo Linux – Scheduling nel sistema operativo Windows – Scheduling multiprocessore: Architetture SMP, multicore, e hyperthreading, scheduling con load sharing e dynamic load balancing, gang scheduling – Concetto di thread – Processi e thread – Stati di un thread – Thread a livello utente e a livello del nucleo – Modelli di programmazione multithreading – Primitive per la gestione dei threads – Cenni alla gestione dei thread nei sistemi Linux, Windows, Java.

 

Programmazione Concorrente.  Concorrenza e parallelismo – Speed-up nelle architetture concorrenti e parallele – La legge di Amdahl – Le primitive fork/join – Concetti di risorsa e di gestore di risorsa – Competizione, cooperazione, ed interferenza – Race condition e sincronizzazione - I modelli ad ambiente globale e locale – L’interazione tra processi nel modello ad ambiente globale – Il problema della mutua esclusione: requisiti, supporto hardware e soluzione. Il problema della comunicazione – I semafori – La comunicazione tramite memoria condivisa – La soluzione dei problemi di mutua esclusione mediante semafori – Problemi di cooperazione nel modello ad ambiente globale: problema del produttore/consumatore e soluzioni mediante semafori, problema lettori/scrittori e soluzioni mediante semafori – I monitor – Strategie di controllo signal and continue, signal and wait, e la soluzione di Hoare – La realizzazione di un monitor mediante semafori – La soluzione dei problemi di mutua esclusione, produttore/consumatore e lettori/scrittori mediante monitor – L’interazione tra processi nel modello ad ambiente locale – Le primitive per lo scambio di messaggio – Comunicazione diretta e indiretta, simmetrica ed asimmetrica – Comunicazione asincrona e sincrona – Send asincrona e sincrona – Receive bloccante e non bloccante – Realizzazione di send e receive sincrone mediante primitive asincrone – Processo servitore – Il problema del deadlock – Condizioni necessarie per il deadlock – Metodi per la gestione del deadlock – Prevenzione del deadlock – Deadlock Avoidance e algoritmo del banchiere – Rilevazione e recupero del deadlock – Comparazione delle strategie per la gestione del deadlock.

 

La Gestione della Memoria Centrale. Aspetti caratterizzanti la gestione della memoria: rilocazione, allocazione, organizzazione dello spazio virtuale, caricamento – Lo swapping – La gestione a partizioni multiple – Paginazione: schema di traduzione degli indirizzi, architettura di paginazione, TLB, Struttura della tabella delle pagine – Segmentazione: schema di traduzione degli indirizzi, architettura di segmentazione – Segmentazione con Paginazione – La memoria virtuale – La paginazione su richiesta – Algoritmi per la sostituzione delle pagine – Attività di paginazione degenere (thrashing) – Il modello del working set – Gestione della Memoria nel sistema operativo Linux: allocatori user-space e kernel-space, zone di memoria, buddy system, page cache, algoritmo di page frame reclaim – Cenni sulla gestione della memoria nel sistema operativo Windows.

 

La gestione dell’I/O. Le operazioni di I/O – La virtualizzazione delle risorse di I/O – Livello indipendente dai dispositivi, livello dipendente dai dispositivi – I driver – Struttura della memoria secondaria – I dischi – Scheduling degli accessi al disco con riferimento ai cilindri ed ai settori –  I/O caching e buffering – Algoritmi di I/O scheduling FIFO, SCAN, e varianti – Scheduling del disco nel SO Linux – Architetture RAID –  I dischi a stato solido.

 

La Gestione dei File. Organizzazione logica del file system: directory e file - Operazioni sulle directory e sui file –  Metodi di accesso – Descrittore di file – La condivisione dei file – Struttura delle directory per la condivisione di file – Link per la condivisione – La protezione dei file – Organizzazione logica del file system – Metodi di allocazione dei file: allocazione contigua, a lista concatenata e indicizzata – La gestione dei blocchi liberi – inode e gestione dei file in Unix – Il Virtual File System di Linux e i file system ext2, ext3 ed ext4 – Il File System NTFS di Windows – Journaling File Systems – Log-structured File System– Il File System F2FS di Linux per SSD.

 

Primitive per la gestione dei processi e thread nel SO UNIX/Linux. Primitive per la creazione e terminazione dei processi: fork, exec, exit, wait – Gestione delle risorse IPC – Primitive per la gestione della memoria condivisa – Primitive per la gestione dei semafori – uso della semop per la realizzazione di primitive wait e signal – Esempi d’uso: soluzione di problemi di mutua esclusione e comunicazione (produttore/consumatore e lettori/scrittori), realizzazione object-based e object-oriented di un tipo Monitor – Primitive per la gestione delle code di messaggi ed esempi d’uso – Le primitive POSIX Threads per la gestione dei threads, ed esempi d’uso.

 

Approfondimenti sul sistema operativo UNIX/Linux. Installazione del SO Linux – La shell e i comandi di base (navigazione nel filesystem, assegnazione permessi, installazione del software, compilazione dei programmi) – La compilazione dei programmi: makefile, librerie statiche e dinamiche – I canali di I/O dei processi – Pipe – Variabili d'ambiente – Shell scripting – Segnali UNIX – Configurazione e compilazione del kernel Linux – Sviluppo di system call e di moduli del kernel.

 

Approfondimenti su virtualizzazione e sul SO mobile Android. Utilizzi della virtualizzazione. Architetture di virtualizzazione. Virtualizzazione della CPU (virtualizzabilità della CPU, tecnica del trap-and-emulate, full virtualization mediante DBT, paravirtualizzazione, supporto hardware Intel VT). Virtualizzazione della memoria (shadow page tables, extended page tables). Virtualizzazione dell’I/O (full virtualization, PV I/O, I/O passthrough, IO-MMU, SR-VIO). Esempio di tecnologie VMware. Storia e obiettivi di progettazione di Android. Applicazioni in Android. La gestione dei processi e della memoria (ciclo di vita delle Activity, Intent, OOM). Application Security Model. Inter-Process Communication in Android.

 

 MATERIALE DIDATTICO

-          Libri di testo adottati

  ·         Ancillotti, Boari, Ciampolini, Lipari. Sistemi Operativi, McGraw Hill.

  ·         Stallings. Operating Systems: Internals and Design Principles, 6th ed., Pearson Education

 

-          Libri di testo consigliati

  ·         Silberschatz, Galvin, Gagne. Sistemi operativi - sesta edizione, Addison Wesley

  ·         Tanenbaum, I Moderni Sistemi Operativi – terza edizione, Pearson Education

 

-          Dispense didattiche e trasparenze delle lezioni disponibili sul sito web docente.

 

MODALITÀ DI SVOLGIMENTO DELL'INSEGNAMENTO

L'insegnamento verrà erogato attraverso lezioni frontali (circa due terzi delle ore totali del corso), con esercitazioni in aula e in laboratorio (circa un terzo delle ore totali del corso). Le lezioni frontali introdurranno gli aspetti teorici inerenti alle astrazioni realizzate dai sistemi operativi, agli algoritmi per la gestione efficiente delle risorse di calcolo (CPU, memoria, I/O), e alle problematiche, gli algoritmi e i meccanismi più comuni per lo sviluppo di sistemi concorrenti (es. semafori, mutex, monitor, memoria condivisa, code di messaggi). Nelle esercitazioni in aula e in laboratorio, gli studenti approfondiranno praticamente gli aspetti teorici, sviluppando autonomamente dei programmi concorrenti con il sistema operativo Linux e il linguaggio di programmazione C.

 

VERIFICA DI APPRENDIMENTO E CRITERI DI VALUTAZIONE

a) Modalità di esame:

L'esame si articola in prova:
 Scritta e orale
 Solo scritta  
 Solo orale  
 Discussione di elaborato progettuale   
 Altro (prova al calcolatore)  

 

In caso di prova scritta i quesiti sono (*):
 A risposta multipla  
 A risposta libera  
 Esercizi di programmazione

 

b) Modalità di valutazione:

La valutazione terrà conto in modo uniforme sia dello svolgimento della prova scritta (esercizi di programmazione concorrente), sia dello svolgimento della prova orale.

 

Utilizziamo i cookie sul nostro sito Web. Alcuni di essi sono essenziali per il funzionamento del sito, mentre altri ci aiutano a migliorare questo sito e l'esperienza dell'utente (cookie di tracciamento). Puoi decidere tu stesso se consentire o meno i cookie. Ti preghiamo di notare che se li rifiuti, potresti non essere in grado di utilizzare tutte le funzionalità del sito.