Endianness - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs est disponible ici.

En informatique, certaines données telles que les nombres entiers peuvent être représentées sur plusieurs octets. L'ordre dans lequel ces octets sont organisés en mémoire ou dans une communication est appelé endianness. De la même manière que certains langages humains s'écrivent de gauche à droite, et d'autres s'écrivent de droite à gauche[1], il existe une alternative majeure à l'organisation (Une organisation est) des octets représentant une donnée : l'orientation (Au sens littéral, l'orientation désigne ou matérialise la direction de l'Orient (lever du soleil...) big-endian et l'orientation little-endian. Ces expressions sont parfois traduites par gros-boutiste et petit-boutiste. Les expressions byte order, d'ordre des octets ou de byte sex sont également utilisées.

L'endianness (En informatique, certaines données telles que les nombres entiers peuvent être...) ne concerne que les données structurées sur plusieurs octets, telles que les nombres entiers, ou les caractères Unicode (Unicode est une norme informatique, développée par le Consortium Unicode, qui vise à...), codées en UTF-16 (UTF-16 est un codage des caractères définis par Unicode où chaque caractère est...) ou UTF-32. Les données codées sur un seul octet (L’octet est une unité de mesure en informatique mesurant la quantité de...), telles que les caractères ASCII ne sont pas concernées.

Dans les ordinateurs

Quand certains ordinateurs enregistrent un entier sur 32 bits en mémoire (D'une manière générale, la mémoire est le stockage de l'information. C'est aussi le souvenir...), par exemple 0xA0B70708 en notation hexadécimale, ils l'enregistrent dans des octets dans l'ordre qui suit : A0 B7 07 08, pour une structure de mémoire basée sur une unité atomique de 1 octet et un incrément d'adresse (Les adresses forment une notion importante en communication, elles permettent à une entité de...) de 1 octet. Ainsi, l'octet de poids (Le poids est la force de pesanteur, d'origine gravitationnelle et inertielle, exercée par la...) le plus fort (ici A0) est enregistré à l'adresse mémoire la plus petite, l'octet de poids inférieur (ici B7) est enregistré à l'adresse mémoire suivante et ainsi de suite.

0 1 2 3
... A0 B7 07 08 ...

Pour une structure de mémoire ou un protocole de communication (Dans les réseaux informatiques et les télécommunications, un protocole de communication est une...) basé sur une unité atomique de 2 octets, avec un incrément d'adresse de 1 octet, l'enregistrement dans des octets sera: A0B7 0708. L'unité atomique de poids le plus fort (ici A0B7) est enregistré à l'adresse mémoire la plus petite.

0 1 2 3
... A0 B7 07 08 ...

Les architectures qui respectent cette règle sont dites big-endian ou gros-boutistes ou mot de poids fort en tête, par exemple les processeurs Motorola 68000 (Apparu en 1979, le Motorola 68000 est un microprocesseur CISC 16/32 bits développé par...), les SPARC (L'architecture SPARC est une architecture de processeur ouverte. « SPARC » est...) (Sun Microsystems) ou encore les System/370 (IBM).

Les autres ordinateurs enregistrent 0xA0B70708 dans l'ordre suivant : 08 07 B7 A0 (pour une structure de mémoire basée sur une unité atomique de 1 octet et d'un incrément d'adresse de 1 octet), c'est-à-dire avec l'octet de poids le plus faible en premier. De telles architectures sont dites little-endian ou petit-boutistes ou mot de poids faible en tête. Par exemple, les processeurs x86 (La famille x86 regroupe les microprocesseurs compatibles avec le jeu d'instructions de l'Intel...), qui se trouvent dans les PC ont une architecture (Architectures est une série documentaire proposée par Frédéric Campain et Richard Copans,...) petit-boutiste.

0 1 2 3
... 08 07 B7 A0 ...

Pour une structure de mémoire ou un protocole de communication (La communication concerne aussi bien l'homme (communication intra-psychique, interpersonnelle,...) basé sur une unité atomique de 2 octet, avec un incrément d'adresse de 1 octet, l'enregistrent dans des octets sera: 0708 A0B7. L'unité atomique de poids le plus faible (ici 0708) est enregistré à l'adresse mémoire la plus petite.

0 1 2 3
... 07 08 A0 B7 ...

Certaines architectures supportent les deux règles, par exemple les architectures PowerPC (PowerPC, parfois abrégé PPC, est une gamme de microprocesseurs dérivée de...) (IBM), ARM, DEC Alpha, MIPS, PA-RISC (HP) et IA-64 (Intel). On les appelle bytesexual(jargon), bi-endian ou, plus rarement, biboutistes. Le choix du mode peut se faire au niveau logiciel (En informatique, un logiciel est un ensemble d'informations relatives à des traitements...), au niveau matériel ou aux deux.

Certaines autres rares architectures, appelées middle-endian, ont un ordonnancement plus complexe: les octets composant les unités atomiques subissent une opération de swap. Par exemple 0xA0B70708 est enregistré dans une mémoire, middle-endian dont les unités atomiques sont de 2 octets, avec un incrément d'adresse de 1 octet, dans l'ordre: 0807 B7A0 ou bien B7A0 0807.

0 1 2 3
... 08 07 B7 A0 ... middle-endian, unité atomique 2-octets, incrément d'adresse 1-octet

ou alternativement

0 1 2 3
... B7 A0 08 07 ... middle-endian, unité atomique 2-octets, incrément d'adresse 1-octet

Nous noterons une ambiguïté dans la représentation de cette donnée (Dans les technologies de l'information (TI), une donnée est une description élémentaire, souvent...). En effet l'information d'endianness sur la manière d'ordonner les unités atomiques existe toujours bel (Nommé en l’honneur de l'inventeur Alexandre Graham Bell, le bel est unité de...) et bien. Au terme de middle-endian, nous préfèrerons donc plutôt utiliser les termes de big-endian ou little-endian associé à une caractéristique de byte-swap. Notre exemple devient dès lors non ambigu :

1. dans une mémoire little-endian avec byte-swap, 2-octets d'unité atomique, 1-octet d'incrément d'adresse, 0xA0B70708 est représenté par 0807B7A0, 08 étant à l'adresse 0.

0 1 2 3
... 08 07 B7 A0 ... little-endian, byte-swap, unité atomique 2 octets, incrément d'adresse 1 octet

2. dans une mémoire big-endian avec byte-swap, 2 octets d'unité atomique, 1 octet d'incrément d'adresse, 0xA0B70708 est représenté par B7A00807, B7 étant à l'adresse 0.

0 1 2 3
... B7 A0 08 07 ... big-endian, byte-swap, unité atomique 2 octets, incrément d'adresse 1 octet

Il est plus difficile de travailler avec de tels processeurs, les PDP-11 (Un PDP-11 est un modèle d'ordinateur de la gamme des PDP (Programmable Data Processor)...) par exemple.

La numérotation des bits dans une architecture (L’architecture peut se définir comme l’art de bâtir des édifices.) big-endian est ainsi : les bits sont numérotés de la gauche, donc le bit (Le bit est un chiffre binaire, c'est-à-dire 0 ou 1. Il est donc aussi une unité de mesure...) 0 a le poids le plus fort, et le bit 7 étant celui de poids le plus faible dans un octet. Il semble plus intuitif de numéroter les bits à la manière little-endian si un octet doit représenter un entier, car dans ce cas, le numéro du bit correspond à l'exposant (Exposant peut signifier:). Cependant, si l'octet doit représenter une fraction binaire, alors la convention big-endian convient mieux.

Un moyen mnémotechnique pour ne pas se mélanger les idées, il suffit de remplacer " endian " par " head ". Ce qui nous donne : " big head " pour les bits de poids " fort en tête " " small head " pour les bits de poids " faible en tête "

Dans les communications

On appelle cela le problème NUXI, en effet si on veut envoyer la chaîne (Le mot chaîne peut avoir plusieurs significations :) " UNIX " en regroupant deux octets par mot entier de 16 bits sur une machine de convention différente (En mathématiques, la différente est définie en théorie algébrique des...), alors on obtient NUXI. Ce problème a été découvert en voulant porter une des premières versions d'Unix (UNIX (marque déposée officiellement comme UNIX, parfois aussi écrit comme Unix avec...) d'un PDP-11 middle-endian sur une architecture IBM (International Business Machines Corporation (IBM) est une société multinationale américaine...) big-endian.

Le protocole IP définit un standard, le network byte order (soit ordre des octets du réseau). Dans ce protocole, les informations binaires sont en général codées en paquets, et envoyées sur le réseau (Un réseau informatique est un ensemble d'équipements reliés entre eux pour échanger des...), l'octet de poids le plus fort en premier, c'est-à-dire selon le mode big-endian et cela quel que soit l'endianness naturel du processeur (Le processeur, ou CPU (de l'anglais Central Processing Unit, « Unité centrale de...) hôte.

Les périphériques doivent aussi respecter une convention afin d'assurer la cohérence du système. Tout (Le tout compris comme ensemble de ce qui existe est souvent interprété comme le monde ou...) cela est fixé par le protocole de la couche Couche de liaison (Dans le domaine des réseaux informatiques, la couche de liaison de données est la seconde...) du modèle OSI (Le modèle OSI (de l'anglais Open Systems Interconnection, « Interconnexion de...).

Différences pratiques

Bien que la différence entre les deux modes big-endian et little-endian semble aujourd'hui minime et se limiter à un problème de convention, on peut signaler des avantages liés à chacun :

Les nombres big-endian sont plus faciles à lire lorsqu'on débogue un programme car leur contenu est directement lisible sans avoir à changer l'ordre des octets constituant le nombre (La notion de nombre en linguistique est traitée à l’article « Nombre...). Cela est dû au fait que l'ordre des chiffres est le même que celui de l'écriture normale.

Le mode little-endian présentait des avantages lorsque les processeurs utilisaient des tailles de registre variables, c’est-à-dire 8, 16 ou 32 bits. À partir d'une adresse mémoire donnée (Dans les technologies de l'information, une donnée est une description élémentaire,...), on pouvait lire le même nombre en lisant 8, 16 ou 32 bits. Exemple: le nombre 33 (0x21 en hexadécimal) s'écrit 21 00 00 00 en little endian en 32 bits, ce qui se lit toujours 21 quel que soit le nombre d'octets lus. Ceci est faux en big-endian car la première adresse change suivant le nombre d'octets à lire.

En général, on dit que l'on préfère l'une ou l'autre des représentations suivant celle que l'on a étudiée en premier.

Logiciels et portabilité (Selon le contexte, le mot portabilité peut avoir plusieurs significations :)

On a bien compris que ces conventions posent des problèmes dans le portage des logiciels. Par exemple, en lisant des données binaires, selon l'architecture, on ne va pas obtenir la même donnée après lecture si on ne se soucie pas de la convention.

Bien sûr le choix de big-endian ou little-endian est toujours arbitraire, ce qui soulève des débats intensifs, car il y a nombre d'arguments en faveur de l'un et de l'autre. Les langues par exemple, selon le groupe linguistique germanique, anglais ou autre, n'ont pas la même perception.

Écriture des nombres dans les langues humaines

Le problème du choix du sens (SENS (Strategies for Engineered Negligible Senescence) est un projet scientifique qui a pour but...) d'écriture se pose aussi pour l'écriture des nombres en notation positionnelle (La notation positionnelle est un procédé d'écriture des nombres, dans lequel chaque...) dans les langues humaines.

Dans les langues utilisant l'alphabet latin, qui se lisent de gauche à droite, les nombres s'écrivent en commençant par les chiffres de poids le plus forts. C'est donc une convention big-endian. En arabe, c'est l'inverse (En mathématiques, l'inverse d'un élément x d'un ensemble muni d'une loi de...): on écrit — cette fois de droite à gauche — d'abord les unités, puis les dizaines, etc. C'est une convention little-endian... relativement au sens d'écriture ordinaire de cette langue. (Il est amusant de constater que ces deux conventions opposées donnent le même résultat, du point (Graphie) de vue (La vue est le sens qui permet d'observer et d'analyser l'environnement par la réception et...) gauche-droite : les unités à droite...)

Étymologie

Les termes big-endian et little-endian ont été empruntés aux Voyages de Gulliver de Jonathan Swift, dans lequel ces deux clans de Lilliputiens se font la guerre à cause de la manière différente qu'ils ont de casser les œufs à la coque : par le gros ou le petit bout.

Page générée en 0.084 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales | Partenaire: HD-Numérique
Version anglaise | Version allemande | Version espagnole | Version portugaise