El KDF8 fue uno de los primeros ordenadores británicos fabricados por English Electric como una versión del RCA 501. Al producir un sistema compatible con el software, la intención era reducir el tiempo y el coste de desarrollo del software. Sin embargo, el largo proceso de desarrollo de la capacidad de fabricación hizo que el sistema fuera superado pronto por los sistemas de otros proveedores. Solo se vendieron unos pocos sistemas durante sus 5 años de producción. Debido a la consolidación de la industria informática británica, la división informática de English Electric se convirtió en uno de los componentes de lo que se convertiría en ICL .
Fondo
A finales de la década de 1950, English Electric se embarcó en dos grandes proyectos informáticos.
En primer lugar, English Electric construyó una versión del ordenador RCA 501 , conocido como KDP10 (KDP por Kidsgrove Data Processing). Se trataba de una máquina destinada a aplicaciones de procesamiento de datos comerciales, con instrucciones de longitud fija y capacidades para procesar datos numéricos y alfanuméricos de longitud variable. El diseño original de RCA se adaptó para utilizar los tipos de transistores, diodos y otros componentes fabricados en el Reino Unido. El KDP10 se entregó por primera vez en 1961. En 1964 se renombró como KDF8 y las ventas continuaron hasta 1965. [1] La máquina era esencialmente la misma que la RCA 501 y se fabricó bajo licencia para que English Electric pudiera ofrecer una gama completa de sistemas informáticos para todos sus clientes, sin el gasto de desarrollar una máquina completamente nueva. La máquina se vendió por 400.000 libras esterlinas. Solo se vendieron 13 unidades. [2] [3]
La segunda computadora de gran tamaño que surgió del trabajo de desarrollo en Kidsgrove fue la KDF9 , diseñada principalmente para trabajo científico.
Se instaló un KDF8 en la oficina informática de The English Electric Company en Kidsgrove (Staffordshire). Con el paso de los años y tras una serie de fusiones, esta organización pasó a denominarse English Electric Leo Marconi (EELM), International Computing Services Limited (ICSL) y, finalmente, en virtud de un acuerdo conjunto entre ICL y Barclay's Bank , Baric.
Características básicas
Procesador/tienda principal
KDF8 era una máquina basada en transistores con memoria de núcleo magnético . La memoria de núcleo de la máquina instalada en la oficina de computadoras Kidsgrove se actualizó de 64k al máximo de 96k de memoria de núcleo de entonces. KDF8 usaba un sistema de direccionamiento octal (base ocho). Una instrucción de código de máquina tenía una longitud fija, diez caracteres octales de longitud. El conjunto de instrucciones estaba diseñado específicamente para uso comercial. Tenía instrucciones de nivel de código de máquina para las cuatro funciones aritméticas decimales que operaban con números de longitud variable, y también tenía instrucciones para la manipulación eficiente de cadenas de datos de longitud variable. No todas las instrucciones requerían los diez caracteres. Dada la memoria de núcleo mínima disponible, los programadores usaban con frecuencia caracteres "de repuesto" en las instrucciones para el almacenamiento de constantes y trucos similares para ahorrar almacenamiento.
KDF8 era estrictamente un ordenador de procesamiento por lotes, que ejecutaba un programa a la vez. Sólo se podía procesar una instrucción de cálculo a la vez, pero también era posible ejecutar en paralelo una instrucción de lectura y/o una de escritura (normalmente desde y hacia una cinta magnética). Se utilizaba un sistema de "puertas" de hardware configuradas y comprobadas a nivel de código de máquina para controlar el grado de funcionamiento sincrónico. Sin embargo, como no había ningún tipo de sistema operativo, esto tenía que controlarse completamente a nivel de programa individual.
El KDP10 en la oficina de servicio fue actualizado in situ, ya que el sistema fue construido con transistores de germanio RCA. Parte de la actualización fue convertir la lógica principal a transistores de silicio. También se agregó un sumador de direcciones de tres caracteres y el ciclo de la máquina fue de 15 microsegundos, con seis pulsos de temporización, donde el sexto pulso era para el tiempo de asentamiento, por lo que el ciclo de la máquina se redujo a 12,5 microsegundos.
El nivel de habilidad del programador para controlar la superposición total de lectura/escritura/computación, especialmente si los registros de datos se "agrupaban" en varios bloques de datos "reales" en cinta magnética, era considerable, ya que todas las comprobaciones de simultaneidad tenían que codificarse manualmente en el programa. La detección automática de errores se limitaba esencialmente a las comprobaciones de paridad de hardware a nivel de caracteres, y no había comprobaciones de hardware del procesador sobre lo que el programador podía hacer. Por ejemplo, la computadora simplemente se detenía si se le ordenaba acceder a una ubicación de memoria más allá de la memoria física.
Periféricos
No había discos magnéticos, tambores ni otros dispositivos similares de almacenamiento temporal. El almacenamiento masivo se limitaba a cintas magnéticas, en carretes abiertos, cada uno de los cuales tenía aproximadamente una pulgada de espesor y nueve pulgadas (229 mm) de ancho, con capacidad para un máximo de 2,400 pies (730 m) de cinta. Los datos y programas se guardaban en estas cintas. La comprobación de errores periféricos se limitaba de nuevo a comprobaciones de paridad en todas las lecturas y escrituras y al uso de anillos de permiso de escritura. El Kidsgrove KDF8 tenía ocho unidades de cinta magnética en línea, cada una con una velocidad de lectura/escritura de 40k caracteres por segundo. Cada unidad de cinta tenía aproximadamente 6 pies (1,8 m) de alto y 2 pies (0,61 m) de ancho, y los gabinetes de procesador y memoria eran aproximadamente del mismo tamaño y número. La configuración de Kidsgrove requería una gran sala con aire acondicionado.
Se consideró que ocho era el número máximo de unidades de cinta, una por canal, para cualquier configuración real del KDF8. Era posible dividir cada canal de cinta mediante unidades de hardware adicionales en un subgrupo de ocho pletinas de cinta, lo que daba un máximo teórico de 61 unidades de cinta en línea. (Se requerían al menos tres identificadores de canal de E/S codificados de forma única para otros dispositivos).
Había otros pares de impresoras y unidades de cinta disponibles que podían funcionar independientemente del sistema central. Estos proporcionaban una función de impresión fuera de línea para la producción en grandes volúmenes, lo que dejaba libre a la KDF8 para realizar otros trabajos.
Otros periféricos incluidos:
- un lector de cinta de papel (1000 cps) para entrada de datos y programa (inicial),
- Dispositivo de teleimpresora para el operador (con una perforadora de cinta de papel lenta incorporada) que permitía a los programas mostrar información al operador y a este utilizar el teclado para perforar programas cortos o elementos de datos en la cinta de papel. Esta teleimpresora no podía utilizarse para introducir datos directamente en la computadora; todos los comandos del operador debían introducirse a través de la consola del operador.
- una impresora en línea, utilizada principalmente para volcados de memoria de programas fallidos.
Tanto las impresoras en línea como las que no lo estaban eran impresoras de impacto, capaces de imprimir una línea de 120 o 160 caracteres, según el modelo. Eran de un solo tipo de letra, sin minúsculas. El papel plegado en acordeón para las impresoras era continuo, con perforaciones entre las páginas y orificios dentados a cada lado del papel para el mecanismo de alimentación de papel. Los tamaños de papel personalizados, con líneas/texto/colores preimpresos, etc. eran comunes, especialmente para aplicaciones como la nómina, y se necesitaban pequeños bucles de control de cinta de papel para hacer coincidir el tamaño de la tirada de página con cada tipo de papel.
Conjunto de instrucciones
Cada instrucción de código de máquina KDF8 tomó el formato
OO AAA RR BBB
En esta representación
OO representa un código de operación de dos (octales) caracteres, que identifica la instrucción a realizar, en el rango de 00 a 77, AAA representa una dirección de núcleo "A" de seis (octales) caracteres que va de 000000 a 777777. (Un almacenamiento principal teórico de 1 ⁄ 4 Meg directamente direccionable, ¡en realidad 96K!) RR representa una configuración de registro de dos caracteres (un carácter para cada uno de los dos registros posibles numerados del 1 al 7 utilizados para modificar las direcciones "A" y "B", donde 0 indica que no hay modificación del registro) y BBB representa la dirección "B", la misma que la dirección "A" en formato.
Las instrucciones se leían por turno desde el almacén principal a los registros y luego se ejecutaban.
Ejemplo. Una instrucción para leer datos desde el lector de cinta de papel en línea hasta las ubicaciones que comienzan en la ubicación de la tienda (octal) 200000 se vería así
14 200000 00 770000 (espacios solo para claridad)
Donde 14 era el código de operación para este tipo de lectura, 200000 era la ubicación de almacenamiento más baja en la que se leerían los datos, 00 indica que no se debía realizar ninguna modificación de registro en las direcciones A o B de la instrucción y 77 era el identificador de dispositivo (fijo) del lector de cinta de papel. (Nota: 77 utilizado como un identificador de dispositivo para una operación de escritura dirigiría la escritura al teletipo del operador. Vergonzoso si esto se debía a un error de programa y era un bloque de datos grande destinado a cinta magnética...) Los últimos cuatro caracteres octales (0000) no eran necesarios en esta instrucción y se ignoraban cuando se procesaba la instrucción. Dichos caracteres "de repuesto" se usaban con frecuencia, dada la memoria principal extremadamente limitada disponible, por los programadores para almacenar constantes.
Algunos aspectos del conjunto de instrucciones fueron avanzados y facilitaron enormemente la programación de sistemas comerciales.
Los códigos de operación 51-54 realizaban operaciones aritméticas decimales de suma, resta, multiplicación y división con números de longitud variable, almacenados como caracteres decimales. Un extremo de cada operando se almacenaba en las direcciones "A" y "B" de la instrucción. El otro extremo se identificaba con un ISS (símbolo separador de elementos), octal 74. Por lo tanto, los números podían tener cualquier longitud. Una instrucción de "comparación de sectores" (octal 43) permitía una ramificación condicional de tres vías del control del programa dependiendo de si los datos almacenados en el rango de la dirección "A" a la dirección "B" eran mayores, menores o iguales que el valor de la misma cantidad de caracteres almacenados en las ubicaciones a la izquierda del registro "T" (previamente establecido), como intenta demostrar la siguiente versión del lenguaje ensamblador.
Etiqueta Op A-Dirección RR B-Dirección
COMPARAR CONJUNTO £T SALARIO,R
TAXLIMIT SC TAXLIMIT,R
CTC POR DEBAJO DEL LÍMITE DE IMPUESTO POR ENCIMA DEL LÍMITE DE IMPUESTO
IGUAL TC IGUAL LÍMITE AXIAL
Este ejemplo compara un salario con un límite impositivo y salta a una de las tres ubicaciones del programa según los valores respectivos. La convención de ensamblador ",R" representa el carácter más a la derecha del campo nombrado. CTC significaba "Transferencia condicional de control" y TC significaba "Transferencia de control (incondicional)"
En el código de "comparación" anterior, el conjunto de instrucciones original (¿KDP10?) comparaba de derecha a izquierda, lo que requería que se comparara toda la longitud de las cadenas de datos, un carácter a la vez. KDP8 se mejoró para comparar de izquierda a derecha, de modo que la comparación pudiera detenerse tan pronto como los valores relativos estuvieran claros, acelerando considerablemente el procesamiento de dichas instrucciones.
Los datos de longitud variable se manejaban con la ayuda de caracteres especialmente designados. El ISS o Símbolo Separador de Elementos, octal 74, generalmente representado como "●", se utilizaba para separar los campos de datos de longitud variable. El octal 75 "<" y el 76 ">" identificaban el inicio y el final de un mensaje de datos, y el octal 777777 se utilizaba por costumbre y práctica para identificar el final del archivo. De este modo, los datos como nombres y direcciones se podían perforar en una cinta de papel para la entrada de datos como (por ejemplo)
<IAN●TAYLOR●41●HIGH STREET●KIDSGROVE●PERSONAL>
Varias instrucciones podían operar directamente sobre estos datos de longitud variable, y los registros podían agruparse, por ejemplo, en lotes de diez en diez en cinta magnética, para un almacenamiento eficiente. Dadas las velocidades de entrada/salida y del procesador relativamente lentas (según los estándares actuales), un aspecto significativo de la tarea del programador era equilibrar la agrupación de datos en cinta, con el cálculo necesario por registro y organizar las operaciones de cómputo y de entrada/salida simultáneas con el objetivo de maximizar la superposición de los cálculos con las operaciones de entrada/salida y evitar que las grabadoras de cinta se detuvieran entre las lecturas de los lotes.
Software
No había sistema operativo. Los programas los iniciaba un operador en línea, a través de una consola de operador. Los operadores también eran responsables de borrar manualmente la memoria y reiniciar la computadora entre programas, montar y cambiar cintas, controlar la impresión fuera de línea y demás.
Había disponibles o se pusieron a disposición algunos paquetes de software estándar, todos ellos escritos en los EE. UU. por la organización RCA. Entre ellos se incluyen los siguientes:
- Un programa de ordenación y fusión controlado por parámetros, capaz de manejar volúmenes muy grandes de datos. Los parámetros de ordenación se podían leer desde el lector de cinta de papel, para ordenaciones puntuales, o bien "compilar" (en realidad, simplemente almacenarlos en el programa). Había numerosos "ganchos" de usuario donde se podía introducir el código proporcionado por el usuario en varias etapas del proceso de ordenación y fusión.
- Un compilador de lenguaje ensamblador llamado EZ-Code. No se utilizó comercialmente durante algún tiempo, ya que el tiempo de compilación se consideraba una carga pesada, pero se empezó a utilizar cada vez más en los últimos años. Para ahorrar tiempo de computación, normalmente un programador hacía una compilación inicial, revisaba el programa manualmente, lo volvía a compilar y luego probaba y depuraba la versión compilada en código máquina del programa, creando un rollo de parches de código máquina en cinta de papel para el programa a medida que se hacía cada corrección. Una vez que se disponía de una copia bastante robusta, los cambios se replicaban en Assembler y el programa se volvía a compilar y a probar. Con frecuencia, la última etapa nunca se completaba del todo y no era extraño que los programas de producción requirieran que se cargaran parches de código máquina desde la cinta de papel para cada ejecución. Además, el personal de Bureau escribió una serie de paquetes comerciales importantes para nóminas, contabilidad y registro de acciones antes de que se aceptara el compilador Assembler, y permanecieron completamente en código máquina. Otra peculiaridad era que las rutinas de generación de E/S del ensamblador no eran utilizadas por una sección de programación, que había escrito su propio paquete de E/S generalizado, llamado Tape Control, basado en los formatos de tabla de descripción de archivos COBOL. Esto automatizó gran parte de la programación propensa a errores de procesamiento/descompilación de registros y controles de operaciones de lectura/escritura simultáneas y condiciones de fin de archivo.
- Un compilador COBOL. Este programa se utilizó muy raramente, ya que las primeras experiencias no habían sido del todo favorables. Una excepción notable fue un programa de diseño de cableado llamado "WRS1", utilizado para ayudar a diseñar el hardware de las posteriores computadoras Mainframe de English Electric KDF9 y System 4. Otra rareza fue un preprocesador de tabla de decisiones para programas COBOL, escrito en COBOL. Esto fue de cierto interés, ya que el personal de programación de la oficina estaba en ese momento experimentando con el uso de tablas de decisiones como una alternativa a los diagramas de flujo. Sin embargo, mientras estos programadores continuaron codificando a mano en ensamblador a partir de las tablas de decisiones escritas a mano con cierto éxito, los gastos generales de compilación impidieron el uso del preprocesador.
Para optimizar el rendimiento de los programas de producción, los programadores de la oficina crearon paquetes estándar de software para nóminas, libros de ventas y compras, registro de acciones, control de existencias y similares, y algunas aplicaciones, como la de nóminas, permitían procesar datos de muchos clientes de la oficina en un solo proceso de computadora, con configuraciones de parámetros individuales que gestionaban los requisitos individuales de cada cliente. Los requisitos más complejos de los clientes se satisfacían con programas personalizados.
Operación de la computadora
Se podía colocar un cargador de arranque muy pequeño (de unas 20 instrucciones) en la parte delantera de cada cinta de programa, pero ni siquiera este método se utilizaba siempre. Las etiquetas de cinta eran (con la excepción de las aplicaciones gestionadas por COBOL y Tape Control) casi inexistentes. Un ciclo de rotación de cintas abuelo/padre/hijo protegía las cintas de producción de grandes desastres, pero exigía controles manuales cuidadosos. Los programadores (o, en el caso de las suites operativas, el personal de control de producción) daban al operador instrucciones escritas sobre qué cinta de programa y cintas de datos cargar, en qué dispositivos y un resumen escrito de cómo cargar e iniciar cada programa. A continuación, el operador cargaba las cintas y cargaba e iniciaba cada programa a su vez de forma manual desde la consola.
La consola consistía en un panel de visualización vertical de aproximadamente 10 pulgadas (250 mm) de alto por aproximadamente 5 pies (1,5 m) de largo con un panel de control de tamaño similar ligeramente inclinado debajo. Cada una de estas dos partes estaba llena de botones etiquetados e indicadores iluminados, cada uno de (aproximadamente) una pulgada cuadrada. La sección de visualización estaba formada por indicadores que cuando se iluminaban mostraban, en caracteres binarios (agrupados como octales), el estado actual de funcionamiento (o estático) de la máquina en la dirección del núcleo de la máquina individual y el nivel de registro, para las operaciones de cálculo, lectura y escritura que estaban en curso en ese momento. Cuando se estaba ejecutando un programa, esta pantalla era un caleidoscopio de luces multicolores que cambiaban rápidamente y parpadeaban. La sección del panel de control consistía en botones para seleccionar el siguiente registro que se iba a configurar y una parte central que reflejaba el diseño de una sola dirección del núcleo de la máquina. Otros botones accedían a operaciones más complejas. El uso de estos botones permitía al operador seleccionar y luego ingresar directamente en las ubicaciones de almacenamiento del núcleo de la máquina y los registros el patrón octal que ingresaba manualmente. Para que un operador ingresara una sola instrucción de máquina, cada uno de los diez caracteres octales de la instrucción debía seleccionarse e ingresarse como su patrón binario, cada uno con el bit de paridad correcto (impar).
Véase también
- Los primeros ordenadores británicos
Referencias
- ^ Simon Hugh Lavington, Las primeras computadoras británicas: la historia de las computadoras antiguas y las personas que las construyeron , Manchester University Press, 1980 ISBN 0719008107 página 76
- ^ B. Jack Copeland (ed.), El cerebro electrónico de Alan Turing: la lucha por construir el ACE, el ordenador más rápido del mundo , OUP Oxford, 2012, ISBN 0191625868 , pp. 166-168
- ^ A. Gandy, La industria informática en sus inicios: limitaciones de escala y alcance , Springer, 2012, ISBN 0230389112 , págs. 196-198