IBM 704 es el nombre del modelo de una gran computadora mainframe digital introducida por IBM en 1954. Diseñada por John Backus y Gene Amdahl , fue la primera computadora producida en masa con hardware para aritmética de punto flotante . [1] [2] El Manual de operaciones del IBM 704 establece: [3]
La máquina electrónica de procesamiento de datos tipo 704 es una calculadora electrónica de gran escala y alta velocidad controlada por un programa almacenado internamente del tipo de dirección única.
El 704 en ese momento era considerado como "prácticamente el único ordenador que podía manejar matemáticas complejas". [4] El 704 fue una mejora significativa sobre el IBM 701 anterior en términos de arquitectura e implementación. Al igual que el 701, el 704 utilizó circuitos lógicos de tubo de vacío , pero aumentó el tamaño de las instrucciones de 18 bits a 36 bits , el mismo tamaño de palabra de la memoria. Los cambios con respecto al 701 incluyen el uso de memoria de núcleo magnético en lugar de tubos Williams , instrucciones aritméticas de punto flotante, direccionamiento de 15 bits y la adición de tres registros de índice . Para soportar estas nuevas características, las instrucciones se ampliaron para utilizar la palabra completa de 36 bits. El nuevo conjunto de instrucciones , que no es compatible con el 701, se convirtió en la base para la subclase de "arquitectura científica" de las computadoras de la serie IBM 700/7000 .
El 704 podía ejecutar hasta 12.000 sumas de punto flotante por segundo. [2] IBM produjo 123 sistemas tipo 704 entre 1955 y 1960. [5]
Los lenguajes de programación FORTRAN [6] y LISP [7] se desarrollaron primero para el 704, al igual que el ensamblador SAP: Symbolic Assembly Program , posteriormente distribuido por SHARE como SHARE Assembly Program .
MUSIC , el primer programa de música por computadora, fue desarrollado en el IBM 704 por Max Mathews .
En 1962, el físico John Larry Kelly, Jr. creó uno de los momentos más famosos en la historia de Bell Labs al utilizar una computadora IBM 704 para sintetizar el habla. El sintetizador de voz de Kelly recreó la canción Daisy Bell , con acompañamiento musical de Max Mathews . Arthur C. Clarke estaba visitando casualmente a su amigo y colega John Pierce en las instalaciones de Bell Labs en Murray Hill en el momento de esta demostración de síntesis de voz , y Clarke quedó tan impresionado que seis años después la utilizó en la escena culminante de su novela y guion de 2001: Una odisea del espacio , [8] donde la computadora HAL 9000 canta la misma canción. [9] (Bell Laboratories publicó más tarde una grabación, en discos de 78 RPM de diez pulgadas, de voz y música creada de esta manera. Aparentemente se hizo con un IBM 7090 , el sucesor de estado sólido del 704). [ cita requerida ]
Edward O. Thorp , un instructor de matemáticas en el MIT, utilizó el IBM 704 como herramienta de investigación para investigar las probabilidades de ganar mientras desarrollaba su teoría del juego de blackjack . [10] [11] Utilizó FORTRAN para formular las ecuaciones de su modelo de investigación.
El IBM 704 del Centro de Cálculo del MIT se utilizó como rastreador oficial para la Operación Moonwatch del Observatorio Astrofísico Smithsoniano en el otoño de 1957. IBM proporcionó cuatro científicos para ayudar a los científicos y matemáticos del Observatorio Astrofísico Smithsoniano en el cálculo de las órbitas de los satélites: el Dr. Giampiero Rossoni, el Dr. John Greenstadt, Thomas Apple y Richard Hatch.
El IBM 704 se utilizó para los análisis de dinámica de vuelo de los cohetes Vanguard del NRL . [12]
El Laboratorio Científico de Los Álamos (LASL) desarrolló un monitor temprano llamado SLAM para permitir el procesamiento por lotes . [13]
El IBM 704 tenía un acumulador de 38 bits , un registro multiplicador/cociente de 36 bits y tres registros de índice de 15 bits. El contenido de los registros de índice se resta de la dirección base, por lo que los registros de índice también se denominan "registros de decremento". Los tres registros de índice pueden participar en una instrucción: el campo de etiqueta de 3 bits en la instrucción es un mapa de bits que especifica cuál de los registros participa en la operación. Sin embargo, cuando se selecciona más de un registro de índice, sus contenidos se combinan mediante OR bit a bit (no se suman) antes de que se produzca el decremento. Este comportamiento persistió en máquinas de arquitectura científica posteriores (como el IBM 709 y el IBM 7090 ) hasta el IBM 7094. El IBM 7094, presentado en 1962, aumentó el número de registros de índice a siete y solo seleccionó uno a la vez; El comportamiento "o" permaneció disponible en un modo de compatibilidad del IBM 7094. [14]
Hay dos formatos de instrucciones, denominados "Tipo A" y "Tipo B". [15] La mayoría de las instrucciones eran del tipo B.
Las instrucciones de tipo A tienen, en secuencia, un prefijo de 3 bits (código de instrucción), un campo de decremento de 15 bits, un campo de etiqueta de 3 bits y un campo de dirección de 15 bits . Hay operaciones de salto condicional basadas en los valores de los registros de índice especificados en el campo de etiqueta . Algunas instrucciones también restan el campo de decremento del contenido de los registros de índice. La implementación requiere que los segundos dos bits del código de instrucción sean distintos de cero, lo que da un total de seis posibles instrucciones de tipo A. Una (STR, código de instrucción binario 101) no se implementó hasta el IBM 709 .
Las instrucciones de tipo B tienen, en secuencia, un código de instrucción de 12 bits (con los bits 2 y 3 establecidos en 0 para distinguirlos de las instrucciones de tipo A), un campo de bandera de 2 bits, cuatro bits no utilizados, un campo de etiqueta de 3 bits y un campo de dirección de 15 bits .
El conjunto de instrucciones subdivide implícitamente el formato de datos en los mismos campos que las instrucciones de tipo A: prefijo, decremento, etiqueta y dirección. Existen instrucciones para modificar cada uno de estos campos en una palabra de datos sin cambiar el resto de la palabra, aunque la instrucción Store Tag no se implementó en el IBM 704.
La implementación original de Lisp utiliza los campos de dirección y decremento para almacenar la cabeza y la cola de una lista enlazada respectivamente. Las funciones primitivas car ("contenido de la parte de dirección del registro") y cdr ("contenido de la parte decremento del registro") recibieron su nombre a partir de estos campos. [16]
El 704 incluye controles para: un lector de tarjetas perforadas 711 , una impresora alfabética 716 , un grabador de tarjetas perforadas 721, cinco unidades de cinta magnética 727 y una unidad de control de cinta 753, un lector y grabador de tambor magnético 733 y una unidad de almacenamiento de núcleo magnético 737. El peso total era de aproximadamente 19 466 libras (9,7 toneladas cortas; 8,8 t). [17] [18]
El 704 venía con una consola de control con 36 interruptores o botones de control y 36 interruptores de entrada de datos, uno para cada bit de un registro. La consola de control básicamente solo permite configurar los valores binarios de los registros con interruptores y ver el estado binario de los registros mostrados en el patrón de muchas pequeñas lámparas de neón, que se parecen mucho a los LED modernos. Para la interacción humana con la computadora, los programas se ingresaban inicialmente en tarjetas perforadas en lugar de en la consola, y la salida legible por humanos se dirigía a la impresora.
También estaba disponible el grabador de salida de tubo de rayos catódicos IBM 740 , que es una pantalla vectorial de 21 pulgadas con un tiempo de persistencia de fósforo muy largo de 20 segundos para la visualización humana, junto con una pantalla de 7 pulgadas que recibe la misma señal que la pantalla más grande pero con un fósforo de rápida descomposición diseñado para ser fotografiado con una cámara adjunta. [19]
La unidad de almacenamiento de núcleo magnético 737 sirve como RAM y proporciona 4.096 palabras de 36 bits, el equivalente a 18.432 bytes. [20] Las unidades de cinta magnética 727 almacenan más de 5 millones de caracteres de 6 bits por carrete.
El IBM 704 era mucho más fiable que su predecesor, el IBM 701, que tenía un tiempo medio entre fallos de unos 30 minutos. Sin embargo, al ser una máquina de tubos de vacío, el IBM 704 tenía una fiabilidad muy pobre según los estándares actuales. En promedio, la máquina fallaba aproximadamente cada 8 horas, comparable al Manchester Mark 1 en 1949. [21] [22] [23] Esto limitaba el tamaño del programa que los primeros compiladores Fortran podían traducir con éxito porque la máquina fallaba antes de una compilación exitosa de un programa grande. [22]