En informática , un búfer de datos (o simplemente buffer ) es una región de la memoria que se utiliza para almacenar datos temporalmente mientras se trasladan 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 que se envíen a un dispositivo de salida (como altavoces); sin embargo, se puede utilizar un búfer cuando los datos se trasladan entre procesos dentro de una computadora, de forma comparable a los búferes en telecomunicaciones. Los búferes se pueden implementar en una ubicación de memoria fija en el hardware o mediante el uso de un búfer 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 búferes se implementan en software , que normalmente utiliza 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 búferes se utilizan normalmente 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 un spooler de impresora o en la transmisión de vídeo en línea . En un entorno informático distribuido , los búferes de datos se implementan a menudo en forma de búferes de ráfagas , que proporcionan servicios de almacenamiento en búfer distribuidos.
Un buffer a menudo ajusta el tiempo implementando un algoritmo de cola (o FIFO ) en la memoria, escribiendo simultáneamente datos en la cola a una velocidad y leyéndolos a otra.
Los buffers se utilizan a menudo junto con la E/S al hardware , como las unidades de disco , el envío o la recepción de datos hacia o desde una red , o la reproducción de sonido en un altavoz. Una fila para una montaña rusa en un parque de atracciones comparte muchas similitudes. Las personas que suben a 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 la cola actúa como un buffer, un espacio temporal donde aquellos que desean subir esperan hasta que la atracción esté disponible. Los buffers se utilizan generalmente 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 API, lo que permite que una aplicación continúe el procesamiento mientras el núcleo completa la operación de disco en segundo plano. Se pueden lograr más beneficios 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 que se use un buffer para agregar muchas operaciones de lectura o escritura más pequeñas en tamaños de bloque que son más eficientes 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 velocidad 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, entre ellos:
Una de las primeras menciones de un buffer 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 las computadoras digitales automáticas es el de obtener los resultados calculados de la máquina con la suficiente rapidez para no retrasar el progreso posterior de los cálculos. En muchos de los problemas a los que se aplica una computadora de propósito general, la cantidad de datos de salida es relativamente grande, tan grande que se produciría una ineficiencia grave si se obligara a la computadora a esperar a que esos datos se escribieran 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 de 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 más tarde desde el dispositivo de grabación magnética a un dispositivo de impresión sin ocupar el ordenador principal.