Octet

espace mémoire de 8 bits en informatique

En informatique, un octet est un multiplet de 8 bits codant une information[1]. Dans ce système de codage s'appuyant sur le système binaire, un octet permet de représenter 28 nombres, soit 256 valeurs différentes. Un octet permet de coder des valeurs numériques ou jusqu'à 256 caractères différents.

1 0 1 0 0 0 1 1
Écriture dans un octet de 27 + 25 + 21 + 20,
c'est-à-dire 163, en code binaire naturel.

Le terme est couramment utilisé comme unité de mesure en informatique (symbole : o) pour indiquer la capacité de mémorisation des mémoires (mémoire vive ou morte, capacité des périphériques de stockageetc.). À cette fin, on utilise couramment des multiples de l'octet, comme le kilooctet (Ko ou ko)[2],[3],[4], le mégaoctet (Mo), le gigaoctet (Go) ou le téraoctet (To)[5].

Cette unité permet aussi de quantifier la rapidité de transfert d'informations en octets par seconde (ou ses multiples : Ko/s, Mo/s, etc.).

Étymologie

modifier

Le mot octet est constitué du préfixe « oct- » signifiant huit et du suffixe « -et » signifiant petit. Littéralement un octet est un groupe de 8 bits[1] qui permettent de coder 256 caractères différents[1], ce qui est largement suffisant pour coder l'alphabet latin (y compris les différents types d'accents), les chiffres et la ponctuation. La langue anglaise a repris ce terme avec la même orthographe et la même signification.

Historique

modifier

La quantité de bits que le processeur doit consommer pour exécuter une instruction machine est appelé le mot, sa taille est définie par le constructeur. Aux origines de l'informatique, les processeurs étant limités, ceux-ci consommaient ce mot par petites « bouchées », correspondant au nombre de bits du bus de données. C'est ainsi que le terme Byte est créé en 1956 par Werner Buchholz alors qu'il travaille à la conception de l'IBM Stretch. C'est une déformation orthographique volontaire de l'anglais bite, littéralement « bouchée », pour éviter toute confusion avec bit par élision du e final[6].

Le byte était également l'unité de stockage permettant de stocker un caractère. En anglais, on utilise fréquemment le mot « char » (abréviation de character) pour « byte », et réciproquement. Chaque constructeur définissait la taille du byte en fonction de ses besoins du moment. Dans les années 1950 et 1960, le byte était souvent composé de 6 bits, car tous les caractères nécessaires à la programmation en langue anglaise pouvaient être codés avec six bits (64 possibilités). Le byte pouvait aussi avoir une taille de 9 bits sur d'autres systèmes. Le PDP-10 avait encore une autre définition du byte avec une taille variable, allant de 1 à 36 bits selon l'instruction machine à exécuter.

Dans la plupart des architectures matérielles, la capacité de la mémoire informatique est généralement exprimée en bytes, alors que sur les architectures « grand public » en français, on l'exprime en octets. La généralisation des bytes de huit bits amplifie cette confusion, en tirant un trait sur les architectures anciennes − essentiellement nord-américaines. On trouve beaucoup de documentation en français exprimant improprement la capacité de mémoire en bytes par une confusion bytes/octets lors de la traduction.

Aujourd'hui, pour le Dictionnaire du multimédia – Audiovisuel, informatique, télécommunications[7] de l'AFNOR, le byte est « l'unité d'information correspondant à un octet, soit 8 bits ». La normalisation IEC 80000-13 va dans le même sens : normaliser la taille des bytes à 8 bits. C'est de cette « normalisation » à 8 bits que vient la confusion.

Toutefois, en anglais comme en français, si l'on veut explicitement désigner une quantité de huit bits, on utilise le mot « octet » ; tandis que si l'on veut exprimer l'unité d'adressage indépendamment du nombre de bits, on utilise le mot « byte ». Ainsi la description formelle d’un langage de programmation utilisera sciemment le mot byte si le langage ne nécessite pas qu’un byte ait une taille d’un octet. C’est par exemple le cas du langage C, où un byte peut contenir plus de huit bits. Le mot « octet » est sciemment utilisé en français comme en anglais pour décrire un format de données au bit près. Ainsi, on trouve le mot « octet » dans des textes anglais comme le RFC 793[8] qui décrit le protocole de communication TCP d'Internet, ou dans le standard H.263 qui décrit une norme de codage vidéo numérique.

La même distinction entre « byte » et « octet » existe donc dans les deux langues, seul change le mot que l'on utilise couramment dans les cas où le byte mesure huit bits.

Symbole

modifier

Le symbole de l'octet est la lettre « o » minuscule.

La lettre « O » (en majuscule) n'est pas acceptable dans le Système international d'unités (SI) en raison du risque de confusion avec le chiffre 0 et parce que les lettres majuscules sont en général utilisées pour les symboles des unités dérivées d'un nom propre[réf. souhaitée] (par exemple : volt dont le symbole est V, ou watt dont le symbole est W). Cette question n'est cependant pas tranchée, les unités d'information ne faisant pas partie du SI.

Les autres langues utilisent généralement comme symbole le B anglophone, même si un équivalent local du mot « octet » existe[9].

Multiples

modifier
Multiples de l'octet :
préfixes binaires
Nom Symbole Valeur
kibioctet Kio 210
mébioctet Mio 220
gibioctet Gio 230
tébioctet Tio 240
pébioctet Pio 250
exbioctet Eio 260
zébioctet Zio 270
yobioctet Yio 280
Multiples de l'octet :
préfixes décimaux du SI et mésusages
Nom Symbole Valeur Mésusage[a]
kilooctet ko 103 210
mégaoctet Mo 106 220
gigaoctet Go 109 230
téraoctet To 1012 240
pétaoctet Po 1015 250
exaoctet Eo 1018 260
zettaoctet Zo 1021 270
yottaoctet Yo 1024 280
ronnaoctet Ro 1027 290
quettaoctet Qo 1030 2100

Historiquement, dans le monde informatique, les préfixes « kilo », « méga », « giga », etc. ne représentaient pas une puissance d'un nombre en base dix (103 = 1 000), mais une puissance d'un nombre en base 2 (210 = 1 024). Cependant, cette tradition n'était pas compatible avec les normes en vigueur pour les autres unités et n'était pas appliquée uniformément aux tailles exprimées en octets, notamment pour la mesure de la capacité des disques durs et autres périphériques de stockage. Une nouvelle norme a donc été créée en 1998 pour noter les multiples de 210 = 1 024[b],[10] : les « kibi », « mébi », « gibi », etc.[11].

Cependant, encore actuellement, pour des raisons pratiques, nombre de constructeurs de matériels (microprocesseurs, microcontrôleurs, mémoires, FPGA, etc.) n'appliquent pas cette norme et continuent d'utiliser les multiples historiques dans leur documentation technique. Il est notamment toujours d'usage d'utiliser le préfixe « K » (en majuscule) pour le multiple 1 024 afin de le distinguer du multiple 1 000 représenté par le préfixe « k » (en minuscule) dans le système SI. Il n'existe pas de notation alternative équivalente pour Mo, To, Go… qui lèverait l'ambiguïté par rapport à la notation SI.

Multiples normalisés

modifier

La normalisation des préfixes binaires en 1998 par la Commission électrotechnique internationale spécifie les préfixes suivants pour représenter les multiples calculés en puissances de 2[12] :

  • kibi pour « kilo binaire » ;
  • mébi pour « ga binaire » ;
  • gibi pour « giga binaire » ;
  • tébi pour « ra binaire » ;
  • ainsi de suite.

Les préfixes binaires ont la relation d'ordre suivante :

1 kibioctet (Kio) = 210 octets = 1 024 o = 1 024 octets
1 mébioctet (Mio) = 220 octets = 1 024 Kio = 1 048 576 octets
1 gibioctet (Gio) = 230 octets = 1 024 Mio = 1 073 741 824 octets
1 tébioctet (Tio) = 240 octets = 1 024 Gio = 1 099 511 627 776 octets
1 pébioctet (Pio) = 250 octets = 1 024 Tio = 1 125 899 906 842 624 octets
1 exbioctet (Eio) = 260 octets = 1 024 Pio = 1 152 921 504 606 846 976 octets
1 zébioctet (Zio) = 270 octets = 1 024 Eio = 1 180 591 620 717 411 303 424 octets
1 yobioctet (Yio) = 280 octets = 1 024 Zio = 1 208 925 819 614 629 174 706 176 octets


Les préfixes décimaux quant à eux sont identiques aux préfixes du Système international d'unités :

1 kilooctet (ko) = 103 octets = 1 000 o = 1 000 octets
1 mégaoctet (Mo) = 106 octets = 1 000 ko = 1 000 000 octets
1 gigaoctet (Go) = 109 octets = 1 000 Mo = 1 000 000 000 octets
1 téraoctet (To) = 1012 octets = 1 000 Go = 1 000 000 000 000 octets
1 pétaoctet (Po) = 1015 octets = 1 000 To = 1 000 000 000 000 000 octets
1 exaoctet (Eo) = 1018 octets = 1 000 Po = 1 000 000 000 000 000 000 octets
1 zettaoctet (Zo) = 1021 octets = 1 000 Eo = 1 000 000 000 000 000 000 000 octets
1 yottaoctet (Yo) = 1024 octets = 1 000 Zo = 1 000 000 000 000 000 000 000 000 octets
1 ronnaoctet (Ro) = 1027 octets = 1 000 Yo = 1 000 000 000 000 000 000 000 000 000 octets
1 quettaoctet (Qo) = 1030 octets = 1 000 Ro = 1 000 000 000 000 000 000 000 000 000 000 octets

Confusions entre multiples binaires et décimaux

modifier
 
Windows Vista affiche les valeurs en Go (puissance de 10), tout en les calculant en Gio (puissance de 2), ce qui est contraire aux règles du SI.

Certains utilisateurs débutants sont légitimement perturbés lorsqu'un logiciel ou système d'exploitation leur présente une quantité d'octets affichée avec un préfixe décimal, ou un acronyme en « Go », « Mo », mais une quantité calculée, à tort, sur des puissances de 1024. Bien que les constructeurs indiquent sur leurs composants des valeurs décimales (par exemple « 32 Go » représentent 32 × 109 octets), ces logiciels vont indiquer soit correctement « 29,8 Gio », soit incorrectement « 29,8 Go ». Plus la capacité des supports augmente plus l'écart entre les valeurs attendues et constatées devient important : ainsi un disque dur de « 8 To » (valeur indiquée par le constructeur et qui est conventionnellement correcte) a une capacité affichée dans les systèmes d'exploitation de 8 × 1012 / 10244 = 7,27 Tio, fréquemment notée de façon erronée « 7,27 To », soit un écart de 9 %.

Ces confusions ont été à l'origine de plusieurs actions en justice, notamment aux États-Unis[13].

L'usage des préfixes décimaux, en contradiction avec les recommandations de la Commission électrotechnique internationale qui définissent clairement d'autres préfixes, reste toujours répandu dans la littérature et dans le langage courant. Les préfixes recommandés — « kibi », « mébi »... — ne sont pas encore systématiquement intégrés.

D'autres usages courants, mais incorrects, suppriment complètement le nom ou le symbole de l'unité pour ne plus garder que le nom ou le symbole du préfixe multiplicateur (par exemple « 56K » ou « 20 méga »). Cela entraîne cependant de nombreuses ambiguïtés quant à la nature de cette unité, notamment quand on l'utilise pour exprimer un taux de transfert de données ou la capacité d'une puce de mémoire : en effet, dans ces deux cas, il est courant que l'on mesure en bits plutôt qu'en octets (ainsi un débit de connexion de « 20 méga » — selon l'appellation commerciale — correspond à 2,5 Mo/s, ce qui peut induire en erreur un utilisateur non averti).

Variantes orthographiques

modifier

La langue française pose un problème d'orthographe, relativement à la prononciation de la voyelle initiale du mot « octet » lorsqu'il suit un préfixe ; on peut donc trouver dans la littérature les formes suivantes : « kilo-octet » (avec trait d'union) ou « kilooctet » (sans trait d'union)[réf. souhaitée].

Au Québec, la forme d'usage est sans le trait d'union, sauf lorsqu'on est en présence d'une lettre doublée[14]

Propriétés

modifier

Propriétés de représentation binaire

modifier

Un octet peut représenter 28 soit 256 valeurs différentes. La valeur de tout octet peut s'écrire avec un entier naturel entre 010 et 25510 compris. Elle peut aussi s'écrire avec huit chiffres binaires, entre 000000002 et 111111112 compris, ou avec deux chiffres hexadécimaux, entre 0016 et FF16 compris. La notation hexadécimale est utilisable dans de nombreux langages informatiques car elle est compacte et pratique pour noter la valeur d'un ou plusieurs octet(s).

Un octet peut servir à noter un entier naturel, appelé en informatique « non signé », entre 0 et 255 (en base dix). Une autre convention courante, le complément à deux, permet de noter un entier relatif, ou « signé », entre -128 et +127 compris (en base dix)[c].

De nombreuses conventions existent pour représenter un caractère par un ou plusieurs octets. On peut notamment citer le codage ISO/CEI 8859-1, très utilisé pour représenter avec un octet les 10 chiffres, les 26 lettres minuscules, les 26 lettres majuscules, ainsi que les lettres accentuées et la ponctuation des langues d'Europe occidentale, dont le français. Plus récent, le codage UTF-8 permet de noter tout caractère avec un à quatre octets. L'article sur le codage des caractères développe ce thème.

Propriétés de représentation décimale

modifier

Dans certaines applications nécessitant un codage exact des valeurs décimales (par exemple pour les applications financières), les puissances de 2 peuvent ne pas s'avérer pratiques. Aussi un octet est parfois utilisé pour stocker jusqu'à deux chiffres décimaux exactement (entre 0010 et 9910), chacun codé sur un quartet (quatre bits) distinct entre 00002 = 010 et 10012 = 910. Les autres valeurs de quartets peuvent être utilisées pour coder la position d'une virgule décimale, un signe, l'absence de chiffre significatif à la position indiquée, ou une autre fonction spéciale (valeur infinie, valeur erronée non numérique, etc.). Certains calculateurs (et des bibliothèques logicielles de calcul à virgule fixe ou travaillant sur de très grands entiers ou des valeurs de grande précision) utilisent ce format dit « BCD », sigle anglais de binary coded decimal (décimal codé en binaire).

L'usage du codage BCD était populaire sur les anciens systèmes (notamment ceux utilisant l'EBCDIC) car cela évitait une conversion finale coûteuse pour afficher les nombres à virgule flottante. De plus ce système était plus pratique au temps où les données étaient entrées manuellement sur des cartes perforées : pour convertir un nombre BCD en caractères, il suffisait d'éclater le nombre BCD en deux en n'utilisant qu'un seul quartet par octet pour représenter le chiffre en décimal, le quartet de poids fort prenant une valeur fixe indiquant simplement que c'est un chiffre décimal. Les autres valeurs de quartets de poids fort étaient utilisées pour indiquer que c'était une lettre majuscule, une lettre minuscule ou un autre symbole ou ponctuation. Aujourd'hui, dans la plupart des systèmes actuels, le codage EBCDIC des caractères et du BCD pour les valeurs numériques est plus rarement utilisé car la plupart des calculs se font plus rapidement en représentation binaire de façon matérielle avec une précision globale prédéfinie (codée sur un nombre fixe d'octets).

Des variantes du système BCD permettent de conserver une représentation précise des nombres à virgule fixe ou flottante en base dix, tout en permettant une plus grande compacité de stockage et en rendant les calculs plus rapides. L'astuce consiste à grouper les chiffres décimaux et les représenter en binaire sur un groupe de plusieurs octets. Par exemple :

  • tout d'abord la représentation en quartets s'avère coûteuse en termes de traitement, et une valeur BCD est généralement d'abord convertie en supprimant la séparation en quartets, pour alors représenter en binaire les deux chiffres décimaux sur le même octet ; le calcul est alors simplifié car il s'effectue par groupe de deux chiffres à la fois au lieu d'un seul ; cette représentation laisse un bit de poids fort inutilisé (mais on peut l'utiliser comme marqueur pour des valeurs spéciales) ;
  • on peut représenter exactement quatre chiffres décimaux dans un groupe de deux octets (c'est-à-dire sur 16 bits, puisque ceux-ci peuvent contenir 216 = 65 536 valeurs différentes) ; avec une représentation BCD, on stockerait exactement également quatre chiffres décimaux, mais les calculs se feraient uniquement chiffre par chiffre (c'est-à-dire quatre fois plus lentement) ; cette représentation laisse deux bits de poids fort inutilisés (mais on peut les utiliser comme marqueurs pour des valeurs spéciales).
  • on peut représenter exactement sept chiffres décimaux dans un groupe de trois octets (c'est-à-dire sur 24 bits, puisque ceux-ci peuvent contenir 224 = 16 777 216 valeurs différentes) ; avec une représentation BCD, on ne stockerait exactement que six chiffres décimaux ; cette représentation ne laisse aucun bit inutilisé ;
  • on peut représenter exactement neuf chiffres décimaux dans un groupe de quatre octets (c'est-à-dire sur 32 bits, puisque ceux-ci peuvent contenir 232 = 4 294 967 296 valeurs différentes) ; avec une représentation BCD, on ne stockerait exactement que huit chiffres décimaux ; cette représentation laisse deux bits de poids fort inutilisés (mais on peut les utiliser comme marqueurs pour des valeurs spéciales). Cette représentation est souvent utilisée dans les bibliothèques mathématiques de calcul sur des nombres de très grande précision.

Les processeurs n'opèrent généralement pas sur chaque bit individuellement, mais sur des groupes de bits. L'habitude de concevoir le matériel pour qu'il traite les bits par huit, ou par multiples de huit, s'est généralisée depuis les années 1970, si bien qu'aujourd'hui l'octet et ses multiples sont généralement utilisés comme mesure de la capacité de mémorisation des mémoires informatiques : mémoire vive, disquette, disque dur, CD-ROMetc. La taille des fichiers est aussi mesurée en octets (avec le plus souvent les multiples conventionnels en binaire).

Le taux de transfert des bus informatiques entre les applications informatiques et périphériques informatiques locaux est généralement donné en octets par seconde (avec les multiples normalisés ; voir ci-après). Mais les débits sur les réseaux ou supports de transmission de données s'expriment plutôt :

  • en bauds (avec les multiples normalisés) c'est-à-dire le nombre de symboles codés par seconde, pour les technologies matérielles de modulation de très bas niveau, par exemple dans les modems, ces technologies séparant la fréquence d'échantillonnage en bauds (fortement liée à la bande passante physique exprimée en hertz) de la précision d'échantillonnage exprimée en bits par symbole (fortement liée au rapport signal/bruit du support de transmission exprimé en décibels ou en bits[réf. nécessaire]) ;
  • en bits par seconde (avec les multiples normalisés) pour le débit binaire final utilisable, résultant du produit du débit en bauds par le nombre de bits transmis par symbole, diminué éventuellement des bits de détection ou correction d'erreurs ou de synchronisation.

Bits et octets

modifier

Exemples de conversion des bits vers octets (sans normalisation CEI) :

  • 8 bits = 1 octet
  • 1 kilobit = 1 000 bits = 125 octets
  • 1 kibibit = 1 024 bits = 128 octets
  • 512 kibibits = 524 288 bits = 65 536 octets = 64 kibioctets (65 536 / 1 024 kibioctets).
  • 1 mébibit = 1 048 576 bits = 131 072 octets = 128 kibioctets (131 072 / 1 024 kibioctets).
  • 10 mébibits = 10 485 760 bits = 1 310 720 octets = 1,25 mébioctet (1 310 720 / 1 0242 mébioctet)
  • 100 mébibits = 104 857 600 bits = 13 107 200 octets = 12,5 mébioctets (13 107 200 / 1 0242 mébioctet)

Lorsque le traitement se fait sur plusieurs octets simultanément, notamment deux octets (16 bits) et quatre octets (32 bits), on parle parfois de mot et de double-mot, ou bien de demi-mot et de mot. La signification de ces termes a tendance à varier avec le contexte, notamment car en terminologie des langages d'assemblage pour processeurs, le « mot » désigne souvent la quantité d'information dans un registre de calcul entier pour une opération élémentaire, cette quantité pouvant aussi dépendre du mode d'adressage utilisé par le processeur à l'exécution (ou des traditions de programmation pour un système d'exploitation donné), aussi n'est-il pas recommandé de les utiliser.

Les termes « doublet » (16 bits), « quadlet » (32 bits) et « octlet » (64 bits) sont parfois utilisés alors pour enlever toute ambiguïté[réf. nécessaire].

Notes et références

modifier
  1. Voir l'entrée « mésusage » sur le Wiktionnaire.
  2. Voir l'article sur les préfixes binaires
  3. Voir aussi l'article Système binaire.

Références

modifier
  1. a b et c Informations lexicographiques et étymologiques de « Octet » (sens B) dans le Trésor de la langue française informatisé, sur le site du Centre national de ressources textuelles et lexicales.
  2. [1], LeRobert, Dico en ligne, définition de kilo-octet (ou kilooctet)
  3. [2], Grand dictionnaire terminologique (Office québécois de la langue française), définition de kilo-octet.
  4. [3], Encyclopédie Larousse, définition d'octet
  5. [4], support de cours de l'Université Paris-Sorbonne
  6. Byte, catb.org, Werner Buchholz et le terme byte.
  7. AFNOR : Dictionnaire du multimédia – Audiovisuel, informatique, télécommunications, 1996, p. 135.
  8. (en) « Transmission control protocol - DARPA Internet program - Protocol specifications », Request for comments no 793,
  9. Versions de cette page en allemand, espagnol, japonais, italien, japonais
  10. « Le binaire, pourquoi faire ! », sur le site de-bric-et-de-broc.
  11. Bureau international des poids et mesures, Le Système international d'unités (SI), Sèvres, BIPM, , 9e éd., 216 p. (ISBN 978-92-822-2272-0, lire en ligne [PDF]), chap. 3 (« Multiples et sous-multiples décimaux des unités SI »), p. 31.
  12. « IEC 60027-2:1972/AMD2:1999 | IEC Webstore », sur webstore.iec.ch (consulté le )
  13. Voir texteBinary prefix: Legal disputes (en).
  14. « Liste des symboles », Les sigles, abréviations et symboles - Liste des symboles, sur Banque de dépannage linguistique, Office québécois de la langue française (consulté le ).

Voir aussi

modifier
Unités d'octets  v · d · m 
Ordre de
grandeur
Système
international
(SI)
Préfixes
binaires
Unité Notation Valeur Unité Notation Valeur
1 octet o 1 octet octet o 1 octet
103 kilooctet ko 103 octets kibioctet Kio 210 octets
106 mégaoctet Mo 106 octets mébioctet Mio 220 octets
109 gigaoctet Go 109 octets gibioctet Gio 230 octets
1012 téraoctet To 1012 octets tébioctet Tio 240 octets
1015 pétaoctet Po 1015 octets pébioctet Pio 250 octets
1018 exaoctet Eo 1018 octets exbioctet Eio 260 octets
1021 zettaoctet Zo 1021 octets zébioctet Zio 270 octets
1024 yottaoctet Yo 1024 octets yobioctet Yio 280 octets

Articles connexes

modifier