Articulo de referencia

Flujo de bits

Un flujo de bits (o secuencia de bits ), también conocido como secuencia binaria , es una secuencia de bits . Un flujo de bytes es una secuencia de bytes . Normalmente, cada byt...

Un flujo de bits (o secuencia de bits ), también conocido como secuencia binaria , es una secuencia de bits .

Un flujo de bytes es una secuencia de bytes . Normalmente, cada byte representa una cantidad de 8 bits , por lo que el término flujo de octetos se usa a veces indistintamente. Un octeto puede codificarse como una secuencia de 8 bits de varias maneras diferentes (véase numeración de bits ), por lo que no existe una traducción única y directa entre flujos de bytes y flujos de bits.

Las secuencias de bits y de bytes se utilizan ampliamente en telecomunicaciones e informática . Por ejemplo, SONET transporta secuencias de bits síncronas , y el Protocolo de Control de Transmisión transporta una secuencia de bytes asíncrona .

Relación con los flujos de bytes

En la práctica, las secuencias de bits no se utilizan directamente para codificar secuencias de bytes; un canal de comunicación puede utilizar un método de señalización que no se traduce directamente a bits (por ejemplo, mediante la transmisión de señales de múltiples frecuencias) y que normalmente también codifica otra información, como el encuadre y la corrección de errores, junto con sus datos.

Ejemplos

El término "bitstream" se usa frecuentemente para describir los datos de configuración que se cargan en una matriz de puertas programables en campo (FPGA). Si bien la mayoría de las FPGA también admiten un método de carga en paralelo por bytes, este uso probablemente se originó a partir del método común de configurar la FPGA desde un bitstream serial, generalmente desde una PROM serial o un chip de memoria flash . El formato detallado del bitstream para una FPGA en particular suele ser propiedad del fabricante.

En matemáticas, se han estudiado varias secuencias infinitas específicas de bits por sus propiedades matemáticas; entre ellas se incluyen la secuencia de Baum-Sweet , la secuencia de Ehrenfeucht-Mycielski , la palabra de Fibonacci , la secuencia de Kolakoski , la secuencia de plegado de papel regular , 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 con búfer de bajo nivel a un paradigma de flujo de bytes. En particular, en los sistemas operativos de tipo Unix, cada proceso tiene tres flujos estándar , que son ejemplos de flujos de bytes unidireccionales. El mecanismo de tuberías de Unix proporciona comunicaciones de flujo de bytes entre diferentes procesos.

Los algoritmos de compresión suelen codificarse en flujos de bits, ya que los 8 bits que ofrece un byte (la unidad de memoria direccionable más pequeña) pueden resultar ineficientes. Si bien normalmente se implementan en lenguajes de bajo nivel , algunos lenguajes de alto nivel como Python [ 1 ] y Java [ 2 ] ofrecen interfaces nativas para la entrada/salida de flujos 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 una secuencia de bytes (el consumidor) utiliza bytes más rápido de lo que se pueden generar, el sistema utiliza la sincronización de procesos para hacer que el destino espere hasta que el siguiente byte esté disponible.

Cuando se generan bytes más rápido de lo que el destino puede utilizarlos y el productor es un algoritmo de software, el sistema lo pausa con las mismas técnicas de sincronización de procesos. Cuando el productor admite control de flujo , el sistema solo envía la señal de listo cuando el consumidor está listo para el siguiente byte. Cuando el productor no se puede pausar (un teclado o algún hardware que no admite control de flujo), el sistema normalmente intenta almacenar temporalmente los datos hasta que el consumidor esté listo para ellos, generalmente utilizando una cola . A menudo, el receptor puede vaciar el búfer antes de que se llene por completo. Un productor que continúa produciendo datos más rápido de lo que se pueden consumir, incluso después de que el búfer esté lleno, provoca desbordamiento de búfer no deseado , pérdida de paquetes , congestión de red y denegación de servicio .

Véase también

Referencias

  1. "Bitstream" . Python Software Foundation. Archivado del original el 8 de septiembre de 2016.
  2. "Conjunto de bits de clase" . Oracle. Archivado del original el 30/11/2016.