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

Get started free

Spinlock+Semafori di Dijkstra

matthew pagano

Created on April 6, 2021

Start designing with a free template

Discover more than 1500 professional designs like these:

Audio tutorial

Pechakucha Presentation

Desktop Workspace

Decades Presentation

Psychology Presentation

Medical Dna Presentation

Geometric Project Presentation

Transcript

Programmazione

La programmazione concorrente

Autori: Matthew Pagano Gabriele Fasitta

Index

02. Semafori di Dijkstra

01. Spinlock

Spinlock

Come proteggere una risorsa condivisa

01. il problema

Perché si usano gli Spinlock?

Esempio

  • Il processo P1 accede alla periferica T
    • Invia un segnale da utilizzare
  • Il processo P2 accede alla periferica T
    • Invia un altro segnale da utilizzare mentre il segnale di P1 è ancora in elaborazione
  • La periferica non riesce a gestire due segnali contemporaneamente danneggiando l'elaborazione degli stessi.

Nell'ambito della programmazione concorrente può capitare che più processi (o thread) tentino di accedere alla stessa risorsa contemporaneamente mettendo a rischio l'affidabilità della risorsa stessa.

02. Ma cosa sono?

Come funzionano

Cosa sono

Gli Spinlock sono una tecnica di programmazione che consente la protezione delle risorse da accessi simultanei

Consistono in un ciclo che controlla se una risorsa è in "lock" : Se sì il processo viene mantenuto in pausa, in caso contrario può accedere alla risorsa

Semafori di dijkstra

Come gestire i processi

01. il problema

Perché si usano i semafori di Dijkstra?

Esempio (CPU 2core)

  • Il processo P1 accede al core C1
  • Il processo P2 accede al core C2
  • Il processo P3 tenta di accedere alla CPU
    • Non trovando core disponibili non viene eseguito.

Nell'ambito della programmazione concorrente succede spesso che diversi task tentino di accedere ad una classe di risorse, nasce così l'esigenza di una gestione dei task.

02. Ma cosa sono?

Come funzionano

Cosa sono

I semafori di Dijkstra sono dei tipi di dato composti da una variabile intera (che rappresenta il numero di risorse libere) e dalla lista dei task in coda per accedervi.

Consistono in un ciclo che controlla se una risorsa è in "lock" : Se sì il processo viene mantenuto in pausa, in caso contrario può accedere alla risorsa

03. Results

Inizializzazione

Si inizializza la variabile intera al numero di risorse disponibili

Questa funzione decrementa il numero di risorse disponibili, se dopo il decremento il numero dovesse essere negativo il task verrebbe sospeso

Questa funzione incrementa il numero di risorse disponibili, se si passa ad un numero >0 mette in ready il primo task della coda

04. Tipi di semafori

Semafori contatori

Semafori binari

I semafori binari possono assumere solo valori 0 e 1 e vengono utilizzati per risolvere i problemi più semplici

I semafori contatori possono assumere valori =,< o > a 0 e vengono utilizzati per risolvere problemi più complessi.

Grazie per la visione

Qualche domanda?

Fonti:

Qastack.it Dacrema.com it.wikipedia.org