Cambridge A-Level Computer Science 9618 – 3.1 Computers and Their Components: Buffers
3.1 Computers and Their Components – Buffers
What is a Buffer?
A buffer is a temporary storage area, usually located in memory, that holds data while it is being transferred between two devices or between a device and the CPU. The buffer smooths out differences in data‑transfer rates, allowing the producer and consumer to operate at their own speeds.
Why Buffers Are Needed
Rate Mismatch: The source may produce data faster or slower than the destination can handle.
Timing Differences: Devices may operate asynchronously; a buffer decouples their timing.
Reduced CPU Overhead: The CPU can read or write larger blocks of data at once, rather than handling each byte individually.
Improved Throughput: By allowing continuous streaming, buffers increase the effective data rate.
Common Types of Buffers
Buffer Type
Typical Use
Key Characteristics
Input Buffer
Stores data arriving from an input device (e.g., keyboard, network card)
Often a FIFO (first‑in‑first‑out) queue; prevents loss of incoming data when the CPU is busy.
Output Buffer
Holds data waiting to be sent to an output device (e.g., printer, display)
Allows the CPU to continue processing while the slower device finishes transmission.
Double Buffer (or Ping‑Pong Buffer)
Used in graphics and audio streaming to avoid flicker or glitches
Two buffers are alternately filled and emptied, providing continuous data flow.
Circular Buffer
Efficient for continuous streams where old data is overwritten by new data
Implements a ring structure; useful in real‑time data acquisition.
How Buffers Work – A Simple Example
Consider a CPU reading characters from a keyboard. The keyboard generates a character every 10 ms, but the CPU can only poll the keyboard every 30 ms. Without a buffer, two characters could be lost. With an input buffer:
The keyboard places each character into the buffer as soon as it is typed.
The CPU reads the next character from the buffer whenever it is ready.
The buffer’s FIFO order preserves the original sequence of keystrokes.
Performance Metrics Involving Buffers
The impact of buffering on system performance can be expressed with simple formulas. For a data stream of N items transferred in time t:
\$T = \frac{N}{t}\$
where T is the effective throughput. Adding a buffer can increase t for the producer (allowing it to run at its optimal speed) while keeping t for the consumer unchanged, thus raising T.
Potential Issues with Buffers
Buffer Overflow: Occurs when data arrives faster than it can be removed, leading to loss or error.
Buffer Underflow: Happens when the consumer empties the buffer faster than the producer fills it, causing idle time.
Latency: Data may be delayed while waiting in the buffer, which can be problematic for real‑time applications.
Design Considerations
When designing a buffered system, the following factors must be balanced:
Size of the Buffer: Larger buffers reduce overflow risk but consume more memory.
Read/Write Policies: Blocking vs. non‑blocking I/O, and whether to use polling or interrupts.
Synchronization: Proper use of semaphores, mutexes, or lock‑free algorithms to avoid race conditions.
Suggested Diagram
Suggested diagram: A block diagram showing a producer, a buffer (FIFO queue), and a consumer, with arrows indicating data flow and timing differences.
Key Take‑aways
Buffers decouple the speed and timing of data producers and consumers.
They are essential for reliable I/O, smooth graphics/audio rendering, and efficient CPU utilisation.
Correct sizing and management prevent overflow, underflow, and excessive latency.