Sé muy poco sobre esto, pero al leer el artículo al que se vincula, deduzco: 1. No en sistemas bi-endianos, de lo contrario, sí. 2. No la resistencia de la CPU, ya que no necesitan modificar realmente los datos que contienen. Consulte la sección sobre intercambio de archivos y bytes para ver problemas relacionados 3. Sí, para arquitecturas biandianas. Alguien tiene que decidir.
Daniel Beck
@Daniel: ¡Gracias! ¿Qué quieres decir con "No endianness de CPU"?
Tim
1
Es posible que otro hardware deba tener en cuenta los problemas de endianness (las redes se mencionan en el artículo). Es por eso que traté de distinguir el tipo al que te refieres llamándolo "CPU endianness".
Daniel Beck
Tal vez debería agregarse que algunas CPU (p. Ej., PowerPC) son compatibles con ambas características Comienzan de forma predeterminada, pero se puede cambiar.
flolo
Respuestas:
10
Endianness se trata de datos numéricos cuando un número es demasiado grande para caber en un byte. Por ejemplo, el texto ASCII es solo bytes seguidos, sin preocuparse por la endianidad.
Si ponemos un número pequeño como 42 en un entero de 32 bits (4 bytes), vemos que con big endian (BE) solo se usa el último byte y con little endian (LE) solo se usa el primer byte :
El endianness de la arquitectura es el endianness de la CPU. RAM no hace matemáticas, así que no le importa.
Los dispositivos como las tarjetas de sonido tienen cuidado (por ejemplo, el audio de 16 bits a 44100 kHz es principalmente BE), pero es responsabilidad del sistema operativo (controlador de dispositivo) decirle a la CPU que quizás convierta la resistencia antes de enviarla a la tarjeta de sonido.
En las redes, en su mayoría, todo es big endian , por lo que el sistema operativo debe decirle a los pequeños procesadores endian que intercambien bytes enteros a medida que se construyen los paquetes de red.
Los sistemas de archivos vienen en ambos extremos. Por ejemplo, FAT32 es LE, por lo que solo las arquitecturas BE tienen que hacer un intercambio de bytes cuando se usa FAT32.
En la programación de red C, debe recordar utilizar htonl()y ntohl()-funciones para convertir entre host- (nativo) y el orden de bytes de red. Cuando el programa se compila en un sistema Big Endian, las funciones no hacen nada. En pequeños sistemas endian intercambian orden de bytes.
El endianness de la arquitectura es una cosa de nivel de byte. El orden / numeración de bits es en su mayor parte irrelevante cuando se considera la arquitectura endianness. PERO siempre es bueno saber :)
Aproximadamente LSB (bit menos significativo) primero es el LE del mundo de bits y MSB (bit más significativo) primero es el BE del mundo de bits.
La mayoría de los buses serie y CPU parecen ser (sorprendentemente) LSB incluso en grandes sistemas endian como SPARC. Además, Ethernet es LSB a pesar de que los bytes en su mayoría van en orden big endian. Por otro lado, por ejemplo, PPC es Big Endian y MSB primero.
La CPU controla el endianness. Algunas CPU pueden cambiar entre big-endian y little-endian. Las arquitecturas x86 / amd64 no poseen esta característica.
Endianness es una cosa implícita con las instrucciones de carga y almacenamiento en la CPU. Los datos que no caben en un byte (0-255) deben leerse y escribirse en una serie de bytes múltiples, y obviamente esos bytes deben leerse y escribirse en un orden consistente. Los diseñadores de la CPU también tienen que elegir un orden desde el que se leen y escriben los bytes de los registros. El orden no es importante si los datos nunca salen de la CPU o la RAM, pero cuando entra en cosas como escribir datos en registros de E / S (que podrían no esperar el mismo orden) y sectores de disco (donde otros sistemas podrían leer los datos ) entonces se vuelve importante y se necesita un estándar externo. Este estándar generalmente es parte de la especificación de hardware o una especificación de formato de archivo. Cualquier programador / diseño que valga la pena va a diseñar formatos de persistencia para tener esto en cuenta,
Un sistema operativo se ocupa en gran medida de los registros de E / S y los sectores del disco, por lo que el n. ° 2 se aplica aquí. Un área particularmente importante que necesita un estándar común entre todas las CPU es la implementación de sistemas de archivos. Es por eso que hay versiones separadas mipsy mipselcompilaciones de Debian y qué no.
"Los datos que no caben en más de un byte (0-255) deben leerse y escribirse en una serie de bytes múltiples, y obviamente esos bytes deben leerse y escribirse en un orden consistente". - No creo que quieras eso más allí.
EBGreen
¡Gracias! en 2, "se registra" en "Los diseñadores de la CPU también tienen que elegir un orden en el que los bytes de los registros se leen y escriben" como "registro de E / S" en "el orden no es importante si el los datos nunca salen de la CPU o la RAM, pero cuando entras en cosas como escribir datos en registros de E / S (¿qué podría no esperar el mismo orden "?
Tim
@Tim, a los fines de esta discusión, diría que sí.
LawrenceC
1
Ver la respuesta de @ jkj. Destiló la esencia de lo que estaba tratando de decir un poco más claramente.
LawrenceC
1
@ultrasawblade bien veo que haya respondido a ese problema aquí superuser.com/questions/308487/... Más o menos, decir de E / S Los registros se encuentran en el dispositivo, no el procesador. Multa. Nada controvertido allí entonces.
barlop
3
Endianness es simple el orden en que el procesador pone los bits de un número binario. A la RAM no le importa en qué orden se guardan los datos, ni al disco duro (ya que no toman ninguna medida sobre el contenido del flujo de datos, solo llevan a cabo las directivas del procesador / chipset sobre dónde colocarlo). Los sistemas operativos se pueden construir para funcionar con ambas capacidades (Mac OS X, por ejemplo).
Endianness no necesariamente depende de la CPU. Por ejemplo, Ethernet y la mayoría de los protocolos de bajo nivel TCP / IP son big endian, independientemente de la CPU y, con suerte, las máquinas basadas en x86 aún pueden conectarse a Internet. Del mismo modo, los sistemas operativos que se ejecutan en una gran CPU endian leerán FAT32, que es un pequeño sistema de archivos endian o usan pequeñas tarjetas PCI endian, y así sucesivamente.
Respuestas:
Endianness se trata de datos numéricos cuando un número es demasiado grande para caber en un byte. Por ejemplo, el texto ASCII es solo bytes seguidos, sin preocuparse por la endianidad.
Si ponemos un número pequeño como 42 en un entero de 32 bits (4 bytes), vemos que con big endian (BE) solo se usa el último byte y con little endian (LE) solo se usa el primer byte :
El endianness de la arquitectura es el endianness de la CPU. RAM no hace matemáticas, así que no le importa.
Los dispositivos como las tarjetas de sonido tienen cuidado (por ejemplo, el audio de 16 bits a 44100 kHz es principalmente BE), pero es responsabilidad del sistema operativo (controlador de dispositivo) decirle a la CPU que quizás convierta la resistencia antes de enviarla a la tarjeta de sonido.
En las redes, en su mayoría, todo es big endian , por lo que el sistema operativo debe decirle a los pequeños procesadores endian que intercambien bytes enteros a medida que se construyen los paquetes de red.
Los sistemas de archivos vienen en ambos extremos. Por ejemplo, FAT32 es LE, por lo que solo las arquitecturas BE tienen que hacer un intercambio de bytes cuando se usa FAT32.
En la programación de red C, debe recordar utilizar
htonl()
yntohl()
-funciones para convertir entre host- (nativo) y el orden de bytes de red. Cuando el programa se compila en un sistema Big Endian, las funciones no hacen nada. En pequeños sistemas endian intercambian orden de bytes.El endianness de la arquitectura es una cosa de nivel de byte. El orden / numeración de bits es en su mayor parte irrelevante cuando se considera la arquitectura endianness. PERO siempre es bueno saber :)
Aproximadamente LSB (bit menos significativo) primero es el LE del mundo de bits y MSB (bit más significativo) primero es el BE del mundo de bits.
La mayoría de los buses serie y CPU parecen ser (sorprendentemente) LSB incluso en grandes sistemas endian como SPARC. Además, Ethernet es LSB a pesar de que los bytes en su mayoría van en orden big endian. Por otro lado, por ejemplo, PPC es Big Endian y MSB primero.
fuente
La CPU controla el endianness. Algunas CPU pueden cambiar entre big-endian y little-endian. Las arquitecturas x86 / amd64 no poseen esta característica.
Endianness es una cosa implícita con las instrucciones de carga y almacenamiento en la CPU. Los datos que no caben en un byte (0-255) deben leerse y escribirse en una serie de bytes múltiples, y obviamente esos bytes deben leerse y escribirse en un orden consistente. Los diseñadores de la CPU también tienen que elegir un orden desde el que se leen y escriben los bytes de los registros. El orden no es importante si los datos nunca salen de la CPU o la RAM, pero cuando entra en cosas como escribir datos en registros de E / S (que podrían no esperar el mismo orden) y sectores de disco (donde otros sistemas podrían leer los datos ) entonces se vuelve importante y se necesita un estándar externo. Este estándar generalmente es parte de la especificación de hardware o una especificación de formato de archivo. Cualquier programador / diseño que valga la pena va a diseñar formatos de persistencia para tener esto en cuenta,
Un sistema operativo se ocupa en gran medida de los registros de E / S y los sectores del disco, por lo que el n. ° 2 se aplica aquí. Un área particularmente importante que necesita un estándar común entre todas las CPU es la implementación de sistemas de archivos. Es por eso que hay versiones separadas
mips
ymipsel
compilaciones de Debian y qué no.fuente
Endianness es simple el orden en que el procesador pone los bits de un número binario. A la RAM no le importa en qué orden se guardan los datos, ni al disco duro (ya que no toman ninguna medida sobre el contenido del flujo de datos, solo llevan a cabo las directivas del procesador / chipset sobre dónde colocarlo). Los sistemas operativos se pueden construir para funcionar con ambas capacidades (Mac OS X, por ejemplo).
fuente
Endianness no necesariamente depende de la CPU. Por ejemplo, Ethernet y la mayoría de los protocolos de bajo nivel TCP / IP son big endian, independientemente de la CPU y, con suerte, las máquinas basadas en x86 aún pueden conectarse a Internet. Del mismo modo, los sistemas operativos que se ejecutan en una gran CPU endian leerán FAT32, que es un pequeño sistema de archivos endian o usan pequeñas tarjetas PCI endian, y así sucesivamente.
fuente