En informática, un búfer (del inglés, buffer) es un espacio de memoria, en el que se almacenan datos de manera temporal, normalmente para un único uso (generalmente ocupan un sistema de cola FIFO); su principal función es evitar que el programa o recurso que los requiere, ya sea hardware o software, se quede sin datos durante una transferencia (entrada/salida) de datos irregular o por la velocidad del proceso.
Normalmente los datos se almacenan en un búfer mientras son transferidos desde un dispositivo de entrada (como un ratón o mouse) o justo antes de enviarlos a un dispositivo de salida (por ejemplo: altavoces). También puede utilizarse para transferir datos entre procesos, de una forma parecida a los búferes utilizados en telecomunicaciones. Un ejemplo de esto último ocurre en una comunicación telefónica, en la que al realizar una llamada esta se almacena, se disminuye su calidad y el número de bytes a ser transferidos, y luego se envían estos datos modificados al receptor.
Los búferes pueden ser implementados por software o hardware, esto depende del origen del búfer, aunque la gran mayoría son del tipo software debido a la flexibilidad para su creación.
Normalmente se usan cuando la frecuencia de transferencia de datos es distinta a la de procesado, dependiendo de las limitaciones del sistema, o también cuando la frecuencia es variable, como en la recepción de vídeo en-línea (streaming). Estas diferencias temporales de transmisión son normalmente ajustadas mediante la implementación de un algoritmo tipo cola (o estructura de tipo FIFO) en memoria, para así escribir datos en la cola a una frecuencia y leerlos a otra. Esto ocurre en el envío de datos de un procesador a una impresora para que los imprima. La velocidad de impresión de la impresora en comparación a la del procesador es muy lenta, debido a esto la impresora tendrá que tener una cola FIFO (software), para ir acumulando los trabajos que todavía no se han podido imprimir.
Los búferes se pueden usar en cualquier sistema digital, no solo en informáticos, como en reproductores de música y video.
Se puede ejemplificar la función de un búfer utilizando esta metáfora: «un búfer es como tener dinero en el banco (buffer), un trabajo (entrada) y unos gastos fijos (salida). Si tienes un trabajo inestable, mientras tengas ciertos ahorros, puedes mantener tus gastos fijos sin problemas, e ir ingresando dinero cuando puedas según vas trabajando. Si los ahorros son pequeños, enseguida que no tengas trabajo, no vas a poder acometer los gastos fijos. De la misma forma si escuchas música en Internet y tu programa de audio usa un búfer pequeño, en cuanto haya alguna interrupción en la descarga (porque las descargas nunca tienen una velocidad constante), notarás cortes de sonido, ya que faltará información».
Para que un búfer, de tipo software o hardware, pueda funcionar correctamente es indispensable que este posea como mínimo las siguientes características:
Los búferes se utilizan, a menudo, conjuntamente con E/S de hardware, tal como unidades de disco, enviar o recibir datos a/o desde una red, o reproducción de sonido en un altavoz. Una línea a una montaña rusa en un parque de atracciones comparte muchas similitudes. Las personas que viajan en la montaña llegan a un ritmo desconocido y variable, pero la montaña rusa será incapaz de cargar personas de golpe (tal como llegan se van montando). La zona de la cola actúa como un búfer: un espacio temporal donde los que deseen viajar deben esperar a que el viaje esté disponible. Los búferes utilizan generalmente un método FIFO (primero en entrar, primero en salir), es decir, la salida de datos se produce en el orden en que llegaron.
Si los búferes contienen información de gran volumen (por ejemplo, archivos para entrada y salida pseudo fuera de línea), el búfer limitado aún se puede usar para almacenar las direcciones de los búferes que se utilizan para almacenar la información. Aquí entra en juego la memoria virtual, la memoria física es solo una proyección parcial de la memoria lógica, potencialmente mucho mayor. De este modo el productor puede estar llenando un búfer mientras el consumidor está vaciando otro búfer al mismo tiempo
Una memoria caché puede ser usada a veces como un búfer, y viceversa. Sin embargo, una caché opera con el supuesto de que los mismos datos van a ser utilizados múltiples veces, que los datos escritos serán leídos en un periodo corto de tiempo, o teniendo en cuenta la posibilidad de múltiples lecturas o escrituras para formar un único bloque más grande. Su premisa básica es reducir los accesos a los almacenamientos de nivel más bajo, los cuales son bastante lentos. La caché también es normalmente una capa de abstracción que está diseñada para ser invisible.
Una caché de disco o archivo de caché guarda las estadísticas de los datos almacenados en él y proporciona datos con un tiempo máximo de espera en modos de escritura en diferido. Un búfer, por el contrario, no hace nada de esto, sino que es utilizado normalmente en entrada, salida y a veces, almacenamiento temporal de datos que se enrutan entre distintos dispositivos o que van a ser modificados de manera no secuencial antes de ser escritos o leídos de manera secuencial.
Ejemplos:
Una de las primeras ocasiones en que se mencionó el concepto de búfer de impresión fue en 1952, para el computador SEAC:[1]
Uno de los problemas más serios en el diseño de computadores automáticos digitales es la obtención de los resultados calculados por la máquina lo suficientemente rápido como para evitar retrasos en el progreso de los cálculos restantes. En muchos de los problemas en que se aplica un computador de propósito general la cantidad de datos a utilizar es relativamente extensa, tanto, que una seria ineficiencia, podría provocarse al forzar al computador a esperar que estos datos sean escritos en los dispositivos de impresión existentes. Esta dificultad ha sido resuelta en el SEAC mediante el uso de dispositivos magnéticos de grabación utilizados como unidades de salida. Estos dispositivos son capaces de recibir información desde la máquina a frecuencias hasta 100 veces más altas que las frecuencias a las que se puede operar una máquina de escribir. Por ello, se está logrando una mejor eficiencia al grabar los datos de salida y se pueden realizar transcripciones posteriores desde el dispositivo de grabación magnético a un dispositivo de impresión sin comprometer el ordenador principal.Russel A. Kirsch
Los problemas más comunes para los búferes son:
La rutina del búfer, o bien, el almacenamiento medio usado en telecomunicaciones, compensa una diferencia en el flujo de datos, o el tiempo de la ocurrencia, al transferir datos desde un dispositivo a otro.
Los almacenadores intermedios se utilizan para muchos propósitos, por ejemplo:
A continuación se muestran algunas de las formas en que se administran los diferentes tipos de búferes, cada método a utilizar depende de la información a tratar o de los procesos que la van a utilizar.