stringtranslate.com

Endianidad

Los viajes de Gulliver de Jonathan Swift , la novela de la que se acuñó el término

En informática , la endianidad es el orden en el que los bytes dentro de una palabra de datos digitales se transmiten a través de un medio de comunicación de datos o se almacenan ( hacia arriba ) en la memoria de la computadora , contando solo la importancia de los bytes en comparación con la precocidad. La endianidad se expresa principalmente como big-endian (BE) o little-endian (LE), términos introducidos por Danny Cohen en la informática para el ordenamiento de datos en una nota experimental de Internet publicada en 1980. [1] El adjetivo endian tiene su origen en el Escritos del escritor angloirlandés del siglo XVIII Jonathan Swift . En la novela Los viajes de Gulliver de 1726 , retrata el conflicto entre sectas de liliputienses divididas entre las que rompen la cáscara de un huevo cocido por el extremo grande o por el extremo pequeño. [2] [3] Por analogía, una CPU puede leer primero el extremo grande o el extremo pequeño de una palabra digital.

Las computadoras almacenan información en grupos de bits binarios de varios tamaños. A cada grupo se le asigna un número, llamado dirección , que la computadora utiliza para acceder a esos datos. En la mayoría de las computadoras modernas, el grupo de datos más pequeño con una dirección tiene una longitud de ocho bits y se llama byte. Los grupos más grandes comprenden dos o más bytes; por ejemplo, una palabra de 32 bits contiene cuatro bytes. Hay dos formas posibles en que una computadora podría numerar los bytes individuales en un grupo más grande, comenzando en cualquier extremo. Ambos tipos de endianidad se utilizan ampliamente en la ingeniería electrónica digital. La elección inicial del endianidad de un nuevo diseño suele ser arbitraria, pero las revisiones y actualizaciones tecnológicas posteriores perpetúan la endianidad existente para mantener la compatibilidad con versiones anteriores .

Un sistema big-endian almacena el byte más significativo de una palabra en la dirección de memoria más pequeña y el byte menos significativo en la dirección más grande. Por el contrario, un sistema little-endian almacena el byte menos significativo en la dirección más pequeña. [4] [5] [6] De los dos, big-endian se acerca más a la forma en que los dígitos de los números se escriben de izquierda a derecha en inglés, comparando dígitos con bytes. La bi-endianidad es una característica compatible con numerosas arquitecturas informáticas que cuentan con endianidad conmutable en la recuperación y almacenamiento de datos o para la recuperación de instrucciones. Otros ordenamientos se denominan genéricamente middle-endian o Mixed-endian . [7] [8] [9] [10]

Big-endianness es el orden dominante en los protocolos de red, como en el conjunto de protocolos de Internet , donde se lo conoce como orden de red , transmitiendo primero el byte más significativo. Por el contrario, el little-endianness es el orden dominante para las arquitecturas de procesador ( x86 , la mayoría de las implementaciones ARM , implementaciones básicas RISC-V ) y su memoria asociada. Los formatos de archivo pueden utilizar cualquiera de los dos ordenamientos; algunos formatos utilizan una combinación de ambos o contienen un indicador de qué orden se utiliza en todo el archivo. [11]

Características

Diagrama que demuestra la endianidad grande versus pequeña

La memoria de la computadora consta de una secuencia de celdas de almacenamiento ( unidades direccionables más pequeñas); en las máquinas que admiten direccionamiento de bytes , esas unidades se denominan bytes . Cada byte se identifica y se accede a él en hardware y software mediante su dirección de memoria . Si el número total de bytes en la memoria es n , entonces las direcciones se enumeran de 0 a n  − 1.

Los programas informáticos suelen utilizar estructuras o campos de datos que pueden contener más datos de los que se pueden almacenar en un byte. En el contexto de este artículo, donde su tipo no puede ser arbitrariamente complicado, un "campo" consta de una secuencia consecutiva de bytes y representa un "valor de datos simple" que, al menos potencialmente, puede ser manipulado por una sola instrucción de hardware . En la mayoría de los sistemas, la dirección de un valor de datos simple de varios bytes es la dirección de su primer byte (el byte con la dirección más baja). Una excepción a esta regla es, por ejemplo, la instrucción Add del IBM 1401 que aborda campos de longitud variable en su posición de orden inferior (con la dirección más alta) y sus longitudes se definen mediante una marca denominativa establecida en su posición de orden superior (con la dirección más baja). ) posición. Cuando se realiza una operación como la suma, el procesador comienza en las posiciones de orden inferior en las direcciones altas de los dos campos y avanza hasta las de orden superior. [ cita necesaria ]

Otro atributo importante de que un byte forme parte de un "campo" es su "importancia". Estos atributos de las partes de un campo juegan un papel importante en la secuencia en la que el hardware de la computadora accede a los bytes, más precisamente: mediante los algoritmos de bajo nivel que contribuyen a los resultados de una instrucción de la computadora.

Números

Los sistemas numéricos posicionales (principalmente de base 2, o menos frecuentemente de base 10) son la forma predominante de representar y, en particular, de manipular datos enteros por parte de las computadoras. En forma pura, esto es válido para números enteros no negativos de tamaño moderado, por ejemplo, del tipo de datos unsignedC. En tal sistema numérico, el valor de un dígito que contribuye al número entero está determinado no sólo por su valor como dígito único, sino también por la posición que ocupa en el número completo, llamada significado. Estas posiciones se pueden asignar a la memoria principalmente de dos maneras: [12]

En estas expresiones, el término "fin" se refiere al extremo donde se encuentra la gran resp. Lo primero que se escribe es de poca importancia , es decir, dónde comienza el campo .

Los datos enteros que son soportados directamente por el hardware de la computadora tienen un ancho fijo de baja potencia de 2, por ejemplo, 8 bits ≙ 1 byte, 16 bits ≙ 2 bytes, 32 bits ≙ 4 bytes, 64 bits ≙ 8 bytes, 128 bits ≙ 16 bytes. La secuencia de acceso de bajo nivel a los bytes de dicho campo depende de la operación a realizar. Primero se accede al byte menos significativo para realizar sumas , restas y multiplicaciones . Primero se accede al byte más significativo para su división y comparación . Ver § Orden de cálculo.

Texto

Cuando se van a comparar cadenas de caracteres (texto) entre sí, por ejemplo para admitir algún mecanismo como la clasificación , esto se hace muy frecuentemente lexicográficamente donde un único elemento posicional (carácter) también tiene un valor posicional. La comparación lexicográfica significa en casi todas partes: el primer carácter ocupa el primer lugar, como en la guía telefónica. Casi todas las máquinas que pueden hacer esto usando una sola instrucción son big-endian o al menos Mixed-Endian. [ cita necesaria ]

Los números enteros escritos como texto siempre se representan primero en la memoria con el dígito más significativo, lo cual es similar al big-endian, independientemente de la dirección del texto .

direccionamiento de bytes

Cuando los bytes de memoria se imprimen secuencialmente de izquierda a derecha (por ejemplo, en un volcado hexadecimal ), la representación little-endian de números enteros tiene un significado creciente de izquierda a derecha. En otras palabras, aparece al revés cuando se visualiza, lo que puede resultar contrario a la intuición.

Este comportamiento surge, por ejemplo, en FourCC o técnicas similares que implican empaquetar caracteres en un número entero, de modo que se convierta en una secuencia de caracteres específicos en la memoria. Por ejemplo, tomemos la cadena "JOHN", almacenada en ASCII hexadecimal . En máquinas big-endian, el valor aparece de izquierda a derecha, coincidiendo con el orden correcto de las cadenas para leer el resultado ("JOH N"). Pero en una máquina little-endian, se vería "NHO J". Las máquinas de nivel medio complican esto aún más; por ejemplo, en el PDP-11 , el valor de 32 bits se almacena como dos palabras de 16 bits "JO" "HN" en big-endian, y los caracteres de las palabras de 16 bits se almacenan en little-endian, lo que da como resultado en "DOJN H". [ cita necesaria ]

intercambio de bytes

El intercambio de bytes consiste en reorganizar bytes para cambiar el endianidad. Muchos compiladores proporcionan elementos integrados que probablemente se compilarán en instrucciones nativas del procesador ( bswap/ movbe), como __builtin_bswap32. Las interfaces de software para el intercambio incluyen:

Algunos conjuntos de instrucciones de CPU brindan soporte nativo para el intercambio de bytes endian, como bswap[16] ( x86 - 486 y posteriores) y rev[17] ( ARMv6 y posteriores).

Algunos compiladores tienen funciones integradas para el intercambio de bytes. Por ejemplo, el compilador Intel Fortran admite el especificador no estándar CONVERTal abrir un archivo, por ejemplo: . Otros compiladores tienen opciones para generar código que permite globalmente la conversión de todas las operaciones de E/S de archivos. Esto permite la reutilización de código en un sistema con endianidad opuesta sin modificación del código.OPEN(unit, CONVERT='BIG_ENDIAN',...)

Consideraciones

Acceso simplificado a parte de un campo.

En la mayoría de los sistemas, la dirección de un valor de varios bytes es la dirección de su primer byte (el byte con la dirección más baja); Los sistemas little-endian de ese tipo tienen la propiedad de que, para valores de datos suficientemente bajos, el mismo valor se puede leer de la memoria en diferentes longitudes sin utilizar diferentes direcciones (incluso cuando se imponen restricciones de alineación ). Por ejemplo, una ubicación de memoria de 32 bits con contenido 4A 00 00 00se puede leer en la misma dirección que 8 bits (valor = 4A), 16 bits (004A), 24 bits (00004A) o 32 bits (0000004A). , todos los cuales conservan el mismo valor numérico. Aunque esta propiedad little endian rara vez la utilizan directamente los programadores de alto nivel, ocasionalmente la emplean los optimizadores de código y los programadores en lenguaje ensamblador . Si bien C++ no lo permite, este tipo de código de juego de palabras está permitido como "definido por la implementación" según el estándar C11 [18] y comúnmente utilizado [19] en el código que interactúa con el hardware. [20]

Orden de cálculo

Algunas operaciones en sistemas numéricos posicionales tienen un orden natural o preferido en el que se deben ejecutar los pasos elementales. Este orden puede afectar su rendimiento en microcontroladores y procesadores direccionables por bytes de pequeña escala . Sin embargo, los procesadores de alto rendimiento generalmente recuperan operandos de varios bytes de la memoria en la misma cantidad de tiempo que habrían obtenido un solo byte, por lo que la complejidad del hardware no se ve afectada por el orden de los bytes.

La suma, la resta y la multiplicación comienzan en la posición del dígito menos significativo y propagan el acarreo a la siguiente posición más significativa. En la mayoría de los sistemas, la dirección de un valor de varios bytes es la dirección de su primer byte (el byte con la dirección más baja). La implementación de estas operaciones es ligeramente más sencilla utilizando máquinas little-endian donde este primer byte contiene el dígito menos significativo.

La comparación y la división comienzan en el dígito más significativo y propagan un posible acarreo a los dígitos subsiguientes menos significativos. Para valores numéricos de longitud fija (normalmente de longitud 1,2,4,8,16), la implementación de estas operaciones es ligeramente más sencilla en máquinas big-endian.

Algunos procesadores big-endian (por ejemplo, IBM System/360 y sus sucesores) contienen instrucciones de hardware para comparar lexicográficamente cadenas de caracteres de longitud variable.

El transporte normal de datos mediante una declaración de asignación es, en principio, independiente del endianidad del procesador.

Hardware

Muchos procesadores históricos y existentes utilizan una representación de memoria big-endian, ya sea exclusivamente o como una opción de diseño. IBM System/360 utiliza el orden de bytes big-endian, al igual que sus sucesores System/370 , ESA/390 y z/Architecture . El PDP-10 utiliza direccionamiento big-endian para instrucciones orientadas a bytes. La minicomputadora IBM Serie/1 utiliza un orden de bytes big-endian. Las series de procesadores Motorola 6800/6801 , 6809 y 68000 utilizan el formato big-endian. Las arquitecturas exclusivamente big-endian incluyen IBM z/Architecture y OpenRISC .

El Datapoint 2200 utilizó una lógica serial de bits simple con little-endian para facilitar la propagación del acarreo . Cuando Intel desarrolló el microprocesador 8008 para Datapoint, utilizó little endian por compatibilidad. Sin embargo, como Intel no pudo entregar el 8008 a tiempo, Datapoint utilizó un equivalente de integración de escala media , pero el little-endianness se mantuvo en la mayoría de los diseños de Intel, incluidos el MCS-48 y el 8086 y sus sucesores x86 . [21] [22] DEC Alpha , Atmel AVR , VAX , la familia MOS Technology 6502 (incluidos Western Design Center 65802 y 65C816 ), Zilog Z80 (incluidos Z180 y eZ80 ), Altera Nios II y muchos otros procesadores y Las familias de procesadores también son little-endian.

El Intel 8051 , a diferencia de otros procesadores Intel, espera direcciones de 16 bits para LJMP y LCALL en formato big-endian; sin embargo, las instrucciones xCALL almacenan la dirección del remitente en la pila en formato little-endian. [23]

Las arquitecturas de conjuntos de instrucciones IA-32 y x86-64 utilizan el formato little-endian. Otras arquitecturas de conjuntos de instrucciones que siguen esta convención, permitiendo solo el modo little-endian, incluyen Nios II , Andes Technology NDS32 y Qualcomm Hexagon .

Algunas arquitecturas de conjuntos de instrucciones son "bi-endianas" y permiten ejecutar software de cualquier endianidad; estos incluyen Power ISA , SPARC , ARM AArch64 , C-Sky y RISC-V . IBM AIX e IBM i se ejecutan en modo big-endian en bi-endian Power ISA; Linux originalmente se ejecutaba en modo big-endian, pero en 2019, IBM había hecho la transición al modo little-endian para Linux para facilitar la migración del software Linux de x86 a Power. [24] [25] SPARC no tiene una implementación little-endian relevante, ya que tanto Oracle Solaris como Linux se ejecutan en modo big-endian en sistemas SPARC bi-endian y pueden considerarse big-endian en la práctica. ARM, C-Sky y RISC-V no tienen implementaciones big-endian relevantes y pueden considerarse little-endian en la práctica.

Biendianidad

Algunos conjuntos de instrucciones cuentan con una configuración que permite endianidad conmutable en la recuperación y almacenamiento de datos, la recuperación de instrucciones o ambas. Esta característica puede mejorar el rendimiento o simplificar la lógica del software y los dispositivos de red. La palabra bi-endian , cuando se refiere a hardware, denota la capacidad de la máquina para calcular o pasar datos en cualquier formato endian.

Algunas arquitecturas (incluidas ARM versiones 3 y superiores, PowerPC , Alpha , SPARC V9, MIPS , Intel i860 , PA-RISC , SuperH SH-4 e IA-64 ) cuentan con una configuración que permite endianidad conmutable en la recuperación y almacenamiento de datos, instrucciones recupera, o ambos. Esta característica puede mejorar el rendimiento o simplificar la lógica del software y los dispositivos de red. La palabra bi-endian , cuando se refiere a hardware, denota la capacidad de la máquina para calcular o pasar datos en cualquier formato endian.

Muchas de estas arquitecturas se pueden cambiar mediante software para establecer de forma predeterminada un formato endian específico (generalmente se hace cuando se inicia la computadora); sin embargo, en algunos sistemas, el endianness predeterminado se selecciona mediante el hardware de la placa base y no se puede cambiar mediante software (por ejemplo, Alpha, que se ejecuta sólo en modo big-endian en el Cray T3E ).

El término bi-endian se refiere principalmente a cómo un procesador trata los accesos a los datos. Los accesos a instrucciones (búsquedas de palabras de instrucción) en un procesador determinado aún pueden asumir una endianidad fija, incluso si los accesos a datos son completamente bi-endian, aunque este no es siempre el caso, como en la CPU Itanium basada en IA-64 de Intel , que permite ambos.

Algunas CPU nominalmente bi-endian requieren ayuda de la placa base para cambiar completamente el endianismo. Por ejemplo, los procesadores PowerPC de escritorio de 32 bits en modo little-endian actúan como little-endian desde el punto de vista de los programas en ejecución, pero requieren que la placa base realice un intercambio de 64 bits en todos los carriles de 8 bytes para asegúrese de que la visión little-endian de las cosas se aplique a los dispositivos de E/S . En ausencia de este hardware inusual de la placa base, el software del controlador del dispositivo debe escribir en direcciones diferentes para deshacer la transformación incompleta y también debe realizar un intercambio de bytes normal. [ ¿ investigacion original? ]

Algunas CPU, como muchos procesadores PowerPC destinados a uso integrado y casi todos los procesadores SPARC, permiten elegir el endianness por página.

Los procesadores SPARC desde finales de la década de 1990 (procesadores compatibles con SPARC v9) permiten elegir el endianidad de los datos con cada instrucción individual que se carga o almacena en la memoria.

La arquitectura ARM admite dos modos big-endian, llamados BE-8 y BE-32 . [26] Las CPU hasta ARMv5 solo admiten BE-32 o modo invariante de palabra. Aquí, cualquier acceso de 32 bits alineado naturalmente funciona como en modo little-endian, pero el acceso a un byte o palabra de 16 bits se redirige a la dirección correspondiente y no se permite el acceso no alineado. ARMv6 introduce el modo BE-8 o invariante de bytes, donde el acceso a un solo byte funciona como en el modo little-endian, pero el acceso a una palabra de 16 bits, 32 bits o (comenzando con ARMv8) de 64 bits da como resultado un intercambio de bytes. de los datos. Esto simplifica el acceso a la memoria no alineada, así como el acceso mapeado en memoria a registros distintos de 32 bits.

Muchos procesadores tienen instrucciones para convertir una palabra en un registro al endianismo opuesto, es decir, intercambian el orden de los bytes en una palabra de 16, 32 o 64 bits.

Las CPU de arquitectura Intel x86 y x86-64 recientes tienen una instrucción MOVBE ( Intel Core desde la generación 4, después de Atom ), [27] que recupera una palabra en formato big-endian de la memoria o escribe una palabra en la memoria en formato big-endian. Por lo demás, estos procesadores son completamente little-endian.

También hay dispositivos que utilizan diferentes formatos en diferentes lugares. Por ejemplo, el medidor de batería BQ27421 de Texas Instruments utiliza el formato little-endian para sus registros y el formato big-endian para su memoria de acceso aleatorio .

Históricamente , SPARC utilizó big-endian hasta la versión 9, que es bi-endian. De manera similar, los primeros procesadores IBM POWER eran big-endian, pero los descendientes de PowerPC y Power ISA ahora son bi-endian. La arquitectura ARM era little-endian antes de la versión 3 cuando se convirtió en bi-endian.

Punto flotante

Aunque muchos procesadores utilizan almacenamiento little-endian para todo tipo de datos (enteros, punto flotante), existen varias arquitecturas de hardware en las que los números de punto flotante se representan en forma big-endian mientras que los números enteros se representan en forma little-endian. [28] Hay procesadores ARM que tienen representación de punto flotante endian mixto para números de doble precisión: cada una de las dos palabras de 32 bits se almacena como little-endian, pero la palabra más significativa se almacena primero. El punto flotante VAX almacena palabras de 16 bits little-endian en orden big-endian. Debido a que ha habido muchos formatos de punto flotante sin representación estándar de red para ellos, el estándar XDR utiliza IEEE 754 big-endian como representación. Por lo tanto, puede parecer extraño que el estándar de punto flotante IEEE 754, muy extendido , no especifique la endianidad. [29] En teoría, esto significa que incluso los datos de punto flotante estándar IEEE escritos por una máquina podrían no ser legibles por otra. Sin embargo, en las computadoras estándar modernas (es decir, que implementan IEEE 754), se puede asumir con seguridad que el endianismo es el mismo para números de punto flotante que para números enteros, lo que hace que la conversión sea sencilla independientemente del tipo de datos. Sin embargo, los pequeños sistemas integrados que utilizan formatos especiales de punto flotante pueden ser otra cuestión.

Datos de longitud variable

La mayoría de las instrucciones consideradas hasta ahora contienen el tamaño (longitudes) de sus operandos dentro del código de operación . Las longitudes de operandos frecuentemente disponibles son 1, 2, 4, 8 o 16 bytes. Pero también hay arquitecturas en las que la longitud de un operando puede guardarse en un campo separado de la instrucción o con el propio operando, por ejemplo, mediante una marca denominativa . Este enfoque permite longitudes de operandos de hasta 256 bytes o más. Los tipos de datos de dichos operandos son cadenas de caracteres o BCD . Las máquinas capaces de manipular dichos datos con una instrucción (por ejemplo, comparar, agregar) incluyen IBM 1401 , 1410 , 1620 , System/360 , System/370 , ESA/390 y z/Architecture , todas ellas de tipo big-endian.

medio-endiano

Son posibles muchos otros ordenamientos, llamados genéricamente middle-endian o Mixed-endian .

El PDP-11 es en principio un sistema little-endian de 16 bits. Las instrucciones para convertir entre valores de punto flotante y enteros en el procesador de punto flotante opcional del PDP-11/45, PDP-11/70 y en algunos procesadores posteriores, almacenaban valores de "entero largo de doble precisión" de 32 bits con las mitades de 16 bits se intercambiaron del orden esperado little-endian. El compilador UNIX C utilizó el mismo formato para enteros de 32 bits de longitud. Este orden se conoce como PDP-endian . [30]

UNIX fue uno de los primeros sistemas que permitió compilar el mismo código para plataformas con diferentes representaciones internas. Se suponía que uno de los primeros programas convertidos imprimiría Unix, pero en la Serie/1 imprimió nUxien su lugar. [31]

Una forma de interpretar este carácter endian es que almacena un entero de 32 bits como dos palabras little-endian de 16 bits, con un orden de palabras big-endian:

Los descriptores de segmento de IA-32 y procesadores compatibles mantienen una dirección base de 32 bits del segmento almacenada en orden little-endian, pero en cuatro bytes no consecutivos, en las posiciones relativas 2, 3, 4 y 7 del inicio del descriptor. [32]

Software

diseño lógico

Los lenguajes de descripción de hardware (HDL) utilizados para expresar la lógica digital a menudo admiten endianidad arbitraria, con granularidad arbitraria. Por ejemplo, en SystemVerilog , una palabra se puede definir como little-endian o big-endian. [ cita necesaria ]

Archivos y sistemas de archivos

El reconocimiento del endianismo es importante al leer un archivo o sistema de archivos creado en una computadora con diferente endianismo.

Los archivos secuenciales sin formato de Fortran creados con un endianismo generalmente no se pueden leer en un sistema que utilice el otro endianismo porque Fortran generalmente implementa un registro (definido como los datos escritos por una sola declaración de Fortran) como datos precedidos y sucedidos por campos de conteo, que son números enteros iguales. al número de bytes de los datos. Un intento de leer un archivo de este tipo utilizando Fortran en un sistema con otro endianismo produce un error de tiempo de ejecución, porque los campos de recuento son incorrectos.

Opcionalmente, el texto Unicode puede comenzar con una marca de orden de bytes (BOM) para indicar el carácter endian del archivo o secuencia. Su punto de código es U+FEFF. En UTF-32 , por ejemplo, un archivo big-endian debería comenzar con 00 00 FE FF; un little-endian debería comenzar con FF FE 00 00.

Los formatos de datos binarios de aplicación, como los archivos .mat de MATLAB o el formato de datos .bil , utilizados en topografía, suelen ser independientes del endianismo. Esto se logra almacenando los datos siempre en una endianidad fija o llevando con los datos un interruptor para indicar la endianidad. Un ejemplo del primero es el formato de archivo binario XLS que es portátil entre sistemas Windows y Mac y siempre es little-endian, lo que requiere que la aplicación Mac intercambie los bytes durante la carga y los guarde cuando se ejecuta en un procesador Motorola 68K o PowerPC big-endian. [33]

Los archivos de imagen TIFF son un ejemplo de la segunda estrategia, cuyo encabezado indica a la aplicación sobre el endianidad de sus enteros binarios internos. Si un archivo comienza con la firma MMsignifica que los números enteros se representan como big-endian, mientras que IIsignifica little-endian. Esas firmas necesitan una sola palabra de 16 bits cada una y son palíndromos , por lo que son independientes del endianismo. Isignifica Intel y Msignifica Motorola . Las CPU Intel son little-endian, mientras que las CPU Motorola 680x0 son big-endian. Esta firma explícita permite que un programa lector de TIFF intercambie bytes si es necesario cuando un archivo determinado fue generado por un programa de escritura TIFF que se ejecuta en una computadora con un endianismo diferente.

Como consecuencia de su implementación original en la plataforma Intel 8080, el sistema de archivos FAT (Tabla de asignación de archivos ) independiente del sistema operativo se define con ordenamiento de bytes little-endian, incluso en plataformas que utilizan otro endianness de forma nativa, lo que requiere operaciones de intercambio de bytes para mantener el FAT en estas plataformas.

Se sabe que ZFS , que combina un sistema de archivos y un administrador de volúmenes lógicos , proporciona endianidad adaptativa y funciona con sistemas big-endian y little-endian. [34]

Redes

Muchos RFC del IETF utilizan el término orden de red , es decir, el orden de transmisión de bytes por cable en protocolos de red . Entre otros, el histórico RFC 1700 define el orden de red para los protocolos del conjunto de protocolos de Internet como big-endian. [35]

Sin embargo, no todos los protocolos utilizan el orden de bytes big-endian como orden de red. El protocolo Server Message Block (SMB) utiliza un orden de bytes little-endian. En CANopen , los parámetros multibyte siempre se envían primero el byte menos significativo (little-endian). Lo mismo ocurre con Ethernet Powerlink . [36]

La API de sockets de Berkeley define un conjunto de funciones para convertir enteros de 16 y 32 bits hacia y desde el orden de bytes de la red: las funciones (host-to-network-short) y (host-to-network-long) convierten 16 y Valores de 32 bits respectivamente desde la máquina ( host ) hasta el orden de la red; Las funciones y convierten del orden de red al host. [37] [38] Estas funciones pueden no ser operativas en un sistema big-endian.htonshtonlntohsntohl

Si bien los protocolos de red de alto nivel generalmente consideran el byte (principalmente entendido como octeto ) como su unidad atómica, las capas más bajas de una pila de red pueden ocuparse del ordenamiento de bits dentro de un byte.

Ver también

Referencias

  1. ^ Cohen, Danny (1 de abril de 1980). Sobre las guerras santas y un alegato por la paz. IETF . EN 137.También publicado en IEEE Computer , número de octubre de 1981.
  2. ^ Rápido, Jonathan (1726). "Un viaje a Lilliput, Capítulo IV". Los viajes de Gulliver .
  3. ^ Bryant, Randal E .; David, O'Hallaron (2016), Sistemas informáticos: la perspectiva de un programador (3 ed.), Pearson Education, p. 79, ISBN 978-1-488-67207-1
  4. ^ Comprender el orden de bytes big y little endian
  5. ^ PPC de orden de bytes
  6. ^ Escribir código independiente de endian en C
  7. ^ "Pionero del Salón de la Fama de Internet". Salón de la fama de Internet . La sociedad de Internet .
  8. ^ Cary, David. "Preguntas frecuentes sobre Endian" . Consultado el 11 de octubre de 2010 .
  9. ^ James, David V. (junio de 1990). "Autobuses multiplexados: continúan las guerras endianas". Micro IEEE . 10 (3): 9–21. doi : 10.1109/40.56322. ISSN  0272-1732. S2CID  24291134.
  10. ^ Blanco, Bertrand; Maaraoui, Bob (diciembre de 2005). "¿Endianidad o dónde está el byte 0?" (PDF) . Consultado el 21 de diciembre de 2008 .
  11. ^ Un formato de archivo para el intercambio de imágenes en Internet. Abril de 1992. p. 7.doi : 10.17487 /RFC1314 . RFC 1314 . Consultado el 16 de agosto de 2021 .
  12. ^ Tanenbaum, Andrew S.; Austin, Todd M. (4 de agosto de 2012). Organización informática estructurada. PTR de Prentice Hall. ISBN 978-0-13-291652-3. Consultado el 18 de mayo de 2013 .
  13. ^ byteorder(3)  –  Manual del programador de Linux – Funciones de biblioteca
  14. ^ endian(3)  –  Manual del programador de Linux – Funciones de biblioteca
  15. ^ "std::intercambio de bytes". es.cppreference.com . Consultado el 3 de octubre de 2023 .
  16. ^ "Manual del desarrollador de software de arquitecturas Intel 64 e IA-32, volumen 2 (2A, 2B y 2C): referencia del conjunto de instrucciones, AZ" (PDF) . Intel. Septiembre de 2016. p. 3–112. Archivado (PDF) desde el original el 9 de octubre de 2022 . Consultado el 5 de febrero de 2017 .
  17. ^ "Manual de referencia ARMv8-A". Participaciones ARM .
  18. ^ "Estándar C11". YO ASI. Sección 6.5.2.3 "Estructura y miembros de la Unión", §3 y nota a pie de página 95 . Consultado el 15 de agosto de 2018 .
  19. ^ "3.10 Opciones que controlan la optimización: -fstrict-aliasing". Colección de compiladores GNU (GCC) . Fundación de Software Libre . Consultado el 15 de agosto de 2018 .
  20. ^ Torvalds, Linus (5 de junio de 2018). "[GIT PULL] Actualización del marco de propiedades del dispositivo para v4.18-rc1". Kernel de Linux (lista de correo) . Consultado el 15 de agosto de 2018 .
  21. ^ Casa, David; Faggin, Federico; Feeney, Hal; Gelbach, Ed; Hoff, Ted; Mazor, Stan; Smith, Hank (21 de septiembre de 2006). "Panel de Historia Oral sobre el Desarrollo y Promoción del Microprocesador Intel 8008" (PDF) . Museo de Historia de la Computación . pag. b5 . Consultado el 23 de abril de 2014 .
  22. ^ Lunde, Ken (13 de enero de 2009). Procesamiento de Información CJKV. O'Reilly Media, Inc. pág. 29.ISBN _ 978-0-596-51447-1. Consultado el 21 de mayo de 2013 .
  23. ^ "Guía del usuario de Cx51: E. Orden de bytes". keil.com .
  24. ^ Jeff Scheel (16 de junio de 2016). "Little endian y Linux en IBM Power Systems". IBM . Consultado el 27 de marzo de 2022 .
  25. ^ Timothy Prickett Morgan (10 de junio de 2019). "La transición a RHEL 8 comienza en los sistemas de energía". ITJungle . Consultado el 26 de marzo de 2022 .
  26. ^ "Diferencias entre los autobuses BE-32 y BE-8".
  27. ^ "Cómo detectar compatibilidad con nuevas instrucciones en la familia de procesadores Intel® Core™ de cuarta generación" (PDF) . Consultado el 2 de mayo de 2017 .
  28. ^ Savard, John JG (2018) [2005], "Formatos de punto flotante", quadibloc , archivado desde el original el 3 de julio de 2018 , consultado el 16 de julio de 2018
  29. ^ "paquete: convierte una lista en una representación binaria".
  30. ^ Manual del procesador PDP-11/45 (PDF) . Corporación de equipos digitales . 1973. pág. 165. Archivado (PDF) desde el original el 9 de octubre de 2022.
  31. ^ Jalics, Paul J.; Heines, Thomas S. (1 de diciembre de 1983). "Transporte de un sistema operativo portátil: UNIX a una minicomputadora IBM". Comunicaciones de la ACM . 26 (12): 1066-1072. doi : 10.1145/358476.358504 . S2CID  15558835.
  32. ^ Manual del programador de arquitectura AMD64 Volumen 2: Programación del sistema (PDF) (Informe técnico). 2013. pág. 80. Archivado desde el original (PDF) el 18 de febrero de 2018.
  33. ^ "Microsoft Office Excel 97 - Especificación de formato de archivo binario 2007 (formato *.xls 97-2007)". Corporación Microsoft. 2007.
  34. ^ Matt Ahrens (2016). Aspectos internos del kernel de FreeBSD: un tutorial intensivo sobre el código. Documentación de OpenZFS/Conferencia de lectura y escritura.
  35. ^ Reynolds, J .; Postel, J. (octubre de 1994). "Notaciones de datos". Números asignados. IETF . pag. 3.doi : 10.17487 /RFC1700 . ETS 2. RFC 1700 . Consultado el 2 de marzo de 2012 .
  36. ^ Grupo de estandarización de Ethernet POWERLINK (2012), Propuesta preliminar de trabajo 301 de EPSG: Especificación del perfil de comunicación Ethernet POWERLINK Versión 1.1.4 , capítulo 6.1.1.
  37. ^ IEEE y The Open Group (2018). "3. Interfaces del sistema". Especificaciones básicas de Open Group, edición 7. Vol. 1, núm. 2. pág. 1120 . Consultado el 9 de abril de 2021 .
  38. ^ "htonl(3) - página de manual de Linux". linux.die.net . Consultado el 9 de abril de 2021 .

enlaces externos