Emulación de Unix0 en adJHistoria de Unix0Un sistema operativo es un programa que implementa una serie de conceptos o abstracciones para facilitarle a un usuario y a otros programas la operación de un computador. Según [DMR1979] la primera versión de Unix operó en 1969 en Laboratorio Bell en New Jersey, Estados Unidos, debido al esfuerzo de Kenneth Thompson, Denis Ritchie, M. D. McIlroy y J. F. Ossanna de retomar e implementar lo que más pudieron del fracasado proyecto Multics (un diseño y comienzo de implementación de un sistema operativo demasiado futurista y costos para mediados de 1960). Buscaron implementar un sistema operativo a bajo costo y en un computador
"sencillo" que tuvieron disponible (un minicomputador PDP-7 producido por la
empresa DEC que aunque costaba alrededor de US$70.000 era más económico
que los empleandos para desarrollar Multics). Tanto en ese entonces como ahora los computadores sólo entienden lenguaje
de máquina binario muy básico (a su representación como texto más legible para
humanos se le llama lenguaje ensamblador, aún cuando es complejo para
los humanos por su detalle y por tanto extensión). El lenguaje de máquina, se
trata de una serie de instrucciones muy sencillas ordenadas y numeradas
de manera lineal (digamos de 1 a N), que se ejecutan una después de otra. El sistema de archivos que diseñaron e implementaron (especialmente Thompson) permitía tener archivos y directorios, los cuales a su vez tenían archivos y directorios. Cada archivo o directorio estaba en unos bloques de disco especiales (se les llamó nodos-i) que tenían información de los permisos del archivo, el tamaño y los bloques del disco donde estaba la información del archivo o directorio. Para cada usuario había un directorio, y aunque era posible, no era fácil cambiar de directorio o enlazar archivos de un directorio a otro. Contó con un sistema de procesos que inicialmente sólo permitía un proceso por teletipo, pero que si permitía operación simultanea a varios usuarios desde varios teletipo (inicialmente dos teletipos). Los programas que estaban en disco al empezar a ejecutarse se llamaron procesos. El interprete de ordenes iniciaba tales procesos y podía operar con el sistema de archivos –inicialmente el sistema de archivos, el sistema de procesos y el interprete formaban una unidad llamada el kernel del sistema operativo, aunque posteriormente (y ahora) el interprete de ordenes de implementó como un programa. Otra idea importante que empezó a implementarse en Unix0 fue manejar algunos dispositivos (como pantalla o teclado) como si fuesen archivos, y manejar la entrada y la salida de los procesos también como si fuesen archivos. Así fue evolucionando la idea de redireccionar la entrada y la salida de los procesos y la idea de tuberías que permitían conectar la salida de un proceso con la entrada de otro. Finalmente junto con Unix0 se desarrollo el lenguaje B del cual fue sucesor el lenguaje C en el cual están escritos practicamente todos los sistemas operativos en la actualidad. Como se ve, tanto el diseño e implementación del sistema operativo Unix como de los lenguajes B y C, se hizo para facilitar el uso del computador a sus usuarios, que en lugar de manejar muchisimos detalles que deben programarse en lenguaje de máquina, emplean ordenes cortas y sencillas que manejan conceptos abstractos más fáciles de entender para nosotros. El vídeo disponible en https://www.youtube.com/watch?v=pvaPaWyiuLA muestra en operación Unix0 en un PDP-7 real con un teletipo (con escritor de cintas perforadas), lector de cinta perforada y un disco duro. No es fácil contar con una de esas máquinas para volver a ver la forma de trabajo en 1969 para desarrollar Unix0, pero es posible emular ese computador, compilar las fuentes en ensamblador de Unix0 y verlo operando en un computador actual (la pantalla obrará como el papel en el que respondía el computador en el teletipo y el teclado como el teclado del teletipo donde los usuarios daban ordenes al computador en el vídeo). Emular un PDP-7 en adJEs posible usar el simulador A noviembre de 2020 para poder correr Unix0 se requiere la versión en desarrollo de este emulador, que está en la rama master del repositorio de github https://github.com/simh/simh Los pasos a seguir en un sistema adJ u OpenBSD son:
La salida esperada de estas ordenes puede verse en [Unix0ADJ], y lo
que harán es producir un programa
Esto corresponde a encender un PDP-7 sin un programa a ejecutar, por lo que
no hará más que dejarlo en la línea de ordenes de simh, donde
por ejemplo puede examinar la configuración del computador con
La siguiente tabla (extraida analizando las fuentes de simh y su documentación) explica los dispositivos mencionados:
Compilación cruzada de Unix0El video disponible en https://www.youtube.com/watch?v=pvaPaWyiuLA presenta el esfuerzo por parte del museo Living Computers para restaurar Unix0 en un PDP-7 real. Fue un gran trabajo concluido en 2019, justo para celebrar los 50 años de Unix, e incluyó:
El código fuente de todo esto estaba escrito en ensamblador para el PDP-7, como parte del proyecto se afinó y se hicieron otras herramientas (incluyendo un ensamblador cruzado para PDP-7 escrito en lenguaje Perl y una implementación de compilador de lenguaje B en lenguaje B). El resultado se ha publicado como código abierto en https://github.com/DoctorWkt/pdp7-unix Suponiendo que simh se haya dejado en la ubicación de la sección anterior
es posible prepara
La salida esperada de estas ordenes puede verse en [Unix0ADJ] y resultaran:
Ejecutar Unix0 compilado en el PDP-7 emuladoUna vez compilado puede ejecutarse como se presenta a continuaciòn
(las teclas Control-E detendrán momentaneamente la emulación y lo
dejarán en la línea de ordenes de
Lo que esto hará es iniciar el emulador y establecer:
Si ingresa como cualquiera de los usuarios (la clave es el mismo login) podrá ejecutar cualquiera de las herramientas del sistema operativo. De varias herramientas (incluyendo el interprete de ordenes saldrá con Control-D). A continuación se describen brevemente las conocidas (el manual completo más cercano es de 1970 y describe el Unix para PDP-11, ver [man-r])
Si ingresa como usuario Referencia bibliográficas[DMR1979] Ritchie, Dennis.M. The Evolution of the Unix Time-sharing System. AT&T Bell Laboratories Technical Journal 63 No. 6 Part 2, October 1984, pp. 1577-93. https://www.bell-labs.com/usr/dmr/www/hist.html. Recuperado en Nov.2020 [Unix0ADJ] Támara-Patiño, Vladimir. Support for pdp7-unix on OpenBSD and adJ. https://github.com/DoctorWkt/pdp7-unix/pull/229 [Behind2019] Ayse H. Restoring UNIX v0 on a PDP-7: A look behind the scenes. https://livingcomputers.org/Blog/Restoring-UNIX-v0-on-a-PDP-7-A-look-behind-the-sce.aspx [InvPDP7] The Digital Equipment Corporation PDP–7. https://www.soemtron.org/pdp7.html [simh] https://github.com/simh/simh [simh-pdp18b] Supnik, Robert M. PDP-4/7/9/15 Simulator Usage 28-Apr-2020. https://github.com/simh/simh/blob/master/doc/pdp18b_doc.doc [man-r] Ritchie, D.M. The UNIX Time-Sharing System. Draft. 1970. https://www.tuhs.org/Archive/Distributions/Research/McIlroy_v0/UnixEditionZero.txt (era también para Unix-11 que operaba en PDP-11). |