Vad är en cirkulär buffert?
En cirkulär buffert är antingen en typ av hårdvarukrets eller ett område i datorminne som används för att lagra inkommande information. Det är en buffert med fast storlek och kan förstås som en datastruktur som använder en buffert som om den var länkad från ena änden till den andra. Det kallas en cirkulär buffert eftersom den ger upphov till cirkularitet. Lägga till mer information när bufferten är full får den att skriva över det första elementet som är lagrat i bufferten. Det kallas också en ringbuffert eller en cyklisk buffert.
Ett enkelt sätt att förstå en cirkulär buffert är att föreställa sig en linje i en busstation. Data läggs alltid till i den ena änden av raden och tas alltid bort från den andra änden. Linjen är alltid den plats där information läggs till; linens svansände är den plats från vilken information tas bort. Svansen och huvudet ser ut som att vara bredvid varandra i implementeringen i denna typ av buffert, även om bufferten i själva verket bara är ett minnesblock. Till skillnad från linjen i en busstation är dock buffertens storlek fast och den har en viss maximal kapacitet.
Detta betyder att när bufferten är full börjar den skriva över data i huvudet. Den maximala kapaciteten för bufferten måste ställas in i förväg, och även om detta nummer kan ändras när som helst, kommer alla befintliga data som finns i bufferten att gå förlorade. Typiskt använder sekventiella processer cykliska buffertar för att utbyta information, och data som matas in i den ena processen läses av den andra. Den första processen, kallad producenten, placerar data i bufferten, och den andra processen, känd som konsumenten, tar ut den. Rutiner använder också cykliska buffertar för att lagra data tillfälligt.
Det mest fördelaktiga attributet för en cirkulär buffert är hur den lagrar data. Data blandas inte runt när ett objekt i slutet av raden tas bort. Om bufferten var icke-cirkulär skulle alla dataelement som finns i bufferten behöva växla positioner när data togs bort. En cirkulär buffert kan ses som en buffert av typen First In First Out (FIFO), medan en standardbuffert liknar en buffert av typen Last In First Out (LIFO).
Eftersom den cirkulära bufferten lagrar data i sammanhängande regioner i minnet, möjliggör den slumpmässig åtkomst av data snabbt. Denna typ av buffert är lätt att felsöka och är extremt effektiv. Det fungerar som ett cacheområde för lagring av ett visst antal av de sist inkluderade data. Det är också möjligt att mycket snabbt infoga och ta bort data från båda ändarna, vilket gör det idealiskt för många applikationer.