B8562 - SISTEMI CONCORRENTI E PARALLELI M

Anno Accademico 2025/2026

  • Docente: Anna Ciampolini
  • Crediti formativi: 8
  • SSD: ING-INF/05
  • Lingua di insegnamento: Italiano
  • Modalità didattica: Convenzionale - Lezioni in presenza
  • Campus: Bologna
  • Corso: Laurea Magistrale in Ingegneria informatica (cod. 6719)

Conoscenze e abilità da conseguire

Al termine del corso lo studente possiede conoscenze approfondite a) sull’organizzazione dei sistemi di elaborazione concorrenti e paralleli, in relazione alle caratteristiche dell’hardware utilizzato e con particolare riguardo ad architetture multiprocessore, multicomputer e a sistemi paralleli ad elevate prestazioni (HPC); b) sulle caratteristiche e sulla struttura interna dei sistemi operativi a supporto dell’esecuzione di applicazioni concorrenti e parallele; c) sui modelli e sugli strumenti per la sincronizzazione tra processi nel modello a memoria comune e nel modello a scambio di messaggi; d) sulle metodologie e sui linguaggi per il progetto di applicazioni concorrenti; e) sulle metodologie e sui linguaggi per il progetto di applicazioni parallele in sistemi paralleli ad elevate prestazioni (HPC), con particolare riguardo al modello architetturale MIMD. In particolare, sa risolvere problemi di sincronizzazione tra attività concorrenti/parallele nel modello a memoria comune e in quello a scambio di messaggi, sa sviluppare programmi concorrenti utilizzando linguaggi di alto livello basati sia sulla condivisione di variabili sia sullo scambio di messaggi, sa sviluppare programmi paralleli in sistemi HPC, con particolare riguardo al modello architetturale MIMD, e sa valutarne le prestazioni.

Contenuti

1.Introduzione:

Richiami sui concetti di Concorrenza e Parallelismo

Modelli di interazione tra processi concorrenti/paralleli:

  • memoria comune
  • scambio di messaggi

2.Architetture dei Sistemi Concorrenti e Paralleli

  • Il modello di Von Neumann caratteristiche e limitazioni
  • Estensioni del modello di Von Neumann: cache, ILP e Hardware Multithreading
  • Architetture parallele: multiprocessori, multicomputer, cluster, sistemi HPC, GPU
  • Classificazione di Flynn.

3. Sviluppo di Software concorrente 

  • Introduzione e definizioni
  • Algoritmi e Processi non sequenziali.
  • Tipi di interazione
  • linguaggi concorrenti
  • proprietà dei programmi concorrenti

3.1 Modello a memoria comune 

Richiami e approfondimenti su threads e sincronizzazione:

  • Caratteristiche e implementazione thread
  • Semafori: proprietà, casi di uso, implementazione.

Uso di linguaggi concorrenti nel modello a memoria comune: la libreria c/pthread.

3.2 Modello a scambio di messaggi

  • Richiami su canali e primitive
  • Primitive di comunicazione:semantica e implementazione
  • Comandi con guardia
  • Rendez-vous e chiamata di procedura remota
  • Algoritmi per la sincronizzazione in ambiente distribuito

Uso di Linguaggi concorrenti nel modello a scambio di messaggi: google go, ada.

4.Supporto SW alla Concorrenza

Virtualizzazione

  • Virtualizzazione dell'hardware: finalità e soluzioni
  • Realizzazione di virtual machine monitor: virtualizzazione e paravirtualizzazione
  • Analisi e sperimentazione di tecnologie: il caso di xen

Kernel di sistemi multithreaded/multitask

  • Realizzazione dei meccanismi di gestione dei processi e di interazione (sincronizzazione e comunicazione) all’interno del kernel di un sistema monoprocessore
  • Estensione al caso multiprocessore: Modello SMP, Modello loosely-coupled.

5. Sistemi HPC e Programmazione parallela

Caratteristiche HW/SW dei sistemi HPC:

  • Modelli architetturali
  • Esempi di architetture reali
  • Cenni sulle caratteristiche dei sistemi operativi per infrastrutture HPC
  • Strumenti per la gestione del workload in sistemi HPC

Metodologie e metriche per la valutazione delle prestazioni di applicazioni parallele:

  • Speedup e efficienza
  • Scalabilità strong e weak
  • Leggi di Amdahl e Gustafson

Sviluppo di applicazioni parallele:

  • Scambio di messaggi: la libreria MPI

  • Memoria comune: open MP

  • Programmazione ibrida

Testi/Bibliografia


  • G.R.Andrews: "Foundations of Multithreaded, Parallel and Distributed Programming", Addison-Wesley
  • Peter Pacheco, An Introduction to Parallel Programming, Morgan Kauffmann, 2011
  • P.Ancilotti, M.Boari: 'Programmazione concorrente e distribuita', McGraw-Hill
  • P.Ancilotti, M.Boari A.Ciampolini,G.Lipari: ' Sistemi Operativi', seconda edizione, McGraw-Hill
  • S. Tanenbaum: 'I Moderni Sistemi Operativi', Jackson Libri
  • A.Silberschatz, P.Galvin, G.Gagne: 'Applied Operating System Concepts' I edizione, John Wiley & Son, Inc.

Metodi didattici

Le lezioni frontali saranno integrate con attività di laboratorio assistite che si svolgeranno presso i laboratori della Scuola di Ingegneria e Architettura.

In considerazione della tipologia di attività e dei metodi didattici adottati, la frequenza di questa attività formativa richiede la preventiva partecipazione di tutti gli studenti ai Moduli 1 e 2 di formazione sulla sicurezza nei luoghi di studio [https://elearning-sicurezza.unibo.it/], in modalità e-learning.

Modalità di verifica e valutazione dell'apprendimento

L'esame è articolato in 2 prove obbligatorie:

  1. Prova di laboratorio: sviluppo di applicazioni concorrenti/parallele.
  2. Prova orale.

La prova orale può essere sostenuta soltanto dopo il superamento della prova di laboratorio.

Strumenti a supporto della didattica

Le lezioni in aula vengono svolte anche con l'ausilio di slides e videoproiettore.
Le slides presentate a lezione vengono rese disponibili a tutti gli studenti tramite la piattaforma "Virtuale".
Assegnazione di una macchina virtuale ad ogni studente del corso per esercitarsi in autonomia.

Orario di ricevimento

Consulta il sito web di Anna Ciampolini

SDGs

Istruzione di qualità Parità di genere Imprese innovazione e infrastrutture

L'insegnamento contribuisce al perseguimento degli Obiettivi di Sviluppo Sostenibile dell'Agenda 2030 dell'ONU.