Thu. Aug 18th, 2022

Los diversos términos "endianos" pueden sonar un poco extraños, pero el concepto subyacente es sencillo. Si aún no eres un experto en endian, ¡sigue leyendo!

Big endian, little endian, endianness. ¿Qué significan estos términos y cómo afectan a los ingenieros?

¿Qué es un endian?

Resulta que esta no es la pregunta correcta. Un "endian" no es un término independiente cuando se discuten datos. Más bien, los términos "big-endian" y "little-endian" se refieren a formatos de disposición de bytes.

Los términos se originan de Johnathan Swift Viajes de Gulliver, En la que se desata una guerra civil entre quienes favorecen romper huevos hervidos en el extremo grande ("big-endians") y quienes favorecen romperlos en el extremo pequeño ("little-endians").

En 1980, el científico informático israelí Danny Cohen escribió un artículo ("Sobre guerras santas y una súplica de paz") ​​en el que presentaba una explicación irónica de una "guerra" similarmente insignificante causada por una sola pregunta:

"¿Cuál es el orden de bytes apropiado en los mensajes?"

Para explicar este problema, tomó prestados los términos big endian y little endian de Swift para describir los dos lados opuestos del debate en torno a lo que llamó "endianness".

Cuando Swift estaba escribiendo Viajes de Gulliver En algún momento del primer cuarto del siglo XVIII, ciertamente no tenía idea de que su trabajo algún día serviría de inspiración para los neologismos del siglo XX que especifican la disposición de los datos digitales en la memoria y los sistemas de comunicación. Pero tal es la vida, a menudo extraña, y siempre impredecible.

Por qué necesitamos endianness

A pesar del tratamiento satírico de Cohen de los grandes endios frente a los pequeños endios, la cuestión del endianismo es realmente muy importante para la forma en que manejamos los datos.

Una unidad de información digital es una secuencia de unos y ceros. Estos y ceros comienzan en el bit menos significativo (LSb: observe la “b” en minúscula) y finalizan en el bit más significativo (MSb).

Esto parece bastante simple; Consideremos el siguiente escenario hipotético:

Un procesador de 32 bits está listo para almacenar datos y, en consecuencia, transfiere 32 bits de datos a 32 unidades de memoria correspondientes. A estas 32 unidades de memoria se les asigna colectivamente una dirección, por ejemplo, 0x01. El bus de datos en el sistema está diseñado de tal manera que no hay posibilidad de mezclar el LSb con el MSb, y todas las operaciones usan datos de 32 bits, incluso si los números involucrados podrían representarse fácilmente por 16 o incluso 8 bits. Cuando el procesador necesita acceder a los datos almacenados, simplemente lee 32 bits de la dirección de memoria 0x01. Este sistema es robusto y no es necesario introducir el concepto de endianidad.

Es posible que haya notado que la palabra "byte" nunca se mencionó en ninguna parte de la descripción de este hipotético procesador. Todo se basa en datos de 32 bits. ¿Por qué es necesario dividir estos datos en porciones de 8 bits, si todo el hardware está diseñado para procesar datos de 32 bits? Bueno, aquí es donde la teoría y la realidad divergen. Los sistemas digitales reales, incluso aquellos que pueden procesar directamente datos de 32 o 64 bits, hacen un uso extensivo del segmento de datos de 8 bits conocido como byte.

Endianness en la memoria

El proceso de almacenar datos digitales es un medio conveniente para demostrar el endianismo en acción, y para explicar la diferencia entre big endian y little endian. Imagina que estamos usando un microcontrolador de 8 bits. Todo el hardware en este dispositivo está diseñado para datos de 8 bits, incluidas las ubicaciones de memoria. Por lo tanto, la dirección de memoria 0x00 puede almacenar un byte, la dirección 0x01 almacena un byte, etc.

Este diagrama muestra 11 bytes de memoria, es decir, 11 ubicaciones de memoria, donde cada ubicación almacena 8 bits de datos.

Digamos que decidimos programar este microcontrolador utilizando un compilador de C que nos permite definir variables de 32 bits (es decir, de 4 bytes). El compilador necesita almacenar estas variables en la memoria. Tiene sentido almacenarlos en ubicaciones de memoria contiguas, pero lo que no está tan claro es si el byte más significativo (MSB, tenga en cuenta la "B" mayúscula) o el byte menos significativo (LSB) debe almacenarse en la dirección de memoria más baja.

En otras palabras, ¿debería el sistema utilizar una disposición de memoria big-endian o una disposición de memoria little-endian?

Almacenamiento de datos big-endian vs. almacenamiento de datos little-endian. "D" se refiere a la palabra de datos de 32 bits, y los números de subíndices indican los bits individuales, de MSb (D31) a LSb (D0).

Realmente no hay una respuesta correcta o incorrecta aquí; cualquiera de los dos arreglos puede ser perfectamente efectivo. La decisión entre big endian y little endian podría basarse, por ejemplo, en mantener la compatibilidad con versiones anteriores de un procesador dado, lo que, por supuesto, plantea la cuestión de cómo los ingenieros tomaron la decisión del primer procesador en esa familia de productos. No lo sé; tal vez el CEO lanzó una moneda.

Big Endian contra Little Endian

Big endian indica una organización de datos digitales que comienza en el extremo "grande" de la palabra de datos y continúa hacia el extremo "pequeño", donde "grande" y "pequeño" corresponden a los bits más significativos y los bits menos significativos , respectivamente.

Little endian indica una organización que comienza en el "pequeño" final y continúa hacia el "gran" final.

La decisión entre el formato big-endian y el formato little-endian va más allá de los arreglos de memoria y los procesadores de 8 bits. El byte es una unidad universal en sistemas digitales. Solo piense en las computadoras personales: el espacio en el disco duro se mide en bytes, la RAM se mide en bytes, las velocidades de transferencia de USB se reportan en bytes por segundo (o bits por segundo), a pesar del hecho de que la computación personal de 8 bits es completamente obsoleta. La cuestión del endianness entra en juego cuando un sistema digital combina el almacenamiento basado en bytes o la transferencia de datos con valores numéricos que son más largos que 8 bits.

Los ingenieros deben conocer el endianismo cuando se almacenan, transfieren o interpretan los datos. La comunicación en serie es especialmente susceptible a problemas de endian, porque es inevitable que los bytes contenidos en una palabra de datos de múltiples bytes se transfieran secuencialmente, generalmente de MSB a LSB o de LSB a MSB.

Endianness en el contexto de la transferencia de datos en serie.

Sin embargo, los buses paralelos no son inmunes a la confusión endiana, ya que el ancho del bus puede ser más corto que el ancho de los datos, en cuyo caso se tendrá que elegir una orden big endian o little endian para el paralelo de un byte a la vez transferencias de datos

Un ejemplo de endian-based interpretación es cuando los bytes de datos se transfieren desde un módulo sensor a una PC a través del "puerto serie" (lo que en la actualidad es casi seguro que se utiliza una conexión USB como puerto serie). Digamos que todo lo que necesita hacer es trazar estos datos usando algún código MATLAB. Cuando incorpora los bytes en su entorno MATLAB y los convierte en variables normales, debe interpretar los valores de los bytes individuales de acuerdo con el orden en que se almacenan los bytes en la memoria.

Conclusión

Realmente es muy malo que no se haya establecido un esquema endian universal desde el comienzo de la era digital. Ni siquiera quiero saber cuántas horas colectivas de vidas humanas se han dedicado a resolver los problemas causados ​​por la falta de coincidencia entre los endians.

En cualquier caso, no podemos cambiar el pasado, y tampoco es probable que convencamos a todas las compañías de software y semiconductores de la Tierra para que revisen sus líneas de productos con el fin de lograr una endianidad uniforme. Lo que nosotros puede Hacer es buscar la coherencia en nuestros propios diseños y proporcionar documentación clara si existe la posibilidad de conflicto entre dos partes de un sistema.

By Maria Montero

Me apasiona la fotografía y la tecnología que nos permite hacer todo lo que siempre soñamos. Soñadora y luchadora. Actualmente residiendo en Madrid.