miércoles, 5 de diciembre de 2012

Mi primer ordenador

El primer ordenador con el que trabajé fue el “Univac Solid State 90”  o "Univac UCT" de la casa Remington Rand que instaló la Junta de Energía Nuclear a principios 1960. Un enorme "armario" ante cuyo panel de control me encuentro sentado en la siguiente foto:


La entrada de datos y programas se hacía por medio de fichas perforadas de 90 columnas (en realidad cada ficha contenía dos filas de 45 columnas con cuatro posibles perforaciones redondas cada una). La salida de resultados también se obtenía en fichas perforadas, que debían llevarse luego a una tabuladora para imprimirlas.   


Por cada posición de las líneas impresas, la tabuladora tenía una barra vertical con todos los caracteres imprimibles. Las fichas perforadas iban leyéndose de una en una, y todas las barras se movían, subiendo y bajando, para colocar los caracteres adecuados frente a la cinta entintada. Con un golpe seco, las barras oprimían la cinta contra el papel y se imprimía una línea.

La memoria central era un tambor con 25 pistas, 20 con una cabeza lectora/escritora y 5 (¡de acceso rápido!) con cuatro. Cada pista contenía 200 celdas que podían contener "palabras" de 10 dígitos más signo. Los dígitos estaban formados por cuatro bits, en código “biquinario” (1-2-4-5). Es decir, que en total tenía 200.000 bits = 200k bits (si contáramos en bytes, como actualmente, serían 25K bytes y … ¡calculábamos reactores nucleares!).
Como el tambor giraba a una velocidad de 17667 revoluciones por minuto, el tiempo máximo de acceso a una celda (una vuelta completa del tambor) era de 3,4 milisegundos. Como unidad de tiempo se tomaba la "palabra-tiempo" que era el tiempo que tardaba una celda en ser leída o escrita (17 microsegundos).

Las “palabras” podían contener un dato o una instrucción. En las instrucciones, los dos primeros dígitos indicaban la operación que había que realizar. Los cuatro siguientes, la “dirección” (posición en el tambor) del operando. Y los cuatro últimos, la dirección de la próxima instrucción.

En aquellos primeros momentos se escribían los programas en código máquina directamente. La Remington no proporcionó una primera versión de un lenguaje superior para usuarios científicos (FORTRAN) hasta dos años después.

Las operaciones se realizaban en un “registro” (había tres: rA, rL y rX, con distintas funciones) y no existía “memoria caché” para acelerar el trabajo. Así, para sumar una cierta cantidad a un dato, había que escribir lo siguiente:

                Dirección             Instrucción
                1734                      25 3172 1177
                1177                      70 3190 1195
                1195                      60 3172 1178

La primera instrucción, que está en la posición 1734, indica que hay que llevar al registro rA (25) el dato que está en la posición 3172 y ejecutar a continuación la instrucción que está en la posición 1177. La segunda instrucción dice: sumar (70), a lo que hay en rA,  lo que hay en la posición 3190 y ejecutar la instrucción que se encuentra en la posición 1195. La tercera dice: guardar el contenido de rA (60) a la posición 3172  y tomar la próxima instrucción de la posición 1178…

Lo más cómodo hubiera sido poner las instrucciones en posiciones consecutivas (1734, 1735, 1736, …), pero hay que tener en cuenta que una palabra solo se podía leer o escribir en el momento en que, al girar el tambor, pasaba por delante de una cabeza lectora/grabadora, y en cada pista solo había una (menos en las últimas). Si se hubiera hecho así, cada instrucción habría durado una vuelta de tambor (y con un poco de mala suerte, dos) ya que, mientras se ejecutaba una instrucción, el tambor ya había sobrepasado la siguiente posición.

En el ejemplo, la suma habría durado poco más de una vuelta (3,4 milisegundos). Sabíamos, por ejemplo, que sumar un dato (70) tardaba cinco “palabras-tiempo”, por lo que si el dato a sumar estaba en la posición 3190, la próxima instrucción debía estar a una distancia mínima de cinco palabras (módulo 200). Si en vez de guardar el resultado en el sitio original pudiéramos guardarlo en otro sitio, la duración podría haber sido menor.

La unidad aritmética trabajaba con números de 10 cifras con la coma decimal delante de ellas. Es decir, con números comprendidos entre -1 y +1. Hubo que hacer subrutinas para trabajar en "coma decimal flotante" y así poder trabajar con números comprendidos en valor absoluto entre 10-50 y 1050, imprescindibles para cálculos científicos. Esto implicaba que una simple operación aritmética podía durar unas cuantas vueltas de tambor.

Al programar, además de la hoja en que se escribían las instrucciones, teníamos al lado un “mapa” de la memoria, en la que íbamos anotando las posiciones que íbamos utilizando y, si eran datos, su contenido. Utilizábamos además una tarjeta del tamaño del DNI (que diseñé yo) en la que estaba resumido todo lo que se podía hacer con la máquina:


Mis primeros trabajos con la Univac consistieron  en programar las funciones de uso más común: trigonométricas, hiperbólicas, exponenciales, logarítmicas, de Bessel, raíces, determinantes, etc., cosa que me vino muy bien después para redactar mi tesis doctoral, que versó sobre aproximación de funciones.

2 comentarios:

  1. Muy interesante!!! Sigue contándonos todas las cosas que has hecho!

    ResponderEliminar
  2. Una pregunta... era portatil?.... jejeje
    Un saludo amigo florentino, very good information..

    ResponderEliminar