En informática , el desbordamiento o insuficiencia de buffer es un estado que se produce cuando un buffer utilizado para la comunicación entre dos dispositivos o procesos se alimenta con datos a una velocidad menor que la velocidad de lectura de los datos. Esto requiere que el programa que lee desde el buffer pause su procesamiento mientras el buffer se rellena. Tener que lidiar con este tipo de situaciones puede causar efectos secundarios no deseados y, a veces, graves, porque los datos que se almacenan en el buffer a menudo no son adecuados para un acceso de parada y arranque de este tipo.
En términos de programación concurrente , un desbordamiento de buffer puede considerarse una forma de falta de recursos .
El término tal como se define arriba es distinto de desbordamiento de búfer , una condición en la que una porción de la memoria forma un búfer de un tamaño fijo pero se llena con más que esa cantidad de datos, sobrescribiendo así las ubicaciones de memoria fuera del fragmento asignado. Sin embargo, el desbordamiento y el subdesbordamiento del búfer también se usan a veces para significar subescritura del búfer , donde se engaña a un programa para que escriba datos en ubicaciones de memoria antes del comienzo del búfer, anulando los datos potenciales allí, como los bits de permiso . [1]
Los desbordamientos del búfer suelen ser el resultado de problemas transitorios que involucran la conexión que se está almacenando en el búfer: ya sea una conexión entre dos procesos, con otros compitiendo por el tiempo de CPU , o un enlace físico, con dispositivos compitiendo por el ancho de banda .
La protección más sencilla contra estos problemas es aumentar el tamaño del búfer: si es necesario leer un flujo de datos entrante a un bit por segundo, un búfer de 10 bits permitiría bloquear la conexión durante hasta 10 segundos antes de fallar, mientras que uno de 60 bits permitiría un bloqueo de hasta un minuto. Sin embargo, esto requiere que haya más memoria disponible para el proceso o dispositivo, lo que puede resultar costoso. Se supone que el búfer comienza lleno (lo que requiere una pausa potencialmente significativa antes de que comience el proceso de lectura) y que siempre permanecerá lleno a menos que la conexión esté bloqueada en ese momento. Si los datos no llegan, en promedio, más rápido de lo necesario, cualquier bloqueo en la conexión será acumulativo; "perder" un bit cada minuto en una conexión hipotética con un búfer de 60 bits provocaría un desbordamiento del búfer si la conexión permaneciera activa durante una hora. En aplicaciones en tiempo real, un tamaño de búfer grande también aumenta la latencia entre la entrada y la salida, lo que no es deseable en aplicaciones de baja latencia, como las videoconferencias.
La falta de datos en el búfer puede causar serios problemas durante la grabación de CD/DVD , porque una vez que se inicia la escritura, no puede detenerse y reanudarse sin problemas; por lo tanto, la pausa necesaria para la falta de datos puede hacer que los datos del disco se vuelvan inválidos. Dado que el búfer generalmente se llena desde una fuente relativamente lenta, como un disco duro u otro CD/DVD, una carga pesada de CPU o memoria de otras tareas concurrentes puede agotar fácilmente la capacidad de un búfer pequeño. Por lo tanto, varios proveedores individuales de grabadoras de CD/DVD implementaron una técnica llamada protección contra falta de datos en el búfer , bajo varias marcas comerciales , como Plextor BurnProof, Nero UltraBuffer, Yamaha SafeBurn, JustLink y Seamless Link. Con esta técnica, el láser puede detener la escritura durante cualquier cantidad de tiempo y reanudarla cuando el búfer se llena nuevamente. El intervalo entre escrituras sucesivas es extremadamente pequeño.
Otra forma de protegerse contra el problema, al utilizar medios regrabables ( CD-RW , DVD-RW , DVD-RAM ), es utilizar el sistema de archivos UDF , que organiza los datos en " paquetes " más pequeños, referenciados por una única tabla de direcciones actualizada, que por lo tanto se puede escribir en ráfagas más cortas.
Si el búfer de cuadros del controlador gráfico no se actualiza, la imagen de la pantalla de la computadora parecerá estar colgada hasta que el búfer reciba nuevos datos. Muchos programas de reproducción de video (por ejemplo, MPlayer ) tienen la capacidad de omitir cuadros si el sistema está sobrecargado, lo que permite intencionalmente que se agote el búfer para mantener el ritmo.
El búfer de un controlador de audio es un búfer circular . Si se produce un desbordamiento y el controlador de audio no se detiene, seguirá repitiendo el sonido contenido en el búfer o emitirá silencio, según la implementación. Este efecto se conoce comúnmente como efecto de tartamudeo de "ametralladora" o de Max Headroom . Esto sucede si el sistema operativo se bloquea durante la reproducción de audio. Una rutina de manejo de errores (por ejemplo, la pantalla azul de la muerte ) puede acabar deteniendo el controlador de audio.
Imitar intencionalmente este fallo de audio durante la creación de música o arte sonoro, ya sea empalmando el audio manualmente o reactivando muestras, o mediante el uso de complementos, se denomina edición Stutter .