El Hombre en la Luna. Ep. 4: La Computadora de Vuelo.
September 7th, 2006 | Filed under La Conquista del Espacio.El cuarto personaje involucrado en nuestra historia es la computadora de vuelo.
“Gran cosa” dirán ustedes en tono irónico.
“Gran cosa, efectivamente” diré yo con esa seriedad que me caracteriza.
Porque del Apolo todo mundo recuerda a Armstrong y a Aldrin (y a Collins en un lejano tercer lugar) y la computadora es una simple anécdota más. Hoy hablaremos del Sistema de GuÃa y Navegación Apolo, mejor conocido como la Computadora de Vuelo.
La Computadora de Vuelo fue un reto increÃble, y cuando digo un reto, es un reto, no eufemismos. Se encesitaba una computadora capaz de controlar una nave de 13 000 kilogramos, orbitando a 3 500 kilómetros por hora sobre un cuerpo que tenÃa apenas la sexta parte de la gravedad terrestre, que debÃa acertar a un blanco de apenas 10 meros de ancho, y regresar a un punto móvil y acoplarse exitosamente con él. Y todo a la primera, sin posibilidad de fallas, y controlando el consumo de combustible con exactitud: mucho consumo: no regresas. Poco consumo: no llegas. La computadora como la que la NASA utilizó en el Programa Espacial Apolo era, en su tiempo, una maravilla de la técnica. Un prodigio de la miniaturización. El epÃtome de la ciencia moderna. Un aparato que costó US$150 000 (ciento concuenta mil dólares americanos, de aquella época) y que ahora los ingenieros electrónicos fabrican en primer semestre de la carrera… por 40 pesos.
La Computadora fue construÃda (¿dónde más?) en el MIT Instrumentation Lab. Fue producto de las brillantes manos y mentes de Charles Stark Draper, Eldon Hall, Peter Adler y Don Eyles. Un sistema de 30 kilogramos de peso que contaba con la pasmosa y asombrosa cantidad de 5 000 circuitos integrados (en su mayor parte compuertas lógicas) con 74 kilobytes de memoria, de los cuales sólo 4 kilobytes eran de memoria reescribible. Memoria que habÃa sido ensamblada manualmente aro con aro.
¿Aro con aro, dije? SÃ: ¡Aro con aro!

Éstos son los núcleos de ferrita utilizados para ensamblar la memoria de TODAS las computadoras de los sesentas. Miden poco más de un milÃmetro de diámetro y entre sus propiedades se encuentran el poder almacenar un bit de información según si su magnetismo está orientado hacia el norte o hacia el sur. Ese magnetismo se puede leer a través de una variación en una corriente eléctrica, y puede ser cambiado con la aplicación de otra corriente eléctrica. Para ello, es imprescindible ensamblar cada arito en una malla de soporte, que entre otras cosas nos permita leer y variar su orientación magnética. Para ello, se emplea un arreglo como el siguiente:

Aquà tenemos un arreglo, o plano, consistente en cuatro cables: X, Y, Sense e Inhibit. Seleccionamos una fila energizando X, una columna seleccionando Y, y el aro en la intersección está listo para ser leÃdo. Entonces se lee usando el cable Sense. Para poder trabajar con una mayor cantidad de bits a la vez, se empleaban múltiples planos, para formar nibbles (4 bits), bytes (8 bits) o words (15 bits).
Claro está que la lectura no es tan simple como lo que acabo de decir. Que caiga un rayo sobre la casa de mi enemigo más odiado si las cosas son alguna vez tan sencillas como eso. Porque la lectura de estos aros era destructiva. La operación de lectura consiste básiamente en llevar la memoria a cero. Si suena complejo, es porque lo es; me limitaré a describir lo que sucede y no por qué sucede. La operación de lectura consiste en escoger la fila y columna del arito que vamos a leer, y hacer circular una corriente eléctrica por sus respectivos cables en una dirección preestablecida (digamos, de arriba hacia abajo y de derecha a izquierda) que obligará al arito a cambiar su orientación magnética hacia la posición que será considerada como el 0 (digamos hacia el norte) independientemente de la dirección que tenga ahora. Si el arito estaba en la orientación 0, no pasa nada, y el sistema sabe que tiene un cero. Si el arito estaba en orientación 1 (ahacia el sur) entonces tendremos un breve pulso eléctrico en el cable Sense, con lo que nuestro sistema sabrá que tenÃa un uno. Obsérvese la palabra operativa: “tenÃa.” Porque el arito ya no tiene el uno. Ahora tiene un cero: su orientación fue cambiada de fea manera al momento de leerlo. Cada vez que leamos el arito, éste regresará a la posición de cero. Siempre. Por ello, la mayor parte de los sistemas acostumbraban volver a escribir el bit una vez leÃdo. Escribir era como leer, pero esta vez para colocarlo en orientación 1. Para ello, se vuelve a energizar X y Y, esta vez con el doble de corriente y en dirección inversa, lo que causaba una orientación hacia el sur. Claro que si era necesario escribir un 0 y no un 1, entonces se activaba el cable Inhibit, por el cual corrÃa una cantidad de corriente muy pequeña pero que contrarrestaba el impulso inicial hacia el sur, dejando, por tanto, el arito en posición norte. Dado que los cables Sense e Inhibit no se usaban nunca al mismo tiempo, posteriormente algún listillo cuyo nombre se ha perdido en las vicisitudes del tiempo combinó ambos cables en uno solo, con ayuda de otro multiplextor, y se ahorró horas de trabajo para cablear las estructuras. Que eran y siguen siendo muy pequeñas. La siguiente estructura, en tamaño real de 7 por 13 centÃmetros, mide apenas 2 kilobytes:

Gracias a Brian Walenz por su foto.
Pero sólo 4 KB eran escribibles en la Computadora. Para los otros bancos de memoria, que debÃan ser permanentes y no volátiles, se utilizó una estrategia mucho más sencilla: donde debÃa haber permanentemente un 1, habia un aro de ferrita. Donde no debÃa haberlo, habÃa otro aro de ferrita en dirección contraria. Bit que debÃa ser 1, era alambrado a un arito tipo 1. Bit que debÃa ser 0, era alambrado a un arito tipo 0. Hasta 64 alambres apuntaban a cada arito. ImagÃnense el trabajo de cablear con sumo cuidado y a mano un banco de 74 kilobytes de núcleos de ferrita. Me dan hasta escalofrÃos. Un estornudo y habÃa que empezar todo de nuevo. Un error y habÃa que empezar todo de nuevo. Donde el asunto no funcionara como debiera y habÃa que empezar todo de nuevo.
Peor aún. El sistema debÃa ser perfecto y funcionar a la primera. DebÃa ser capaz de controlar toda la nave, y estar totalmente aislada del exterior para evitar el que fuerzas ajenas (como señales de radio de los soviéticos) anularan su capacidad de trabajo. No habÃa el menor margen de error disponible. De ese sistema dependÃa no sólo la vida de dos hombres, el prestigio de una agencia y la credibilidad de un paÃs, sino el sueño de un hombre muerto: el presidente John F. Kennedy. *ay, güey*
Y don Peter y don Don se lanzaron al ruedo de la magna y colosal tarea de diseñar el software, mientras que don Stark y don Eldon se encargarÃan de miniaturizar una computadora a tamaños insospechados y nunca antes vistos. *ay, güey*
Evidentemente, con los recursos del MIT y el presupuesto de la NASA se podÃan hacer cosas maravillosas. La Computadora de Vuelo fue la primera en utilizar circuitos integrados, avance maravilloso que permitió la llegada de la computadora personal unos años después. Y no sólo hicieron una Computadora: hicieron dos, una para el Módulo Lunar y otra para el Módulo de Comando.
HabÃa muchas cosas que tener en cuenta para la construcción de la Computadora. HabÃa limitaciones de espacio, de poder, y de capacidad. La Computadora debÃa ser autocontenida, con la mayor potencia de cómputo posible, y tener integrados los dispositivos de entrada y salida de información. La memoria estarÃa limitada, tanto por el consumo de energÃa como por el espacio disponible. Los aritos de ferrita y sus respectivos cables ocupan su buen espacio, no crean que no. Stark y su equipo de miniaturización consiguiron los alambres más delgados que pudieron y los aritos de ferrita más pequeños que pudieron, y aún asà sabÃan que debÃan colocar el mÃnimo indispensable. Entre los programas de Don y Peter, mas las constantes y las coordenadas fijas, y reduciendo al mÃnimo posible todo el espacio (Pi, por ejemplo, se representaba como la división de 22 entre 7, que da 3.1428) se las arreglaron para colocar todo en 36 864 palabras de 15 bits de longitud, mas otras 2048 palabras de 15 bits como memoria reescribible. Si hacemos cuentas tenemos apenas 72 kilobytes de memoria. Si contamos los dos kilobytes que eran la paridad del sistema, para confirmar que los datos estuieran correctamente almacenados, tenemos 74 kilobytes. Todo el sistema funcionaba en 74 kilobytes. Entre procesador central y memoria el sistema pesaba 30 kilos. Y era la cosa más ligera que uno hubiera podido ver, en una época en que una computadora pequeña medÃa lo mismo que un refrigerador pequeño.
Señoras y señores, damas y caballeros, niñas y niños, macuarros en general: SE LLEGÓ A LA LUNA CON APENAS 74 KB. ¿Por qué eufemismos entonces Windows Vista, en cuestiones de memoria, chupa más que la Lewinsky? Oh, preguntas sin respuesta… pero me desvÃo de mi tema.
Para poder utilizar la computadora era necesario diseñar un sistema de entrada y salida de datos. Evidentemente, esto eliminó el uso de lectoras de tarjetas perforadas y de cintas magnéticas, además de las impresoras o las perforadoras. Las únicas opciones disponibles eran un monitor y un teclado. Y se diseñaron, gracias al avance fabuloso de los LEDs de bajo consumo, de manera tal que en sólo 10 kilos (ultraligero para la época) ya estaba listo el Disky.
Disky, en realidad DSKY, acrónimo de Display and Keyboard Unit, era el sistema de entrada y salida de datos. No era un teclado QWERTY, mucho menos un teclado DVORAK. Simplemente era un teclado numérico con algunas funciones adicionales, como Mas, Menos, Verbo y Adjetivo. Para ingresar un comando o un acción, el usuario debÃa presionar el botón “Verbo” seguido del número de la función. Para ingresar un dato, se presionaba “Adjetivo” seguido del dato. Era una solución ingeniosa y muy elegante, por lo que resultaba muy sencilla y eficiente.

La computadora, como es de esperar, era lenta en términos actuales. Su velocidad se medÃa en kilohertz, y mientras que ahora 3 gigahertz te parecen lentos, en aquellos tiempos 20 kilohertz eran increÃblemente rápidos. La memoria funcionaba a la pasmosa velocidad de 12 microsegundos (la memoria de su computadora actual, por si se lo preguntan, opera en apenas 5 nanosegundos y sigue descendiendo). El procesador funcionaba con un reloj oscilador de 2.048 megahertz, que era dividido en dos pulsos con desfasamiento, lo que producÃa una señal oscilante de 1.024 MHz en cuatro pasos, que a su vez era dividida en dos pulsos de 512 KHz, para obtener la frecuencia maestra con la que se sincronizaban todos los componentes de la nave. La velocidad interna del procesador era de 1 Mhz. La señal maestra era dividida 5 veces para obtener una frecuencia de 102.4 Khz, que a su vez era dividida 17 veces para obtener frecuencias que iban desde los 51.2 Khz (F1) hasta 0.78125 Hz (F17) pasando por F10, que producÃa una frecuencua exacta de 100 Hz y servÃa para mantener activo el reloj en tiempo real. El procesador, que estaba hecho a mano a base de compuertas NOR del tipo RTL (Lógica de resistor a transistor), contaba con la asombrosa cantidad de 11 instrucciones, a saber: TC, CCS, INDEX, XCH, CS, TS, AD, y MASK (básicas); mas SU, MP, y DV (extras). Las básicas podÃas ser usadas usando un simple operador de tres bits, mientras que las extras debÃan utilizar primero el operador INDEX en modo EXTEND antes de poder ejecutar esas instrucciones. Las instrucciones eran:
TC(Transfer Control): Equivalente en términos crudos al Goto de BASIC, con la diferencia de que al terminar la ejecución de la siguiente instrucción se regresaba automáticamente al programa que habÃa solicitado el salto.CCS(Count, Compare, and Skip): Equivalente al WHILE DO de BASIC. La primera parte ejecutaba un contador, la segunda parte comparaba los valores y en su caso saltaba a otra instrucción. Sin embargo, aquà tenemos dos valores de cero: toda una palabra en 0 era un “Cero Positivo” y toda una palabra en 1 era un “Cero Negativo”. AsÃ, aunque se usaran números positivos o negativos siempre se sabÃa cuándo una instrucción se acercaba o se alejaba de cero.INDEX: Añade el dato de una dirección a la dirección especificada, a fuera sumando o restando un valor indice. Esto permitÃa implementar tablas y arreglos de datos.RESUME: Un caso especial deINDEX(INDEX25) que permitÃa ejecutar una interrupción y regresar al sitio de donde salió.XCH(Exchange): Intercambiaba una palabra de la memoria con el contenido del registro de datos A. Si la memoria leida era de solo lectura, evidentemente no pasaba nada y sólo se cargaba en memoria el registro A.CS(Clear and Subtract): Cargaba el registro A con el complemento de datos, según la referencia especificada.TS(Transfer to Storage): Graba el registro A en la dirección especificada.AD(Add): Suma la dirección especificada al registro A y guarda el resultado en A.MASK: Ejecuta la operación lógica AND (”Y”) entre la dirección especificada y el registro A, guardando el resultado en el registro A.MP(Multiply): Multiplica el contenido del registro A y el dato contenido en una dirección de memoria, almacenando una parte del resultado en el registro A y otra parte en el registro LP.DV(Divide): Divide el contenido del registro A entre el contenido de la dirección especificada. Guarda el cociente en el registro A y el resto en el registro Q.SU(Subtract): Resta el dato de la memoria especificada del contenido del registro A y guarda el dato en el registro A.
Con esas instrucciones se hicieron maravillas. Porque el sistema operativo empleado era también un prodigio. Mucho antes que Multics, Unix y sus clones volaran al espacio, el MIT desarrolló un sistema operativo multitarea en tiempo real. El sistema estaba basado en interrupciones, y las tareas tenÃan asignado un tiempo de ejecución basado en su prioridad. Esto garantizaba que las etapas crÃticas, como encender los impulsores, se encendieran siempre a tiempo. Cada trabajo tenÃa asignada su propio espacio de memoria borrable para usar mientras se ejecutaba, y la memoria estaba compartida. En palabras de Peter Adler:
Con tan poca memoria borrable disponible, estábamos forzados a usar la misma dirección de memoria para diferentes propósitos a diferentes tiempos. Asà pues, una localidad cuyo contenido pudiera ser la altitud sobre la superficie lunar durante la etapa de aterrizaje, podrÃa contener los resultados de la alineación por sextante del sistema navegacional estelar del programa de localización. Creo que habÃa piezas de memoria que estaban compartidas siete veces. Pueden imaginarse las pruebas que tuvimos que hacer para asegurarnos de que la misma localidad de memoria no estaba siendo usada más de un programa en un momento dado.
Todas las pruebas hechas por el grupo de diseño del MIT estaban enfocadas a desarrollar un sistema a prueba de errores, que fuera capaz de retener la información crucial del sistema en caso de que fuera necesario reiniciar el equipo. Esta útil caracterÃstica le permitÃa procesar información si una tarea se trababa: el subsistema de prioridad se encargaba de iniciar el procesamiento de una tarea crÃtica, en caso de que una aplicación no devolviera el control del procesador a tiempo. Para ello, se utilizaban dos programas principales: Executive (Ejecutivo) y Waitlist (Lista de Espera). Waitlist manejaba hasta nueve tareas a la vez, siempre y cuando éstas se ejecutaran en cuatro milisegundos o menos. Las tareas que tomarÃan más tiempo serÃan enviadas al Executive, que podÃa manejar hasta 7 tareas. Cada 20 milisegundos el Executive verificarÃa la lista de prioridad de tareas y ejecutarÃa aquella con la prioridad más alta, independientemente de su orden en la pila de trabajo. Esto le permitÃa a la computadora mantener operativas las tareas crÃticas, como el piloto automático, incluso si habÃa programas que fallaran o cusaran problemas. Ésta capacidad serÃa puesta a prueba a fondo por el Apolo 11 en condiciones reales de operación.
Porque no era tan fácil como parece verificar que los programas funcionaran adecuadamente, no. Para muestra, aquà están los programas originales de la Misión Apolo:

¿Funcionará la Comptadora de Vuelo? ¿Armstrong y Aldrin quedarán convertidos en tortilla espacial sobre la Luna? ¿Collins regresará sano y salvo o irá a parar a Marte? ¿Es congnosible el ser? ¡No se pierdan nuestro próximo y emocionante episodio, a la misma batihora y por el mismo baticanal!
Parece increible que con 74KB se pueda llegar a la luna (bueno, y con algunos millones de dolares más)
Lo más lejos que he llegado con 64MB ha sido a unos 47 metros… y eso que los tiré con mucha fuerza!
Y yo que pensaba que a más memoria más posibilidades… que iluso soy!
Vaya, otra excelente historia, quien diria que con esa computadora tejida a mano por las abuelitas entrenadas en el MIT nos llevaran a la luna.
Tonyx….jamás menosprecies el poder de las abuelitas tejedoras!
La mÃa (muy tejedora ella) hacÃa unas mantitas preciosas y comodÃsimas que abrigan un montón y te hacen elevarte al séptimo cielo… y de ahà a la luna, un plis!
No pierdan de vista las maravillas que se pueden lograr con tan pocos recursos. Los partidarios de la teorÃa de la conspiración no comprenden cómo con tan poca memoria y tan poco procesador (actualización: he actualizado la estructura del procesador) se pudo llegar a la Luna. No se dan cuenta que era una computadora especializada, cuyas labores fundamentalmente se reducÃan a tres: saber dónde estaba la nave, cuánto faltaba para llegar, y cuál era su destino.
Por eso escribà este artÃculo, que, caray, sólo es la mitad de lo que deberÃa, porque la Computadora tiene un papel fundamental en el descenso. La Computadora podÃa convertirse en el Gran Villano de la Historia en caso de fallar…
¡Excelente artÃculo Jack! Tal como dices, lo que no entienden los conspirosos es que era una computadora construida con ese simple propósito: coordinar el vuelo del aparato en cuestión.
Ahora, con 7 órdenes de magnitud más en la velocidad del procesador, un millón de veces más en memoria de almacenamiento (reescribible, además) y 100 millones de veces más de memoria de acceso aleatorio (aprox), uso tal poder de cómputo para contar mis desventuras.
¿Y no me da vergüenza?
¿Ah, cómo? ¿No me da?
Nunca termina uno de conocerse.
Asco de generación.
aprovecho estos segunditos para saludarte de nuevo y preguntar… ¿por qué la mudanza?
suerte en tu nueva casa.
¿Por qué la mudanza? ¿Cual? Si te refieres a la de manejador de contenido, de geeklog a wordpress, es porque geeklog ya me quedaba un poco apretado. Si te refieres a la mudanza de estilo, de historia de México a historia del espacio, es porque empecé esta serie el aniversario del lanzamiento del Apolo 11. Si te refieres al cambio de nombre, de 42 a cuarentaydos.org, es porque querÃa que mi blog tuviera su propio espacio. Qué cosas…
Hoy la luna está regrandota como una pelotota… y lo más cercotota que puede estar de nuestra nariz, según las noticias. Hoy los licántropos son más licántropos, y hay menos malandrines en los callejones porque están más alumbrados (los callejones, no los malandrines).
Yo soy conspiranoico hacia los aviones: sigo sin entender cómo carajo se levantan del suelo. Asà que lo de que fuimos (fueron) a la luna con esa cosa tejidita a mano, pues como que no me costarÃa trabajo negarla. Otra cosa es que la niegue, que no la niego, pero vamos, que si quisiera negarla no me costarÃa trabajo.
Ay, ya me lié.
No me imagino si le hubieran metido una computadora con la capacidad de una Cray…
Lo que es peor, mi estimado Mus, ayer hubo eclipse de Luna. Lo malo es que sólo se vió en Europa…