Define buffering.
A buffer is a memory area that keeps data while they are transferred among two devices or among a device and an application. Buffering is done for three reasons
a. To cope with a speed mismatch among the producer and consumer of a data stream
b. To adapt between devices that have dissimilar data transfer sizes
c. To support copy semantics for application I/O