En informática , un búfer de datos (o simplemente búfer ) es una región de la memoria que se utiliza para almacenar datos temporalmente mientras se mueven de un lugar a otro. Normalmente, los datos se almacenan en un búfer a medida que se recuperan de un dispositivo de entrada (como un micrófono) o justo antes de enviarlos a un dispositivo de salida (como unos altavoces); sin embargo, se puede utilizar un buffer cuando los datos se mueven entre procesos dentro de una computadora, comparable a los buffers en las telecomunicaciones. Los buffers se pueden implementar en una ubicación de memoria fija en el hardware o mediante el uso de un buffer de datos virtual en el software que apunta a una ubicación en la memoria física.
En todos los casos, los datos almacenados en un búfer de datos se almacenan en un medio de almacenamiento físico . La mayoría de los buffers se implementan en software , que normalmente usa RAM para almacenar datos temporales debido a su tiempo de acceso mucho más rápido en comparación con las unidades de disco duro . Los buffers se usan típicamente cuando hay una diferencia entre la velocidad a la que se reciben los datos y la velocidad a la que se pueden procesar, o en el caso de que estas velocidades sean variables, por ejemplo en una cola de impresión de impresora o en la transmisión de video en línea . En un entorno informático distribuido , los buffers de datos a menudo se implementan en forma de buffers en ráfaga , que proporcionan servicios de buffer distribuido.
Un búfer a menudo ajusta el tiempo implementando un algoritmo de cola (o FIFO ) en la memoria, escribiendo datos simultáneamente en la cola a una velocidad y leyéndolos a otra velocidad.
Los buffers se utilizan a menudo junto con E/S de hardware , como unidades de disco , envío o recepción de datos hacia o desde una red , o reproducción de sonido en un altavoz. La fila hacia una montaña rusa en un parque de diversiones comparte muchas similitudes. Las personas que viajan en la montaña rusa llegan a un ritmo desconocido y a menudo variable, pero la montaña rusa podrá cargar personas en ráfagas (a medida que llega una montaña rusa y se carga). El área de cola actúa como un amortiguador: un espacio temporal donde aquellos que desean viajar esperan hasta que el viaje esté disponible. Los buffers generalmente se usan en un método FIFO (primero en entrar, primero en salir), generando datos en el orden en que llegaron.
Los buffers pueden aumentar el rendimiento de las aplicaciones al permitir que operaciones sincrónicas como lecturas o escrituras de archivos se completen rápidamente en lugar de bloquearse mientras se espera que las interrupciones de hardware accedan a un subsistema de disco físico; en cambio, un sistema operativo puede devolver inmediatamente un resultado exitoso de una llamada a la API, lo que permite que una aplicación continúe procesando mientras el kernel completa la operación del disco en segundo plano. Se pueden lograr beneficios adicionales si la aplicación lee o escribe pequeños bloques de datos que no corresponden al tamaño de bloque del subsistema de disco, lo que permite utilizar un búfer para agregar muchas operaciones de lectura o escritura más pequeñas en tamaños de bloque que son más eficiente para el subsistema de disco, o en el caso de una lectura, a veces para evitar por completo tener que acceder físicamente a un disco.
Una rutina de búfer o medio de almacenamiento utilizado en telecomunicaciones compensa una diferencia en la tasa de flujo de datos o el tiempo de ocurrencia de eventos cuando los datos se transfieren de un dispositivo a otro.
Los buffers se utilizan para muchos propósitos, incluidos:
Una de las primeras menciones de un búfer de impresión es el "Outscriber" ideado por el pionero del procesamiento de imágenes Russel A. Kirsch para la computadora SEAC en 1952: [2]
Uno de los problemas más importantes en el diseño de computadoras digitales automáticas es el de obtener los resultados calculados de la máquina con suficiente rapidez para evitar retrasar el progreso de los cálculos. En muchos de los problemas a los que se aplica una computadora de uso general, la cantidad de datos de salida es relativamente grande, tan grande que se produciría una grave ineficiencia si se obliga a la computadora a esperar a que estos datos se escriban en los dispositivos de impresión existentes. Esta dificultad se ha resuelto en el SEAC proporcionando dispositivos de grabación magnética como unidades de salida. Estos dispositivos pueden recibir información de la máquina a velocidades hasta 100 veces más rápidas que las que puede operar una máquina de escribir eléctrica. De este modo, se logra una mayor eficiencia en el registro de los datos de salida; La transcripción se puede realizar posteriormente desde el dispositivo de grabación magnética a un dispositivo de impresión sin ocupar la computadora principal.