En informática , el desbordamiento o subdesbordamiento de búfer se produce cuando un búfer utilizado para la comunicación entre dos dispositivos o procesos recibe datos a una velocidad inferior a la de su lectura. Esto obliga al programa que lee del búfer a pausar su procesamiento mientras este se recarga. Gestionar estas situaciones puede provocar efectos secundarios indeseados y, en ocasiones, graves, ya que los datos almacenados en el búfer a menudo no son adecuados para este tipo de acceso intermitente.
En términos de programación concurrente , un desbordamiento de búfer puede considerarse una forma de escasez de recursos .
El término, tal como se define anteriormente, es distinto del desbordamiento de búfer , una condición en la que una porción de memoria forma un búfer de tamaño fijo pero se llena con una cantidad de datos mayor, sobrescribiendo así ubicaciones de memoria fuera del bloque asignado. Sin embargo, los términos subdesbordamiento y subcorrimiento de búfer también se utilizan a veces para referirse a la subescritura de búfer , donde se engaña a un programa para que escriba datos en ubicaciones de memoria anteriores al inicio del búfer, sobrescribiendo datos potenciales allí, como bits de permisos . [ 1 ]
Causas y soluciones generales
Los problemas de búfer suelen ser consecuencia de problemas transitorios relacionados con la conexión que se está almacenando: ya sea una conexión entre dos procesos, con otros procesos compitiendo por el tiempo de CPU , o un enlace físico, con dispositivos compitiendo por el ancho de banda .
La solución más sencilla para evitar estos problemas es aumentar el tamaño del búfer: si se necesita leer un flujo de datos entrante a 1 bit por segundo, un búfer de 10 bits permitiría bloquear la conexión hasta 10 segundos antes de que falle, mientras que uno de 60 bits permitiría un bloqueo de hasta un minuto. Sin embargo, esto requiere que el proceso o dispositivo disponga de más memoria, lo que puede resultar costoso. Se asume que el búfer comienza lleno —lo que requiere una pausa potencialmente significativa antes de que comience el proceso de lectura— y que permanecerá lleno a menos que la conexión esté bloqueada. 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 búfer grande también aumenta la latencia entre la entrada y la salida, lo cual es indeseable en aplicaciones de baja latencia como las videoconferencias.
Problemas de grabación de CD y DVD
Los problemas de búfer pueden causar graves inconvenientes durante la grabación de CD/DVD , ya que una vez iniciada la escritura, no puede detenerse ni reanudarse sin interrupciones; por lo tanto, la pausa necesaria para evitar el búfer puede invalidar los datos del disco. Dado que el búfer generalmente se llena desde una fuente relativamente lenta, como un disco duro u otro CD/DVD, una carga elevada de CPU o memoria debido a otras tareas simultáneas puede agotar fácilmente la capacidad de un búfer pequeño. Por ello, varios fabricantes de grabadoras de CD/DVD implementaron una técnica denominada protección contra búfer , bajo diversas 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 período de tiempo y reanudarla cuando el búfer se llena de nuevo. El intervalo entre escrituras sucesivas es extremadamente pequeño.
Otra forma de protegerse contra este problema, al usar soportes 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 pueden escribir en ráfagas más cortas.
Reproducción multimedia
Si el búfer de fotogramas del controlador gráfico no se actualiza, la imagen en la pantalla del ordenador parecerá congelarse hasta que el búfer reciba nuevos datos. Muchos reproductores de vídeo (por ejemplo, MPlayer ) permiten descartar fotogramas si el sistema se sobrecarga, lo que intencionadamente provoca que el búfer se quede corto para mantener el ritmo de reproducción.
El búfer de un controlador de audio es un búfer circular . Si se produce un subdesbordamiento y el controlador de audio no se detiene, repetirá continuamente el sonido contenido en el búfer o emitirá silencio, según la implementación. Este efecto se conoce comúnmente como tartamudeo de "ametralladora" o efecto de Max Headroom . Esto ocurre 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, en última instancia, detener el controlador de audio.
La imitación intencionada de este fallo de audio durante la creación de música o arte sonoro, ya sea mediante la edición manual de audio o la reactivación de muestras, o mediante el uso de complementos, se denomina edición de tartamudeo .
Referencias
- ↑ "CWE-124: Subdesbordamiento de búfer ('Buffer Underflow')" . CWE .
- Transmisión de datos