¿Cuál es la historia de por qué los bytes son ocho bits?

86

¿Dónde están las fuerzas históricas en el trabajo, las compensaciones a realizar, al decidir usar grupos de ocho bits como unidad fundamental?

Hubo máquinas, alguna vez, que usaban otros tamaños de palabras, pero hoy en día, para obtener un tamaño que no sea de ocho bits, debe buscar piezas de museo, chips especializados para aplicaciones integradas y DSP. ¿Cómo evolucionó el byte del caos y la creatividad de los primeros días del diseño de computadoras?

Me imagino que menos bits serían ineficaces para manejar suficientes datos para hacer factible la computación, mientras que demasiados habrían llevado a un hardware costoso. ¿Hubo otras influencias en juego? ¿Por qué estas fuerzas se equilibraron a ocho bits?

(Por cierto, si pudiera viajar en el tiempo, volvería a cuando se declaró que el "byte" era de 8 bits, y convencería a todos de que lo hicieran en 12 bits, sobornándolos con algunas baratijas de principios del siglo XXI).

DarenW
fuente
77
Esta podría ser una de esas preguntas donde no podemos responderla mejor que la buena Wikipedia .
Scott Whitlock
10
Entonces, ¿por qué preferirías 12 bits a 8?
FrustratedWithFormsDesigner
8
¿Es la última oración en broma? Un byte de 12 bits sería inconveniente porque no es una potencia de 2.
Rob
19
La memoria y los registros no eran tan baratos en ese entonces, por lo que 8 bits era un buen compromiso, en comparación con 6 o 9 (fracciones de una palabra de 36 bits). Además, los cálculos de direcciones son mucho más simples con potencias de 2, y eso cuenta cuando estás haciendo lógica con transistores sin procesar en pequeñas latas.
Mike Dunlavey
99
El uso de tamaños de palabras que eran potencias de 2 no era tan importante en los "primeros días". El DEC-10 tenía una palabra de 36 bits, y la serie CDC 6000 tenía palabras de 60 bits y registros de índice con 18 bits.
Jay Elston

Respuestas:

75

Se realizó una gran cantidad de trabajo muy temprano con códigos de baudot de 5 bits, pero rápidamente se volvieron bastante limitantes (solo 32 caracteres posibles, así que básicamente solo letras mayúsculas y algunos signos de puntuación, pero no suficiente "espacio" para los dígitos) .

A partir de ahí, bastantes máquinas utilizaron caracteres de 6 bits. Sin embargo, esto todavía era bastante inadecuado: si deseaba letras y dígitos en mayúsculas y minúsculas (inglés), eso dejaba solo dos caracteres más para la puntuación, por lo que la mayoría todavía tenía solo un caso de letras en un conjunto de caracteres.

ASCII definió un conjunto de caracteres de 7 bits. Eso fue "lo suficientemente bueno" para muchos usos durante mucho tiempo, y también ha formado la base de la mayoría de los conjuntos de caracteres más nuevos (ISO 646, ISO 8859, Unicode, ISO 10646, etc.)

Las computadoras binarias motivan a los diseñadores a hacer potencias de dos tamaños. Como el juego de caracteres "estándar" requería 7 bits de todos modos, no fue demasiado difícil agregar un bit más para obtener una potencia de 2 (y para entonces, el almacenamiento se estaba volviendo lo suficientemente más barato que "desperdiciar" un poco para la mayoría de los personajes fue más aceptable también).

Desde entonces, los juegos de caracteres se han movido a 16 y 32 bits, pero la mayoría de las computadoras convencionales se basan en gran medida en la PC original de IBM. Por otra parte, una parte suficiente del mercado está suficientemente satisfecha con los caracteres de 8 bits que, incluso si la PC no hubiera alcanzado su nivel actual de dominio, no estoy seguro de que todos hagan todo con caracteres más grandes de todos modos.

También debo agregar que el mercado ha cambiado bastante. En el mercado actual, el tamaño de los caracteres se define menos por el hardware que por el software. Windows, Java, etc., se movieron a caracteres de 16 bits hace mucho tiempo.

Ahora, el obstáculo para admitir caracteres de 16 o 32 bits es solo mínimamente por las dificultades inherentes a los caracteres de 16 o 32 bits, y en gran medida por la dificultad de admitir i18n en general. En ASCII (por ejemplo) detectar si una letra es mayúscula o minúscula, o convertir entre las dos, es increíblemente trivial. En Unicode / ISO 10646 completo, es básicamente indescriptiblemente complejo (hasta el punto de que los estándares ni siquiera lo intentan, dan tablas, no descripciones). Luego agrega el hecho de que para algunos idiomas / conjuntos de caracteres, incluso la idea básica de mayúsculas / minúsculas no se aplica. Luego agrega el hecho de que incluso mostrar caracteres en algunos de ellos es mucho más complejo aún.

Todo eso es lo suficientemente complejo como para que la gran mayoría del software ni siquiera lo intente. La situación está mejorando lentamente, pero lentamente es la palabra clave.

Jerry Coffin
fuente
99
Pensé que había leído que 8 provenía del ASCII de 7 bits más un bit de validación que era necesario porque los protocolos de transmisión casi no eran tan sin pérdidas como los diseñadores querían :-).
Martin York
3
@LokiAstari, Sí, se llama bit de paridad y se puede usar para formas crudas de detección o recuperación de errores. Wikipedia: Bit de paridad
un CVn
2
No estoy seguro de qué tiene que ver la PC de IBM con esto. "8 bits por byte" ya era habitual en la época de CP / M (<1980), que comenzó en el 8080 de la CPU (un predecesor del 8086/8 de la era de la PC de IBM)
MSalters
1
@MSalters: Principalmente que ha (posiblemente) "retrasado" la evolución del hardware. No, 8 bits / byte no era nuevo con la PC, pero hasta entonces, la mayoría de las arquitecturas se reemplazaban cada pocos años. La PC lo detuvo en gran medida y adoptó una arquitectura que ni siquiera era particularmente progresiva cuando era nueva, y la conservó durante décadas .
Jerry Coffin
2
Los juegos de caracteres actuales no son de 16 o 32 bits, ni Java y Windows los usan. El conjunto de caracteres actual es Unicode, que necesita 21 bits para mapear directamente. El software actual utiliza codificaciones basadas en 8 (UTF-8), 16 (UTF-16) o 32 (UTF-32) unidades de código de bits, combinando múltiples unidades de código para formar un único punto de código cuando sea necesario, pero esos tamaños de bits son una consecuencia del hardware, no del juego de caracteres.
Sebastian Redl
10

Siete bits para información ASCII y uno para la paridad de detección de errores.

DeadMG
fuente
27
7 bits para ASCII y un bit adicional que se ha utilizado para todo tipo de cosas
Martin Beckett
1
La paridad era muy importante cuando se trataba de la memoria temprana. Incluso después de pasar a bytes de datos de 8 bits, había chips de memoria con 9 bits para permitir la comprobación de paridad.
Jim C
1
Esta es una afirmación interesante. ¿Hay algún dato histórico que respalde la idea?
David
6

Echa un vistazo a la página de Wikipedia sobre arquitectura de 8 bits . Aunque los conjuntos de caracteres podrían haber sido 5-, 6-, luego 7 bits, la arquitectura subyacente de la CPU / bus de memoria siempre usaba potencias de 2. El primer microprocesador (alrededor de los años 70) tenía un bus de 4 bits, lo que significa que una instrucción podría mover 4- bits de datos entre la memoria externa y la CPU.

Luego, con el lanzamiento del procesador 8080, la arquitectura de 8 bits se hizo popular y eso es lo que dio el comienzo del conjunto de instrucciones de ensamblaje x86 que se utiliza incluso en estos días. Si tuviera que adivinar, el byte vino de estos primeros procesadores donde el público en general comenzó a aceptar y jugar con PC y se consideró que el tamaño estándar de una sola unidad de datos era de 8 bits.

Desde entonces, el tamaño del bus se ha duplicado, pero siempre ha sido una potencia de 2 (es decir, 16, 32 y ahora 64 bits). De hecho, estoy seguro de que los componentes internos del bus de hoy son mucho más complicados que simplemente 64 cables paralelos, pero La arquitectura actual de la CPU principal es de 64 bits.

Supongo que al duplicar siempre (en lugar de crecer un 50%) fue más fácil crear un nuevo hardware que coexista con las aplicaciones existentes y otros componentes heredados. Entonces, por ejemplo, cuando pasaron de 8 bits a 16, cada instrucción ahora podía mover 2 bytes en lugar de 1, por lo que se ahorra un ciclo de reloj pero el resultado final es el mismo. Sin embargo, si pasara de una arquitectura de 8 a 12 bits, terminaría dividiendo los datos originales por la mitad y gestionarlos podría resultar molesto. Estas son solo conjeturas, no soy realmente un experto en hardware.

DXM
fuente
55
"Primera CPU (alrededor de 1970) ..." . ¡Necesita leer un poco sobre la historia de la informática! La primera CPU para una computadora de arquitectura von Neumann fue construida durante la Segunda Guerra Mundial ... o antes (dependiendo de la versión de la historia que creas)
Stephen C
y había dispositivos informáticos en el siglo XIX y estoy seguro de que los egipcios tenían algún tipo de calculadora. Esa información vino de la página de Wikipedia que he vinculado. Como dije, no soy un experto en hardware y ciertamente no soy un historiador, pero si siente que estoy tan lejos, es posible que desee actualizar esa página de wikipedia.
DXM
Supongo que ayudaría si no arruinara el enlace cuando estaba entrando. También me disculpo por decir "primera CPU". Como estaba citando la página wiki, debería haber dicho "primer microprocesador". A eso me refería. Lo siento por eso.
DXM
Una solución para la computadora "preelectrónica" es decir computadora moderna o supongo que la computadora electrónica. Incluso hoy podrías construir una computadora mecánica. No fue hasta que comenzamos a usar campos de electrones para nuestra ventaja que construimos un microprocesador.
Ramhound
El byte de 8 bits y el tamaño de palabra de 16 bits utilizados por la serie PDP también pueden haber influido en la popularidad de los bytes de 8 bits.
Jay Elston
4

Un byte ha sido variado (al menos) 1, 4, 6, 7, 8, 9, 12, 18, 20 y posiblemente 36 bits, dependiendo de la computadora que esté mirando. Estoy tomando "byte" aquí para significar "la unidad de memoria direccionable más pequeña", en lugar de usar cualquier tipo de interpretación centrada en texto. (Por ejemplo, la CPU Saturn, una CPU de 64 bits utilizada en la popular línea de calculadora HP48SX / GX, aborda la memoria en mordiscos: 4 bits).

Los bytes de 20 bits eran extremadamente comunes en las "máquinas IAS", en los años 50. 6, 12, 18 (y tal vez 36) fueron bastante populares en una variedad de arquitecturas en los años 60, 70 y hasta cierto punto 80.

Al final, parece haber ganado una buena correspondencia entre "potencias de 2" y "bits en una unidad direccionable".

Vatine
fuente
¿Y nunca 10 bits? Todo lo que pude encontrar con Google es que algunos procesadores de video recientes son de 10 bits.
rslnx
@khrf Es posible, simplemente no puedo recordar ninguna arquitectura que la tuviera (en su mayoría consideraba computadoras de uso general).
Vatine
Sí, también considero las computadoras de uso general. Es extraño porque me imagino lo bueno que sería con un byte de 10 bits saber que puedes direccionar 1 kilobyte con 1 byte, 1 megabyte con 2 bytes, etc. Por supuesto, es solo un capricho para la comodidad :)
rslnx
2

Primero un poco de aclaración: los octetos (unidades de 8 bits) no son realmente una unidad fundamental en las arquitecturas informáticas modernas. Al menos no más fundamental que otras potencias de dos: 2, 4, 16, 32, 64, 128, etc. Los octetos eran la unidad fundamental para los procesadores de 8 bits (de ahí el nombre), pero las arquitecturas modernas generalmente funcionan con bits más grandes. -conjuntos internos. Por ejemplo, el x86_64 tiene registros enteros de 64 bits y registros de coma flotante de 80 bits. La RAM se lee y escribe en fragmentos de 64 bits, y el procesador solo usa un poco de magia para que parezca que puede direccionar bytes individuales de 8 bits.

Para arquitecturas antiguas, "byte" indicaba el tamaño del bus de datos y, como dice la pregunta original, existían muchos tamaños de bus diferentes (4, 5, 6, 8, 12, etc.). Pero desde 1993 un byte se ha definido como 8 bits, para tener una unidad SI estandarizada para tamaños de datos. Por lo tanto, el significado de "byte" ha cambiado de ser una unidad dependiente de la arquitectura a una unidad estandarizada independiente de la arquitectura.

Así que en estos días, los bytes son la unidad estándar para direccionar y cuantificar datos, pero de lo contrario no son realmente fundamentales.

La unidad de octetos se convirtió en el estándar de facto para el almacenamiento principalmente debido a las preocupaciones sobre el almacenamiento de texto. Para almacenar texto, lo ideal es que desee un byte para almacenar un carácter. Dos factores fueron importantes:

  • Tener unidades que son potencias de dos (2, 4, 8, 16, 32, etc.) es más conveniente al diseñar sistemas digitales.
  • 8 bits es suficiente para almacenar un solo carácter en el conjunto de caracteres ASCII (con espacio de sobra para ampliar el conjunto de caracteres para admitir, por ejemplo, cirílico).

Por supuesto, 8 bits no son suficientes para admitir todos los scripts: algo como el japonés requiere al menos 16 bits (y para lo que vale, Unicode es de 21 bits), pero en ese momento los bits eran caros y la mayoría del texto digital estaba en la gama ASCII de todos modos.

En estos días, el texto generalmente se almacena en codificaciones de ancho variable como UTF-8, y con elementos como la combinación de caracteres Unicode, el "un byte es igual a un carácter" ha sido algo del pasado. Hoy el byte es realmente el estándar por razones históricas.

JacquesB
fuente
1

De acuerdo con mi información, el byte de la palabra en sí se deriva de la frase by-eight, que era una palabra de ocho (8) bits. La conveniencia que encontramos en las palabras de 8 bits es la conversión a valores hexadecimales ya que el valor 00000000 = 00 & 11111111 = FF (Dec 255 para sin signo y -127 para firmado) es fácil de hacer todas las operaciones aritméticas en dicha estructura, incluyendo bits sabios operaciones

Veo bytes (palabras de 8 bits) como una evolución natural del tamaño de las palabras desde palabras catastróficamente pequeñas de 3 bits hasta palabras ridículamente grandes de 60 bits.

A.Rashad
fuente
Me gustaría ver una referencia para eso. Lo dudo seriamente. Especialmente porque la palabra "byte", como se usa en el estándar C y se incorpora en el estándar C ++, no significa "8 bits". Una cantidad de 8 bits es un octeto.
gnasher729