Buffer
In informatica, un buffer – termine della lingua inglese che significa letteralmente tampone: in italiano, memoria tampone o anche intermediaria, di transito – è una zona di memoria usata temporaneamente per l'input o l'output dei dati oppure per velocizzare l'esecuzione di alcune operazioni, ad esempio operazioni su stringhe.
Applicazioni
Un buffer può essere implementato sia con l'hardware, per mezzo di circuiti dedicati, sia con il software, riservando una parte della memoria ai dati da manipolare; nei moderni sistemi sono presenti entrambe le implementazioni anche se viene preferita la soluzione software per la sua semplicità di implementazione e prestazione.
Sistemi di elaborazione
I dati possono essere ricevuti da o spediti verso periferiche esterne al computer.
Il buffer è utilizzato per la comunicazione fra componenti che lavorano a velocità differenti, come ad es. la CPU che deve spedire alla stampante i dati da stampare. La CPU ovviamente è molto più veloce e quindi scrive i dati nel buffer di memoria e poi continua a lavorare con un altro processo mentre la stampante può stampare il dato leggendolo dal buffer e non interrompendo più la CPU. Non sarebbe pensabile che la CPU rimanesse bloccata aspettando che la stampante sia in grado di ricevere tutti i dati. Viceversa, se la CPU è impegnata in lavori gravosi, potrebbe "perdere" alcuni input se non fossero salvati in un buffer e poi prelevati dal processore.
Networking
I buffer sono necessari per coprire i tempi di latenza dei collegamenti di rete. Due dispositivi che devono inviarsi grandi quantità di dati, in un sistema monodirezionale, dovranno salvare i dati da inviare in un buffer, per poi inviarlo quando il canale è libero.
Questa tecnica è fondamentale per gli hub di rete. Se più canali convogliano il traffico verso uno solo, l'hub è costretto a salvare temporanemante tutti i dati in arrivo in un buffer, svuotandolo mano a mano che i dati vengono inviati.
Software
I buffer software possono essere utilizzati ad un livello più alto dai software, solitamente quando sono in attesa di eventi esterni (come l'inserimento di dati da tastiera).
Problematiche
L'utilizzo di buffer nei software, li espone, se non adeguatamente protetti, ad attacchi che causano buffer overflow bloccando il programma o il sistema.
Algoritmi e tecniche
La memorizzazione in buffer avviene principalmente attraverso l'utilizzo di code (FIFO) o più raramente di stack (LIFO). Una struttura a coda permette l'ottimizzazione della sequenza di invio dei dati. Nel networking, spesso è associata ad algoritmi di priorità, per inviare per primi i dati definiti come "più importanti".
Differenze fra buffer e cache
- I buffer hanno un fan output[non chiaro] maggiore del fan input[non chiaro].
- I buffer vengono utilizzati da processi che devono effettuare operazioni di input/output. Molte volte i buffer vengono utilizzati come file di output
- La cache è frequentemente utilizzata come disco di I/O in modo tale da permettere a più processi che necessitano dello stesso file di accedervi contemporaneamente, venendo tale file copiato in cache in modo tale da velocizzare le operazioni: essa, infatti, è una memoria ad accesso rapidissimo, molto più veloce della RAM, ma anche con un costo fisico più elevato di quello della ram, pertanto la sua quantità è sempre piuttosto limitata (da 1 MB nei masterizzatori a 32 MB negli hard disk).