stringtranslate.com

Word (arquitectura de computadoras)

En informática , una palabra es la unidad natural de datos que utiliza un diseño de procesador en particular . Una palabra es un dato de tamaño fijo que el conjunto de instrucciones o el hardware del procesador manejan como una unidad. La cantidad de bits o dígitos [a] en una palabra (el tamaño de la palabra , el ancho de la palabra o la longitud de la palabra ) es una característica importante de cualquier diseño de procesador o arquitectura de computadora específicos .

El tamaño de una palabra se refleja en muchos aspectos de la estructura y el funcionamiento de una computadora; la mayoría de los registros de un procesador suelen tener el tamaño de una palabra y el dato más grande que se puede transferir hacia y desde la memoria de trabajo en una sola operación es una palabra en muchas arquitecturas (no en todas). El tamaño de dirección más grande posible , que se utiliza para designar una ubicación en la memoria, es normalmente una palabra de hardware (aquí, "palabra de hardware" significa la palabra natural de tamaño completo del procesador, a diferencia de cualquier otra definición utilizada).

La documentación de computadoras antiguas con un tamaño de palabra fijo generalmente indica los tamaños de memoria en palabras en lugar de bytes o caracteres. La documentación a veces usa los prefijos métricos correctamente, a veces con redondeo, por ejemplo, 65 kilopalabras (kW) que significa 65536 palabras, y a veces los usa incorrectamente, con kilopalabras (kW) que significa 1024 palabras (2 10 ) y megapalabras (MW) que significa 1,048,576 palabras (2 20 ). Con la estandarización en bytes de 8 bits y la direccionabilidad de bytes, indicar los tamaños de memoria en bytes, kilobytes y megabytes con potencias de 1024 en lugar de 1000 se ha convertido en la norma, aunque hay algún uso de los prefijos binarios IEC .

Varias de las primeras computadoras (y algunas modernas también) usan decimal codificado en binario en lugar de binario simple , típicamente con un tamaño de palabra de 10 o 12 dígitos decimales , y algunas computadoras decimales tempranas no tienen longitud de palabra fija en absoluto. Los primeros sistemas binarios tendían a usar longitudes de palabra que eran algún múltiplo de 6 bits, siendo la palabra de 36 bits especialmente común en las computadoras mainframe . La introducción de ASCII condujo al paso a sistemas con longitudes de palabra que eran múltiplos de 8 bits, siendo populares las máquinas de 16 bits en la década de 1970 antes del paso a los procesadores modernos con 32 o 64 bits. [1] Los diseños de propósito especial como los procesadores de señal digital , pueden tener cualquier longitud de palabra de 4 a 80 bits. [1]

El tamaño de una palabra a veces puede diferir del esperado debido a la compatibilidad con versiones anteriores de computadoras. Si varias variantes compatibles o una familia de procesadores comparten una arquitectura y un conjunto de instrucciones comunes, pero difieren en el tamaño de las palabras, su documentación y software pueden volverse complejos en términos de notación para adaptarse a la diferencia (consulte Familias de tamaños a continuación).

Usos de las palabras

Dependiendo de cómo esté organizada una computadora, las unidades de tamaño de palabra se pueden utilizar para:

Números de punto fijo
Los contenedores para valores numéricos de punto fijo , generalmente enteros , pueden estar disponibles en uno o varios tamaños diferentes, pero uno de los tamaños disponibles casi siempre será la palabra. Los otros tamaños, si los hay, probablemente sean múltiplos o fracciones del tamaño de la palabra. Los tamaños más pequeños normalmente se utilizan solo para un uso eficiente de la memoria; cuando se cargan en el procesador, sus valores generalmente van a un contenedor más grande, del tamaño de una palabra.
Números de punto flotante
Los contenedores de valores numéricos de punto flotante suelen ser una palabra o un múltiplo de una palabra.
Direcciones
Los soportes para direcciones de memoria deben tener un tamaño capaz de expresar el rango de valores necesario pero no ser excesivamente grandes, por lo que a menudo el tamaño utilizado es la palabra, aunque también puede ser un múltiplo o fracción del tamaño de la palabra.
Registros
Los registros del procesador están diseñados con un tamaño apropiado para el tipo de datos que contienen, por ejemplo, números enteros, números de punto flotante o direcciones. Muchas arquitecturas informáticas utilizan registros de propósito general que son capaces de almacenar datos en múltiples representaciones.
Transferencia de memoria a procesador
Cuando el procesador lee desde el subsistema de memoria en un registro o escribe el valor de un registro en la memoria, la cantidad de datos transferidos es a menudo una palabra. Históricamente, esta cantidad de bits que se podían transferir en un ciclo también se denominaba catena en algunos entornos (como Bull GAMMA 60  [fr] ). [2] [3] En subsistemas de memoria simples, la palabra se transfiere a través del bus de datos de memoria , que normalmente tiene un ancho de una palabra o media palabra. En subsistemas de memoria que utilizan cachés , la transferencia del tamaño de una palabra es la que se realiza entre el procesador y el primer nivel de caché; en niveles inferiores de la jerarquía de memoria, normalmente se utilizan transferencias más grandes (que son un múltiplo del tamaño de la palabra).
Unidad de resolución de direcciones
En una arquitectura dada, los valores de dirección sucesivos casi siempre designan unidades sucesivas de memoria; esta unidad es la unidad de resolución de dirección. En la mayoría de las computadoras, la unidad es un carácter (por ejemplo, un byte) o una palabra. (Algunas computadoras han usado resolución de bits). Si la unidad es una palabra, entonces se puede acceder a una mayor cantidad de memoria usando una dirección de un tamaño dado a costa de una complejidad adicional para acceder a caracteres individuales. Por otro lado, si la unidad es un byte, entonces se pueden direccionar caracteres individuales (es decir, seleccionarlos durante la operación de memoria).
Instrucciones
Las instrucciones de máquina normalmente tienen el tamaño de la palabra de la arquitectura, como en las arquitecturas RISC , o un múltiplo del tamaño de "char" que es una fracción de él. Esta es una elección natural ya que las instrucciones y los datos suelen compartir el mismo subsistema de memoria. En las arquitecturas Harvard, los tamaños de palabra de las instrucciones y los datos no necesitan estar relacionados, ya que las instrucciones y los datos se almacenan en memorias diferentes; por ejemplo, el procesador en el conmutador telefónico electrónico 1ESS tiene instrucciones de 37 bits y palabras de datos de 23 bits.

Elección del tamaño de la palabra

Cuando se diseña una arquitectura informática, la elección del tamaño de palabra es de suma importancia. Hay consideraciones de diseño que fomentan tamaños de grupos de bits particulares para usos particulares (por ejemplo, para direcciones), y estas consideraciones apuntan a tamaños diferentes para usos diferentes. Sin embargo, las consideraciones de economía en el diseño presionan fuertemente para un tamaño, o unos pocos tamaños relacionados por múltiplos o fracciones (submúltiplos) de un tamaño primario. Ese tamaño preferido se convierte en el tamaño de palabra de la arquitectura.

En el pasado (antes de la codificación de caracteres de tamaño variable), el tamaño de los caracteres era una de las influencias en la resolución de la unidad de dirección y en la elección del tamaño de palabra. Antes de mediados de los años 60, los caracteres se almacenaban con mayor frecuencia en seis bits; esto no permitía más de 64 caracteres, por lo que el alfabeto estaba limitado a mayúsculas. Dado que es eficiente en tiempo y espacio que el tamaño de palabra sea un múltiplo del tamaño del carácter, los tamaños de palabra en este período eran generalmente múltiplos de 6 bits (en máquinas binarias). Una opción común en ese entonces era la palabra de 36 bits , que también es un buen tamaño para las propiedades numéricas de un formato de punto flotante.

Después de la introducción del diseño IBM System/360 , que utiliza caracteres de ocho bits y admite letras minúsculas, el tamaño estándar de un carácter (o, más exactamente, un byte ) pasa a ser de ocho bits. A partir de entonces, los tamaños de las palabras son, naturalmente, múltiplos de ocho bits, siendo los más utilizados 16, 32 y 64 bits.

Arquitecturas de palabras variables

Los primeros diseños de máquinas incluían algunas que utilizaban lo que a menudo se denomina una longitud de palabra variable . En este tipo de organización, un operando no tiene una longitud fija. Dependiendo de la máquina y la instrucción, la longitud puede estar indicada por un campo de conteo, por un carácter delimitador o por un bit adicional llamado, por ejemplo, bandera o marca de palabra . Estas máquinas suelen utilizar decimales codificadas en binario en dígitos de 4 bits o en caracteres de 6 bits para los números. Esta clase de máquinas incluye la IBM 702 , IBM 705 , IBM 7080 , IBM 7010 , UNIVAC 1050 , IBM 1401 , IBM 1620 y RCA 301.

La mayoría de estas máquinas trabajan con una unidad de memoria a la vez y, dado que cada instrucción o dato tiene varias unidades de longitud, cada instrucción requiere varios ciclos solo para acceder a la memoria. Estas máquinas suelen ser bastante lentas debido a esto. Por ejemplo, la búsqueda de instrucciones en un IBM 1620 Modelo I requiere 8 ciclos (160 μs) solo para leer los 12 dígitos de la instrucción (el Modelo II redujo este tiempo a 6 ciclos, o 4 ciclos si la instrucción no necesitaba ambos campos de dirección). La ejecución de instrucciones requiere una cantidad variable de ciclos, dependiendo del tamaño de los operandos.

Direccionamiento de palabras, bits y bytes

El modelo de memoria de una arquitectura está fuertemente influenciado por el tamaño de palabra. En particular, la resolución de una dirección de memoria, es decir, la unidad más pequeña que puede ser designada por una dirección, ha sido elegida a menudo como la palabra. En este enfoque, el enfoque de la máquina direccionable por palabra , los valores de dirección que difieren en uno designan palabras de memoria adyacentes. Esto es natural en máquinas que trabajan casi siempre con unidades de palabra (o de múltiples palabras), y tiene la ventaja de permitir que las instrucciones utilicen campos de tamaño mínimo para contener direcciones, lo que puede permitir un tamaño de instrucción más pequeño o una mayor variedad de instrucciones.

Cuando el procesamiento de bytes va a ser una parte importante de la carga de trabajo, suele ser más ventajoso utilizar el byte , en lugar de la palabra, como unidad de resolución de direcciones. Los valores de dirección que difieren en uno designan bytes adyacentes en la memoria. Esto permite que un carácter arbitrario dentro de una cadena de caracteres se direccione de forma directa. Una palabra todavía se puede direccionar, pero la dirección que se va a utilizar requiere unos pocos bits más que la alternativa de resolución de palabras. El tamaño de la palabra debe ser un múltiplo entero del tamaño del carácter en esta organización. Este enfoque de direccionamiento se utilizó en el IBM 360 y ha sido el enfoque más común en las máquinas diseñadas desde entonces.

Cuando la carga de trabajo implica procesar campos de distintos tamaños, puede resultar ventajoso direccionar a bits. Las máquinas con direccionamiento a bits pueden tener algunas instrucciones que utilizan un tamaño de byte definido por el programador y otras instrucciones que operan con tamaños de datos fijos. Por ejemplo, en el IBM 7030 [4] ("Stretch"), una instrucción de punto flotante solo puede direccionar palabras, mientras que una instrucción aritmética de números enteros puede especificar una longitud de campo de 1 a 64 bits, un tamaño de byte de 1 a 8 bits y un desplazamiento del acumulador de 0 a 127 bits.

En una máquina direccionable por bytes con instrucciones de almacenamiento a almacenamiento (SS), normalmente hay instrucciones de movimiento para copiar uno o varios bytes de una ubicación arbitraria a otra. En una máquina orientada a bytes ( direccionable por bytes ) sin instrucciones SS, mover un solo byte de una ubicación arbitraria a otra suele ser:

  1. CARGAR el byte de origen
  2. ALMACENA el resultado nuevamente en el byte de destino

Se puede acceder a bytes individuales en una máquina orientada a palabras de dos maneras. Los bytes se pueden manipular mediante una combinación de operaciones de desplazamiento y enmascaramiento en los registros. Mover un solo byte de una ubicación arbitraria a otra puede requerir el equivalente a lo siguiente:

  1. CARGAR la palabra que contiene el byte de origen
  2. CAMBIE la palabra de origen para alinear el byte deseado a la posición correcta en la palabra de destino
  3. Y la palabra fuente con una máscara para poner en cero todos los bits excepto los deseados
  4. CARGAR la palabra que contiene el byte de destino
  5. Y la palabra de destino con una máscara para poner a cero el byte de destino
  6. O los registros que contienen las palabras de origen y destino para insertar el byte de origen
  7. GUARDE el resultado nuevamente en la ubicación de destino

Como alternativa, muchas máquinas orientadas a palabras implementan operaciones de bytes con instrucciones que utilizan punteros de bytes especiales en registros o memoria. Por ejemplo, el puntero de bytes del PDP-10 contenía el tamaño del byte en bits (lo que permitía acceder a bytes de diferentes tamaños), la posición del byte dentro de la palabra y la dirección de palabra de los datos. Las instrucciones podían ajustar automáticamente el puntero al siguiente byte en, por ejemplo, operaciones de carga y depósito (almacenamiento).

Potencias de dos

Se utilizan distintas cantidades de memoria para almacenar valores de datos con distintos grados de precisión. Los tamaños más utilizados suelen ser una potencia de dos múltiplo de la unidad de resolución de dirección (byte o palabra). Para convertir el índice de un elemento de una matriz en el desplazamiento de la dirección de memoria del elemento, se necesita entonces solo una operación de desplazamiento en lugar de una multiplicación. En algunos casos, esta relación también puede evitar el uso de operaciones de división. Como resultado, la mayoría de los diseños informáticos modernos tienen tamaños de palabra (y otros tamaños de operandos) que son una potencia de dos veces el tamaño de un byte.

Familias de tamaño

A medida que los diseños de computadoras se han vuelto más complejos, la importancia central de un único tamaño de palabra para una arquitectura ha disminuido. Aunque el hardware más capaz puede utilizar una variedad más amplia de tamaños de datos, las fuerzas del mercado ejercen presión para mantener la compatibilidad con versiones anteriores y, al mismo tiempo, ampliar la capacidad del procesador. Como resultado, lo que podría haber sido el tamaño de palabra central en un diseño nuevo tiene que coexistir como un tamaño alternativo al tamaño de palabra original en un diseño compatible con versiones anteriores. El tamaño de palabra original sigue estando disponible en diseños futuros, formando la base de una familia de tamaños.

A mediados de la década de 1970, DEC diseñó el VAX para que fuera un sucesor de 32 bits del PDP-11 de 16 bits . Usaron palabra para una cantidad de 16 bits, mientras que palabra larga se refería a una cantidad de 32 bits; esta terminología es la misma que la terminología utilizada para el PDP-11. Esto contrastaba con las máquinas anteriores, donde la unidad natural de direccionamiento de la memoria se denominaba palabra , mientras que una cantidad que fuera la mitad de una palabra se denominaba media palabra . En consonancia con este esquema, una palabra cuádruple VAX tiene 64 bits. Continuaron esta terminología de palabra de 16 bits/palabra larga de 32 bits/palabra cuádruple de 64 bits con el Alpha de 64 bits .

Otro ejemplo es la familia x86 , de la que se han lanzado procesadores de tres longitudes de palabra diferentes (16 bits, más tarde 32 y 64 bits), mientras que palabra sigue designando una cantidad de 16 bits. Como el software se traslada rutinariamente de una longitud de palabra a la siguiente, algunas API y documentación definen o hacen referencia a una longitud de palabra más antigua (y por lo tanto más corta) que la longitud de palabra completa en la CPU para la que se puede compilar el software. Además, de manera similar a cómo se utilizan los bytes para números pequeños en muchos programas, se puede utilizar una palabra más corta (16 o 32 bits) en contextos donde no se necesita el rango de una palabra más amplia (especialmente donde esto puede ahorrar un espacio considerable en la pila o en la memoria caché). Por ejemplo, la API de Windows de Microsoft mantiene la definición del lenguaje de programación de WORD como 16 bits, a pesar del hecho de que la API se puede utilizar en un procesador x86 de 32 o 64 bits, donde el tamaño de palabra estándar sería 32 o 64 bits, respectivamente. Las estructuras de datos que contienen palabras de tamaños tan diferentes se denominan:

Un fenómeno similar se ha desarrollado en el lenguaje ensamblador x86 de Intel : debido al soporte para varios tamaños (y compatibilidad con versiones anteriores) en el conjunto de instrucciones, algunos mnemónicos de instrucciones llevan identificadores "d" o "q" que denotan "doble", "cuádruple" o "doble-cuádruple", que están en términos del tamaño de palabra original de 16 bits de la arquitectura.

Un ejemplo con un tamaño de palabra diferente es la familia IBM System/360 . En la arquitectura System/360 , la arquitectura System/370 y la arquitectura System/390 , hay bytes de 8 bits, medias palabras de 16 bits , palabras de 32 bits y palabras dobles de 64 bits . La arquitectura z/Architecture , que es el miembro de 64 bits de esa familia de arquitecturas, continúa haciendo referencia a medias palabras de 16 bits, palabras de 32 bits y palabras dobles de 64 bits , y además cuenta con palabras cuádruples de 128 bits .

En general, los procesadores nuevos deben utilizar las mismas longitudes de palabras de datos y anchos de direcciones virtuales que un procesador más antiguo para tener compatibilidad binaria con ese procesador más antiguo.

A menudo, el código fuente escrito con cuidado (teniendo en cuenta la compatibilidad del código fuente y la portabilidad del software ) se puede volver a compilar para ejecutarse en una variedad de procesadores, incluso aquellos con diferentes longitudes de palabras de datos o diferentes anchos de dirección o ambos.

Tabla de tamaños de palabras

[8] [9]

Véase también

Notas

  1. ^ Muchas de las primeras computadoras eran decimales y unas pocas eran ternarias.
  2. ^ Las direcciones UNIVAC 1005 utilizan códigos Gray de 5 bits para filas y columnas.
  3. ^ El equivalente en bits se calcula tomando la cantidad de entropía de información proporcionada por el trit, que es . Esto da un equivalente de aproximadamente 9,51 bits para 6 trits.
  4. ^ Señal de tres estados
  5. ^ Aunque z/Architecture es una arquitectura de 64 bits por naturaleza, el término palabra aún hace referencia a una cantidad de 32 bits. Sin embargo, en esta tabla los tamaños se tratan como si una palabra fuera de 64 bits.

Referencias

  1. ^ ab Beebe, Nelson HF (22 de agosto de 2017). "Capítulo I. Aritmética de enteros". Manual de cálculo de funciones matemáticas: programación con la biblioteca de software portátil MathCW (1.ª edición). Salt Lake City, UT, EE. UU.: Springer International Publishing AG . pág. 970. doi :10.1007/978-3-319-64110-2. ISBN . 978-3-319-64109-6. Código LCCN  2017947446. S2CID  30244721.
  2. ^ Dreyfus, Phillippe (1958-05-08) [1958-05-06]. Escrito en Los Ángeles, California, EE. UU. Diseño del sistema de Gamma 60 (PDF) . Western Joint Computer Conference : Contrastes en computadoras. ACM, Nueva York, NY, EE. UU. pp. 130–133. IRE-ACM-AIEE '58 (occidental). Archivado (PDF) desde el original el 2017-04-03 . Consultado el 2017-04-03 . [...] Se utiliza el código de datos internos: los datos cuantitativos (numéricos) se codifican en un código decimal de 4 bits; los datos cualitativos (alfanuméricos) se codifican en un código alfanumérico de 6 bits. El código de instrucción interno significa que las instrucciones están codificadas en código binario directo. En cuanto a la longitud de la información interna, el quantum de información se denomina " catena " y está compuesto de 24 bits que representan 6 dígitos decimales o 4 caracteres alfanuméricos. Este quantum debe contener un múltiplo de 4 y 6 bits para representar un número entero de caracteres decimales o alfanuméricos. Se encontró que veinticuatro bits era un buen compromiso entre el mínimo de 12 bits, que conduciría a un flujo de transferencia demasiado bajo desde una memoria central de lectura paralela, y 36 bits o más, que se consideró un quantum de información demasiado grande. La catena debe considerarse como el equivalente de un carácter en máquinas de longitud de palabra variable, pero no puede llamarse así, ya que puede contener varios caracteres. Se transfiere en serie hacia y desde la memoria principal. Al no querer llamar a un "quantum" una palabra, o a un conjunto de caracteres una letra (una palabra es una palabra y un quantum es otra cosa), se creó una nueva palabra y se la llamó "catena". Es una palabra inglesa y existe en el diccionario Webster, aunque no en francés. La definición de Webster de la palabra catena es "una serie conectada"; por lo tanto, un elemento de información de 24 bits. La palabra catena se utilizará a continuación. Por lo tanto, se ha definido el código interno. Ahora bien, ¿cuáles son los códigos de datos externos? Éstos dependen principalmente del dispositivo de manejo de información involucrado. El Gamma 60  [fr] está diseñado para manejar información relevante para cualquier estructura codificada en binario. Por lo tanto, una tarjeta perforada de 80 columnas se considera un elemento de información de 960 bits; 12 filas multiplicadas por 80 columnas equivalen a 960 perforaciones posibles; se almacena como una imagen exacta en 960 núcleos magnéticos de la memoria principal con 2 columnas de tarjeta que ocupan una catena. [...]


  3. ^ Blaauw, Gerrit Anne ; Brooks, Jr., Frederick Phillips ; Buchholz, Werner (1962). "4: Natural Data Units" (PDF) . En Buchholz, Werner (ed.). Planning a Computer System – Project Stretch . McGraw-Hill Book Company, Inc. / The Maple Press Company, York, PA. pp. 39–40. LCCN  61-10466. Archivado (PDF) desde el original el 2017-04-03 . Consultado el 2017-04-03 . [...] Los términos utilizados aquí para describir la estructura impuesta por el diseño de la máquina, además de bit , se enumeran a continuación. Byte denota un grupo de bits utilizados para codificar un carácter, o el número de bits transmitidos en paralelo hacia y desde unidades de entrada-salida. Aquí se utiliza un término distinto de carácter porque un carácter determinado puede representarse en diferentes aplicaciones mediante más de un código, y los diferentes códigos pueden utilizar diferentes cantidades de bits (es decir, diferentes tamaños de byte). En la transmisión de entrada-salida, la agrupación de bits puede ser completamente arbitraria y no tener relación con los caracteres reales. (El término se acuñó de bite , pero se volvió a escribir para evitar una mutación accidental a bit ). Una palabra consiste en la cantidad de bits de datos transmitidos en paralelo desde o hacia la memoria en un ciclo de memoria. El tamaño de palabra se define, por tanto, como una propiedad estructural de la memoria. (El término catena fue acuñado para este propósito por los diseñadores de la computadora Bull GAMMA 60  [fr] ). Bloque se refiere a la cantidad de palabras transmitidas hacia o desde una unidad de entrada-salida en respuesta a una única instrucción de entrada-salida. El tamaño de bloque es una propiedad estructural de una unidad de entrada-salida; puede haber sido fijado por el diseño o dejado para que lo varíe el programa. [...]


  4. ^ "Formato" (PDF) . Manual de referencia del sistema de procesamiento de datos 7030 (PDF) . IBM. Agosto de 1961. págs. 50–57 . Consultado el 15 de diciembre de 2021 .
  5. ^ Clippinger, Richard F. [en alemán] (29 de septiembre de 1948). "Un sistema de codificación lógica aplicado al ENIAC (integrador numérico electrónico y computadora)". Campo de pruebas de Aberdeen, Maryland, EE. UU.: Laboratorios de investigación balística . Informe n.º 673; Proyecto n.º TB3-0007 de la División de investigación y desarrollo, Departamento de artillería . Consultado el 5 de abril de 2017 .
  6. ^ Clippinger, Richard F. [en alemán] (29 de septiembre de 1948). "Un sistema de codificación lógica aplicado al ENIAC". Aberdeen Proving Ground, Maryland, EE. UU.: Ballistic Research Laboratories . Sección VIII: ENIAC modificado . Consultado el 5 de abril de 2017 .
  7. ^ "4. Formatos de instrucciones" (PDF) . Manual del desarrollador de software de la arquitectura Intel Itanium . Vol. 3: Referencia del conjunto de instrucciones de Intel Itanium. p. 3:293 . Consultado el 25 de abril de 2022 . Se agrupan tres instrucciones en contenedores alineados y de tamaño de 128 bits llamados paquetes . Cada paquete contiene tres ranuras de instrucciones de 41 bits y un campo de plantilla de 5 bits.
  8. ^ Blaauw, Gerrit Anne ; Brooks, Jr., Frederick Phillips (1997). Arquitectura informática: conceptos y evolución (1.ª ed.). Addison-Wesley . ISBN 0-201-10557-8.(1213 páginas) (NB: Esta es una edición de un solo volumen. Esta obra también estuvo disponible en una versión de dos volúmenes).
  9. ^ Ralston, Anthony; Reilly, Edwin D. (1993). Enciclopedia de informática (3.ª ed.). Van Nostrand Reinhold . ISBN 0-442-27679-6.