Endianness
Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article 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 à l'équinoxe) et des points cardinaux (nord de la...) 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 représentées sur plusieurs octets. L'ordre dans lequel ces octets sont organisés en mémoire ou dans une communication...) 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 à donner à tout caractère de n’importe quel système d’écriture un nom et un...), codées en UTF-16 ou UTF-32. Les données codées sur un seul octet, 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 d'une information.), 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 s'adresser à une autre parmi un ensemble d'entités. Pour qu'il n'y ait pas d'ambiguïté, chaque adresse doit correspondre à une unique entité,...) de 1 octet. Ainsi, l'octet de poids (Le poids est la force de pesanteur, d'origine gravitationnelle et inertielle, exercée par la Terre sur un corps massique en raison uniquement du voisinage de la Terre. Elle est égale à...) 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 spécification de plusieurs règles pour un type de communication particulier.) 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 Motorola. C'est le premier de la famille de microprocesseurs souvent appelée m68k ou...), les SPARC (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 8086. Cette série est nommée IA-32 (pour Intel architecture 32 bits) par Intel pour...), 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, diffusé sur Arte depuis 1995.) 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, groupale...) que l'animal (communication intra- ou inter- espèces) ou la machine (télécommunications, nouvelles technologies...), ainsi que leurs...) 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 (Le PowerPC est une architecture de microprocesseurs développée conjointement par Apple, IBM et Freescale (ex-Motorola Semiconducteurs). Elle utilise un modèle RISC, privilégiant pipeline et jeu d'instructions réduit. L'architecture...) (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 effectués automatiquement par un appareil informatique. Y sont inclus les instructions de traitement,...), 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 codée, d'une chose, d'une transaction d'affaire, d'un événement, etc.). 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 mesure logarithmique du rapport entre deux puissances, connue pour exprimer la puissance du son. Grandeur sans dimension en dehors du...) 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 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 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 nombres pour mesurer l'éventuel défaut de dualité d'une application définie à l'aide...), alors on obtient NUXI. Ce problème a été découvert en voulant porter une des premières versions d'Unix d'un PDP-11 middle-endian sur une architecture IBM (International Business Machines Corporation (IBM) est une société multinationale américaine présente dans les domaines du matériel informatique, du logiciel et...) 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 informations. Par analogie avec un filet (un réseau est un « petit...), 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 traitement »), est le composant de l'ordinateur qui exécute les...) 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 l'univers.) cela est fixé par le protocole de la couche Couche de liaison du modèle OSI.

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 grammatical ».). 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, souvent codée, d'une chose, d'une transaction, d'un événement, etc.), 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 l'extension radicale de l'espérance de vie humaine. Par une évolution progressive allant...) 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 position est reliée à la position voisine par un multiplicateur, appelé base du système de numération. Chaque position peut être représentée par un...) 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 composition interne · notée multiplicativement, est un élément y tel que x·y = y·x = 1, si 1...): 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 l'interprétation des rayonnements lumineux.) 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.114 seconde(s) - site hébergé chez Amen
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
Ce site est édité par Techno-Science.net - A propos - Informations légales
Partenaire: HD-Numérique