web-dev-qa-db-fra.com

Quelle est l'histoire de pourquoi les octets sont huit bits?

Où étaient les forces historiques à l'œuvre, les compromis à faire pour décider d'utiliser des groupes de huit bits comme unité fondamentale?

Il était une fois des machines utilisant d'autres tailles de mots, mais aujourd'hui, pour les non-huit bits, vous devez vous tourner vers des pièces de musée, des puces spécialisées pour les applications intégrées et des DSP. Comment l'octet est-il sorti du chaos et de la créativité des premiers jours de la conception informatique?

Je peux imaginer que moins de bits seraient inefficaces pour gérer suffisamment de données pour rendre le calcul possible, tandis que trop aurait conduit à un matériel coûteux. Y avait-il d'autres influences en jeu? Pourquoi ces forces se sont-elles équilibrées en huit bits?

(BTW, si je pouvais voyager dans le temps, je reviendrais au moment où "l'octet" était déclaré 8 bits, et convaincrais tout le monde de le faire 12 bits, en les soudoyant avec des babioles du début du 21e siècle.)

88
DarenW

Beaucoup de travaux très anciens ont été effectués avec des codes baudot 5 bits, mais ceux-ci sont rapidement devenus assez limitatifs (seulement 32 caractères possibles, donc essentiellement uniquement des lettres majuscules, et un pe signes de ponctuation, mais pas "espace" suffisant pour les chiffres).

De là, pas mal de machines sont passées aux caractères 6 bits. Cependant, cela était encore assez insuffisant - si vous vouliez des lettres et des chiffres en majuscules et en minuscules (anglais), qui ne laissaient que deux caractères de plus pour la ponctuation, la plupart n'avaient donc qu'une seule casse de lettres dans un jeu de caractères.

ASCII a défini un jeu de caractères 7 bits. C'était "assez bon" pour beaucoup d'utilisations pendant longtemps, et a également formé la base de la plupart des jeux de caractères les plus récents (ISO 646, ISO 8859, Unicode, ISO 10646, etc.)

Les ordinateurs binaires motivent les concepteurs à faire des puissances de taille de deux. Étant donné que le jeu de caractères "standard" nécessitait de toute façon 7 bits, il n'était pas très difficile d'ajouter un bit de plus pour obtenir une puissance de 2 (et à ce moment-là, le stockage devenait suffisamment moins cher que "gaspiller" un peu pour la plupart des caractères était également plus acceptable).

Depuis lors, les jeux de caractères sont passés à 16 et 32 ​​bits, mais la plupart des ordinateurs grand public sont largement basés sur le PC IBM d'origine. Là encore, une partie suffisante du marché est suffisamment satisfaite des caractères 8 bits que même si le PC n'avait pas atteint son niveau de domination actuel, je ne suis pas sûr que tout le monde ferait tout avec des caractères plus gros de toute façon.

Je dois également ajouter que le marché a beaucoup changé. Dans le marché actuel, la taille des caractères est moins définie par le matériel que par le logiciel. Windows, Java, etc., est passé depuis longtemps aux caractères 16 bits.

Désormais, le problème de la prise en charge des caractères 16 ou 32 bits n'est que très peu lié aux difficultés inhérentes aux caractères 16 ou 32 bits eux-mêmes, et en grande partie à la difficulté de prendre en charge i18n en général. Dans ASCII (par exemple), détecter si une lettre est en majuscule ou en minuscule, ou convertir entre les deux, est incroyablement trivial. En Unicode complet/ISO 10646, c'est fondamentalement indescriptiblement complexe (au point que les standards n'essaient même pas - ils donnent des tableaux, pas des descriptions). Ensuite, vous ajoutez le fait que pour certaines langues/jeux de caractères, même la base idée de majuscules/minuscules ne ' Vous ajoutez ensuite le fait que même afficher des caractères dans certains d’entre eux est encore beaucoup plus complexe.

Tout cela est suffisamment complexe pour que la grande majorité des logiciels n'essaye même pas. La situation s'améliore lentement, mais lentement est le mot opérationnel.

77
Jerry Coffin

Sept bits pour ASCII informations, et un pour la parité de détection d'erreur.

11
DeadMG

Jetez un oeil à page Wikipedia sur l'architecture 8 bits . Bien que les jeux de caractères aient pu être de 5, 6, puis 7 bits, l'architecture sous-jacente du bus CPU/mémoire utilisait toujours des puissances de 2. Le tout premier microprocesseur (vers les années 1970) avait un bus 4 bits, ce qui signifie qu'une instruction pouvait se déplacer 4 bits de données entre la mémoire externe et le CPU.

Puis, avec la sortie du processeur 8080, l'architecture 8 bits est devenue populaire et c'est ce qui a donné les débuts du jeu d'instructions d'assemblage x86 qui est utilisé même de nos jours. Si je devais deviner, l'octet provenait de ces premiers processeurs où le grand public commençait à accepter et à jouer avec des PC et 8 bits était considéré comme la taille standard d'une seule unité de données.

Depuis lors, la taille du bus a doublé, mais elle est toujours restée une puissance de 2 (c'est-à-dire 16, 32 et maintenant 64 bits). En fait, je suis sûr que les internes du bus d'aujourd'hui sont beaucoup plus compliqués que simplement 64 fils parallèles, mais l'architecture actuelle du processeur traditionnel est de 64 bits.

Je suppose qu'en doublant toujours (au lieu d'augmenter de 50%), il était plus facile de créer un nouveau matériel qui coexiste avec les applications existantes et d'autres composants hérités. Ainsi, par exemple, lorsqu'ils sont passés de 8 bits à 16, chaque instruction peut désormais déplacer 2 octets au lieu de 1, vous vous économisez donc un cycle d'horloge, mais le résultat final est le même. Cependant, si vous passiez d'une architecture 8 à 12 bits, vous finiriez par diviser les données originales en deux et gérer cela pourrait devenir ennuyeux. Ce ne sont que des suppositions, je ne suis pas vraiment un expert en matériel.

6
DXM

Un octet a été varié (au moins) 1, 4, 6, 7, 8, 9, 12, 18, 20 et peut-être 36 bits, selon l'ordinateur que vous regardez. Je prends ici "octet" pour signifier "la plus petite unité de mémoire adressable", plutôt que d'utiliser toute sorte d'interprétation textuelle. (Par exemple, le processeur Saturn, un processeur 64 bits utilisé dans la ligne de calculatrice HP48SX/GX populaire, traite la mémoire en quartets - 4 bits.)

Les octets de 20 bits étaient extrêmement courants dans les "machines IAS", dans les années 50. 6, 12, 18 (et peut-être 36) étaient très populaires dans diverses architectures dans les années 60, 70 et, dans une certaine mesure, les années 80.

Au final, avoir une belle correspondance entre "puissances de 2" et "bits dans une unité adressable" semble avoir gagné.

4
Vatine

Tout d'abord un éclaircissement: les octets (unités 8 bits) ne sont pas vraiment une unité fondamentale dans les architectures informatiques modernes. Au moins pas plus fondamental que les autres puissances de deux - 2, 4, 16, 32, 64, 128 etc. Les octets étaient l'unité fondamentale pour les processeurs 8 bits (d'où le nom!), Mais les architectures modernes fonctionnent généralement avec des bits plus gros -sets en interne. Par exemple. le x86_64 a des registres entiers 64 bits et des registres à virgule flottante 80 bits. RAM est lu et écrit en morceaux de 64 bits, et le processeur utilise juste un peu de magie pour donner l'impression que vous pouvez adresser des octets individuels de 8 bits.

Pour les architectures plus anciennes, "octet" indiquait la taille du bus de données, et comme l'indique la question d'origine, il existait de nombreuses tailles de bus différentes (4, 5, 6, 8, 12, etc.). Mais depuis 1993, un octet a été défini comme 8 bits, afin d'avoir une unité SI normalisée pour les tailles de données. Par conséquent, la signification de "octet" est passée d'une unité dépendante de l'architecture à une unité normalisée indépendante de l'architecture.

Donc, de nos jours, les octets sont l'unité standard pour l'adressage et la quantification des données, mais pas vraiment fondamental sinon.

L'unité d'octets est devenue la norme de facto pour le stockage principalement en raison de préoccupations concernant le stockage de texte. Pour stocker du texte, vous voulez idéalement un octet pour stocker un caractère. Deux facteurs étaient importants:

  • Avoir des unités de puissances de deux (2, 4, 8, 16, 32, etc.) est plus pratique lors de la conception de systèmes numériques.
  • 8 bits sont suffisants pour stocker un seul caractère dans le jeu de caractères ASCII (avec de la place pour épargner le jeu de caractères pour prendre en charge, par exemple, le cyrillique).

Bien sûr, 8 bits ne suffisent pas pour prendre en charge tous les scripts - quelque chose comme le japonais nécessite au moins 16 bits (et pour ce qu'il vaut, Unicode est 21 bits), mais à ce moment-là, les bits étaient chers et la plupart des textes numériques étaient en la plage ASCII de toute façon.

De nos jours, le texte est généralement stocké dans des encodages à largeur variable comme UTF-8, et avec des choses comme Unicode combinant des caractères, "un octet est égal à un caractère" fait depuis longtemps partie du passé. Aujourd'hui, l'octet n'est vraiment que la norme pour des raisons historiques.

2
JacquesB

Selon mes informations, l'octet Word lui-même était dérivé de l'expression by-huit qui était des mots de huit (8) bits. la commodité que nous trouvons dans les mots de 8 bits est la conversion en valeurs hexadécimales puisque la valeur 00000000 = 00 et 11111111 = FF (Dec 255 pour non signé et -127 pour signé), il est facile de faire toutes les opérations arithmétiques sur une telle structure, y compris bit par bit opérations.

Je vois les octets (mots de 8 bits) comme une évolution naturelle de la taille des mots, des mots de 3 bits extrêmement petits aux mots de 60 bits ridiculement gros

1
A.Rashad

n octet ne doit pas nécessairement être de 8 bits , mais il semble que C et C++ définissent un octet comme étant d'au moins 8 bits (bien qu'il puisse être plus). Cette question sur Stack Overflow mentionne quelques systèmes où 1 octet n'est pas 8 bits.

0
Thomas Owens