El IBM System/3 fue un ordenador de gama media de IBM introducido en 1969, [1] y comercializado hasta 1985. Fue producido por IBM Rochester en Minnesota como un ordenador empresarial de gama baja [2] destinado a organizaciones más pequeñas que todavía utilizaban ordenadores de la serie IBM 1400 o equipos de registro de unidades . El primer miembro de lo que IBM denomina su línea de "gama media", también introdujo el lenguaje de programación RPG II . Es el primer antecesor de la línea de productos cuya versión actual es la serie IBM i e incluye el exitoso AS/400 .
En su lanzamiento en 1969, estaba disponible por 1000 dólares al mes: menos de la mitad del costo de un IBM System/360 Modelo 20 ; [3] el miembro más pequeño de la familia IBM System/360.
Muchas de las unidades originales del modelo System/3 10 se entregaron sin disco; al mismo tiempo, solo se introdujo la nueva unidad de tarjeta multifunción IBM 5424 (MFCU), que leía, perforaba, imprimía y clasificaba las nuevas tarjetas perforadas más pequeñas de 96 columnas .
IBM entregó los siguientes modelos:
En la terminología de IBM, generalmente se hace referencia a los modelos System/3 y sucesores System/32 , System/34 , System/36 y System/38 como "sistemas de rango medio" [6] , en contraste con los mainframes de IBM .
El IBM System/3 fue anunciado como un sistema informático que inicialmente constaba de: [7]
Los modelos de entrada tenían tan sólo 4K (4096) bytes de memoria de núcleo magnético .
Para el almacenamiento masivo, el System/3 utilizaba el disco IBM 5444 de un solo plato , [8] aproximadamente del tamaño de una pizza grande; inicialmente, cada plato contenía 2,5 MB de datos. La configuración estándar para el almacenamiento era uno o dos discos fijos, cada uno en un cajón extraíble separado, que normalmente contenían el sistema operativo y los programas desarrollados por el usuario. Además, cada disco fijo podía tener conectado un disco de cartucho extraíble; estos normalmente contenían los archivos de datos asociados a varias aplicaciones, por ejemplo, Payroll, y los usuarios frecuentemente tenían varios de ellos. Por lo tanto, los sistemas de gama baja podían admitir un máximo de 10 MB de almacenamiento en línea (dos fijos, dos extraíbles), aunque en la práctica esto era muy caro y no era común.
El System/3 también estaba disponible con la unidad de disco IBM 5445 (20 MB) y, más tarde, el modelo 15 admitía unidades 3340 de estilo "Winchester". En los modelos más pequeños, si bien se podían conectar unidades 5445, había que conservar la 5444 para el sistema operativo y otras bibliotecas de programación; sin embargo, esa limitación se modificó con un software llamado elimn8 que permitió que las unidades 5445 sustituyeran totalmente a las 5444. Otras empresas, como Memorex, fabricaron unidades 5445 compatibles con el System/3.
El dispositivo de tarjetas perforadas más común era la IBM 5424 Functional Card Unit (MFCU), que leía, perforaba, imprimía y clasificaba las nuevas tarjetas perforadas más pequeñas de 96 columnas . En lugar de los orificios rectangulares de la clásica tarjeta IBM de 80 columnas, las nuevas tarjetas tenían pequeños orificios circulares (de 1 mm) muy parecidos a la cinta de papel . Los datos se almacenaban en un código decimal codificado en binario de seis bits, con tres filas de 32 caracteres cada una, o en EBCDIC de 8 bits , con los dos orificios adicionales ubicados en las filas superiores. Las nuevas tarjetas tenían espacio para 128 caracteres impresos en cuatro filas de 32 caracteres cada una. Tenían aproximadamente 1/3 del tamaño de las antiguas tarjetas de 80 columnas, pero contenían un 20% más de datos de texto. La tarjeta más pequeña, y por lo tanto más ligera, podía procesarse con un equipo más rápido y con menos atascos.
Disponibles como RPQ (equipos de pedido especial) para manejar tarjetas de 80 columnas estaban la máquina de tarjetas multifunción IBM 2560 (MFCM), que podía leer, perforar, interpretar y clasificar, y la IBM 1442 , que solo podía leer y perforar.
El almacenamiento fuera de línea estaba disponible con la compra de una unidad de cinta externa que leía y escribía cintas IBM de 9 pistas estándar .
El System/3 Mod 10 incluía opcionalmente el subsistema de cinta magnética IBM 3410.
La consola de operador del sistema/3 (OCF) consistía en una máquina de escribir IBM Selectric modificada interconectada a la computadora o en una pantalla IBM 3270 especial . Dentro de la OCF, había capacidad para "cancelar" procesos y/o tareas que se estaban ejecutando, incluyendo cualquiera de las particiones (P1 o P2). El sistema solo podía ejecutar dos programas simultáneamente, excepto el modelo 15 o los sistemas que ejecutaban el programa de control de comunicaciones, CCP. El CCP era una característica de programación de control del sistema que permitía soportar una red en línea de terminales .
Al sistema principal se le agregó una impresora más pequeña (IBM 5203). La 5203 era una impresora en cadena con cartuchos intercambiables. Podía funcionar a 100 o 200 líneas por minuto, según el modelo. [9] Más tarde, IBM ofreció varios modelos de la línea de impresoras IBM 1403 existente , que originalmente se había construido para la computadora IBM 1401 .
Con la llegada del sistema de entrada de datos IBM 3740 , el System/3 Modelo 10 obtuvo una característica llamada LCA (adaptador de comunicación local) que permitía que una estación IBM 3741 se "conectara" al sistema para transmitir/recibir datos. Los modelos posteriores del System/3, como el Modelo 8, no tenían tarjeta y utilizaban el disquete de 8" estilo 3740 .
El conjunto de instrucciones se optimizó para dos aspectos clave del producto: la disponibilidad limitada de memoria principal y el lenguaje de programación RPG II. El S/3 original (modelos 10 y luego 6, 8 y 12) tenía 29 instrucciones, todas ocupando entre 3 y 6 bytes (24 a 48 bits).
Los primeros 4 bits transmitían mucha información: "1111" significaba que se trataba de una instrucción sin operandos, conocida como comando, por ejemplo, Start I/O (la operación de E/S se definía mediante registros de E/S cargados previamente). "11xx" y "xx11" significaban una instrucción de 1 operando, como una Branch. Si xx era 00, el operando se direccionaba por su dirección completa de 16 bits. xx=01 o 10 significaba que se utilizaba el direccionamiento por desplazamiento de base, utilizando el registro de índice 1 o 2 respectivamente. Una dirección base se habría cargado previamente en uno de los dos registros de índice y la instrucción contenía el desplazamiento de hasta solo 256 bytes (8 bits de direccionamiento).
Otros patrones para este primer medio byte indicaban una instrucción de 2 operandos. "0000" significaba que ambos operandos estaban direccionados por su dirección directa de 16 bits. "0100": el operando 1 usa reg 1 como base; el operando 2 usa direccionamiento directo. "0110": el operando 1 usa reg 1 como base, el operando 2 usa reg 2. Y así sucesivamente.
Los 4 bits restantes del primer byte definían aún más la instrucción. Esta estructura significaba que existía la capacidad de tener hasta 64 operaciones en total: 16 comandos (aunque nunca hubo más de cinco en toda la gama de productos); 16 instrucciones de 1 operando que comenzaban con 11xx; 16 instrucciones de 1 operando que comenzaban con xx11; 16 instrucciones de 2 operandos.
Además de los dos registros de índice ya mencionados (a los que se hace referencia como 1 y 2, o binarios 01 y 10), había otros registros. "Reg 4" (0100) era el registro de dirección de instrucción (IAR) que apuntaba a la instrucción actual. "Reg 8" (1000) era el registro de recuperación de dirección (ARR), establecido por ciertas instrucciones. Entre ellos estaba la bifurcación condicional (mnemónico BC) que lo utilizaba para apuntar al byte inmediatamente siguiente a la operación de bifurcación. Para los programadores acostumbrados al comportamiento de los mainframes de IBM, esto significaba que la operación de bifurcación de S/3 podía compararse con un BALR condicional (registro de bifurcación y enlace), muy útil cuando se bifurca a una subrutina y se regresa después de que se haya procesado. Finalmente, "Reg 16" (00010000) era el registro de estado del programa (PSR), que contenía cosas como los resultados de una instrucción de comparación. Nótese que los registros se utilizaban solo para direccionamiento y estado del programa, no para aritmética.
Las instrucciones aritméticas proporcionadas entre las 29 instrucciones eran suma/resta binaria (proporcionada para ayudar a manipular direcciones) y suma/resta decimal. La multiplicación y la división no estaban previstas en el hardware estándar, y debían ser manejadas por rutinas de software. No había provisión alguna de punto flotante. Todo esto siguió siendo así incluso con los posteriores y generalmente más sofisticados Systems/34 y 36.
Todo lo anterior se complicó aún más con el modelo 15 del System/3 y los Systems/34 y /36. Aunque todavía utilizaban direccionamiento de 16 bits, todos estos sistemas podían soportar más de 64 K de almacenamiento principal (hasta 512 K y teóricamente más), por lo que se utilizaba la traducción de direcciones para cambiar de un espacio de direcciones de 64 K a otro. Los registros de traducción de direcciones se configuraban para definir el espacio de direcciones real en uso en cualquier momento, y su contenido se concatenaba con la dirección de 16 bits utilizada por un programa para producir una dirección real. Estos "ATR" eran privilegiados y solo estaban disponibles para el sistema operativo.
El modelo 10 original del S/3 (y el posterior modelo 12) tenían una forma opcional de multiprogramación llamada función de doble programa. Esta función ya no proporcionaba direccionamiento de la memoria principal, pero proporcionaba dos conjuntos de registros e instrucciones que cambiaban de un "nivel de programa" a otro. Las instrucciones de E/S estándar también se modificaron para que cambiaran cuando se iniciaba una E/S.
Hasta ahora, solo se ha explicado aquí el primer byte de la instrucción. El siguiente byte ("Q") era generalmente un calificador, como especificar la cantidad de bytes que se moverían en una operación de movimiento de caracteres o la condición que se probaría en una bifurcación. Un par de instrucciones usaban este byte para un operando "inmediato" de 1 byte. El o los bytes restantes eran para el o los desplazamientos o la o las direcciones de los operandos, o los detalles de algunos comandos.
Un ejemplo: un comando simple, Salto condicional, un tipo especial de rama condicional (sólo hacia adelante, hasta 256 bytes) adecuada principalmente para saltar sobre bloques cortos de código: Byte de código de operación = F2 (esto está en hexadecimal, Hex F es binario 1111, Hex 2 (0010) define la operación); Byte Q = 00000001 especifica que "saltamos" si el registro de condición tiene el bit "igual" activado; Operando = 00011000: si se cumple la condición, saltamos 24 bytes hacia adelante.
Los indicadores eran interruptores binarios que se utilizaban para controlar el flujo del programa. El programador tenía a su disposición más de 100 de ellos. Al utilizar los formatos de instrucciones explicados anteriormente, muchas de las operaciones orientadas a los indicadores podían caber en tan solo 3 bytes. Por ejemplo, una línea de RPG podía probar un indicador para comprobar si estaba "encendido": 3 bytes para una operación de "Bits de prueba activados"; luego 3 bytes para un salto, como se describió anteriormente, y útil para el compilador de RPG. Ahorrar algún byte aquí y allá era bueno cuando solo se contaba con 64 K para jugar y, en el propio S/3, eso tenía que incluir el sistema operativo (que aumentó a unos 20 K en el modelo 10 con la introducción del "Programa de control de comunicaciones", CCP).
Un lenguaje de control de trabajos simple llamado Lenguaje de Control de Operaciones (OCL) era superficialmente similar al Lenguaje de Control de Trabajos (JCL).
Se utilizaron comandos de control del operador (OCC) para comunicarse con el sistema.
El System/3 admitía RPG II , Fortran IV , COBOL y Assembler . [10]
El System/3 venía de serie con un compilador RPG II . En un sistema de solo tarjetas, el compilador RPG II se suministraba en dos fases. La primera fase se iniciaba desde una tolva de entrada de la MFCU y luego se leía la fuente después del compilador. Se perforaba un formato intermedio en tarjetas, que luego eran leídas por la segunda fase del compilador. A continuación se perforaba una baraja de programa ejecutable. Este ejecutable podía entonces iniciarse ("IPL'ed", para "Initial Program Load") para realizar el procesamiento deseado. Este proceso podía requerir más de una hora para un programa de tamaño significativo.
El System/3 no tenía ninguna disposición para detener un proceso una vez que había comenzado a ejecutarse. Por ejemplo, si una compilación fallaba debido a un error en la primera página, el usuario tenía que esperar a que se imprimiera en su totalidad un listado de compilación, a veces voluminoso. Los usuarios aprendieron a alcanzar la impresora y empujar el conducto de descarga de papel, lo que hacía que la máquina se detuviera y apareciera un "P3" (error de impresora). El usuario podía entonces marcar el código de respuesta FF para abortar la ejecución. Otra forma de detenerlo era simplemente presionar el botón verde "Iniciar" en la consola, lo que hacía que el sistema se reiniciara.
Los códigos de error se mostraban en una pantalla de siete segmentos de dos dígitos (una de las primeras que se vieron y construida con lámparas en lugar de LED). La gama de códigos de error incluía no solo dígitos decimales y hexadecimales (como se usan comúnmente en las pantallas de siete segmentos), sino también un conjunto limitado de otras letras; por ejemplo, "P3" era uno de los varios códigos de error de la impresora. Un manual grueso que venía con el System/3 ayudaba al operador a interpretar los códigos de error y sugería procedimientos de recuperación. El System/3 no tenía un dispositivo de advertencia audible, por lo que un programa que no estuviera imprimiendo, leyendo tarjetas o causando otra actividad obvia podría detenerse y el operador no lo sabría a menos que mirara la pantalla de estado. Los modelos con la función de programa dual tenían dos pantallas de estado independientes.
La mayoría de los usuarios no compraron una consola. En su lugar, el código OCL se suprimió por completo o se imprimió en la impresora 5203. La consola ofrecida por IBM ralentizaba enormemente la ejecución del programa cuando imprimía comandos OCL, ya que era básicamente una máquina de escribir eléctrica .
El concepto de introducir las tarjetas perforadas a través de la consola era una estrategia de marketing. En realidad, el System/3 no podía ser un ordenador y una máquina perforadora de tarjetas al mismo tiempo, así que cuando era una máquina perforadora de tarjetas no era posible realizar ningún tipo de computación. El IBM System/3 original, que se presentó en julio de 1969, tenía la consola perforadora de tarjetas, de modo que podían ofrecer un ordenador por menos de 2.000 dólares al mes. En realidad, no era viable y casi invariablemente los usuarios adquirían una máquina perforadora/verificadora independiente.
Posteriormente, varias empresas OEM construyeron perforadoras, clasificadoras y compaginadoras de 96 columnas. Esto le quitó el "trabajo pesado" a la MFCU y liberó al System/3 para funciones de computación reales.
La mayoría de los usuarios experimentados del System/3 minimizaron el uso de la MFCU tanto como fue posible, ya que era un cuello de botella del sistema.
Los posteriores System/32 , IBM System/34 e IBM System/36 podían ejecutar aplicaciones System/3 a través de emulación.
El System/32 utilizaba un procesador microcodificado verticalmente , con palabras de microcódigo de 16 bits, que emulaba el conjunto de instrucciones del System/3, bastante lentamente, en microcódigo. El System/34 y el System/36 tenían dos procesadores: un procesador de almacenamiento de control (CSP), como en el System/32, que manejaba la mayoría de las operaciones de supervisión y entrada/salida, y un procesador de almacenamiento principal (MSP). Este último era una reimplementación del procesador System/3 modelo 15; proporcionaba efectivamente una "emulación de hardware" del System/3.