11 votes

Qu'est-ce qui détermine l'endiveté ?

  1. Je me demandais si l'endianness dépendait uniquement du processeur ?
  2. Dépend-il d'autres matériels, tels que la mémoire, le dispositif de stockage secondaire ?
  3. Cela dépend-il du système d'exploitation ? Pourquoi dans Wikipedia Est-ce que ça semble être vrai ?

0 votes

Je ne connais pas grand-chose à ce sujet, mais en lisant l'article dont vous donnez le lien, j'en conclus que 1. Pas sur les systèmes bi-endian, sinon, oui. 2. Pas sur l'endianness du CPU, car ils n'ont pas besoin de modifier réellement les données qu'ils contiennent. Voir la section sur l'échange de fichiers et d'octets pour les questions connexes. 3. Oui, pour les architectures bi-endiennes. Quelqu'un doit décider.

0 votes

@Daniel : Merci ! Que voulez-vous dire par "Pas d'endiveté du CPU" ?

1 votes

D'autres matériels peuvent avoir besoin d'être conscients des problèmes d'endianness (le réseau est mentionné dans l'article). C'est pourquoi j'ai essayé de distinguer le type de problème auquel vous faites référence en l'appelant "endianness du CPU".

16voto

LawrenceC Points 70381
  1. Le CPU contrôle l'endianness. Quelques processeurs peuvent passer du big-endian au little-endian. Les architectures x86/amd64 ne possèdent pas cette fonctionnalité.

  2. L'endiannité est une chose implicite avec les instructions de chargement et de stockage sur le CPU. Les données qui ne tiennent pas dans un octet (0-255) doivent être lues et écrites dans une série de plusieurs octets, et évidemment ces octets doivent être lus et écrits dans un ordre cohérent. Les concepteurs de l'unité centrale doivent également choisir un ordre dans lequel les octets des registres sont lus et écrits. L'ordre n'est pas important si les données ne quittent jamais l'unité centrale ou la mémoire vive, mais lorsqu'il s'agit d'écrire des données dans des registres d'entrée/sortie (qui ne s'attendent pas forcément à ce que l'ordre soit le même) et dans des secteurs de disque (où d'autres systèmes peuvent lire les données), l'ordre devient important et une norme externe est nécessaire. Cette norme fait généralement partie des spécifications du matériel ou d'un format de fichier. Tout programmeur ou concepteur digne de ce nom va concevoir des formats de persistance pour tenir compte de ce facteur. Une mauvaise programmation ou une programmation qui a supposé que les choses seront toujours lues sur une seule architecture peut révéler un défaut.

  3. Un système d'exploitation utilise beaucoup les registres d'entrée/sortie et les secteurs de disque, donc le point 2 s'applique ici. Un domaine particulièrement important qui nécessite un standard commun entre toutes les unités centrales est l'implémentation des systèmes de fichiers. C'est pourquoi il existe des mips y mipsel de Debian et autres.

1 votes

"Les données qui ne rentreront pas dans plus qu'un octet (0-255) doit être lu et écrit dans une série de plusieurs octets, et évidemment ces octets doivent être lus et écrits dans un ordre cohérent". - Je ne pense pas que vous vouliez que ce soit plus là dedans.

0 votes

Merci ! En 2, est-ce que "registre" dans "Les concepteurs de l'unité centrale doivent également choisir un ordre dans lequel les octets des registres sont lus et écrits" est identique à "registre d'E/S" dans "l'ordre n'est pas important si les données ne quittent jamais l'unité centrale ou la RAM, mais lorsque vous écrivez des données dans des registres d'E/S (qui peuvent ne pas attendre le même ordre)" ?

0 votes

@Tim, Pour les besoins de cette discussion, je dirais oui.

13voto

jkj Points 522

L'endiveté, c'est données numériques quand un nombre est trop grand pour tenir dans un octet. Le texte ASCII, par exemple, n'est qu'une suite d'octets, sans tenir compte de l'endive.

Si on met un petit nombre comme 42 dans un entier de 32 bits (4 octets), on voit que avec big endian (BE), seul le dernier octet est utilisé. y avec little endian (LE), seul le premier octet est utilisé. :

|    | byte[0] | byte[1] | byte[2] | byte[3] |
|----+---------+---------+---------+---------|
| BE |       0 |       0 |       0 |      42 |
| LE |      42 |       0 |       0 |       0 |

L'endiveté de l'architecture est l'endiveté du CPU. La RAM ne fait pas de maths, donc elle s'en moque.

Les dispositifs tels que les cartes son ne sont pas indifférents (par exemple, l'audio 16 bits 44100 kHz est principalement BE), mais c'est Système d'exploitation (pilote de périphérique) responsabilité de dire au CPU de peut-être convertir l'endianness avant de l'envoyer à la carte son.

Dans les réseaux, presque tout est en big endian. donc le système d'exploitation doit dire aux processeurs little endian de échange d'octets entiers au fur et à mesure que les paquets réseau sont construits.

Les systèmes de fichiers existent dans les deux types d'endiennage. Par exemple, FAT32 est LE, donc seules les architectures BE doivent effectuer un échange d'octets lorsqu'elles utilisent FAT32.

En programmation réseau C, vous devez vous souvenir d'utiliser htonl() y ntohl() -Les fonctions de conversion entre l'ordre des octets de l'hôte (natif) et celui du réseau. Lorsque le programme est compilé sur un système big endian, les fonctions ne font rien. Sur les systèmes little endian, elles échangent l'ordre des octets.


L'endiveté de l'architecture est une chose au niveau de l'octet. L'ordre/numérotation des bits n'est pas pertinent lorsqu'on considère l'endiannabilité de l'architecture. Mais c'est toujours bon à savoir :)

En gros, le LSB (Least Significant Bit) en premier est le LE du monde des bits et le MSB (Most Significant Bit) en premier est le BE du monde des bits.

La plupart des CPU et des bus série semblent être (étonnamment) LSB, même sur les systèmes big endian tels que SPARC. Ethernet est également LSB malgré le fait que les octets sont généralement dans l'ordre big endian. D'autre part, par exemple, le PPC est big endian et MSB en premier.

4voto

Andrew Lambert Points 7506

L'endianness est simplement l'ordre dans lequel le processeur place les bits d'un nombre binaire. La mémoire vive ne se soucie pas de l'ordre dans lequel les données sont sauvegardées, pas plus que le disque dur (puisqu'ils n'agissent pas sur le contenu du flux de données lui-même, mais se contentent d'exécuter les directives du processeur/chipset sur l'endroit où le placer). Les systèmes d'exploitation peuvent être construits pour fonctionner avec les deux endianness (Mac OS X par exemple).

2voto

jlliagre Points 13539

L'endiannité ne dépend pas nécessairement du processeur. Par exemple, Ethernet et la plupart des protocoles de bas niveau de TCP/IP sont big endian, indépendamment du CPU et, espérons-le, les machines basées sur x86 peuvent toujours se connecter à Internet. De même, les systèmes d'exploitation fonctionnant sur un processeur big endian liront FAT32, un système de fichiers little endian, ou utiliseront des cartes PCI little endian, etc.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X