Was ist die Geschichte, warum Bytes acht Bits sind?

86

Was müssen die historischen Kräfte tun, um Kompromisse zu schließen, wenn sie sich entscheiden, Gruppen von acht Bits als Grundeinheit zu verwenden?

Früher gab es Maschinen, die andere Wortgrößen verwendeten, aber heute muss man sich wegen der Nicht-Acht-Bitigkeit mit Museumsstücken, speziellen Chips für eingebettete Anwendungen und DSPs befassen. Wie entstand das Byte aus dem Chaos und der Kreativität der frühen Tage des Computerdesigns?

Ich kann mir vorstellen, dass weniger Bits ineffektiv wären, um genügend Daten zu verarbeiten, um das Rechnen durchführbar zu machen, während zu viele zu teurer Hardware geführt hätten. Waren andere Einflüsse im Spiel? Warum haben sich diese Kräfte auf acht Bits ausgeglichen?

(Übrigens, wenn ich mit der Zeit reisen könnte, würde ich zu dem Zeitpunkt zurückkehren, als das "Byte" als 8 Bit deklariert wurde, und alle überzeugen, es auf 12 Bit zu bringen und sie mit einigen Schmuckstücken des frühen 21. Jahrhunderts zu bestechen.)

DarenW
quelle
7
Dies könnte eine der Fragen sein, bei denen wir sie nicht besser beantworten können als bei der guten alten Wikipedia .
Scott Whitlock
10
Warum bevorzugen Sie 12 Bit gegenüber 8?
FrustratedWithFormsDesigner
8
Ist der letzte Satz im Scherz? Ein 12-Bit-Byte wäre unpraktisch, da es keine Potenz von 2 ist.
Rob
19
Speicher und Register waren damals nicht so billig, also waren 8 Bits ein guter Kompromiss im Vergleich zu 6 oder 9 (Bruchteile eines 36-Bit-Wortes). Außerdem sind Adressberechnungen mit Potenzen von 2 um einiges einfacher, und das zählt, wenn Sie aus rohen Transistoren in kleinen Dosen Logik machen.
Mike Dunlavey
9
Die Verwendung von Wortgrößen mit Zweierpotenzen war in den "frühen Tagen" nicht so wichtig. Der DEC-10 hatte ein 36-Bit-Wort und die CDC 6000-Serie hatte 60-Bit-Wörter und Indexregister mit 18 Bit.
Jay Elston

Antworten:

75

Es wurde sehr früh mit 5-Bit-Baudot-Codes gearbeitet, aber diese wurden schnell ziemlich einschränkend (nur 32 mögliche Zeichen, also im Grunde nur Großbuchstaben und ein paar Satzzeichen, aber nicht genug "Platz" für Ziffern). .

Von dort gingen etliche Maschinen auf 6-Bit-Zeichen über. Dies war jedoch immer noch ziemlich unzureichend - wenn Sie Groß- und Kleinbuchstaben und Ziffern (Englisch) wollten, blieben nur zwei weitere Zeichen zur Interpunktion übrig, sodass die meisten nur noch einen Buchstaben in einem Zeichensatz hatten.

ASCII definiert einen 7-Bit-Zeichensatz. Das war lange Zeit "gut genug" für viele Anwendungen und hat auch die Grundlage für die meisten neueren Zeichensätze (ISO 646, ISO 8859, Unicode, ISO 10646 usw.) gebildet.

Binärcomputer motivieren Designer, Größenpotenzen von zwei zu erreichen. Da der "Standard" -Zeichensatz ohnehin 7 Bit benötigte, war es keine große Anstrengung, ein weiteres Bit hinzuzufügen, um eine Potenz von 2 zu erhalten (und zu diesem Zeitpunkt wurde der Speicherplatz billiger genug, um für die meisten Zeichen etwas "zu verschwenden" war auch akzeptabler).

Seitdem sind die Zeichensätze auf 16 und 32 Bit verschoben worden, aber die meisten gängigen Computer basieren größtenteils auf dem ursprünglichen IBM PC. Andererseits ist der Markt mit 8-Bit-Zeichen hinreichend zufrieden, so dass ich nicht sicher bin, ob jeder mit größeren Zeichen alles machen würde, auch wenn der PC nicht seine derzeitige Dominanz erreicht hätte.

Ich sollte auch hinzufügen, dass sich der Markt ziemlich verändert hat. Auf dem gegenwärtigen Markt wird die Zeichengröße weniger von der Hardware als von der Software bestimmt. Windows, Java usw. sind vor langer Zeit auf 16-Bit-Zeichen umgestiegen.

Das Hindernis bei der Unterstützung von 16- oder 32-Bit-Zeichen ist nur minimal auf die Schwierigkeiten zurückzuführen, die 16- oder 32-Bit-Zeichen selbst inhärent sind, und größtenteils auf die Schwierigkeit, i18n im Allgemeinen zu unterstützen. In ASCII (zum Beispiel) ist das Erkennen, ob ein Buchstabe in Groß- oder Kleinbuchstaben geschrieben ist, oder das Konvertieren zwischen den beiden unglaublich trivial. In vollem Unicode / ISO 10646 ist es im Grunde genommen unbeschreiblich komplex (bis zu dem Punkt, an dem die Standards es nicht einmal versuchen - sie geben Tabellen, keine Beschreibungen). Dann fügen Sie in der Tatsache , dass für einige Sprachen / Zeichensätze, auch die Grundidee von Groß- / Kleinschreibung nicht gilt. Hinzu kommt, dass das Anzeigen von Zeichen in einigen von ihnen noch viel komplexer ist.

Das ist alles so komplex, dass die überwiegende Mehrheit der Software es nicht einmal versucht. Die Situation verbessert sich langsam, aber langsam ist das operative Wort.

Jerry Sarg
quelle
9
Ich dachte, ich hätte irgendwo gelesen, dass 8 aus dem 7-Bit-ASCII plus einem Validierungsbit stammte, das benötigt wurde, weil die fast Übertragungsprotokolle nicht so verlustfrei waren, wie die Designer es wollten :-).
Martin York
3
@LokiAstari, Ja, es wird als Paritätsbit bezeichnet und kann für grobe Formen der Fehlererkennung oder -behebung verwendet werden. Wikipedia: Paritätsbit
ein CVn
2
Nicht sicher, was der IBM PC damit zu tun hat. "8 Bit pro Byte" war bereits in der CP / M-Ära (<1980) Standard, die auf der 8080-CPU (einem Vorgänger der 8086/8 der IBM PC-Ära) begann
MSalters
1
@MSalters: In erster Linie, dass es (wohl) die Evolution der Hardware "gebremst" hat. Nein, 8-Bit / Byte war mit dem PC nicht neu , aber bis dahin wurden die meisten Architekturen alle paar Jahre ausgetauscht. Der PC hat das weitgehend gestoppt und eine Architektur übernommen, die im Neuzustand noch nicht einmal besonders fortschrittlich war, und sie jahrzehntelang bewahrt .
Jerry Coffin
2
Aktuelle Zeichensätze sind weder 16 oder 32 Bit, noch verwenden Java und Windows solche. Der aktuelle Zeichensatz ist Unicode. Für die direkte Zuordnung sind 21 Bit erforderlich. Gegenwärtige Software verwendet Codierungen, die auf 8 (UTF-8), 16 (UTF-16) oder 32 (UTF-32) Bitcodeeinheiten basieren, wobei mehrere Codeeinheiten kombiniert werden, um einen einzelnen Codepunkt zu bilden, wenn dies erforderlich ist. Diese Bitgrößen sind jedoch eine Folge der Hardware, nicht des Zeichensatzes.
Sebastian Redl
10

Sieben Bits für ASCII-Informationen und eines für die Fehlererkennungsparität.

DeadMG
quelle
27
7 Bit für ASCII und ein zusätzliches Bit, das für alle möglichen Zwecke verwendet wurde
Martin Beckett,
1
Beim Umgang mit dem frühen Gedächtnis war Parität sehr wichtig. Selbst nach dem Verschieben auf 8-Bit-Datenbytes gab es Speicherchips mit 9 Bit, um die Paritätsprüfung zu ermöglichen.
Jim C
1
Dies ist eine interessante Behauptung. Gibt es historische Daten, die die Idee stützen?
David
6

Werfen Sie einen Blick auf die Wikipedia-Seite zur 8-Bit-Architektur . Obwohl die Zeichensätze 5-, 6- und dann 7-Bit sein konnten, verwendete die zugrunde liegende CPU / Speicher-Busarchitektur immer Potenzen von 2. Der allererste Mikroprozessor (um 1970) verfügte über einen 4-Bit-Bus, was bedeutet, dass ein Befehl 4-Bit verschieben konnte. Datenbits zwischen externem Speicher und der CPU.

Mit der Freigabe des 8080-Prozessors wurde die 8-Bit-Architektur populär und dies gab den Beginn des x86-Assembler-Befehlssatzes, der bis heute verwendet wird. Wenn ich raten musste, stammte das Byte von diesen frühen Prozessoren, bei denen das Mainstream-Publikum begann, PCs und 8-Bit-Dateien zu akzeptieren und damit zu spielen, was als Standardgröße für eine einzelne Dateneinheit angesehen wurde.

Seitdem hat sich die Busgröße verdoppelt, aber es blieb immer eine Potenz von 2 (dh 16-, 32- und jetzt 64-Bit). Eigentlich bin ich sicher, dass die Interna des heutigen Busses viel komplizierter sind als nur 64 parallele Drähte, aber Die aktuelle Mainstream-CPU-Architektur ist 64-Bit.

Ich würde davon ausgehen, dass es durch eine ständige Verdoppelung (statt einer Steigerung um 50%) einfacher war, neue Hardware zu entwickeln, die mit vorhandenen Anwendungen und anderen Legacy-Komponenten koexistiert. Wenn sie zum Beispiel von 8 auf 16 Bit gingen, konnte jeder Befehl jetzt 2 Bytes anstelle von 1 verschieben, sodass Sie sich einen Taktzyklus sparen, das Endergebnis jedoch dasselbe ist. Wenn Sie jedoch von einer 8- auf eine 12-Bit-Architektur wechseln, werden Sie die ursprünglichen Daten in zwei Hälften aufteilen und die Verwaltung könnte ärgerlich werden. Dies sind nur Vermutungen, ich bin nicht wirklich ein Hardware-Experte.

DXM
quelle
5
"Allererste CPU (um 1970er Jahre) ..." . Sie müssen etwas über die Geschichte des Rechnens lesen !! Die allererste CPU für einen von Neumann-Architekturcomputer wurde während des Zweiten Weltkriegs gebaut ... oder vorher (abhängig von der Version der Geschichte, die Sie glauben)
Stephen C
und es gab rechner im 19. jahrhundert und ich bin sicher, ägypter hatten eine art rechnertopf. Diese Informationen stammen von der Wikipedia-Seite, die ich verlinkt habe. Wie gesagt, ich bin kein Hardware-Experte und sicherlich kein Historiker, aber wenn Sie das Gefühl haben, dass ich so weit weg bin, sollten Sie diese Wikipedia-Seite aktualisieren.
DXM
Ich denke, es würde helfen, wenn ich den Link nicht vermasseln würde, als ich eintrat. Ich entschuldige mich auch dafür, dass ich "erste CPU" gesagt habe. Da ich die Wiki-Seite zitierte, hätte ich "erster Mikroprozessor" sagen sollen. Das ist es was ich meinte. Das tut mir leid.
DXM
Eine Lösung für den "Vorelektronen" -Computer ist der moderne Computer, oder ich nehme den Elektronencomputer an. Noch heute könnte man einen mechanischen Computer bauen. Erst als wir damit begannen, Elektronenfelder zu unserem Vorteil zu nutzen, bauten wir einen Mikroprozessor.
Ramhound
Das 8-Bit-Byte und die 16-Bit-Wortgröße, die von der PDP-Serie verwendet werden, haben möglicherweise auch die Popularität von 8-Bit-Bytes beeinflusst.
Jay Elston
4

Ein Byte besteht aus (mindestens) 1, 4, 6, 7, 8, 9, 12, 18, 20 und möglicherweise 36 Bits, je nachdem, welchen Computer Sie betrachten. Ich verstehe "Byte" hier als "kleinste adressierbare Speichereinheit", anstatt irgendeine Art von textzentrierter Interpretation zu verwenden. (Zum Beispiel die Saturn-CPU, eine 64-Bit-CPU, die in der beliebten HP48SX / GX-Rechnerzeile verwendet wird.)

Die 20-Bit-Bytes waren in den "IAS-Maschinen" in den 50er Jahren extrem verbreitet. 6, 12, 18 (und vielleicht 36) waren in den 60er, 70er und bis zu einem gewissen Grad 80er Jahren in einer Vielzahl von Architekturen sehr beliebt.

Am Ende scheint eine gute Entsprechung zwischen "Potenzen von 2" und "Bits in einer adressierbaren Einheit" gewonnen zu haben.

Vatine
quelle
Und niemals 10 Bits? Alles, was ich bei Google finden konnte, sind einige neuere Videoprozessoren mit 10 Bit.
RSLNX
@khrf Es ist möglich, dass ich mich an keine Architektur erinnern kann, die sie hatte (ich habe meistens Universalcomputer in Betracht gezogen).
Vatine
Ja, ich denke auch an Allzweckcomputer. Es ist seltsam , weil ich mich vorstellen , wie schön es mit 10-Bit-Byte sein würde , zu wissen , dass Sie 1 Kilobyte mit 1 Byte adressieren können, 1 Megabyte mit 2 Bytes, etc. Natürlich, es ist nur eine Laune auf Komfort :)
rslnx
2

Zunächst eine kleine Klarstellung: Oktette (8-Bit-Einheiten) sind in modernen Computerarchitekturen keine grundlegende Einheit. Zumindest nicht grundlegender als andere Potenzen von zwei - 2, 4, 16, 32, 64, 128 usw. Oktette waren die grundlegende Einheit für 8-Bit-Prozessoren (daher der Name!), Aber moderne Architekturen arbeiten normalerweise mit größerem Bit -sets intern. Beispielsweise hat der x86_64 64-Bit-Integer-Register und 80-Bit-Floating-Point-Register. RAM wird in 64-Bit-Blöcken gelesen und geschrieben, und der Prozessor verwendet nur ein bisschen Magie, damit es so aussieht, als ob Sie einzelne 8-Bit-Bytes adressieren können.

Für ältere Architekturen gab "Byte" die Größe des Datenbusses an, und wie die ursprüngliche Frage angibt, gab es viele verschiedene Busgrößen (4, 5, 6, 8, 12 usw.). Seit 1993 ist ein Byte jedoch als 8 Bit definiert , um eine standardisierte SI-Einheit für Datengrößen zu haben. Daher hat sich die Bedeutung von "Byte" von einer architekturabhängigen Einheit zu einer architekturunabhängigen standardisierten Einheit geändert.

Heutzutage sind Bytes die Standardeinheit für die Adressierung und Quantifizierung von Daten, ansonsten jedoch nicht wirklich grundlegend.

Octets-Einheit wurde zum De-facto-Standard für die Speicherung, vor allem aufgrund von Bedenken hinsichtlich der Speicherung von Text. Zum Speichern von Text möchten Sie im Idealfall, dass ein Byte ein Zeichen speichert. Zwei Faktoren waren wichtig:

  • Es ist bequemer, Einheiten mit Zweierpotenzen (2, 4, 8, 16, 32 usw.) zu haben, wenn Sie digitale Systeme entwerfen.
  • 8-Bit reicht aus, um ein einzelnes Zeichen im ASCII-Zeichensatz zu speichern (mit ausreichend Platz für die Erweiterung des Zeichensatzes, um beispielsweise Kyrillisch zu unterstützen).

Natürlich reichen 8-Bit nicht aus, um alle Skripte zu unterstützen - so etwas wie Japanisch erfordert mindestens 16 Bit (und was es wert ist, Unicode ist 21 Bit), aber zu diesem Zeitpunkt waren Bits teuer und die meisten digitalen Texte in der ASCII-Bereich sowieso.

Heutzutage wird Text in der Regel in Codierungen mit variabler Breite wie UTF-8 gespeichert, und mit Unicode-Zeichenkombinationen gehört das "Ein Byte entspricht einem Zeichen" längst der Vergangenheit an. Das heutige Byte ist aus historischen Gründen eigentlich nur der Standard.

JacquesB
quelle
1

Nach meinen Informationen wurde das Wort Byte selbst aus der Phrase by-eight abgeleitet, die aus acht (8) Bit-Wörtern bestand. Die Bequemlichkeit, die wir in 8-Bit-Wörtern finden, ist die Umwandlung in hexadezimale Werte, da der Wert 00000000 = 00 & 11111111 = FF (Dez 255 für vorzeichenlose und -127 für vorzeichenlose) es einfach ist, alle arithmetischen Operationen an einer solchen Struktur, einschließlich bitweise, durchzuführen Operationen.

Ich sehe Bytes (8-Bit-Wörter) als eine natürliche Entwicklung der Wortgrößen von katastrophal kleinen 3-Bit-Wörtern bis zu lächerlich großen 60-Bit-Wörtern

A.Rashad
quelle
Ich würde gerne eine Referenz dafür sehen. Ich bezweifle es ernsthaft. Zumal das Wort "Byte", wie es im C-Standard verwendet und im C ++ - Standard enthalten ist, nicht "8-Bit" bedeutet. Eine 8-Bit-Menge ist ein Oktett.
gnasher729
0

Ein Byte muss nicht aus 8 Bits bestehen , aber anscheinend definieren C und C ++ ein Byte als mindestens 8 Bits (obwohl es auch mehr sein könnte). In dieser Frage zum Stapelüberlauf werden einige Systeme erwähnt, bei denen 1 Byte nicht 8 Bit ist.

Thomas Owens
quelle
C ++ oder der Compiler ?
Babiker
@Babiker: C ++. Der Compiler wird eine genaue Definition haben. ( CHAR_BITSMakro)
MSalters