Che cos'è la falsa condivisione?
La falsa condivisione è una situazione che può verificarsi in un programma per computer quando due applicazioni in esecuzione tentano contemporaneamente di accedere alle informazioni nella stessa area di memoria logica che ciascun programma o processo ha archiviato nella propria cache. I dati nella cache di ogni applicazione vengono copiati da una fonte comune, quindi la modifica di una cache comporta il ricaricamento dell'altra fonte dalla fonte. Il falso aspetto della condivisione sorge quando le modifiche apportate alla riga della cache da un programma non influiscono effettivamente sui dati utilizzati dal secondo programma, nel qual caso forzare la ricarica della cache è uno spreco di risorse di sistema e può influire negativamente l'esecuzione del programma. Il problema della falsa condivisione è difficile da rilevare, poiché non è il risultato diretto di alcun codice contenuto nelle applicazioni, sebbene esistano modi efficaci per prevenire la falsa condivisione, come lo spostamento di dati che si trovano in una riga attualmente memorizzata nella cache su una riga separata .
Uno dei motivi principali per cui può verificarsi una falsa condivisione si trova nel modo in cui un sistema operativo o hardware gestisce la lettura e la scrittura dei dati. Quando le informazioni da un disco rigido o altra fonte vengono lette o scritte da un programma, di solito vengono caricate in una cache temporanea in modo che sia possibile accedervi rapidamente. La quantità di informazioni memorizzata nella cache dalla posizione di origine è denominata linea di cache ed è un blocco logico di memoria che normalmente può avere una lunghezza compresa tra 2 e 256 byte. In alcuni sistemi operativi o architetture di sistema, i programmi possono essere eseguiti contemporaneamente, ad esempio in elaborazione parallela. Ciò significa che è possibile che due programmi separati tentino di accedere alle informazioni nella stessa riga della cache, quindi ogni programma avrà la propria copia dei dati di origine, facendo sì che le modifiche in una cache non vengano riflesse nell'altra cache, invalidando il dati in suo possesso.
Esistono numerosi meccanismi impiegati per gestire la situazione quando due programmi tentano di accedere alla stessa linea di cache, ma il risultato più spesso è che un programma è costretto a ricaricare la sua cache con le informazioni aggiornate che l'altro programma ha modificato. Questo tipo di incidente è noto come falsa condivisione quando i dati all'interno della riga della cache a cui accede ciascun programma non sono correlati, quindi forzare un programma a ricaricare la cache è uno spreco di potenza di elaborazione e altre risorse. Questo molto spesso è un problema per un programma che non modificherà mai le informazioni nella sua cache, quindi non vi è alcun rischio che l'applicazione sovrascriva le modifiche apportate dall'altro processo.
Esistono due modi prevalenti per prevenire o mitigare gli effetti della falsa condivisione. Il primo è quello di aggiungere informazioni vuote prima o dopo i dati in memoria, essenzialmente forzandoli in una riga cache separata a cui non è possibile accedere da un altro programma. Il secondo metodo consiste nel limitare la frequenza di lettura e scrittura nella riga della cache in modo che venga ricaricata il meno possibile. Le soluzioni più complesse comprendono la gestione a livello di cache o persino modifiche al modo in cui un sistema operativo gestisce la condivisione.