Flujo de bits
Un flujo de bits (o flujo de bits), también conocido como secuencia binaria, es una secuencia de bits.
Un bytestream es una secuencia de bytes. Por lo general, cada byte es una cantidad de 8 bits, por lo que el término flujo de octetos a veces se usa indistintamente. Un octeto se puede codificar como una secuencia de 8 bits de múltiples maneras diferentes (consulte la numeración de bits), por lo que no hay una traducción única y directa entre flujos de bytes y flujos de bits.
Los flujos de bits y flujos de bytes se utilizan ampliamente en telecomunicaciones e informática. Por ejemplo, los flujos de bits sincrónicos son transportados por SONET, y el Protocolo de control de transmisión transporta un flujo de bytes asíncrono.
Relación entre flujos de bits y flujos de bytes
En la práctica, los flujos de bits no se utilizan directamente para codificar flujos de bytes; un canal de comunicación puede utilizar un método de señalización que no se traduce directamente en bits (por ejemplo, mediante la transmisión de señales de múltiples frecuencias) y, por lo general, también codifica otra información, como tramas y corrección de errores, junto con sus datos.
Ejemplos
El término flujo de bits se usa con frecuencia para describir los datos de configuración que se cargarán en una matriz de puertas programables en campo (FPGA). Aunque la mayoría de los FPGA también admiten un método de carga de bytes en paralelo, este uso puede haberse originado en el método común de configurar el FPGA a partir de un flujo de bits en serie, normalmente desde una PROM en serie o un chip de memoria flash. El formato detallado del flujo de bits para un FPGA en particular generalmente es propiedad del proveedor de FPGA.
En matemáticas, se han estudiado varias secuencias infinitas específicas de bits por sus propiedades matemáticas; estos incluyen la secuencia de Baum-Sweet, la secuencia de Ehrenfeucht-Mycielski, la palabra de Fibonacci, la secuencia de Kolakoski, la secuencia regular de plegado de papel, la secuencia de Rudin-Shapiro y la secuencia de Thue-Morse.
En la mayoría de los sistemas operativos, incluidos los de tipo Unix y Windows, las bibliotecas de E/S estándar convierten el acceso a archivos paginados o almacenados en búfer de nivel inferior a un paradigma de flujo de bytes. En particular, en los sistemas operativos similares a Unix, cada proceso tiene tres flujos estándar, que son ejemplos de flujos de bytes unidireccionales. El mecanismo de tubería de Unix proporciona comunicaciones de flujo de bytes entre diferentes procesos.
Los algoritmos de compresión suelen codificar flujos de bits, ya que los 8 bits que ofrece un byte (la unidad de memoria direccionable más pequeña) pueden ser un desperdicio. Aunque normalmente se implementa en lenguajes de bajo nivel, algunos lenguajes de alto nivel como Python y Java ofrecen interfaces nativas para E/S de flujo de bits.
Un ejemplo bien conocido de un protocolo de comunicación que proporciona un servicio de flujo de bytes a sus clientes es el Protocolo de control de transmisión (TCP) del conjunto de protocolos de Internet, que proporciona un flujo de bytes bidireccional.
El tipo de medio de Internet para un flujo de bytes arbitrario es application/octet-stream. Se definen otros tipos de medios para flujos de bytes en formatos conocidos.
Control de flujo
A menudo, el contenido de un flujo de bytes se crea dinámicamente, como los datos del teclado y otros periféricos (/dev/tty), los datos del generador de números pseudoaleatorios (/dev/urandom), etc.
En esos casos, cuando el destino de un flujo de bytes (el consumidor) usa bytes más rápidos de lo que se pueden generar, el sistema usa la sincronización de procesos para hacer que el destino espere hasta que esté disponible el siguiente byte.
Cuando los bytes se generan más rápido de lo que el destino puede utilizarlos, existen varias técnicas para solucionar la situación:
- Cuando el productor es un algoritmo de software, el sistema pausa al productor con las mismas técnicas de sincronización de procesos.
- Cuando el productor apoya el control de flujo, el sistema solo envía el listo señal cuando el consumidor está listo para el siguiente byte.
- Cuando el productor no puede ser pausado, es un teclado o algún hardware que no soporta el control de flujo, el sistema suele intentar almacenar temporalmente los datos hasta que el consumidor esté listo para ello, normalmente utilizando una cola. A menudo el receptor puede vaciar el búfer antes de que se llena completamente. Un productor que sigue produciendo datos más rápido de lo que puede consumirse, incluso después de que el búfer esté lleno, conduce a un flujo de amortiguación no deseado, pérdida de paquetes, congestión de red y denegación de servicio.
Contenido relacionado
Tubo de Geiger-Müller
Fragata tipo 23
Transformación de Burrows-Wheeler