MULTICS
Multics (Multiplexed
Information and Computing Service) fue uno de los primeros sistemas operativos
de tiempo compartido y tuvo una gran influencia en el desarrollo de los
posteriores sistemas operativos.
El sistema operativo Multics
fue desarrollado en 1965 y 1973.
Multics fue uno de los primeros sistemas operativos de tiempo compartido y tuvo una gran influencia en el desarrollo de los posteriores sistemas operativos.
Multics fue uno de los primeros sistemas operativos de tiempo compartido y tuvo una gran influencia en el desarrollo de los posteriores sistemas operativos.
Multics fue desarrollado únicamente para GE-645 de un sistema de 36 bits.
Multics dicen que soportaba una
configuración ON-LINE muy agresiva, fue diseñado desde su principio como un
sistema seguro desde su inicio.
Este sistema operativo que se pudo implementar en un único nivel de almacenamiento de datos, su memoria de procesos consistía en segmentos que estaban mapeados en su espacio de direcciones; para leer o escribir en ellos, el proceso simplemente utilizaba instrucciones normales de la CPU, y el sistema operativo tenía cuidado de asegurarse que todas las modificaciones fueran guardadas en disco.
Este sistema operativo que se pudo implementar en un único nivel de almacenamiento de datos, su memoria de procesos consistía en segmentos que estaban mapeados en su espacio de direcciones; para leer o escribir en ellos, el proceso simplemente utilizaba instrucciones normales de la CPU, y el sistema operativo tenía cuidado de asegurarse que todas las modificaciones fueran guardadas en disco.

Algunas de sus características de Multics son las siguientes:
Contaba con segmentos de memoria.
La arquitectura de memoria se dividía en segmentos y cada segmento tenia direcciones.
Memoria virtual,
Utilizaba una memoria paginada en forma única por el sistema Atlas.
Su memoria Virtual simulaba la memoria idealizada utilizando la segmentación y la paginación.
Sistema multiusuario.
Descripción
Los planes iniciales y el desarrollo de Multics
comenzó en 1964. Originalmente era un proyecto cooperativo liderado por Fernando
J. Corbató del MIT, con General Electric y los laboratorios Bell. Los laboratorios Bell
abandonaron en 1969, y en 1970 el negocio de computación de
General Electric, incluyendo Multics, fue adquirido por Honeywell.
Multics fue concebido como un producto comercial
por General Electric, y alcanzó este logro para Honeywell, pero no tuvo un gran
éxito. Sin embargo, tuvo un gran impacto en el campo de la computación gracias
a sus muchas ideas nuevas y valiosas. Aunque en su época recibió muchas
críticas , la historia ha
demostrado que eran infundadas.
Un gran número de características intentaban
proporcionar alta disponibilidad, de manera que el servicio de computación
igualase a los servicios de telefonía y a la red eléctrica. Para
alcanzar este logro, se utilizó una estructura modular tanto en el software
como en el hardware, y el sistema podía crecer simplemente añadiendo más
recursos. Listas de control de acceso sobre cada archivo proporcionaban un método
flexible para compartir información, además de la privacidad requerida.
Contenía diferentes mecanismos estándar para
permitir a los ingenieros analizar el rendimiento del sistema, además de varios
mecanismos para la optimización del rendimiento.
En la terminología POSIX, era como si cada archivo fuese mapeado; sin embargo, en
Multics no existía el concepto de memoria de proceso, separado del de
la memoria utilizada para mantener mapeados sobre los archivos, como hace Unix. Toda la memoria del sistema formaba parte
de algún segmento,
que aparecía en el sistema
de archivos; incluida la memoria temporal
del proceso, la pila del núcleo, etc. (Una desventaja
práctica, dadas las particularidades de la arquitectura del hardware de las máquinas en las que se
ejecutaba, y no del concepto básico, era que el tamaño de los segmentos estaba
limitado a 256K palabras de 36 bits, aproximadamente igual a 1MB actual, y por
lo tanto se debía utilizar código extra para trabajar con archivos mayores que
esto, llamados archivos multisegmento. En los días anteriores a las bases de datos grandes, y los posteriores
gráficos bitmaps inmensos, no era frecuente encontrarse con esta limitación.)
Esto nos conduce a la segunda gran idea de Multics, enlace dinámico, mediante el que un proceso
en ejecución puede solicitar que otros segmentos se añadan a su espacio de
direcciones, estos segmentos pueden incluir código que puede ser ejecutado.
Con esta característica disponible, las
aplicaciones automáticamente utilizaban la última versión de cualquier rutina
externa que llamaban, estas rutinas estaban en otros segmentos, que se
enlazaban dinámicamente sólo cuando un proceso intentaba ejecutarlas. Como
diferentes procesos, pertenecientes a diferentes usuarios, podían utilizar
diferentes reglas de búsqueda, diferentes usuarios podían automáticamente
acabar utilizando diferentes versiones de las rutinas externas.
Igualmente importante, con la configuración
adecuada de las características de seguridad de Multics, el código en el otro
segmento podía ganar acceso a las estructuras de datos mantenidas en un proceso
diferente.
De este modo, para interactuar con una aplicación
ejecutándose en parte como un demonio
(informática) (en otro proceso) un proceso de usuario simplemente
realiza una llamanda normal a un procedimiento, hacia un segmento de código con
el que se enlazó dinámicamente (un segmento de código que implementa alguna
operación asociada con este demonio). El código en este segmento puede entonces
modificar los datos mantenidos y utilizados por el demonio. Cuando la acción
necesaria para comenzar la solicitud se completa, una simple instrucción de
retorno del proceso retorna el control del proceso de usuario al código del
usuario.
Debe notarse que estas dos ideas, se utilizan
todavía en la mayoría de los sistemas operativos, independientemente del rápido
y enorme avance realizado en el campo de la computación desde la década de
1960.
Multics también soportaba una reconfiguración
on-line muy agresiva; las CPUs, los bancos de memoria, unidades de disco, etc. podían ser añadidas y
quitadas mientras el sistema continuaba funcionando; entrando en servicio, o
eliminándose cuando fuera necesario.
Multics también fue notable por su innovador
énfasis en su diseño para obtener seguridad
informática, y Multics fue posiblemente
el primer sistema operativo diseñado como un sistema seguro desde su inicio.
Independientemente de esto, las primeras versiones de Multics se mostraron
vulnerables, no una vez, sino de forma repetida.
Esto condujo a más trabajo para mejorar la
seguridad que trazó las técnias de seguridad modernas, e hizo los sistemas
mucho más seguros; al adoptarse el hardware de segunda generación, con soporte
hardware para los anillos de seguridad (un refinamiento multinivel
del concepto de modo maestro),
las intrusiones se convirtieron en algo muy extraño.
Además de haber sido el primer sistema operativo
que proporcionó un sistema de archivos jerárquico, los nombres de los archivos
casi podían tener una longitud y sintaxis arbitraria; dado un archivo o
directorio este podía tener varios nombres (típicamente uno largo y otro
corto); también se soportaban enlaces simbólicos entre directorios.
Fue el primero en utilizar el ahora estándar
concepto de tener una pila por proceso en el núcleo, con una pila separada para
cada anillo de seguridad. También fue uno de los primeros escritos en un
lenguaje de alto nivel; se utilizó PL/1, aunque el sistema Burroughs B5000, que utilizaba ALGOL precedió a Multics.
El sistema completo, incluyendo no sólo el sistema
operativo, sino también el complejo compilador de PL/I, los comandos de
usuario, y las bibliotecas de subrutinas, contenía unos 1500 módulos de código
fuente. Cada uno con una longitud media de unas 200 líneas de código fuente, y
compilaban para producir aproximadamente 4,5 MB de código de procedimientos,
que aunque hoy parezca pequeño era muy grande para los estándares de la época.
Los compiladores de Multics generalmente optimizaban la densidad de código antes que la velocidad de ejecución.
Los compiladores de Multics generalmente optimizaban la densidad de código antes que la velocidad de ejecución.