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

86

Qu'est-ce que les forces historiques à l'œuvre, les compromis à faire, en décidant d'utiliser des groupes de huit bits comme unité fondamentale?

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

J'imagine que moins de bits serait inefficace pour traiter suffisamment de données pour rendre l'informatique possible, alors qu'un trop grand nombre aurait conduit à un matériel coûteux. Y a-t-il eu d'autres influences en jeu? Pourquoi ces forces se sont-elles équilibrées jusqu'à huit bits?

(En passant, si je pouvais voyager dans le temps, je reviendrais au moment où le "octet" aurait été déclaré comme étant de 8 bits et je convaincrais tout le monde de le faire en 12 bits, en les corrompant avec des babioles du début du 21ème siècle.)

DarenW
la source
7
C’est peut-être une de ces questions à laquelle nous ne pouvons pas mieux répondre que le bon vieux Wikipedia .
Scott Whitlock
10
Alors, pourquoi préféreriez-vous 12 bits à 8?
FrustratedWithFormsDesigner
8
La dernière phrase est-elle en plaisanterie? Un octet de 12 bits serait peu pratique car ce n'est pas une puissance de 2.
Rob
19
La mémoire et les registres n'étaient pas si bon marché à l'époque, alors 8 bits était un bon compromis, comparé à 6 ou 9 (fractions d'un mot de 36 bits). En outre, les calculs d'adresse sont beaucoup plus simples avec des puissances de 2 et cela compte lorsque vous créez de la logique à partir de transistors bruts dans de petites boîtes.
Mike Dunlavey
9
Utiliser des tailles de mot qui étaient des puissances de 2 n'était pas si important dans les "premiers jours". Le DEC-10 avait un mot de 36 bits et la série CDC 6000 avait des mots de 60 bits et des registres d'index de 18 bits.
Jay Elston

Réponses:

75

Beaucoup de travail très tôt a été fait avec des codes baudot 5 bits, mais ceux-ci sont rapidement devenus assez contraignants (seulement 32 caractères possibles, donc essentiellement des lettres majuscules et quelques signes de ponctuation, mais pas assez d'espace pour les chiffres) .

De là, plusieurs machines sont passées aux caractères 6 bits. Cela restait cependant assez insuffisant - si vous vouliez des lettres et des chiffres en majuscules et minuscules (anglais), il ne restait plus que deux caractères pour la ponctuation, de sorte que la plupart n'avaient encore qu'un seul cas de lettres dans un jeu de caractères.

ASCII définit un jeu de caractères 7 bits. Cela a été "assez bon" pour de nombreuses utilisations pendant longtemps et a également été à 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 tailles de deux. Comme le jeu de caractères "standard" nécessitait de toute façon 7 bits, ajouter un bit de plus pour obtenir une puissance de 2 n'était pas vraiment compliqué (et à ce moment-là, le stockage devenait suffisamment moins cher que "gaspiller" un peu pour la plupart des personnages était plus acceptable aussi).

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

Je devrais aussi ajouter que le marché a pas mal 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., sont passés depuis longtemps aux caractères 16 bits.

Or, la difficulté à prendre en charge les caractères 16 ou 32 bits n’est que très peu liée 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 l’impression en général. En ASCII (par exemple), détecter si une lettre est en majuscule ou en minuscule, ou effectuer une conversion entre les deux, est extrêmement simple. En plein Unicode / ISO 10646, la complexité est indescriptible (au point que les normes n'essayent même pas - elles donnent des tableaux, pas des descriptions). Ensuite, vous ajoutez le fait que pour certaines langues / jeux de caractères, même l’ idée de base des majuscules / minuscules ne s’applique pas. Vous ajoutez ensuite le fait que même afficher des caractères dans certains d’entre eux est beaucoup plus complexe encore.

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

Jerry Coffin
la source
9
Je pensais avoir lu quelque part 8 l'ASCII 7 bits plus un bit de validation nécessaire, car les protocoles de transmission presque ne présentaient pas autant de pertes que les concepteurs le souhaitaient :-).
Martin York
3
@ LokiAstari, oui, on l'appelle un bit de parité et on peut l'utiliser pour des formes brutes de détection d'erreur ou de récupération. Wikipedia: Bit de parité
un CVn
2
Pas sûr de ce que le PC IBM a à voir avec cela. "8 bits par octet" était déjà standard dans l'ère CP / M (<1980), qui a débuté sur le processeur 8080 (un prédécesseur de l'ère 8086/8 de l'ère IBM)
MSalters
1
@MSalters: principalement qu'il a (sans doute) "retardé" l'évolution du matériel. Non, 8 bits / octet n'était pas nouveau avec le PC, mais jusque-là, la plupart des architectures étaient remplacées tous les deux ou trois ans. Le PC l'a en grande partie arrêté et a adopté une architecture qui n'était même pas particulièrement progressive lorsqu'il était nouveau, et l'a préservée pendant des décennies .
Jerry Coffin
2
Les jeux de caractères actuels ne sont pas 16 ou 32 bits, et Java et Windows ne les utilisent pas non plus. Le jeu de caractères actuel est Unicode, qui nécessite 21 bits pour être directement mappé. Le logiciel actuel utilise des codages basés sur des unités de code de 8 (UTF-8), 16 (UTF-16) ou 32 (UTF-32), combinant plusieurs unités de code pour former un point de code unique si nécessaire, mais ces tailles de bits sont une conséquence du matériel, pas du jeu de caractères.
Sebastian Redl
10

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

DeadMG
la source
27
7 bits pour ASCII et un bit supplémentaire qui a été utilisé pour toutes sortes de choses
Martin Beckett
1
La parité était très importante pour la mémoire précoce. Même après le passage à des octets de données de 8 bits, il existait des puces de mémoire à 9 bits pour permettre la vérification de la parité.
Jim C
1
C'est une affirmation intéressante. Existe-t-il des données historiques pour soutenir l'idée?
David
6

Jetez un coup d'œil à la page Wikipedia sur l'architecture 8 bits . Bien que les jeux de caractères puissent être constitués de 5, 6, puis 7 bits, l'architecture sous-jacente processeur / mémoire utilise toujours des puissances de 2. Le tout premier microprocesseur (autour des années 1970) possédait un bus à 4 bits, ce qui signifie qu'une instruction pouvait se déplacer de 4 à 4 secondes. bits de données entre la mémoire externe et la CPU.

Puis, avec la sortie du processeur 8080, l’architecture 8 bits est devenue populaire et c’est ce qui a donné les prémices du jeu d’instructions d’assemblage x86 qui est utilisé encore de nos jours. Si je devais deviner, ces octets venaient de ces premiers processeurs, où le grand public commençait à accepter et à jouer avec les PC et où 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). L'architecture actuelle du processeur principal est 64 bits.

Je suppose qu’en doublant toujours (au lieu de croître de 50%), il était plus facile de créer un nouveau matériel qui coexistait avec des applications existantes et d’autres composants existants. Ainsi, par exemple, lorsqu'elles passaient de 8 bits à 16 bits, chaque instruction pouvait désormais déplacer 2 octets au lieu de 1, de sorte que vous économisiez un cycle d'horloge, mais que le résultat final soit identique. Toutefois, si vous passiez d'une architecture 8 bits à 12 bits, vous finiriez par diviser les données d'origine en plusieurs parties et gérer cela pourrait devenir ennuyeux. Ce ne sont que des suppositions, je ne suis pas vraiment un expert en matériel.

DXM
la source
5
"Le tout premier processeur (autour des années 1970) ..." . Vous devez lire un peu sur l'histoire de l'informatique! Le tout premier processeur pour un ordinateur d'architecture von Neumann a été construit pendant la Seconde Guerre mondiale ... ou avant (selon la version de l'histoire que vous croyez.)
Stephen C
et il y avait des appareils informatiques au 19ème siècle et je suis sûr que les Egyptiens avaient une sorte de pot de calculatrice. Cette information provient de la page Wikipedia que j'ai liée. Comme je l'ai dit, je ne suis pas un expert en matériel informatique et je ne suis certainement pas un historien, mais si vous pensez que je suis si loin, vous voudrez peut-être aller mettre à jour cette page wikipedia.
DXM
Je suppose que cela aiderait si je ne fermais pas le lien en entrant. Je m'excuse également de dire "premier processeur". Depuis que je cite la page du wiki, j'aurais dû dire "premier microprocesseur". C'est ce que je voulais dire. Désolé pour ça.
DXM
Une solution à l'ordinateur "pré-électronique" est de dire ordinateur moderne ou je suppose l'ordinateur électronique. Même aujourd'hui, vous pouvez construire un ordinateur mécanique. Ce n'est que lorsque nous avons commencé à utiliser les champs d'électrons à notre avantage que nous avons construit un microprocesseur.
Ramhound
Les octets de 8 bits et la taille de mot de 16 bits utilisés par la série PDP peuvent également avoir joué un rôle dans la popularité des octets de 8 bits.
Jay Elston
4

Un octet a été varié (au moins) à 1, 4, 6, 7, 8, 9, 12, 18, 20 et éventuellement à 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 une sorte d'interprétation centrée sur le texte. (Par exemple, le processeur Saturn, un processeur 64 bits utilisé dans la ligne de calcul habituelle du calculateur HP48SX / GX, adresse la mémoire en octets - 4 bits.)

Les octets de 20 bits étaient extrêmement courants dans les "machines IAS" des années cinquante. 6, 12, 18 (et peut-être 36) étaient très populaires dans diverses architectures dans les années 60, 70 et jusqu'à un certain point 80.

Au final, une bonne correspondance entre "puissance de 2" et "bits dans une unité adressable" semble avoir triomphé.

Vatine
la source
Et jamais 10 bits? Tout ce que j'ai pu trouver avec Google, c'est que certains processeurs vidéo récents sont en 10 bits.
rslnx
@khrf C'est possible, je ne me souviens pas de l'architecture qui l'ait (je considérais principalement des ordinateurs polyvalents).
Vatine
Oui, je considère également les ordinateurs à usage général. C'est étrange parce que j'imagine que ce serait bien avec un octet de 10 bits de savoir que vous pouvez adresser 1 kilo-octet avec 1 octet, 1 mégaoctet avec 2 octets, etc. Bien sûr, c'est juste un caprice sur le confort :)
rslnx
2

Quelques précisions: les octets (unités de 8 bits) ne constituent pas vraiment une unité fondamentale dans les architectures informatiques modernes. Du moins pas plus fondamental que d'autres puissances à deux - 2, 4, 16, 32, 64, 128, etc. Les octets étaient l'unité fondamentale des processeurs 8 bits (d'où son 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 d'entiers de 64 bits et des registres de virgule flottante de 80 bits. La RAM est lue et écrite en morceaux de 64 bits, et le processeur utilise simplement 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'indiquait la question initiale, de nombreuses tailles de bus différentes existaient (4, 5, 6, 8, 12, etc.). Mais depuis 1993, un octet est défini sur 8 bits afin de disposer d’une unité SI normalisée pour la taille des données. Par conséquent, la signification du mot "octet" est passée d'une unité dépendante de l'architecture à une unité normalisée indépendante de l'architecture.

Ainsi, de nos jours, les octets constituent l'unité standard d'adressage et de quantification des données, mais ils ne sont pas vraiment fondamentaux autrement.

L'unité Octets est devenue la norme de facto pour le stockage, principalement en raison de préoccupations liées au stockage de texte. Pour stocker du texte, vous souhaitez idéalement qu'un octet stocke un caractère. Deux facteurs étaient importants:

  • Avoir des unités qui ont une puissance de deux (2, 4, 8, 16, 32, etc.) est plus pratique lors de la conception de systèmes numériques.
  • 8 bits suffisent pour stocker un seul caractère dans le jeu de caractères ASCII (avec suffisamment de place pour étendre le jeu de caractères à la prise en charge de Cyrillic, par exemple).

Bien sûr, 8 bits ne suffisent pas pour prendre en charge tous les scripts - quelque chose comme le japonais requiert au moins 16 bits (et pour ce que cela vaut, Unicode est de 21 bits), mais à ce moment-là, les bits étaient chers et la plupart des textes numériques la gamme ASCII quand même.

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

JacquesB
la source
1

Selon mes informations, le mot octet lui-même était dérivé de l'expression "huit", qui était composée de 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 & 11111111 = FF (255 déc pour non signé et -127 pour signé), il est facile de faire toutes les opérations arithmétiques sur une telle structure, y compris au niveau du bit opérations.

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

A.Rashad
la source
Je voudrais voir une référence pour cela. J'en doute sérieusement. D'autant que le mot "octet", tel qu'utilisé dans la norme C et incorporé dans la norme C ++, ne signifie pas "8 bits". Une quantité de 8 bits est un octet.
gnasher729