Want to make interactive content? It’s easy in Genially!

Over 30 million people build interactive content in Genially.

Check out what others have designed:

Transcript

Modello e Stato dei processi

Elaborazione e Concorrenza

Fork-joinCobegin-coend

Semafori

I Problemi di Sincronizzazione

I Monitor

Problema dei Produttori / Consumatori

TPSIt: processi, comunicazione e sincronizzazione

Semafori di basso e alto livello

Risorse e Gestione

Problema dei Filosofi a Cena

The end

By Bologna Antonino e Mucciolo Luigi

Il problema dei produttori e dei consumatori è un classico esempio di sincronizzazione tra processi. In questo scenario, i produttori generano dati e li inseriscono in una risorsa condivisa, come un buffer, mentre i consumatori leggono i dati dalla stessa risorsa. Questo può portare a condizioni di concorrenza e problemi come sovrapposizione delle operazioni, dati non validi o deadlock. Le soluzioni classiche includono:

  • Semafori: Utilizzati per tenere traccia dello stato del buffer e garantire l’accesso esclusivo.
  • Mutex (mutual exclusion locks): Assicurano che solo un processo alla volta possa accedere alla risorsa condivisa.
  • Variabili di condizione e monitor: Utilizzati per sincronizzare l’accesso tra produttori e consumatori.
Una tecnica specifica è la Semaphore Solution, che utilizza due semafori per monitorare lo stato del buffer (pieno o vuoto) e garantire l’accesso esclusivo.

Problema dei Produttori / Consumatori

I semafori sono strumenti di sincronizzazione utilizzati per gestire l’accesso a risorse condivise tra processi o thread in un sistema operativo multitasking.Ecco alcune delle loro principali funzioni:

  • Mutua esclusione: I semafori garantiscono che solo un processo o thread alla volta possa accedere a una risorsa critica, prevenendo conflitti e corruzione dei dati.
  • Sincronizzazione: Permettono di coordinare l’esecuzione di processi o thread, assicurando che certi eventi accadano in un ordine specifico.
  • Gestione delle risorse: I semafori possono contare e limitare l’accesso a un numero finito di risorse, come connessioni di rete o slot di memoria.

I Semafori

Il deadlock è una situazione in cui:

  • Due o più processi sono bloccati.
  • Ciascun processo attende una risorsa trattenuta da un altro processo.
  • Si crea un ciclo di attesa che impedisce a tutti i processi coinvolti di proseguire.
La starvation dei processi si riferisce a:
  • Una situazione in cui un processo non riesce ad ottenere le risorse necessarie per eseguire il proprio lavoro.
  • La causa è la continua assegnazione delle risorse ad altri processi, lasciando il processo in attesa.
Quindi nel deadlock tutti i processi coinvolti sono bloccati, creando un ciclo di attesa, mentre nella starvation un processo è continuamente escluso dall'assegnazione delle risorse, ma altri processi possono continuare a progredire; questi concetti sono fondamentali nella gestione della concorrenza e nella progettazione di sistemi operativi

I Problemi di Sincronizzazione

Un Processo è un entità logica in continua evoluzione.Ogni processo, istante per istante, viene rappresentato da:

  • Codice
  • Dati
  • Program counter

Modello e stato dei processi

Esaminiamo gli stati in cui un processo può essere nel dettaglio:

  • New: è lo stato in cui il processo si trova appena viene creato.
  • Running: il processo è attualmente in esecuzione.
  • Waiting: il processo è in attesa.
  • Ready: il processo è pronto se dispone di tutte le risorse necessarie per l'evoluzione.
  • Terminated: il processo ha completato la sua esecuzione e si considera terminato.

Il monitor rappresenta un ambiente condiviso essenziale per la sincronizzazione dei processi, assicurando un accesso controllato alle risorse condivise. Grazie al meccanismo di mutua esclusione, solo un processo alla volta può accedere a una risorsa critica, prevenendo così problemi di concorrenza, come le race condition.Questo ambiente di sincronizzazione utilizza anche le variabili di condizione, permettendo ai processi di mettersi in attesa volontariamente fino al verificarsi di determinate condizioni, facilitando una coordinazione** più efficace tra i processi. Le principali primitive impiegate nei monitor comprendono:

  • Enter e Exit: regolano l'ingresso e l'uscita dei processi dalla sezione critica, garantendo l'assenza di conflitti nell'uso delle risorse.
  • Wait: consente a un processo di sospendersi finché una condizione specifica non diventa vera.
  • Signal: permette a un altro processo di risvegliare uno dei processi in attesa.
  • NotifyAll: risveglia tutti i processi sospesi sulla stessa condizione.

I Monitor

Due o più processi possono condividere una risorsa, il che implica l'uso alternato di dispositivi hardware e software. Questa condivisione consente ai processi di scambiarsi informazioni e di cooperare, permettendo il trasferimento dei risultati di un processo a un altro.

Elaborazione e Concorrenza

L'elaborazione sequenziale si riferisce all'esecuzione di un programma in un ordine prestabilito, dove la sequenza degli eventi è completamente ordinata. In questo caso, il grafo delle precedenze si traduce in una lista ordinata. Al contrario, nei processi paralleli, i percorsi alternativi consentono l'esecuzione simultanea di più istruzioni.

Le istruzioni fork-join sono utilizzate per gestire l'esecuzione parallela di segmenti di codice.Esse consentono di scomporre un processo in due o più sotto-processi.Il costrutto cobegin-coend è impiegato per:

  • Avviare N processi in contemporanea.
  • Terminare i processi e riunirli nel processo principale.
Queste istruzioni sono fondamentali per migliorare l'efficienza e le prestazioni dei programmi che richiedono operazioni parallele.

Fork-join e Cobegin-coend

Immagina cinque filosofi seduti attorno a un tavolo rotondo. Davanti a ciascun filosofo c’è un piatto di spaghetti e tra ogni coppia di filosofi c’è una forchetta. Per mangiare, ogni filosofo ha bisogno di due forchette: una alla sua sinistra e una alla sua destra. La vita dei filosofi si alterna tra due stati: mangiare e pensare. Quando un filosofo vuole mangiare, deve prima prendere entrambe le forchette. Dopo aver mangiato, ripone entrambe le forchette sul tavolo. Problemi principali:Deadlock (stallo): Si verifica quando ogni filosofo prende una forchetta e aspetta l’altra, creando un ciclo di attesa infinita. Nessuno riesce a mangiare perchè tutti sono bloccati in attesa della forchetta. Starvation: può accadere quando se un filosofo non riesce mai ad avere entrambe le forchette perché gli altri filosofi le prendono prima di lui.

Problema dei Filosofi a Cena

I processi sono programmi in evoluzione e, per poter progredire, necessitano di risorse. Le risorse sono considerate componenti riutilizzabili, sia hardware che software, fondamentali per il funzionamento del processo di sistema.Competizione per le Risorse

  • I processi sono in competizione per accedere a tali risorse, poiché non sempre queste sono sufficienti.
Classificazione delle Risorse
  • Le risorse possono essere suddivise in classi.
  • Le risorse appartenenti alla stessa classe sono equivalenti, il che significa che possono essere utilizzate in modo intercambiabile dai processi.
Questa competizione e classificazione delle risorse è cruciale per la gestione efficiente dei processi all'interno di un sistema operativo.

Risorse e Gestione

I semafori di basso livello sono primitivi semplici che gestiscono la sincronizzazione dei processi con le operazioni base P (wait) e V (signal), lasciando agli sviluppatori il compito di gestire l'accesso alle risorse. I semafori di alto livello, invece, offrono funzionalità più avanzate e sicure, come la mutua esclusione automatica, la gestione delle priorità e il supporto per timeout, rendendo la sincronizzazione più semplice e meno soggetta a errori.

Semafori di Alto e Basso Livello