2010-08-07 15 views
18

No sé muy bien sobre la arquitectura RAM y HDD, o cómo la electrónica trata con pedazos de memoria, pero esto siempre provocó mi curiosidad: ¿Por qué elegimos parar en 8 bits para el elemento más pequeño en un valor de computadora?¿Por qué son 8 y 256 números tan importantes en ciencias de la computación?

Mi pregunta puede parecer muy tonto, porque la respuesta es obvia, pero no estoy muy seguro ...

¿Es porque 2^3 permite que se ajuste perfectamente al dirigirse a la memoria? ¿Los componentes electrónicos están especialmente diseñados para almacenar un trozo de 8 bits? Si es así, ¿por qué no utilizar palabras más amplias? Es porque divide 32, 64 y 128, por lo que las palabras del procesador se pueden dar varias de esas palabras? ¿Es conveniente tener 256 valores para un espacio tan pequeño?

¿Qué opinas?

Mi pregunta es demasiado metafísica, pero quiero asegurarme de que sea solo por razones históricas y no por razones tecnológicas o matemáticas.

Para la anécdota, también estaba pensando en el estándar ASCII, en el que la mayoría de los primeros personajes son inútiles con cosas como UTF-8, también estoy tratando de pensar en una codificación de caracteres más pequeña y rápida ...

+1

[dos bits, cuatro bits, seis bits, un dólar] (http://en.wikipedia.org/wiki/Bit_%28money%29) –

Respuesta

12

Históricamente, los bytes no siempre tienen un tamaño de 8 bits (para el caso, las computadoras tampoco tienen que ser binarias, pero la informática no binaria ha visto mucha menos acción en la práctica). Es por esta razón que las normas IETF e ISO a menudo usan el término octeto - no usan byte porque no quieren suponer que significa 8 bits cuando no lo hace.

De hecho, cuando se acuñó byte se definió como una unidad de 1-6 bits. Los tamaños de bytes en uso a lo largo de la historia incluyen 7, 9, 36 y máquinas con bytes de tamaño variable.

8 fue una mezcla de éxito comercial, ya que era un número bastante conveniente para las personas que lo pensaban (que se habría alimentado) y sin duda otras razones que ignoro por completo.

El estándar ASCII que menciona supone un byte de 7 bits, y se basó en los estándares de comunicación anteriores de 6 bits.


Editar: Puede valer la pena añadir a esto, como algunos insisten en que los bytes que dicen son siempre octetos, son confusas bytes con palabras.

octeto es un nombre dado a una unidad de 8 bits (del latín para ocho). Si está usando una computadora (o en un nivel de abstracción más alto, un lenguaje de programación) donde los bytes son de 8 bits, entonces esto es fácil de hacer, de lo contrario necesita algún código de conversión (o cobertura en hardware). El concepto octet surge más en estándares de red que en informática local, porque al ser neutral en arquitectura permite la creación de estándares que pueden usarse para comunicarse entre máquinas con diferentes tamaños de bytes, de ahí su uso en IETF e ISO estándares (por cierto, ISO/IEC 10646 usa octeto donde el estándar Unicode usa byte por lo que es esencialmente - con algunas restricciones adicionales menores en la última parte - el mismo estándar, aunque el estándar Unicode detalla que significa octeto por byte aunque los bytes pueden ser de diferentes tamaños en diferentes máquinas). El concepto de octeto existe precisamente porque los bytes de 8 bits son comunes (de ahí la elección de utilizarlos como base de dichos estándares) pero no universales (de ahí la necesidad de otra palabra para evitar la ambigüedad).

Históricamente, un byte era el tamaño utilizado para almacenar un personaje, una cuestión que a su vez se basa en prácticas, normas y estándares de facto anteriores a las computadoras utilizadas para télex y otros métodos de comunicación, comenzando quizás con Baudot en 1870 (no sé de ningún anterior, pero estoy abierto a las correcciones).

Esto se refleja por el hecho de que en C y C++ la unidad para almacenar un byte se llama char cuyo tamaño en bits está definido por CHAR_BIT en el encabezado estándar limits.h. Diferentes máquinas usarían 5,6,7,8,9 o más bits para definir un personaje. En estos días, por supuesto, definimos caracteres como 21 bits y utilizamos diferentes codificaciones para almacenarlos en unidades de 8, 16 o 32 bits (y formas no autorizadas para Unicode, como UTF-7 para otros tamaños), pero históricamente esa era la como era.

En los idiomas que intentan ser más uniformes en todas las máquinas, en lugar de reflejar la arquitectura de la máquina, byte tiende a corregirse en el idioma, y ​​actualmente esto significa que se define en el lenguaje como de 8 bits. Dado el momento en la historia en el que se crearon, y que la mayoría de las máquinas ahora tienen bytes de 8 bits, la distinción es en gran parte discutible, aunque no es imposible implementar un compilador, tiempo de ejecución, etc. para dichos idiomas en máquinas con diferentes tamaños bytes, simplemente no tan fácil.

Una palabra es el tamaño "natural" para una computadora determinada. Esto está menos claramente definido, porque afecta algunas preocupaciones superpuestas que generalmente afectarían, pero que podrían no coincidir. La mayoría de los registros en una máquina tendrán este tamaño, pero otros no. El tamaño de dirección más grande sería una palabra, aunque este no sea el caso (el Z80 tenía un byte de 8 bits y una palabra de 1 byte, pero permitía duplicar los registros para dar soporte de 16 bits, incluyendo 16 bits direccionamiento).

nuevo vemos aquí una diferencia entre C y C++ donde int se define en términos de palabra de tamaño y long estando definida para tomar ventaja de un procesador que tiene un concepto "de largo palabra" debería tales existir, aunque posiblemente siendo idéntica en un caso dado a int. Los valores mínimo y máximo están de nuevo en el encabezado limits.h. (De hecho, con el paso del tiempo, int se puede definir como más pequeño que el tamaño de palabra natural, como una combinación de consistencia con lo que es común en otros lugares, reducción en el uso de memoria para una serie de ints, y probablemente otras preocupaciones que no hago t saber de).

Java y.Los lenguajes NET tienen el enfoque de definir int y long como corregidos en todos los architecutres, y hacer frente a las diferencias un problema para el tiempo de ejecución (particularmente el JITter). Notablemente, sin embargo, incluso en .NET, el tamaño de un puntero (en código inseguro) variará dependiendo de la arquitectura para que sea el tamaño de palabra subyacente, en lugar de un tamaño de palabra impuesto por el idioma.

Por lo tanto, octeto, byte y palabra son todos muy independientes entre sí, a pesar de la relación de octeto == byte y palabra que es un número entero de bytes (y un número completo de ronda binaria como 2, 4, 8 etc. .) siendo común hoy.

3

Dado que las computadoras funcionan con números binarios, todas las potencias de dos son importantes.

Los números de 8 bits pueden representar 256 (2^8) valores distintos, suficientes para todos los caracteres de inglés y algunos más. Eso hizo que los números 8 y 256 fueran bastante importantes.
El hecho de que muchas CPU (solían y todavía funcionan) procesan datos en 8 bits ayudaba mucho.

Otras potencias importantes de las que quizás haya escuchado son 1024 (2^10 = 1k) y 65536 (2^16 = 65k).

9

No todos los bytes son de 8 bits. Algunos son 7, algunos 9, algunos otros valores por completo. La razón por la cual 8 es importante es que, en la mayoría de las computadoras modernas, es el número estándar de bits en un byte. Como dijo Nikola, un poco es la unidad más pequeña real (un solo valor binario, verdadero o falso).

Como mencionará Will, este artículo http://en.wikipedia.org/wiki/Byte describe el byte y su historial de tamaño variable con más detalle.

El razonamiento general detrás de por qué 8, 256 y otros números son importantes es que son potencias de 2 y las computadoras se ejecutan utilizando un sistema de conmutadores de base 2 (binario).

+4

Wikipedia toca sobre por qué un byte ha llegado a asociarse con 8 bits: no siempre ha sido así, ni lo es siempre en todas las computadoras. http://en.wikipedia.org/wiki/Byte –

+0

El elemento más pequeño en la arquitectura de las computadoras es un poco. Byte siempre es de 8 bits. –

+1

@Nikola: como describe el artículo de Wikipedia Will posted, los bytes no son siempre de 8 bits. En la mayoría de las PC estándar modernas (e incluso esas Mac: P), se utiliza un byte de 8 bits. Los tamaños reales de bytes tienen un rango histórico mucho más amplio, aunque diría que la mayoría oscilaba entre 6 y 16 bits por byte. Tienes razón en que el elemento más pequeño es un poco, sin embargo. – ssube

1

Creo que la razón principal tiene que ver con el diseño original de la PC de IBM. La CPU Intel 8080 era the first precursor to the 8086 que luego sería used in the IBM PC. Tenía registros de 8 bits. Por lo tanto, todo un ecosistema de aplicaciones se desarrolló alrededor de la metáfora de 8 bits. Para retener la compatibilidad con versiones anteriores, Intel diseñó todas las arquitecturas posteriores para retener los registros de 8 bits. Por lo tanto, 8086 y todas las CPU x86 después mantuvieron sus registros de 8 bits para compatibilidad con versiones anteriores, a pesar de que agregaron nuevos registros de 16 bits y 32 bits a lo largo de los años.

La otra razón por la que puedo pensar es de 8 bits es perfecta para ajustar un conjunto básico de caracteres latinos. No puede colocarlo en 4 bits, pero puede hacerlo en 8. Por lo tanto, obtiene el conjunto de caracteres ASCII de 256 valores. También es la potencia más pequeña de 2 para la que tiene suficientes bits en los que puede caber un juego de caracteres. Por supuesto, actualmente la mayoría de los juegos de caracteres son en realidad de 16 bits de ancho (es decir, Unicode).

+3

¿Estás seguro de que el 8080 se usó en una PC? Estoy bastante seguro de que fue el 8086 (y el costo más bajo 8088) que fueron las primeras CPU de PC de IBM. – ysap

+0

Más documentación interesante de Wikipedia: "Comercializado como compatible con la fuente, el 8086 se diseñó para que el lenguaje ensamblador 8008, 8080 u 8085 se convirtiera automáticamente en código fuente 8086 equivalente (subóptimo), con poca o ninguna mano -edición " http://en.wikipedia.org/wiki/Intel_8086 – dacris

+0

Se usaron ocho bytes de bits en los años 60. IBM System/360 fue posiblemente el primero. – ergosys

1

Normalmente contamos en la base 10, un solo dígito puede tener uno de diez valores diferentes. La tecnología informática se basa en interruptores (microscópicos) que pueden estar encendidos o apagados. Si uno de estos representa un dígito, ese dígito puede ser 1 o 0. Esto es base 2.

De ahí se sigue que las computadoras trabajan con números que se forman como una serie de 2 dígitos de valor.

  • 1 dígito, 2 valores
  • 2 dígitos, 4 valores
  • 3 dígitos, 8 valores etc.

Cuando procesadores están diseñados, tienen que recoger un tamaño que el procesador estar optimizado para trabajar con. Para la CPU, esto se considera una "palabra". Las CPU anteriores se basaban en tamaños de palabra de cuatro bits y poco después de 8 bits (1 byte). Hoy en día, las CPU están diseñadas principalmente para operar con palabras de 32 bits y 64 bits. Pero en realidad, el "interruptor" de dos estados es por lo que todos los números de computadora tienden a ser potencias de 2.

0

Motivos históricos, supongo. 8 es una potencia de 2, 2^2 es 4 y 2^4 = 16 es demasiado poco para la mayoría de los propósitos, y 16 (la próxima potencia de dos) hardware de bits llegó mucho más tarde.

Pero la razón principal, sospecho, es el hecho de que tenían microprocesadores de 8 bits, luego microprocesadores de 16 bits, cuyas palabras podrían muy bien representarse como 2 octetos, y así sucesivamente. Ya sabes, cruxt histórico y compatibilidad con versiones anteriores, etc.

Otra razón similarmente pragmática contra "reducir": si tuviéramos, por ejemplo, usar 4 bits como una palabra, básicamente obtendríamos solo la mitad de la producción en comparación con 8 poco. Aparte de rebosar mucho más rápido.

Siempre puede exprimir, p. 2 números en el rango 0..15 en un octeto ... solo tienes que extraerlos a mano. Pero a menos que tenga, como miles de millones de conjuntos de datos para mantener en la memoria uno al lado del otro, esto no vale la pena el esfuerzo.

3

Las computadoras se basan en la electrónica digital y la electrónica digital funciona con los estados. Un fragmento puede tener 2 estados, 1 o 0 (si el voltaje está por encima de algún nivel, entonces es 1, si no entonces es cero). Para representar ese comportamiento, se introdujo el sistema binario (bien no introducido pero ampliamente aceptado).

Así que vamos al grano. Bit es el fragmento más pequeño en el sistema binario. Puede tomar solo 2 estados, 1 o 0, y representa el fragmento atómico de todo el sistema.

Para facilitar nuestras vidas, se introdujo el byte (8 bits). Para darle alguna analogía, no expresamos el peso en gramos, pero esa es la medida base del peso, pero usamos kilogramos, porque es más fácil de usar y comprender el uso. Un kilogramo es los 1000 gramos, y eso se puede expresar como 10 con la potencia de 3. Entonces, cuando regresamos al sistema binario y usamos la misma potencia obtenemos 8 (2 en el poder de 3 es 8). Eso se hizo porque el uso de solo bits era demasiado complicado en la informática diaria.

Eso aguantó, así que más adelante en el futuro cuando nos dimos cuenta de que 8 bytes eran demasiado pequeños y complicados de usar, agregamos +1 en la potencia (2 en la potencia de 4 es 16) y luego 2^5 es 32, y así sucesivamente y el 256 es solo 2 en el poder de 8.

Así que su respuesta es que seguimos el sistema binario debido a la arquitectura de las computadoras, y subimos en el valor de la potencia para representar obtendremos algunos valores que podemos manejar todos los días, y así es como pasamos de un bit a un byte (8 bits) ¡y así sucesivamente!

(2, 4, 8 , 16, 32, 64, 128, 256 , 512, 1024, y así sucesivamente) (2^x, X = 1,2,3,4 , 5,6,7,8,9,10 y así sucesivamente)

5

La codificación ASCII requiere 7 bits, y EBCDIC requiere 8 bits. Los códigos ASCII extendidos (como los juegos de caracteres ANSI) usaron el octavo bit para expandir el conjunto de caracteres con gráficos, caracteres acentuados y otros símbolos. Algunas arquitecturas hicieron uso de codificaciones patentadas; un buen ejemplo de esto es el DEC PDP-10, que tenía una palabra de máquina de 36 bits. Algunos sistemas operativos en esta arquitectura utilizaban codificaciones empaquetadas que almacenaban 6 caracteres en una palabra de máquina para diversos fines, como nombres de archivos.

En la década de 1970, el éxito de la D.G. Nova y DEC PDP-11, que eran arquitecturas de 16 bits y mainframes de IBM con palabras de máquina de 32 bits, empujaban a la industria hacia un carácter de 8 bits de forma predeterminada. Los microprocesadores de 8 bits de fines de la década de 1970 se desarrollaron en este entorno y se convirtió en un estándar de facto, particularmente cuando naves periféricas listas para usar como UART, chips ROM y chips FDC se construyeron como dispositivos de 8 bits.

En la última parte de la década de 1970, la industria optó por 8 bits como estándar de facto y las arquitecturas como PDP-8 con su máquina de 12 bits quedaron algo marginadas (aunque el PDP-8 ISA y sus derivados aún aparecen en productos de sistema integrados). Diseños de microprocesadores de 16 y 32 bits como las familias Intel 80x86 y MC68K siguieron.

2

El número importante aquí es binario 0 o 1. Todas sus otras preguntas están relacionadas con esto.

Claude Shannon y George Boole hicieron el trabajo fundamental en lo que ahora llamamos teoría de la información y aritmética booleana. En resumen, esta es la base de cómo un interruptor digital, con solo la capacidad de representar 0 OFF y 1 ON puede representar información más compleja, como números, lógica y una foto jpg. Binario es la base de las computadoras tal como las conocemos actualmente, pero otras computadoras de base numérica o computadoras analógicas son completamente posibles.

En la aritmética decimal humana, los poderes de diez tienen importancia. 10, 100, 1000, 10,000 cada uno parece importante y útil. Una vez que tienes una computadora basada en binario, también hay poderes de 2 que se vuelven importantes. 2^8 = 256 es suficiente para un alfabeto, signos de puntuación y caracteres de control. (Que es más importante, 2^7 es suficiente para que un alfabeto, signos de puntuación y control, y 2^8 es suficiente espacio para los caracteres ASCII y un check bit.)

1

Charles Petzold escribió un libro interesante llamado Code que cubre exactamente esta pregunta . Ver el capítulo 15, Bytes y Hex.

Citas de ese capítulo:

valores

de ocho bits son entradas a la sumadores, cerraduras y selectores de datos, y también las salidas de estas unidades. Los valores de ocho bits también se definen mediante los conmutadores y se muestran con bombillas, La ruta de datos en estos circuitos es , por lo que se dice que es 8 bits de ancho. Pero ¿por qué 8 bits? ¿Por qué no 6 o 7 o 9 o 10?

... realmente no hay ninguna razón por la cual haya sido construido de esa manera. Ocho bits parecía en ese momento ser una cantidad conveniente , un buen bocado de bits, si se quiere.

... Por un tiempo, un byte significa simplemente el número de bits en una ruta de datos particular . Pero a mediados de la década de 1960. en conexión con el desarrollo de IBM System/360 (su gran complejo de computadoras de negocios), la palabra vino para significar un grupo de 8 bits.

... Una razón por la que IBM gravitó hacia bytes de 8 bits fue la facilidad para almacenar números en un formato conocido como BCD. Pero, como veremos en los capítulos que siguen, casi por casualidad un byte es ideal para almacenar texto, porque la mayoría idiomas escritos en todo el mundo (con la excepción de los ideogramas utilizados en chino, japonés y coreano) puede estar representado con menos de 256 caracteres.

Cuestiones relacionadas