Allá por el año 1993, de nuestro señor, algo
empezó a gestionarse en el corazón de los laboratorios
Bell, el núcleo de investigación y desarrollo de AT&T,
de donde surgió Unix, comenzó a trabajar en un nuevo
proyecto de Sistema Operativo (SO) Distribuido denominado Plan9
en honor a la peor película de ciencia ficción de la
historia: Plan 9 del espacio exterior de Ed Wood.
En realidad la peor fue Locuras del extraterrestre, con
Olmedo y Porcel, pero bueno, el problema de vivir en el culo del
mundo.
Hoy en día, Plan9 es una realidad ofrecida a
usuarios individuales e instituciones académicas para uso no
comercial.
Plan9 (P9) constituye un SO escalable, eficiente y con
uso seguro en red. Se trata de un SO distribuido, es decir no llega a
proporcionar la transparencia que exigía la máquina
virtual de Tanembaum, pero si se trata de un sistema en el cuál
coexisten por igual servidores de ficheros, de CPU, locales y de red.
La idea originar consistió en realizar un moderno SO
partiendo de cero, no como una actualización del Unix como lo
fue el Unix98, sino que debería realizarse un SO que
respondiera a las necesidades tecnológicas actuales.
De
este modo, la cultura de la empresa respecto a Unix (y por ende toda
la experiencia acumulada) sirvió para el diseño
original del P9, suplir todas sus carencias respecto de la
escalabilidad dinámica en red. Obviamente la plena potencia
del P9 se ve cuando se instala en red y no en una máquina
hogareña, sino no se aprecia sus ventajas respecto a su
predecesor. Entre las características que comparte con Unix se
puede citar:
Se encuentra escrito en C, lenguaje adecuado para la programación de este tipo de sistemas.
La interfaz de usuario es sencilla y potente, ofreciendo un refinamiento del shell de Unix, aunque compleja de aprender, ya que no fue pensada para uso hogareño.
Dispone un sistema de ficheros jerárquicos anclado a un superfichero raíz, permitiendo montar y desmontar volúmenes como en Unix.
Al igual que en Unix en universo se encuentra constituido por ficheros, incluso los dispositivos de Entrada Salida, pero con ideas propias que se verán mas adelante.
P9 exige un terminal gráfico con sistemas de ventanas que
ha denominado en forma chistosa, 8 1/2 (ocho y medio) son de
vivos los nenes!. Este terminal puede ser cualquier computadora
conectada a la red que opere P9 con una CPU propia y con sistemas de
ficheros propios, pero se caracteriza como interfaz de acceso para
usuarios humanos.
En el sistema de archivos se introduce el
concepto de visibilidad de usuario, es decir, como todo SO
moderno es un sistema multiusuario, pero no se limita como Unix a
mostrar un único sistema de ficheros a todos los usuarios y
solo distingue los permisos de acceso, sino que, P9 muestra un mismo
sistema de archivos en forma diferente para cada usuario, ya que
define la capa superior de visibilidad, dicha capa recibe el
nombre de Espacio de Nombres.
La gestión
de los recursos es tal que desaparece la separación entre
recursos locales y remotos. Para ello se incorpora en el núcleo
el protocolo 9P (que reemplaza al TCP/IP).
Por el momento P9 corre en i386 o superior, MIPS, SPARC y Motorola 68020. En el entorno i386, el sistema de ventanas, un editor, más aplicaciones básicas, pueden correr en una máquina con 8Mb de RAM. El sistema básico, incluido soporte ethernet, internet y compilador Alef, caben en cuatro discos de 3 1/2. La versión completa está contenida en un CD de los cuales se emplea solo 140Mb para el soporte i386.
Como se ha mencionado antes cada proceso dispone de una
visibilidad particular del sistema de archivos denominado espacio de
nombres. Así dos procesos pueden ver sistemas de archivos
completamente diferentes. En el caso de Unix disponen de la misma
visibilidad del sistema de archivos con la diferencia de los permisos
de lectura, escritura y ejecución, en P9 no es así. La
única analogía que se halla en el mundo Unix es el
dispositivo /dev/tty. Este dispositivo se halla cableado
en el kernel por lo que cada proceso ve un /dev/tty
diferente que corresponde al terminal en que se halla conectado.
P9
lleva este concepto al extremo ampliandolo a todo el sistema de
archivos, todo espacio de nombres cuenta con una raíz, bajo la
misma se halla el directorio /bin que resulta de la unión de
todos los directorios que tienen ejecutables visibles para el
proceso. De esta forma se elimina la variable de ambiente PATH. Esta
visibilidad es configurable tanto por el usuario como por el
administrador.
El sistema nervioso de P9 lo constituye el protocolo 9P. Es este el que permite tratar a todos los recursos como ficheros, ya sean locales o remotos, con lo cuál no es necesario apelar al NFS. Ya que se permite el acceso a dispositivos de forma remota cosa que con NFS no se puede. El protocolo 9P ofrece una semántica única de accesos a archivos que implementa procedimientos RPC sobre el protocolo IL (Intenet Link), un nuevo protocolo fiable que se monta sobre IP.
El mecanismo de autenticación P9 sigue el esquema Kerberos. No se envía el password por la red, en su lugar, se emplea un mecanismo de tickets encriptados facilitados por un servidor de autenticación. En P9 no existe el concepto de superusuario ni tampoco la idea de programas con setuid. El servidor de archivos P9 no corre programas de usuario, solo se limita a dar acceso a archivos autorizados.
Algunos Unix como el SV y Linux emplean un sistema de archivos
virtual denominado /proc. Con el se puede acceder a
procesos, entornos de procesos, dispositivos y recursos. P9 incorpora
este mecanismo, así bajo el directorio /proc (visible
por todos los procesos) existe otro subdirectorio asociado con cada
proceso del sistema y que toma como nombre el número del
proceso. Bajo él otros archivos como ctl, mem,
status, etc. permiten acceder a través de las
funciones E/S de la API.
Luego el comando ps se lo puede
implementar como cat /proc/*/status. Por otra parte los
mensajes de lectura y escritura son de texto, si bien se puede perder
algo de prestaciones se gana en claridad evitando la translación
host byte order a network byte order y viceversa.
Otra de las nuevas características de P9 es la forma de
acceder al entorno de un proceso que también se realiza a
través del espacio de nombres, en el directorio /env.
Por ejemplo un proceso con dos variables de entorno podría
contener:
/env/user
/env/pid
cuyo
contenido se lo puede ver con
% cat /env/user
Horacio
%
cat /env/pid
456
Nuevamente el espacio de nombres será
diferente para cada proceso. Así una forma de ver todas las
variables asociadas a un proceso podría ser: (cd env;echo
*). Respecto a la creación de procesos hijos el padre
hace uso de la primitiva rfork. Esta llamada acepta
un mapa de bits como argumento que describirá como se
compartirá el espacio de nombres entre padre e hijo.
Entre las características que otorgan a P9 una gran funcionalidad se halla:
Trasparencia del sistema de ficheros, el servicio ftp no se encuentra como un comando, sino como un sistema de archivos, así por ejemplo: ftpfs -a hcaste@clara genera una conexión ftp anónima a clara, luego se monta el sistema de archivos /n/ftp en el espacio de nombres local, luego se puede copiar un archivo con el comando cp. P9 incorpora protocolos que permiten la subsistencia de sistemas Unix y Windows®/98 en una sola máquina virtual, con lo cuál la interconectabilidad es grande (no existe el Samba).
Transparencia de CPU, como se expuso uno de los elementos que adopta el P9 es el servidor de CPU. Esto permite el uso de CPU remotas más potentes que la terminal. Por otro lado el servidor de CPU puede estar compuesto de varias máquinas de arquitectura heterogénea, es el SO el encargado de distribuir la tarea, no el usuario como en el caso del PVM.
Transparencia de máquinas y redes, cada red se ve como un conjunto de archivos, sobre el que se puede realizar operaciones de entrada salida, control y creación. Para ello la API define un núcleo semántico común independiente de la naturaleza de la red y lo complementa con un servidor traductor de direcciones. Con esto los procesos no tienen conciencia si trabajan en TCP/IP, RDSI, PP., etc.
En el momento de escribir este artículo, P9 se emplea como SO en diversas universidades, Toronto, York, Sydney y Austria como soporte de desarrollo y cálculo. En Luncent más de 40 desarrolladores emplean una evolución de P9 de uso interno denominada Brazil, que con el lenguaje de desarrollo propio llamado Limbo (similar al Java) proporcionan el SO L'Inferno.
Documento escrito en Octubre del 2000.