GEORGE fue el nombre que recibió una serie de sistemas operativos lanzados por International Computers and Tabulators (ICT) en la década de 1960 para la serie de computadoras ICT 1900. Entre ellos se encontraban GEORGE 1 , GEORGE 2 , GEORGE 3 y GEORGE 4 .
Inicialmente, las máquinas de la serie 1900, como la Ferranti-Packard 6000 en la que se basaban, ejecutaban un sistema operativo simple conocido como Executive , que permitía al operador del sistema cargar y ejecutar programas desde una consola del sistema basada en Teletype Model 33 ASR .
En diciembre de 1964, ICT creó una rama de sistemas operativos para desarrollar un nuevo sistema operativo para 1906/7. La rama inicialmente contaba con personal que se liberó al finalizar el trabajo sobre el sistema operativo OMP para el Ferranti Orion . El diseño inicial del nuevo sistema, llamado George en honor al jefe de la División de Programación Básica George E. Felton , [1] se basó en ideas del Orion y el sistema de spooling del ordenador Atlas . [2] En público se afirmó que George significaba GEneral ORGanisational Environment, pero fuentes contemporáneas dicen que era un acrónimo . [3]
En julio de 1965, un equipo de ICT estuvo presente en un seminario en NPL que describía el sistema operativo CTSS desarrollado para el Proyecto MAC del MIT . Decidieron que ICT tendría que proporcionar facilidades de acceso múltiple , conocidas en ICT como MOP, "Multiple Online Processing". En noviembre de 1965, HP Goodman, jefe de la División de Sistemas Operativos, asistió a la Conferencia Conjunta de Computadoras de Otoño en Las Vegas, donde se describieron inicialmente los planes para Multics . [4] Algunas de las características de Multics discutidas influyeron en el desarrollo futuro de George, en particular el almacén de archivos estructurado en árbol.
A finales de 1965, el departamento de marketing de ICT solicitó que se pusiera a disposición rápidamente un sistema operativo más sencillo, especialmente para los miembros más pequeños de la gama. Se decidió que se lanzaran rápidamente dos sistemas más pequeños, conocidos como George 1 y George 2, y el sistema operativo más grande pasó a llamarse George 3.
George 1 era un sistema de procesamiento por lotes simple. Las descripciones de los trabajos se leían desde tarjetas o cintas de papel que controlaban la carga y ejecución de programas, ya sea cargados desde tarjetas, cintas de papel o cintas magnéticas. El lenguaje de control de trabajos permitía definir los periféricos y archivos que se utilizarían y manejar las condiciones de excepción. La descripción del trabajo se revisaba para detectar errores antes de ejecutar el trabajo. George usaba las funciones de confianza del programa proporcionadas por el ejecutivo para ejecutar los programas de usuario.
George II añadió el concepto de manejo de periféricos fuera de línea ( spooling ). Varios módulos diferentes, ejecutándose en paralelo, permitieron la superposición de operaciones de entrada, procesamiento y salida:
Si la instalación fuera lo suficientemente grande, se podrían ejecutar varias copias del módulo central, lo que permitiría procesar varios trabajos en paralelo.
El lenguaje de control de trabajos George 2 permitía el uso de macros almacenadas con facilidades condicionales.
George 2 no ofrecía ningún sistema de archivos; el sistema y los programas de usuario dependían de las funciones proporcionadas por el sistema ejecutivo . Se accedía a los archivos del disco mediante nombres únicos de 12 caracteres y no se proporcionaba ninguna otra seguridad que un bit de "no borrar".
MINIMOP podría ejecutarse simultáneamente con GEORGE 2 en la misma máquina, para proporcionar funciones de tiempo compartido en línea.
GEORGE 3 [5] fue la versión principal de la serie de sistemas operativos para las máquinas más grandes de la serie 1900. Inicialmente fue lanzado para los modelos 1906/7; con el tiempo estuvo disponible para los modelos hasta el 1902T. A diferencia de George 1 y 2, que se ejecutaban como programas de modo usuario bajo el ejecutivo, George 3 era un sistema operativo completo, que dejaba solo el manejo de periféricos y de interrupciones de bajo nivel a una versión reducida del ejecutivo.
George 3 se implementó como una pequeña parte residente en memoria y una colección de capítulos ( superposiciones ) que se cargaban y eliminaban de la memoria según fuera necesario. Los capítulos eran estrictamente independientes de la ubicación, lo que permitía un mejor uso de la memoria. Internamente, George utilizó multitarea cooperativa ; los cambios de contexto podían tener lugar en cualquier cambio de capítulo (llamada de un capítulo a otro), o en otros lugares específicos en el código. El código de nivel de usuario se ejecutaba utilizando multitarea preventiva ; los cambios de contexto se forzaban en operaciones de E/S o tics de reloj. [6]
George se escribió en un ensamblador especial, GIN (George INput), que tenía una compilación condicional más rica y funciones de macros que el ensamblador PLAN estándar. El código utilizó mucho las macros para reducir el esfuerzo de programar un sistema tan grande en lenguaje ensamblador. En versiones posteriores, las funciones de macro de GIN se utilizaron para agregar funciones de programación estructurada al código. Se estima que escribir el sistema llevó 75 años de esfuerzo de programación . [7]
George 3 era un sistema mixto de procesamiento por lotes y en línea. Los trabajos se podían ejecutar desde tarjetas o cintas de la misma manera que George 2, o de forma interactiva desde terminales MOP (Multiple Online Processing), ya sean terminales ASR Teletype Model 33 simples o terminales VDU en modo bloque .
El lenguaje de control de tareas era el mismo en las terminales o en los trabajos por lotes e incluía operaciones condicionales y operaciones macro . A diferencia de los sistemas Unix , el lenguaje de control de tareas era parte del sistema operativo en lugar de ser un proceso de shell a nivel de usuario .
Un trabajo solo podía tener un programa cargado en la memoria a la vez, pero un trabajo podía iniciar otros trabajos para que se ejecutaran simultáneamente, si los recursos del sistema y la política del sitio lo permitían. El sistema intercambiaba los programas de usuario fuera de la memoria mientras esperaban una entrada o una salida si otras actividades requerían memoria para ejecutarse.
George 3 proporcionó un almacén de archivos estructurado en árbol, inspirado en parte por Multics .
Cada usuario del sistema tenía un directorio personal con tantos subdirectorios como fuera necesario. Se podía acceder directamente al directorio personal de un usuario, por ejemplo, el directorio del usuario JOHN se podía consultar como :JOHN , o mediante una ruta completa, por ejemplo, si JOHN estaba en el departamento de informática, su directorio personal podría ser :MANAGER.USERS.COMPSCI.JOHN .
Las listas de control de acceso se utilizaban para seguridad, un usuario podía permitir o denegar a cualquier usuario o grupo de usuarios el acceso a sus archivos o directorios.
El almacenamiento de datos de los archivos se hacía en dos niveles: los archivos podían estar en el disco o, si el sistema tenía poco espacio en el disco, podían relegarse automáticamente a una cinta magnética. Si se intentaba acceder a un archivo que no estaba en línea, el trabajo se suspendía y se solicitaba a los operadores que cargaran la cinta adecuada. Cuando la cinta estaba disponible, el archivo se volvía a colocar en el disco y se reanudaba el trabajo.
El mecanismo de almacenamiento de discos subyacente, George 3, en 1968, fue probablemente la primera versión comercial de un sistema de archivos Copy-On-Write . La forma en que esto funcionaba era que todos los bloques modificados se escribían en bloques en una lista "libre". Los bloques que contenían metadatos también se trataban de la misma manera, pero se escribían físicamente, junto con los bloques de datos, en un orden tal que, cuando se había escrito el bloque "maestro" final, el archivo se confirmaba. Si la máquina fallaba en cualquier momento, el hardware garantizaba que el archivo estaría en su forma original, sin modificaciones, o completamente actualizado.
Otra característica útil era que el Filestore podía emular todos los periféricos estándar, como lectores de tarjetas y perforadoras, cintas magnéticas y discos. Esto permitió que los programas más antiguos de George 1 y 2 que requerían estos dispositivos físicos se pudieran ejecutar en George 3 sin modificaciones. Esto podía acelerar la automatización de trabajos que requerían muchos cambios de cinta o disco en George 1 y 2 hasta el punto de que algo que había requerido dos operadores, varias decenas de cambios de cinta y cinco horas, ahora no requería operadores, excepto para montar dos cintas de trabajo para los resultados, y terminaba en 45 minutos.
A partir del 1904A, se encontraba disponible una unidad de paginación para los procesadores 1900 más grandes y George 4 fue escrito para aprovecharla. George 4 siguió siendo compatible con George 3. Era común alternar George 3 y 4 en la misma máquina y almacén de archivos, ejecutando George 3 durante el día para cargas de trabajo pequeñas e interactivas y George 4 por la noche para trabajos grandes que consumían mucha memoria. [8]
George IV introdujo el concepto de programa disperso , un programa que tenía un espacio de direccionamiento mayor que la memoria asignada y regiones de datos y código de solo lectura ( puras ). Se proporcionaron nuevas versiones del consolidador (vinculador) y compiladores para utilizar estas funciones.
El código fuente de George 3 y 4 era el mismo; se utilizaron las facilidades de compilación condicional del ensamblador GIN para seleccionar qué versión del sistema se estaba compilando.
Como la función de paginación de 1900 no fue emulada por las máquinas de la serie 2900 utilizadas en instalaciones George posteriores, George 4 cayó en desuso antes que George 3.
George se distribuyó de una forma que permitía a un sitio modificar grandes partes del sistema. Se iniciaba una compilación del sistema, que luego se interrumpía justo antes del final y se volcaba en cinta magnética. El compilador GIN permitía continuar la compilación desde este punto en el sitio del usuario, posiblemente modificando el código ya compilado.
Las versiones de George 3 anteriores a la versión 8 se ofrecían en formato binario. Todas las modificaciones necesarias al sistema se realizaban como parches binarios. Para simplificar el proceso, la mayoría de los capítulos de George incluían un área MEND vacía al final.
A partir de la versión 8, el código fuente de George se distribuyó con el binario, tanto en cinta magnética como en microfichas. Se utilizó un sistema de parches de nivel de código fuente, conocido como MENDITS, para modificar el sistema y un capítulo existente podía reemplazarse completamente por el nuevo capítulo modificado.
El grupo de usuarios de George creó un "esquema de intercambio MEND" para compartir modificaciones interesantes de George. Algunas modificaciones se distribuyeron de forma gratuita, mientras que otras estaban disponibles a cambio de una tarifa. Cuando ICL producía una nueva versión de George, a veces incluía modificaciones realizadas por los usuarios.
En la última versión publicada, 8.67, la mayoría de los parches del esquema de intercambio MEND se incluyeron en el código fuente estándar de George y se desactivaron mediante la compilación condicional . Se pueden activar como parte del proceso estándar de adaptación de George para un sitio.
George estaba bien documentado internamente en una serie de carpetas de hojas sueltas, distribuidas como una versión inicial más enmiendas. Finalmente, todas las páginas originales fueron reemplazadas, por lo que cualquier copia nueva de los manuales consistía en una caja de carpetas de hojas sueltas vacías y una pila de enmiendas. La primera enmienda era una lista de colaboradores, y la razón técnica de la enmienda se describía como "para mantener a todos contentos".
Se suministró una versión modificada de George 3 al Centro de Computación Regional de la Universidad de Manchester (UMRCC). Esta conectaba a George 3 con una máquina Cyber de CDC , a la que George suministraba las funciones de entrada/salida sin conexión y cola de trabajos. Tanto ICL como Cyber proporcionaban soporte en línea tanto para el hardware como para el software. El equipo de soporte de Cyber trabajaba en una oficina con el nombre " Cybermen " en la puerta. [ cita requerida ]
Con el lanzamiento de la "nueva gama" de ICL, la serie 2900 con su sistema operativo VME , George quedó obsoleto. Sin embargo, debido al legado de inversión en software para George, ICL lanzó opciones para ejecutar el software de la serie 1900, incluido George, en máquinas de la serie 2900, inicialmente el Entorno de máquina directa (DME), más tarde el Entorno de máquina concurrente (CME), que permitía la ejecución simultánea de código 1900 y 2900 en el mismo sistema.
Continuaron lanzándose nuevas versiones de George 3 para el 2900. La última versión fue la 8.67, lanzada en 1983.
En 2005, al menos un sitio en Rusia todavía utilizaba George 3 bajo DME. [9]
En noviembre de 2014, George 3 se ejecutó en un ICL 2966 reacondicionado en el Museo Nacional de Computación . [10]
David Holdsworth y Delwyn Holroyd obtuvieron copias de las cintas de la edición 3 de George cuando el último sitio en vivo en el Reino Unido , en British Steel Corporation , estaba siendo desmantelado y escribieron un emulador para el hardware y el ejecutivo de 1900 que permite ejecutar George en Microsoft Windows y Linux como parte de un proyecto para la Computer Conservation Society . [11] [12]
De repente, recibí un mensaje de correo electrónico de un ruso que todavía tiene un sistema George 3 funcionando en DME.
Me complace informar que el proyecto 2966 ha alcanzado un hito importante este mes. El 15 de noviembre cargamos con éxito George 3 bajo CME por primera vez y al final del día la terminal 7501 estaba disponible para que los visitantes jugaran la aventura de Colossal Cave, que normalmente se aloja en una Raspberry Pi que ejecuta el emulador ejecutivo George 3.