Incompatible Timesharing System (ITS)
ITS es un sistema operativo de tiempo compartido revolucionario e influencial desarrollado por el Masachussets Institute of Technology en el Laboratorio de Inteligencia Artificial.
El desarrollo de ITS inició a finales de la década de 1960 como alternativa acción Multics (que había inicia a mediados de 1960s), el nombre Incompatible Timesharing System era una broma sobre el nombre de su precedesor en MIT; el Compatible Time-Sharing System que data de inicios de 1960s. ITS se escribió en assembly inicialmente para la DEC PDP-6 y posteriormente para la PDP-10.
ITS introdujo características significativas:
-
Contaba con la primera salida de terminal gráfica independiente del dispositivo; los programas generaban comandos genéricos para controlar el contenido de la pantalla, que el sistema traducía automáticamente a las secuencias de caracteres adecuadas para el tipo de terminal utilizado por el usuario.
-
Un mecanismo general para implementar dispositivos virtuales en software que se ejecutaban en procesos de usuario (llamados “trabajos” en ITS).
-
Mediante este mecanismo, proporcionaba acceso transparente al sistema de archivos entre máquinas (casi con toda seguridad, el primer sistema operativo en hacerlo). Todas las máquinas ITS estaban conectadas a ARPAnet, y un usuario de una de ellas podía realizar las mismas operaciones en archivos de otras máquinas ITS que en archivos locales.
-
Gestión sofisticada de procesos; los procesos de usuario se organizaban en un árbol, y un proceso superior podía controlar un gran número de procesos inferiores. Cualquier proceso inferior podía congelarse en cualquier punto de su operación y examinarse su estado (incluido el contenido de los registros); el proceso podía reiniciarse entonces de forma transparente.
-
Una función avanzada de interrupción de software que permitía a los procesos de usuario operar de forma asíncrona, utilizando mecanismos complejos de gestión de interrupciones.
-
PCLSRing, un mecanismo que proporcionaba lo que (para los procesos de usuario) parecían ser llamadas al sistema casi atómicas e interrumpibles de forma segura. Ningún proceso podía observar a otro proceso (ni siquiera a sí mismo) durante la ejecución de una llamada al sistema.
-
Para apoyar el trabajo de robótica del Laboratorio de IA, ITS también admitía operaciones simultáneas en tiempo real y en tiempo compartido.
Todos los programas en ITS se ejecutan en JOBS, cuando se presiona CALL y
se obtiene la atención de ITS, ITS crea un JOB llamado HACTRN para ti, e
inicia una copia de DDT en este.
Cuando DDT inicia, imprime el número de versión el número de tu TTY,
cuantos usuarios hay conectados al sistema y que tan cargado está. El prompt
de DDT es *
Es importante entender que ITS es uns sitema muy abierto, aunque no es posible iniciar sesión sin una cuenta, los usuarios pueden leer y modificar los arhivos de otros, incluido el e-mail.
No existe la protección de archivos, si escribes o borras
archivos en los directorios del sistema, la acción solo es registrada; pero
nada más.
Hay poca protección de procesos, los procesos no se pueden meter
con otros procesos, pero los usuarios pueden tomar posesión de los procesos de
otros, depurarlos, etc.
Hay poca protección del sistema, Cualquiera puede detener el sistema
usando el comando :LOCK.
El comando :INFO, da acceso a la ayuda del sistema.
Instalando ITS (en un simulador)
Un contenedor de Docker con Ubuntu 24.04
docker run -it -v./:/its:Z ubuntu:24.04 bash
apt update
apt istall git sudo libegl1-mesa-dev libgles2-mesa-dev libssl-dev \
libsdl2-dev vim build-essential expect libncurses-dev
cd /its
make EMULATOR=simh
Cuando se utiliza ITS vía una terminal convencional, CTRL+Z puede usarse
para simullar un CALL. Igual que ALTMODE es la tecla ESC y se
representa con $.
BACKNEXT se simula con CTRL+_
:LOGOUT
:REATTACH `uname`/K
Los directorios en ITS no son jerárquicos, hay un número finito de directorios; todos en el mismo nivel, sin sub-directorios.
Supdup
Ctrl-^ q
Lista el contenido de un directorio
:LISTF <nombre_directorio>
Sistema de Arhivos
Cada nombre de archivo en ITS tiene cuatro campos, no todos necesarios (aunque algunos pueden estar especificados por default).
DSK: MYDIR; MYFILE NEW
<dispositivo>: <directorio>; <nombre_archivo1> <nombre_archivo1>
-
Dispositivo - es el dispositivo de hardware/software donde vive el archivo.
-
Directorio - el nombre del directorio (si aplica).
-
nombre_archivo1 - los primeros 1 a 6 carácteres del nombre de archivo.
-
nombre_archivo2 - los segundos 1 a 6 carácteres del nombre de archivo.
ITS reconoce el caracter > como segundo nombre de archivo de forma especial, esta convención permite crear nombres de archivos numerados.
DDT trataarchivos que tienen un primer nombre de archivo TS. Cuando un usuario escribe:
:<job-name>
DDT buscará un archivo llamado “TS” en los directorios según las reglas de búsqueda del usuario. Si DDT encuentra dicho archivo, se espera que esté en formato binario ejecutable.
Tradicionalmente, muchos nombres de archivo secundarios han recibido un tratamiento especial. A continuación, se muestra una lista de algunos de estos nombres de archivo.
COMPRS: Esta es una biblioteca comprimida de TECO. :EJ: Esta es una biblioteca
compilada de TECO. (Tenga en cuenta que : es especial para nombrar archivos
y generalmente significa el final de un campo de dispositivo. Para escribir un
nombre de archivo con “:”, debe escribir ^Q (Control-Q) inmediatamente antes
de los dos puntos. Ejemplo: DSK:FOO;BAR ^Q:EJ
SALIDA: Este es un archivo temporal generado por un programa. Estos archivos deben renombrarse con un nombre más útil cuando el programa termine de usarlos. Se sabe que el GFR (Grim File Reaper) elimina archivos con este nombre sin preguntar.
@XGP: Este es un archivo temporal creado por el comando “:@”. El programa @ normalmente pone este archivo en cola para su salida en el XGP y luego lo elimina automáticamente. XGP: Este es un archivo creado por algún programa de justificación de texto (por ejemplo, TJ6) para su salida en el XGP. Estos archivos también suelen considerarse temporales. PRESS: Este es un archivo, también temporal, creado para su salida en la impresora Dover.
LAP: Este es un archivo que contiene un programa de ensamblaje Lisp. (compilado, no ensamblado). FASL. Este es un archivo que contiene un programa binario Lisp de carga rápida (compilado y ensamblado).
(INIT) Anteriormente, los archivos de inicialización tenían nombres de archivo originales y “(INIT)” como segundo nombre de archivo. Esta convención se ha eliminado, en favor de un primer nombre de archivo igual al nombre de inicio de sesión del usuario y un segundo nombre de archivo igual al nombre del programa.
Thus, the following old file names now convert into the new
file names as shown:
.DDT. (INIT)
.DDT_ (INIT)
.EMACS (INIT)
.TECO. (INIT)
.LISP. (INIT)
MACSYM (INIT)
Para imprimir (en pantalla) un archivo
:PRINT <archivo>
Renombrar archivos
:RENAME <nombre_archivo>,<nuevo_nombre_archivo>
El caracter , (coma) separa el nuevo nombre del nombre original.
Copia achivos
:COPY <nombre_archivo>,<archiv_destino>
El archivo destino, puede epecificar la ruta en otro directorio o dispositivo.
Cuidado si el archivo destino existe, este es sobre-escrito sin
ninguna advertencia.
**Mover archivos
:MOVE <nombre_archivo>,<archivo_destino>
Este comando borra el archivo original si la copia al destino es exitosa.
Borrar archivos
:DELETE <nombre_archivo_completo>
Cuidado, es necesario especificar completamente el nombre de
archivo. Si solo se escribe el comando :DELETE, se elimina el último
archivo usado en DDT.
DDT
DDT es la interface de comandos más comunmente usada en ITS, provee invocación de comandos, manipulación de archivos y ayuda para depurar programas.
Los número en DDT representan ocatl a menos que tengan un punto decimal, en tal caso representan decimales. Siguiendo el manual de ITS 1.5 bit
| borra el último caracter tecleado. | ||||
| ^D | Cancela todo lo tecleado sin procesar | |||
| ^L | Limpia la pantalla | |||
| ^S | Deshabilita la salida hacia la terminal del comando en progreso(Muchos comandos DDT se detendran si piensan que no están haciendo nada útil) | |||
| ^G | Comando abortar | |||
| ^Z | Detiene un programa en ejecución y devuelve el control de la terminal a DDT | |||
| ^W | Deshabilita la salida a la terminal por periodos largos | |||
| ^V | Habilita la salida a la terminal | |||
| ^E | Deshabilita la salida a un archivo | |||
| ^B | Habilita la salida a un archivo | |||
| ^_ | BACK-NEXT se usa para comunicarse con otros usuarios y/o especificar varios opciones relacionadas com el manejo de la terminal de ITS |
En ITS cada copia de un programa en ejecución debe residir en un job que es una máquina virtual muy parecida a una PDP-10. Cada job tiene dos nombres: UNAME que identifica al usuario al que pertenece y JNAME que distingue entre varios jobs del mismo usuario. El primer job que cualquier usuario tiene es aquel donde ITS pone su DDT; el nombre de ese trabajo siempre es HACTRN (una parodia de FORTRN).
| Colon Commands | Abreviación | Descripción | |||||
| :LOGIN |
Login | ||||||
| :TCTYP <terminal | HELP> | Tipo de terminal | |||||
| :MSGS | Imprime mensajes del sistema | ||||||
| :PRMAIL | Imprime el email | ||||||
| :LOGOUT | $$U | Finaliza la sesión | |||||
| :DETACH | separa el arbol de jobs del usuario | ||||||
| :ATTACH | – | ||||||
| :REATTACH |
Se usa para mover jobs de una consola aotra | ||||||
| :DELETE |
Borra un archico | ||||||
| :PRINT |
^R | Imprime el contenido de un archivo | |||||
| :LISTF |
<directory | sname> ^F | Lista el contenido de un directorio | ||||
| :RENAME |
$$^O |
Renombra un archivo | |||||
| :COPY |
$^R |
Copia un archivo | |||||
| :MOVE |
Mueve un archivo | ||||||
| :LINK |
Enlaza un archivo (como symlink?) |
Ejecutar programas
La forma más simple es usando el nombre del programa como un comando colon, por ejemplo :TECO, pero esto no funciona si el nombre del programa es el mismo que un comando interno de DDT. DDT busca el programa a ejecutar, primero en el directorio del usuario, si no lo encuentra busca en los directorios del sistema.
Procesos
Jobs en ITS estan organizados en arboles. Cada job es de nivel superior o tiene un nivel superior. Un job puede tener hasta 8 niveles inferiores. El job HACTRN siempre es de nivel superior y los jobs creados por este sus inferiores. DDT es capáz de examinar cualquier job, pero solo controla completamente su nivel inferior directo.
El comando :JOB se puede usar para hacer de cualquier job existente el job actual y poder operar en el.
| :JOB |
convierte |
Si el
Los jobs pueden encontrarse en varios estados.
| P | Detenido pero capaz de proceder | |||
| R | En ejecución | |||
| - | No iniciado | |||
| W | Interrumpido esperando regresar a DDT |
| :CONTINUE | $P | Resume el job actual y le da el control de la terminal, deshace el efecto de ^Z | ||||
| :PROCEED | ^P | Permite que un job se ejecute sin tener el control de la terminal | ||||
| ^X | Detiene un programa que no tiene la terminal | |||||
| :KILL | $^X o |
Mata el job actual | ||||
| :MASSACRE | Mata todos los jobs | |||||
| :LISTJ | $$V | Lista todos los trabajos. | ||||
| :START | $G | Inicia un trabajo en la dirección de inicio del programa | ||||
| :UJOB |
Selecciona el job para examinarse, si no tiene dueño te convierte en el dueño |
*:SSTATUS
You're all alone, Fair share
:VERSION
:LOADP
Fair Share
1 user idle less than 1 minute.
0 idle 1 to 5 minutes.
0 idle 5 to 10 minutes.
19 free net ports.
47 free job slots.
:KILL
The CALL key (or tZ) is used at almost any time to get the attention of ITS, interrupt the running job, and return you to DDT. Control-G is an interrupt similar to CALL, but it is more drastic and is not guaranteed to leave things in a consistant state. Control-S is used to stop the output of a DDT command. The RUBOUT key deletes the last character you typed. Control-D deletes the current line being typed. Control-L clears and refreshes the screen, retyping the current line.
