Canvas Situazione di apprendimento
Antonino Bologna
Created on September 12, 2024
More creations to inspire you
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.
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.
- 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.
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.
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.
- 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.
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