Un buffer circolare è un tipo di circuito hardware o un’area di memoria del computer utilizzata per memorizzare le informazioni in entrata. È un buffer di dimensioni fisse e può essere inteso come una struttura dati che utilizza un buffer come se fosse collegato da un’estremità all’altra. Si chiama buffer circolare perché dà l’impressione di circolarità. L’aggiunta di ulteriori informazioni quando il buffer è pieno provoca la sovrascrittura del primo elemento memorizzato nel buffer. Viene anche chiamato buffer ad anello o buffer ciclico.
Un modo semplice per capire un buffer circolare è immaginare una linea in una stazione degli autobus. I dati vengono sempre aggiunti a un’estremità della riga e vengono sempre rimossi dall’altra estremità. La testa della riga è sempre lo slot in cui vengono aggiunte le informazioni; la fine della riga è il punto da cui vengono rimosse le informazioni. La coda e la testa danno l’impressione di essere l’una accanto all’altra nell’implementazione in questo tipo di buffer, sebbene il buffer sia, in realtà, solo un blocco di memoria. A differenza della linea in una stazione degli autobus, però, la dimensione del buffer è fissa e ha una certa capacità massima.
Ciò significa che quando il buffer è pieno, inizia a sovrascrivere i dati in testa. La capacità massima del buffer deve essere impostata in anticipo e, sebbene questo numero possa essere modificato in qualsiasi momento, tutti i dati esistenti presenti nel buffer andranno persi. In genere, i processi sequenziali utilizzano buffer ciclici per scambiare informazioni e i dati immessi da un processo vengono letti dall’altro. Il primo processo, chiamato produttore, inserisce i dati nel buffer e il secondo processo, noto come consumatore, li estrae. Le routine utilizzano anche buffer ciclici per la memorizzazione temporanea dei dati.
L’attributo più vantaggioso di un buffer circolare è il modo in cui memorizza i dati. I dati non vengono mischiati quando viene rimosso un oggetto alla fine della riga. Se il buffer fosse non circolare, tutti gli elementi di dati presenti nel buffer dovrebbero cambiare posizione quando i dati sono stati rimossi. Un buffer circolare può essere pensato come un tipo di buffer First In First Out (FIFO), mentre un buffer standard assomiglia a un tipo di buffer Last In First Out (LIFO).
Poiché il buffer circolare archivia i dati in regioni contigue della memoria, consente l’accesso casuale ai dati rapidamente. Questo tipo di buffer è facile da eseguire il debug ed è estremamente efficiente. Serve come area cache per memorizzare un certo numero degli ultimi dati inclusi. È anche possibile inserire e rimuovere molto rapidamente i dati da entrambe le estremità, rendendolo ideale per numerose applicazioni.