Qual è la storia del perché i byte sono otto bit?


86

Che cosa dove le forze storiche al lavoro, i compromessi da fare, nel decidere di utilizzare gruppi di otto bit come unità fondamentale?

C'erano macchine, una volta, che utilizzavano parole di altre dimensioni, ma oggi per i non-otto-testimoni devi cercare pezzi da museo, chip specializzati per applicazioni integrate e DSP. Come si è evoluto il byte dal caos e dalla creatività dei primi tempi della progettazione del computer?

Posso immaginare che un minor numero di bit sarebbe inefficace per la gestione di dati sufficienti a rendere fattibile il calcolo, mentre troppi avrebbero portato a hardware costoso. C'erano altre influenze in gioco? Perché queste forze si sono bilanciate a otto bit?

(A proposito, se potessi viaggiare nel tempo, tornerei a quando il "byte" è stato dichiarato di 8 bit, e convincerei tutti a farlo a 12 bit, corrompendoli con alcuni gingilli dei primi del 21 ° secolo.)


7
Questa potrebbe essere una di quelle domande a cui non possiamo rispondere meglio della buona vecchia Wikipedia .
Scott Whitlock,

10
Quindi perché preferirei 12 bit a 8?
FrustratedWithFormsDesigner

8
L'ultima frase è per scherzo? Un byte a 12 bit sarebbe scomodo perché non è una potenza di 2.
Rob

19
La memoria e i registri non erano così economici allora, quindi 8 bit era un buon compromesso, rispetto a 6 o 9 (frazioni di una parola di 36 bit). Inoltre, i calcoli degli indirizzi sono molto più semplici con potenze di 2, e questo conta quando stai realizzando la logica con transistor grezzi in piccole lattine.
Mike Dunlavey,

9
L'uso di dimensioni di parole che erano potenze di 2 non era così importante nei "primi giorni". Il DEC-10 aveva una parola di 36 bit e la serie CDC 6000 aveva parole di 60 bit e registri di indice con 18 bit.
Jay Elston,

Risposte:


75

Sono stati fatti molti primi lavori con i codici baudot a 5 bit, ma quelli sono diventati rapidamente piuttosto limitanti (solo 32 caratteri possibili, quindi sostanzialmente solo lettere maiuscole e alcuni segni di punteggiatura, ma non abbastanza spazio per le cifre) .

Da lì, alcune macchine sono passate ai personaggi a 6 bit. Questo era ancora abbastanza inadeguato - se volevi lettere e cifre maiuscole e minuscole (inglesi), che lasciavano solo altri due caratteri per la punteggiatura, quindi la maggior parte aveva ancora un solo caso di lettere in un set di caratteri.

ASCII ha definito un set di caratteri a 7 bit. Questo è stato "abbastanza buono" per molti usi per molto tempo e ha costituito anche la base della maggior parte dei set di caratteri più recenti (ISO 646, ISO 8859, Unicode, ISO 10646, ecc.)

I computer binari motivano i progettisti a creare potenze di due dimensioni. Dato che il set di caratteri "standard" ha richiesto comunque 7 bit, non è stato un grande sforzo aggiungere un altro bit per ottenere una potenza di 2 (e da allora, lo spazio di archiviazione stava diventando abbastanza più economico che "sprecare" un po 'per la maggior parte dei personaggi era anche più accettabile).

Da allora, i set di caratteri sono passati a 16 e 32 bit, ma la maggior parte dei computer tradizionali si basa in gran parte sul PC IBM originale. Ancora una volta, abbastanza del mercato è sufficientemente soddisfatto dei caratteri a 8 bit che, anche se il PC non fosse arrivato al suo attuale livello di dominio, non sono sicuro che tutti farebbero comunque tutto con caratteri più grandi.

Vorrei anche aggiungere che il mercato è cambiato un po '. Nel mercato attuale, la dimensione del carattere è definita meno dall'hardware che dal software. Windows, Java, ecc., Sono passati a caratteri a 16 bit molto tempo fa.

Ora, l'impedimento nel supportare caratteri a 16 o 32 bit è solo minimamente dalle difficoltà inerenti ai caratteri a 16 o 32 bit stessi, e in gran parte dalla difficoltà di supportare i18n in generale. In ASCII (ad esempio) rilevare se una lettera è maiuscola o minuscola o convertire tra le due è incredibilmente banale. In pieno Unicode / ISO 10646, è fondamentalmente indescrivibilmente complesso (al punto che gli standard non provano nemmeno: danno tabelle, non descrizioni). Quindi aggiungi il fatto che per alcune lingue / set di caratteri, anche l' idea di base del maiuscolo / minuscolo non si applica. Quindi aggiungi il fatto che anche mostrare i personaggi in alcuni di questi è ancora molto più complesso.

È tutto sufficientemente complesso che la stragrande maggioranza dei software non ci prova nemmeno. La situazione sta lentamente migliorando, ma lentamente è la parola chiave.


9
Ho pensato di leggere qualcosa in cui 8 proveniva dall'ASCII a 7 bit più un bit di convalida che era necessario perché i protocolli di trasmissione quasi non erano così privi di perdite come volevano i progettisti :-).
Martin York,

3
@LokiAstari, Sì, si chiama bit di parità e può essere utilizzato per forme grezze di rilevamento o recupero degli errori. Wikipedia: Parity bit
un CVn

2
Non sono sicuro di cosa abbia a che fare il PC IBM con questo. "8 bit per byte" era già standard nell'era CP / M (<1980), che iniziò con la CPU 8080 (un predecessore dell'era
8086/8

1
@MSalters: in primo luogo, ha (senza dubbio) "bloccato" l'evoluzione dell'hardware. No, 8 bit / byte non erano nuovi con il PC, ma fino ad allora la maggior parte delle architetture veniva sostituita ogni pochi anni. Il PC lo ha in gran parte fermato e ha adottato un'architettura che non era nemmeno particolarmente progressiva quando era nuovo e l'ha conservata per decenni .
Jerry Coffin,

2
I set di caratteri correnti non sono 16 o 32 bit, né Java e Windows lo usano. Il set di caratteri corrente è Unicode, che richiede 21 bit per mappare direttamente. Il software attuale utilizza codifiche basate su 8 (UTF-8), 16 (UTF-16) o 32 (UTF-32) unità di codice bit, combinando più unità di codice per formare un singolo punto di codice dove necessario, ma quelle dimensioni dei bit sono una conseguenza dell'hardware, non del set di caratteri.
Sebastian Redl,

10

Sette bit per le informazioni ASCII e uno per la parità di rilevamento degli errori.


27
7 bit per ASCII e un bit in più che è stato usato per ogni sorta di cose
Martin Beckett,

1
La parità era molto importante quando si trattava di memoria precoce. Anche dopo essere passati a byte di dati a 8 bit, c'erano chip di memoria con 9 bit per consentire il controllo di parità.
Jim C,

1
Questa è un'affermazione interessante. Esistono dati storici a supporto dell'idea?
David,

6

Dai un'occhiata alla pagina di Wikipedia sull'architettura a 8 bit . Sebbene i set di caratteri avrebbero potuto essere 5-, 6-, quindi 7 bit, l'architettura CPU / memoria bus sottostante utilizzava sempre potenze di 2. Il primo microprocessore (intorno agli anni '70) aveva un bus a 4 bit, il che significa che un'istruzione poteva spostare 4- bit di dati tra memoria esterna e CPU.

Quindi, con il rilascio del processore 8080, l'architettura a 8 bit è diventata popolare ed è ciò che ha dato inizio al set di istruzioni di assemblaggio x86 che viene utilizzato anche ai giorni nostri. Se avessi dovuto indovinare, byte proveniva da questi primi processori in cui il pubblico tradizionale ha iniziato ad accettare e giocare con PC e 8 bit era considerato la dimensione standard di una singola unità di dati.

Da allora la dimensione del bus è raddoppiata, ma è rimasta sempre una potenza di 2 (ovvero 16, 32 e ora 64 bit) In realtà, sono sicuro che gli interni del bus di oggi sono molto più complicati dei semplici 64 fili paralleli, ma l'attuale architettura della CPU tradizionale è a 64 bit.

Suppongo che raddoppiando sempre (invece di aumentare del 50%) è stato più semplice creare un nuovo hardware che coesista con le applicazioni esistenti e altri componenti legacy. Quindi, ad esempio, quando sono passati da 8 bit a 16, ogni istruzione ora può spostare 2 byte anziché 1, quindi ti salvi un ciclo di clock ma il risultato finale è lo stesso. Tuttavia, se passassi da un'architettura da 8 a 12 bit, finiresti per suddividere i dati originali a metà e gestirli potrebbe diventare fastidioso. Queste sono solo ipotesi, non sono davvero un esperto di hardware.


5
"La prima CPU (intorno agli anni '70) ..." . Devi leggere qualcosa sulla storia dell'informatica !! La prima CPU per un computer con architettura von Neumann è stata costruita durante la seconda guerra mondiale ... o prima (a seconda della versione della storia in cui credi).
Stephen C,

e c'erano dispositivi informatici nel 19 ° secolo e sono sicuro che gli egiziani avevano una sorta di pot calcolatrice. Quelle informazioni provenivano dalla pagina di Wikipedia che ho collegato. Come ho detto, non sono un esperto di hardware e certamente non sono uno storico, ma se ritieni che io sia così lontano, potresti voler aggiornare quella pagina di Wikipedia.
DXM,

Immagino che sarebbe d'aiuto se non avessi rovinato il collegamento mentre stavo entrando. Mi scuso anche per aver detto "prima CPU". Dato che stavo citando la pagina wiki, avrei dovuto dire "primo microprocessore". Ecco cosa intendevo. Mi dispiace per quello.
DXM,

Una soluzione al computer "pre-elettrone" è quella di dire un computer moderno o suppongo che il computer elettronico. Ancora oggi potresti costruire un computer meccanico. Non è stato fino a quando non abbiamo iniziato a utilizzare i campi di elettroni a nostro vantaggio, se abbiamo costruito un microprocessore.
Ramhound,

Il byte a 8 bit e la dimensione delle parole a 16 bit utilizzati dalla serie PDP possono anche aver contribuito alla popolarità dei byte a 8 bit.
Jay Elston,

4

Un byte è stato variamente (almeno) 1, 4, 6, 7, 8, 9, 12, 18, 20 e forse 36 bit, a seconda del computer che stai guardando. Sto prendendo "byte" qui per indicare "la più piccola unità di memoria indirizzabile", piuttosto che usare qualsiasi tipo di interpretazione incentrata sul testo. (Ad esempio, la CPU Saturn, una CPU a 64 bit utilizzata nella popolare linea di calcolatrice HP48SX / GX, indirizza la memoria in nibble - 4 bit.)

I byte a 20 bit erano estremamente comuni nelle "macchine IAS", negli anni '50. 6, 12, 18 (e forse 36) erano piuttosto popolari in una varietà di architetture negli anni '60, '70 e in qualche modo degli anni '80.

Alla fine, avere una bella corrispondenza tra "potenze di 2" e "bit in un'unità indirizzabile" sembra aver vinto.


E mai 10 bit? Tutto quello che ho potuto trovare con Google è che alcuni processori video recenti sono 10 bit.
rslnx,

@khrf È possibile, non riesco proprio a ricordare nessuna architettura che lo possedesse (ho considerato principalmente computer di uso generale).
Vatine,

Sì, considero anche i computer di uso generale. È strano perché immagino quanto sarebbe bello con 10-byte-byte sapere che puoi indirizzare 1 kilobyte con 1 byte, 1 megabyte con 2 byte, ecc. Naturalmente, è solo un capriccio sul comfort :)
rslnx

2

Prima un po 'di chiarimenti: gli ottetti (unità a 8 bit) non sono in realtà un'unità fondamentale nelle architetture informatiche moderne. Almeno non più fondamentale di altre potenze di due: 2, 4, 16, 32, 64, 128 ecc. Gli ottetti erano l'unità fondamentale per i processori a 8 bit (da cui il nome!), Ma le architetture moderne in genere funzionano con bit più grandi -set internamente. Ad esempio, x86_64 ha registri interi a 64 bit e registri a virgola mobile a 80 bit. La RAM viene letta e scritta in blocchi a 64 bit e il processore usa solo un po 'di magia per far sembrare che tu possa indirizzare singoli byte a 8 bit.

Per le architetture più vecchie, "byte" indicava la dimensione del bus dati e, come afferma la domanda originale, esistevano molte dimensioni bus diverse (4, 5, 6, 8, 12 ecc.). Ma dal 1993 un byte è stato definito come 8 bit, al fine di avere un'unità SI standardizzata per le dimensioni dei dati. Quindi il significato di "byte" è cambiato da unità dipendente dall'architettura a unità standardizzata indipendente dall'architettura.

Quindi in questi giorni i byte sono l'unità standard per l'indirizzamento e la quantificazione dei dati, ma per il resto non sono fondamentali.

L'unità Octets è diventata lo standard di fatto per l'archiviazione principalmente a causa delle preoccupazioni sulla memorizzazione del testo. Per la memorizzazione di testo, idealmente si desidera che un byte memorizzi un carattere. Due fattori erano importanti:

  • Avere unità che hanno un potere di due (2, 4, 8, 16, 32 ecc.) È più conveniente quando si progettano sistemi digitali.
  • 8 bit è sufficiente per memorizzare un singolo carattere nel set di caratteri ASCII (con spazio libero per estendere il set di caratteri per supportare diciamo cirillico).

Naturalmente 8 bit non sono sufficienti per supportare tutti gli script - qualcosa come il giapponese richiede almeno 16 bit (e per quello che vale, Unicode è 21 bit), ma a quel punto i bit erano costosi e la maggior parte del testo digitale era in la gamma ASCII comunque.

In questi giorni, il testo è in genere memorizzato in codifiche a larghezza variabile come UTF-8 e con cose come Unicode che combina caratteri, il "un byte equivale a un carattere" è stato a lungo un ricordo del passato. Oggi byte è davvero solo lo standard per motivi storici.


1

Secondo le mie informazioni, il byte word stesso era derivato dalla frase by-eight che era di otto (8) bit. la convenienza che troviamo in parole di 8 bit è la conversione in valori esadecimali poiché il valore 00000000 = 00 e 11111111 = FF (255 dicembre per non firmato e -127 per firmato) è facile eseguire tutte le operazioni aritmetiche su tale struttura incluso bit-saggio operazioni.

Vedo byte (parole a 8 bit) come una naturale evoluzione delle dimensioni delle parole da 3 bit catastroficamente piccoli a parole ridicolmente grandi a 60 bit


Mi piacerebbe vedere un riferimento per questo. Ne dubito seriamente. Soprattutto perché la parola "byte", usata nello standard C e incorporata nello standard C ++, non significa "8 bit". Una quantità di 8 bit è un ottetto.
gnasher729,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.