Materia:Programmazione concorrente e parallela

Da Wikiversità, l'apprendimento libero.
Jump to navigation Jump to search

 

Programmazione concorrente e parallela

Questa materia non ha ancora una categoria di riferimento, puoi crearla tu sei vuoi!

Questa materia fa parte del
Corso di Informatica

Questa materia è curata dagli utenti del
Dipartimento: Tecnologie dell'informazione

Cartella arancione.jpg
Crystal Clear filesystem desktop.png
Presentazione
Questa materia non ha ancora una introduzione.

Obiettivi

L'obiettivo principale del corso consiste nell'acquisire le capacità necessarie alla progettazione e alla programmazione di sistemi concorrenti.

Si attende che lo studente sia in grado di progettare un sistema concorrente e sia in grado di riconoscere e prevenire i principali problemi di progettazione e di implementazione.

Cartella arancione.jpg
Crystal Clear action flag.png
Prerequisiti

Conoscenza del ciclo di vita di un processo nonché della sua capacità di interagire con altri processi, come ad esempio nei programmi multi-thread. Nozioni generali sul meccanismo di scheduling nei sistemi operativi. È inoltre necessario per la piena comprensione della materia, la conoscenza di linguaggi che permettano la programmazione concorrente quali ad esempio C o Java.

Cartella arancione.jpg
Crystal Clear app kwrite.png
Programma
Cartella arancione.jpg
Crystal Clear app clean.png
Verifiche d'apprendimento

È possibile, e fortemente consigliato, integrare le lezioni e valutare la propria preparazione attraverso queste esercitazioni. È possibile verificare la conoscenza di un argomento specifico o dell'intero programma.

Questa materia al momento non prevede verifiche d'apprendimento.

Cartella arancione.jpg
Nuvola apps bookcase.svg
Risorse

La Biblioteca del Dipartimento di Informatica contiene risorse utili per approfondire. Se vuoi, aggiungi tu altre risorse.



Introduzione alla programmazione concorrente

Partiamo anzitutto con il distinguere i due concetti fondamentali di processo e sistema concorrente

  • Un processo è un programma in esecuzione,
  • Un sistema concorrente è programma che coordina due o più processi che interagiscono tra loro.

In particolare la condivisione di risorse e la coordinazione di più programmi avrà un aspetto decisivo nello sviluppo del corso.

N.B.

Le due precedenti definizioni,per quanto banali ci servono per riprendere concetti che dovrebbero essere già stati assimilati nel corso di Sistemi Operativi,per approfondimenti e definizioni più precise si veda quel corso.

Ciò che si prefigge questo corso è la creazione di modelli concorrenti e la loro implementazione con accenni alla fase di testing.

Modellazione

Un modello è una rappresentazione astratta della realtà, in particolare nei sistemi concorrenti è una descrizione del sistema che parte dai singoli processi, detti attori del sistema concorrente, per arrivare a rappresentare il comportamento finale dato dalla composizione dei singoli processi.

Un esempio di modello concorrente è ad esempio una pasticceria, proviamo ad analizzarlo. Supponiamo di avere

  • Cuoco -> RiceveOridineCameriere,PreparaDolce,ConsegnaDolceCameriere
  • Cameriere -> RiceviOrdineDaCliente,PortaOrdine,ConsegnaDolce,
  • Cliente -> Ordina,Mangia,Paga

Queste tre figure possono essere viste come i nostri processi che, in maniera concorrente condividono risorse,come ad esempio l’ordinazione, ed eseguono operazioni. La struttura però è molto sensibile,se infatti il cameriere riceve un nuovo ordine prima di aver consegnato il primo dolce il sistema si blocca! Notiamo che esistono dunque dei possibili problemi nello sviluppo e nella gestione dei sistemi concorrenti. Ci sono varie rappresentazioni del comportamento del sistema concorrente. Alcune delle rappresentazioni sono

  • Reti di petri
  • Processi a stati finiti
  • Algebra dei processi

noi analizzeremo i sistemi concorrenti tramite i processi a stati finiti.

Processi a stati finiti

La rappresentazione tramite processi a stati finiti sfrutta gli automi a stati finiti per rappresentare il comportamento di ogni singolo processo. Un automa di un processo rappresenta tutte le operazioni, dette azioni, con una certa sequenza, che il singolo processo può compiere. Un automa è rappresentato da

  • Stati che rappresentano l'azione che sta effettuando il processo
  • Archi che sono i passaggi da un'azione all'altra. Tramite gli archi si determina la sequenzialità delle azioni di un processo

Il comportamento del sistema concorrente è dato dall'unione dei singoli automi dei processi. Più sono il numero di azioni dei processi, più sono le azioni del processo concorrente e più è elaborato da comprendere il comportamento complessivo.

Errori

Gli errori che si possono avere in un sistema concorrente, sono appunto dovuti al fatto che un processo fa un'operazione non lecita in quel momento. I tipi di errore sono

  • Deadlock quando più processi sono in stallo e attendono che un processo faccia un'operazione per uscire dallo stallo
  • Livelook quando più processi cambiano continuamente stato d'esecuzione, senza mai progredire nell'esecuzione
  • Starvation quando un processo è pronto (stato di ready to run) ma non viene mai prelevato, dall'algoritmo di scheduling dei processi, per la sua esecuzione
  • Data Race quando almeno due processo accedono ad una variabile globale del sistema, ed uno accede in scritture. Questo errore è caratteristico dei sistemi concorrenti, perché se accade ciò il processo che accede in lettura non sa determinare il contenuto esatto della variabile globale del sistema. Può accadere solo se è presente un'operazione di scrittura, in quanto richiede tre fasi (lettura, operazione, scrittura). Per maggiori approfondimenti si vada a vedere il corso di Architettura degli elaboratori.

Questi errori non sono visibili in fase di testing dell'applicazione concorrente, in quanto possono riscontrarsi dopo un tempo indeterminato, anche anni, che l'applicazione è in esecuzione. E' un esempio Nasa Rover Ames K9 che ha un difetto di concorrenza che causa il deadlock del sistema.