(Courriels de diversion: <relancez@resignions-lubrifiions.com> <aurions@admettra-enterinee.com> <situeras@decrocherez-complote.com> <retrousses@alternant-trancherez.com> <signataires@lustrerai-pavoisons.com> <croiseras@connectee-redingotes.com> <decernais@discredits-corniches.com> <mesquineries@demoulent-floue.com> <pretendrais@regionaliserait-verse.com> <recevront@massacrerais-crâneuse.com> )
Et non ... Pas un Western ... Dommage ?Title: Que signifient «Big Endian» et «Little Endian» ?
Si vous ne connaissez pas les fondements du Binaire, lisez l'article : Le comptage informatique, il vous aidera à mieux comprendre cet article.
S'il existe deux manières équivalentes de faire une chose, alors les chances sont grandes pour que deux compagnies choisissent de faire une même chose différemment. C'est la loi de Murphy et elle s'applique aux concepteurs de puces et la manière dont ils arrangent les données en mémoire.
Dans les voyages de Gulliver, les Lilliputiens étaient très petits, et avaient des problèmes politiques correspondant à leur taille. Les groupes Big Endian et Little Endian se débattaient sur la meilleure manière d'ouvrir un oeuf cuit dur (par le gros (Big) bout ou le petit (Little) bout).
Le 1er avril 1980 (ironiquement), Danny Cohen écrivait un papier désormais célèbre «Les guerres saintes et un plaidoyer pour la paix», dont le sujet concernait l'arrangement des octets dans un mot -- et appliqua le terme Endian à ce problème. Le terme est demeuré. Ainsi Endian indique de quel bout on parle (1).
(1) Le terme Byte Sex (sexe de l'octet) est également utilisé. Les programmeurs Unix l'appellent également le problème «NUXI» -- puisque si on utilise un mauvais arrangement d'octets, le mot «UNIX» sera mélangé et deviendra «NUXI». Mais, n'allons pas trop vite, et allons-y par le commencement.
La mémoire d'un ordinateur est une longue suite de bits (interrupteurs qui peuvent être 0 ou 1). Ces bits sont regroupés en octets (groupe de 8 bits). Les octets sont regroupés en mots (16 bits), long mots (32 bits), quadruple mots (64 bits) et de plus grands regroupements encore.
La question qui se pose pour chaque groupe est «quel bout est le plus significatif ?»
Imaginez que j'écris la valeur 12 (décimal) en binaire. Cela s'écrit par un 1 dans la colonne des 8, un 1 dans la colonne des 4, un 0 en dans la colonne des 2 et un 0 dans la colonne des 1. Si on additionne, cela donne 12. La colonne des 8 représente le bit le plus significatif (MSB, Most Signifiant Bit), puisqu'elle renferme la plus grande valeur; et la colonne des 1 représente le bit le moins significatif (LSB, Least Signifiant Bit), puisqu'elle renferme la plus petite valeur.
Et bien on peut écrire en binaire en utilisant l'une ou l'autre de ces manières :
Vous noterez que la valeur demeure la même, peut importe la manière d'écrire le binaire. Si on fait la lecture des bits du moins significatif au plus significatif, la manière dont le chiffre binaire a été écrit n'importe pas. Elle importe uniquement pour les structures internes (d'une puce) -- tant que celle-ci demeure conséquente, le type «d'Endian» n'importe pas au monde extérieur. Pour ces raisons, lorsque quelqu'un discute du type «d'Endian», il parle de l'arrangement des octets et non pas de l'arrangement des bits.
La plupart des gens exprime la forme binaire comme nous exprimons la forme décimale, le chiffre (bit) le plus significatif à gauche.
Malheureusement, la manière (Endian) utilisée pour exprimer la valeur d'un octet à l'intérieur d'un groupe (mot - 16 bits, long mot - 32 bits, et ainsi de suite) a un effet certain sur le résultat.
L'arrangement des octets est le sujet de discussion des gens lorsqu'ils parlent du problème Endian.
Imaginez deux processeurs (32 bits) qui arrangent les octets différemment. Rappelez-vous, un octet est un regroupement de 8 bits, et peut représenter un caractère ASCII (technique de codage standard pour les lettres de l'alphabet et les symboles). Maintenant imaginez ce qui se passe lorsque ces deux processeurs traitent les même données --
Le processeur «Big Endian» emmagasinera les données dans un ordre (direction). Le problème c'est que l'autre processeur lisant ces données utilise les groupements dans un ordre différent. Ainsi un des processeurs sortirait la donnée comme ceci : U-N-I-X, tandis que l'autre la sortirait ainsi X-I-N-U; en admettant que ce sont des processeurs 32 bits (lesquels regroupent les caractères en paquets de 4). Gros problème.
Les anciens processeurs étaient des processeurs 16 bits -- lorsque ce problème est apparu pour la première fois. Dans ces conditions, le premier processeur aurait sorti 'UN' et 'IX', soit deux groupes de 16 bits, et l'autre processeur aurait sorti 'NU' et 'XI' -- ou 'NUXI'. Voilà pourquoi certains programmeurs UNIX appellent le problème Endian, «Le problème NUXI».
Ce problème ne s'applique pas uniquement aux chaînes de caractères, mais également aux valeurs binaires. Rappelez-vous que plusieurs valeurs sont formées par des combinaisons d'octets. Un octet renferme une valeur de 0-255 (ou 256 valeurs). Avec deux octets (16 bits au total), la valeur représentée est de 0-65535 (256 x 256 valeurs). Cependant un des octets est le moins significatif et représente une fois sa valeur, l'autre octet est le plus significatif et représente 256 fois sa valeur. Alors sur un ordinateur dont la valeur du MSB est de 50 et celle du LSB de 10 -- ce qui représente 50 x 256 + 10 = 12,810 -- celles-ci seraient dans un autre ordre sur un autre ordinateur avec le LSB valant 50 et le MSB 10 -- ce qui représente 10 x 256 + 50 = 2,610. Toujours le même problème.
Ce terme est rarement utilisé et concerne un ordonnancement anormal. Les arrangements normaux sont Big Endian (4-3-2-1) ou Little Endian (1-2-3-4). Imaginez un processeur 32 bits qui se comporte comme deux processeurs 16 bits -- il pourrait emmagasiner les données selon un ordre 3-4-1-2 ou 2-1-4-3. C'est ce qu'on appelle le Middle-Endian pour un processeur 32 bits. Certains mini-ordinateurs utilisent ce format pour représenter les décimaux compactés -- mais c'est rarement utilisé.
Ce terme est également utilisé par les programmeurs en dehors des États-Unis, qui croient que les dates américaines sont Middle Endian. Les Américains écrivent les dates selon le format mm/jj/aa -- alors que les Européens les écrivent plus logiquement selon le format Little Endian jj/mm/aa (du moins au plus significatif).
Il n'y a pas de solution miracle au problème de l'arrangement des octets (Endian). Chacun doit s'entendre sur le format d'emmagasinage des données. Un des processeurs aura à traduire (changer l'ordre) des données provenant de l'autre processeur.
Certains nouveaux processeurs (tel que le PowerPC) peuvent être Bi-Endian (ils peuvent utiliser un format ou l'autre) -- mais habituellement le système d'exploitation qui les utilise est dépendant d'un certain type «d'Endian». Alors ils sont fixés sur une méthode et rarement vont-ils utiliser l'autre.
Quelques faits : les processeurs Intel (x86 et Pentium) sont Little Endian et les processeurs Motorola (la série 680x0) sont Big Endian. Le MacOS est Big Endian et Windows est Little Endian.