Qual é a história de por que bytes são oito bits?

86

Onde estão as forças históricas em ação, as compensações a serem tomadas, ao decidir usar grupos de oito bits como unidade fundamental?

Havia máquinas, uma vez, usando outros tamanhos de palavras, mas hoje, para quem não tem oito anos, deve procurar peças de museu, chips especializados para aplicativos incorporados e DSPs. Como o byte evoluiu do caos e da criatividade dos primeiros dias do design de computadores?

Posso imaginar que menos bits seriam ineficazes para manipular dados suficientes para viabilizar a computação, enquanto muitos teriam levado a hardware caro. Havia outras influências em jogo? Por que essas forças se equilibram em oito bits?

(BTW, se eu pudesse viajar no tempo, voltaria quando o "byte" fosse declarado como 8 bits e convenceria a todos a torná-lo 12 bits, subornando-os com algumas bugigangas do início do século XXI.)

DarenW
fonte
7
Essa pode ser uma daquelas perguntas em que não podemos responder melhor do que a boa e velha Wikipedia .
Scott Whitlock
10
Então, por que você prefere 12 bits a 8?
FrustratedWithFormsDesigner
8
A última frase está de brincadeira? Um byte de 12 bits seria inconveniente, pois não é uma potência de 2. #
1120 Rob
19
A memória e os registros não eram tão baratos na época; portanto, 8 bits eram um bom compromisso, em comparação com 6 ou 9 (frações de uma palavra de 36 bits). Além disso, os cálculos de endereço são muito mais simples, com potências de 2, e isso conta quando você faz lógica com transistores brutos em latinhas.
Mike Dunlavey
9
Usar tamanhos de palavras com potências de 2 não era tão importante nos "primeiros dias". O DEC-10 tinha uma palavra de 36 bits, e a série CDC 6000 tinha palavras de 60 bits e registradores de índice com 18 bits.
Jay Elston

Respostas:

75

Muito trabalho inicial foi feito com códigos baudot de 5 bits, mas esses rapidamente se tornaram bastante limitantes (apenas 32 caracteres possíveis, basicamente apenas letras maiúsculas e alguns sinais de pontuação, mas não há espaço suficiente para dígitos) .

A partir daí, algumas máquinas passaram a caracteres de 6 bits. No entanto, isso ainda era bastante inadequado - se você quisesse letras e dígitos em maiúsculas e minúsculas (em inglês), isso deixava apenas mais dois caracteres para pontuação, portanto, a maioria ainda tinha apenas um caso de letras em um conjunto de caracteres.

ASCII definiu um conjunto de caracteres de 7 bits. Isso foi "bom o suficiente" para muitos usos por um longo tempo e também formou a base da maioria dos conjuntos de caracteres mais recentes (ISO 646, ISO 8859, Unicode, ISO 10646 etc.)

Os computadores binários motivam os designers a criar tamanhos de dois. Como o conjunto de caracteres "padrão" exigia 7 bits de qualquer maneira, não era muito difícil adicionar mais um bit para obter a potência de 2 (e, nessa época, o armazenamento estava se tornando mais barato do que "desperdiçar" um pouco para a maioria dos caracteres). era mais aceitável também).

Desde então, os conjuntos de caracteres passaram para 16 e 32 bits, mas a maioria dos computadores convencionais se baseia amplamente no PC IBM original. Por outro lado, o suficiente do mercado está suficientemente satisfeito com os caracteres de 8 bits que, mesmo que o PC não tivesse atingido seu nível atual de domínio, não tenho certeza se todo mundo faria tudo com caracteres maiores de qualquer maneira.

Devo acrescentar também que o mercado mudou bastante. No mercado atual, o tamanho dos caracteres é definido menos pelo hardware que pelo software. Windows, Java etc. foram movidos para caracteres de 16 bits há muito tempo.

Agora, o obstáculo ao suportar caracteres de 16 ou 32 bits é minimamente das dificuldades inerentes aos próprios caracteres de 16 ou 32 bits e, em grande parte, da dificuldade de suportar o i18n em geral. Em ASCII (por exemplo), detectar se uma letra é maiúscula ou minúscula ou converter entre as duas é incrivelmente trivial. No Unicode / ISO 10646 completo, é basicamente indescritivelmente complexo (a ponto de os padrões nem tentarem - eles fornecem tabelas, não descrições). Em seguida, você adiciona o fato de que, para alguns idiomas / conjuntos de caracteres, mesmo a idéia básica de maiúsculas / minúsculas não se aplica. Depois, você adiciona o fato de que até a exibição de caracteres em alguns deles é muito mais complexa ainda.

Tudo isso é suficientemente complexo que a grande maioria dos softwares nem tenta. A situação está melhorando lentamente, mas lentamente é a palavra operativa.

Jerry Coffin
fonte
9
Pensei ter lido em algum lugar 8 do ASCII de 7 bits mais um bit de validação necessário porque os protocolos de transmissão quase não eram tão sem perda quanto os projetistas queriam :-).
Martin York
3
@LokiAstari, Sim, é chamado de bit de paridade e pode ser usado para formas brutas de detecção ou recuperação de erros. Wikipedia: Bit de paridade
um CVn
2
Não tenho certeza do que o IBM PC tem a ver com isso. "8 bits por byte" já era padrão na era do CP / M (<1980), iniciada na CPU 8080 (um antecessor do 8086/8 da era do PC IBM)
MSalters
1
@MSalters: Principalmente que (sem dúvida) "atrofiou" a evolução do hardware. Não, 8 bits / byte não era novo no PC, mas até então, a maioria das arquiteturas era substituída a cada poucos anos. O PC interrompeu isso em grande parte e adotou uma arquitetura que nem era particularmente progressiva quando era nova, e a preservou por décadas .
perfil completo de Jerry Coffin
2
Os conjuntos de caracteres atuais não têm 16 ou 32 bits, nem Java e Windows os utilizam. O conjunto de caracteres atual é Unicode, que precisa de 21 bits para mapear diretamente. O software atual usa codificações baseadas em unidades de código de 8 (UTF-8), 16 (UTF-16) ou 32 (UTF-32) bits, combinando várias unidades de código para formar um único ponto de código quando necessário, mas o tamanho desses bits é uma consequência do hardware, não do conjunto de caracteres.
Sebastian Redl
10

Sete bits para informações ASCII e um para paridade de detecção de erros.

DeadMG
fonte
27
7bits para ASCII e um bit extra que tem sido usado para todos os tipos de coisas
Martin Beckett
1
A paridade era muito importante ao lidar com a memória inicial. Mesmo depois de passar para bytes de dados de 8 bits, havia chips de memória com 9 bits para permitir a verificação de paridade.
Jim C
1
Esta é uma afirmação interessante. Existem dados históricos para apoiar a ideia?
david
6

Dê uma olhada na página da Wikipedia sobre arquitetura de 8 bits . Embora os conjuntos de caracteres pudessem ter 5, 6 e 7 bits, a arquitetura subjacente de barramento de CPU / memória sempre usava potências de 2. O primeiro microprocessador (por volta de 1970) tinha barramento de 4 bits, o que significa que uma instrução poderia se mover 4- bits de dados entre a memória externa e a CPU.

Então, com o lançamento do processador 8080, a arquitetura de 8 bits se tornou popular e foi isso que deu o início do conjunto de instruções de montagem do x86 que é usado até hoje em dia. Se eu tivesse que adivinhar, o byte veio desses processadores antigos, onde o grande público começou a aceitar e brincar com PCs e 8 bits, sendo considerado o tamanho padrão de uma única unidade de dados.

Desde então, o tamanho do barramento dobrou, mas sempre manteve uma potência de 2 (ou seja, 16, 32 e agora 64 bits). Na verdade, tenho certeza de que as partes internas do barramento de hoje são muito mais complicadas do que simplesmente 64 fios paralelos, mas A arquitetura atual da CPU convencional é de 64 bits.

Eu diria que sempre dobrando (em vez de aumentar 50%) era mais fácil criar um novo hardware que coexistisse com aplicativos existentes e outros componentes herdados. Por exemplo, quando eles passaram de 8 bits para 16, cada instrução agora pode mover 2 bytes em vez de 1, para que você economize um ciclo de clock, mas o resultado final seja o mesmo. No entanto, se você passasse da arquitetura de 8 para 12 bits, acabaria dividindo os dados originais em metades e gerenciando isso poderia se tornar irritante. Essas são apenas suposições, eu não sou realmente um especialista em hardware.

DXM
fonte
5
"Primeira CPU (por volta de 1970) ..." . Você precisa fazer algumas leituras sobre a história da computação !! A primeira CPU de um computador arquitetura de von Neumann foi construído durante a Segunda Guerra Mundial ... ou antes (dependendo da versão cuja da história você acredita.)
Stephen C
e havia dispositivos de computação no século 19 e tenho certeza que os egípcios tinham algum tipo de calculadora. Essa informação veio da página da Wikipedia que eu vinculei. Como eu disse, não sou especialista em hardware e certamente não sou historiador, mas se você sentir que estou tão longe, talvez queira atualizar a página da wikipedia.
DXM 17/11
Acho que ajudaria se eu não estragasse o link enquanto estava entrando. Também peço desculpas por dizer "primeira CPU". Desde que eu estava citando a página da wiki, eu deveria ter dito "primeiro microprocessador". Foi isso que eu quis dizer. Me desculpe por isso.
DXM
Uma solução para o computador "pré-elétron" é dizer computador moderno ou, suponho, computador computacional. Ainda hoje você pode construir um computador mecânico. Só quando começamos a usar campos de elétrons para nossa vantagem, construímos um microprocessador.
Ramhound #
O byte de 8 bits e o tamanho da palavra de 16 bits usados ​​pela série PDP também podem ter influenciado a popularidade dos bytes de 8 bits.
Jay Elston
4

Um byte tem vários (pelo menos) 1, 4, 6, 7, 8, 9, 12, 18, 20 e possivelmente 36 bits, dependendo do computador que você está visualizando. Estou usando "byte" aqui para significar "menor unidade de memória endereçável", em vez de usar qualquer tipo de interpretação centrada em texto. (Por exemplo, a CPU Saturn, uma CPU de 64 bits usada na popular linha da calculadora HP48SX / GX endereça a memória em petiscos - 4 bits.)

Os bytes de 20 bits eram extremamente comuns nas "máquinas IAS", nos anos 50. 6, 12, 18 (e talvez 36) eram bastante populares em uma variedade de arquiteturas nos anos 60, 70 e, até certo ponto, nos anos 80.

No final, ter uma boa correspondência entre "potências de 2" e "bits em uma unidade endereçável" parece ter vencido.

Vatine
fonte
E nunca 10 bits? Tudo o que pude encontrar no Google é que alguns processadores de vídeo recentes têm 10 bits.
rslnx
@khrf É possível, simplesmente não consigo me lembrar de nenhuma arquitetura que a tivesse (eu principalmente considerava computadores de uso geral).
Vatine 02/01
Sim, também considero computadores de uso geral. É estranho, porque eu imagino como seria bom com 10 bits byte saber que você pode endereçar 1 kilobyte com 1 byte, 1 megabyte com 2 bytes, etc. Claro, é apenas um capricho no conforto :)
rslnx
2

Primeiro, um pouco de esclarecimento: os octetos (unidades de 8 bits) não são realmente uma unidade fundamental nas arquiteturas modernas de computadores. Pelo menos não mais fundamental do que outras potências de dois - 2, 4, 16, 32, 64, 128 etc. Os octetos eram a unidade fundamental para processadores de 8 bits (daí o nome!), Mas as arquiteturas modernas geralmente trabalham com bit maior -configura internamente. Por exemplo, o x86_64 possui registradores inteiros de 64 bits e registradores de ponto flutuante de 80 bits. A RAM é lida e escrita em partes de 64 bits, e o processador usa apenas um pouco de mágica para parecer que você pode endereçar bytes de 8 bits individuais.

Para arquiteturas mais antigas, "byte" indicava o tamanho do barramento de dados e, como afirma a pergunta original, existiam muitos tamanhos de barramento diferentes (4, 5, 6, 8, 12 etc.). Porém, desde 1993, um byte é definido como 8 bits, para ter uma unidade SI padronizada para tamanhos de dados. Portanto, o significado de "byte" mudou de uma unidade dependente da arquitetura para uma unidade padronizada independente da arquitetura.

Atualmente, os bytes são a unidade padrão para endereçar e quantificar dados, mas não são realmente fundamentais.

A unidade de octetos se tornou o padrão de fato de armazenamento principalmente devido a preocupações com o armazenamento de texto. Para armazenar texto, o ideal é que você deseje um byte para armazenar um caractere. Dois fatores foram importantes:

  • Ter unidades com potências de dois (2, 4, 8, 16, 32 etc.) é mais conveniente ao projetar sistemas digitais.
  • 8 bits é suficiente para armazenar um único caractere no conjunto de caracteres ASCII (com espaço de sobra para estender o conjunto de caracteres para dar suporte, digamos cirílico).

É claro que 8 bits não são suficientes para suportar todos os scripts - algo como o japonês requer pelo menos 16 bits (e para o que vale, Unicode é 21 bits), mas nesse momento os bits eram caros e a maioria dos textos digitais era o intervalo ASCII de qualquer maneira.

Hoje em dia, o texto é normalmente armazenado em codificações de largura variável como UTF-8 e, com coisas que combinam caracteres Unicode, o "um byte é igual a um caractere" faz parte do passado. Hoje, o byte é realmente apenas o padrão por razões históricas.

JacquesB
fonte
1

De acordo com minhas informações, a palavra byte em si foi derivada da frase by-oito, que era de oito (8) bits. a conveniência que encontramos em palavras de 8 bits é a conversão para valores hexadecimais, já que o valor 00000000 = 00 & 11111111 = FF (255 de dezembro para não assinado e -127 para assinado) é fácil de executar todas as operações aritméticas nessa estrutura, inclusive em termos de bits operações.

Vejo bytes (palavras de 8 bits) como uma evolução natural do tamanho das palavras, de catastroficamente pequenas de 3 bits a ridiculamente grandes palavras de 60 bits

A.Rashad
fonte
Eu gostaria de ver uma referência para isso. Eu duvido seriamente. Especialmente porque a palavra "byte", usada no padrão C e incorporada no padrão C ++, não significa "8 bits". Uma quantidade de 8 bits é um octeto.
precisa saber é o seguinte
0

Um byte não precisa ter 8 bits , mas parece que C e C ++ definem um byte como sendo pelo menos 8 bits (embora possa ser mais). Esta pergunta no Stack Overflow menciona alguns sistemas em que 1 byte não é 8 bits.

Thomas Owens
fonte
C ++, ou o compilador ?
Babiker
@Babiker: C ++. O compilador terá uma definição precisa. ( CHAR_BITSmacro)
MSalters 30/01