§ Sistemas
Operativos por su Estructura
Según [Alcal92],
se deben observar dos tipos de requisitos cuando se construye un sistema
operativo, los cuales son:
Estructura
monolítica.
Es la estructura
de los primeros sistemas operativos constituidos fundamentalmente por un solo
programa compuesto de un conjunto de rutinas entrelazadas de tal forma que cada
una puede llamar a cualquier otra. Las características fundamentales de este tipo
de estructura son:
Construcción del
programa final a base de módulos compilados separadamente que se unen a través
del ligador.
Buena definición
de parámetros de enlace entre las distintas rutinas existentes, que puede
provocar mucho acoplamiento.
Carecen de
protecciones y privilegios al entrar a rutinas que manejan diferentes aspectos
de los recursos de la computadora, como memoria, disco, etc.
Generalmente están
hechos a medida, por lo que son eficientes y rápidos en su ejecución y gestión,
pero por lo mismo carecen de flexibilidad para soportar diferentes ambientes de
trabajo o tipos de aplicaciones.
Estructura
jerárquica
A medida que
fueron creciendo las necesidades de los usuarios y se perfeccionaron los
sistemas, se hizo necesaria una mayor organización del software, del sistema
operativo, donde una parte del sistema contenía subpartes y esto organizado en
forma de niveles.
Se dividió el
sistema operativo en pequeñas partes, de tal forma que cada una de ellas
estuviera perfectamente definida y con un claro interfase con el resto de
elementos.
Se constituyó una
estructura jerárquica o de niveles en los sistemas operativos, el primero de
los cuales fue denominado THE (Technische Hogeschool, Eindhoven), de Dijkstra,
que se utilizó con fines didácticos (Ver Fig. 3). Se puede pensar también en
estos sistemas como si fueran `multicapa'. Multics y Unix caen en esa
categoría.
Máquina Virtual.
Se trata de un
tipo de sistemas operativos que presentan una interfase a cada proceso,
mostrando una máquina que parece idéntica a la máquina real subyacente. Estos
sistemas operativos separan dos conceptos que suelen estar unidos en el resto
de sistemas: la multiprogramación y la máquina extendida. El objetivo de los
sistemas operativos de máquina virtual es el de integrar distintos sistemas
operativos dando la sensación de ser varias máquinas diferentes.
El núcleo de estos
sistemas operativos se denomina monitor virtual y tiene como misión llevar a
cabo la multiprogramación, presentando a los niveles superiores tantas máquinas
virtuales como se soliciten. Estas máquinas virtuales no son máquinas
extendidas, sino una réplica de la máquina real, de manera que en cada una de
ellas se pueda ejecutar un sistema operativo diferente, que será el que ofrezca
la máquina extendida al usuario.
Cliente-servidor
(Microkernel)
El tipo más
reciente de sistemas operativos es el denominado Cliente-servidor, que puede
ser ejecutado en la mayoría de las computadoras, ya sean grandes o pequeñas.
Este sistema sirve
para toda clase de aplicaciones por tanto, es de propósito general y cumple con
las mismas actividades que los sistemas operativos convencionales.
El núcleo tiene
como misión establecer la comunicación entre los clientes y los servidores. Los
procesos pueden ser tanto servidores como clientes. Por ejemplo, un programa de
aplicación normal es un cliente que llama al servidor correspondiente para
acceder a un archivo o realizar una operación de entrada/salida sobre un
dispositivo concreto. A su vez, un proceso cliente puede actuar como servidor
para otro." [Alcal92]. Este paradigma ofrece gran flexibilidad en cuanto a
los servicios posibles en el sistema final, ya que el núcleo provee solamente
funciones muy básicas de memoria, entrada/salida, archivos y procesos, dejando
a los servidores proveer la mayoría que el usuario final o programador puede
usar. Estos servidores deben tener mecanismos de seguridad y protección que, a
su vez, serán filtrados por el núcleo que controla el hardware. Actualmente se
está trabajando en una versión de UNIX que contempla en su diseño este
paradigma.
§ Sistemas
Operativos por Servicios
Esta clasificación
es la más comúnmente usada y conocida desde el punto de vista del usuario
final. Esta clasificación se comprende fácilmente con el cuadro sinóptico.
Monousuarios
Los sistemas
operativos monousuarios son aquéllos que soportan a un usuario a la vez, sin
importar el número de procesadores que tenga la computadora o el número de
procesos o tareas que el usuario pueda ejecutar en un mismo instante de tiempo.
Las computadoras personales típicamente se han clasificado en este renglón.
Multiusuarios
Los sistemas
operativos multiusuarios son capaces de dar servicio a más de un usuario a la
vez, ya sea por medio de varias terminales conectadas a la computadora o por
medio de sesiones remotas en una red de comunicaciones. No importa el número de
procesadores en la máquina ni el número de procesos que cada usuario puede
ejecutar simultáneamente.
Monotareas
Los sistemas
monotarea son aquellos que sólo permiten una tarea a la vez por usuario. Puede
darse el caso de un sistema multiusuario y monotarea, en el cual se admiten
varios usuarios al mismo tiempo pero cada uno de ellos puede estar haciendo
solo una tarea a la vez.
Multitareas
Un sistema
operativo multitarea es aquél que le permite al usuario estar realizando varias
labores al mismo tiempo. Por ejemplo, puede estar editando el código fuente de
un programa durante su depuración mientras compila otro programa, a la vez que
está recibiendo correo electrónico en un proceso en background. Es común
encontrar en ellos interfaces gráficas orientadas al uso de menús y el ratón,
lo cual permite un rápido intercambio entre las tareas para el usuario,
mejorando su productividad.
Uniproceso
Un sistema
operativo uniproceso es aquél que es capaz de manejar solamente un procesador
de la computadora, de manera que si la computadora tuviese más de uno le sería
inútil. El ejemplo más típico de este tipo de sistemas es el DOS y MacOS.
Multiproceso
Un sistema
operativo multiproceso se refiere al número de procesadores del sistema, que es
más de uno y éste es capaz de usarlos todos para distribuir su carga de
trabajo. Generalmente estos sistemas trabajan de dos formas: simétrica o
asimétricamente. Cuando se trabaja de manera asimétrica, el sistema operativo
selecciona a uno de los procesadores el cual jugará el papel de procesador
maestro y servirá como pivote para distribuir la carga a los demás
procesadores, que reciben el nombre de esclavos. Cuando se trabaja de manera
simétrica, los procesos o partes de ellos (threads) son enviados
indistintamente a cualesquiera de los procesadores disponibles, teniendo,
teóricamente, una mejor distribución y equilibrio en la carga de trabajo bajo
este esquema.
Se dice que un
thread es la parte activa en memoria y corriendo de un proceso, lo cual puede
consistir de un área de memoria, un conjunto de registros con valores
específicos, la pila y otros valores de contexto. Us aspecto importante a considerar
en estos sistemas es la forma de crear aplicaciones para aprovechar los varios
procesadores. Existen aplicaciones que fueron hechas para correr en sistemas
monoproceso que no toman ninguna ventaja a menos que el sistema operativo o el
compilador detecte secciones de código paralelizable, los cuales son ejecutados
al mismo tiempo en procesadores diferentes. Por otro lado, el programador puede
modificar sus algoritmos y aprovechar por sí mismo esta facilidad, pero esta
última opción las más de las veces es costosa en horas hombre y muy tediosa,
obligando al programador a ocupar tanto o más tiempo a la paralelización que a
elaborar el algoritmo inicial.
§ Sistemas
Operativos por la Forma de Ofrecer sus Servicios
Esta clasificación
también se refiere a una visión externa, que en este caso se refiere a la del
usuario, el cómo accesa los servicios. Bajo esta clasificación se pueden
detectar dos tipos principales: sistemas operativos de red y sistemas
operativos distribuidos.
Sistemas
Operativos de Red
Los sistemas
operativos de red se definen como aquellos que tiene la capacidad de
interactuar con sistemas operativos en otras computadoras por medio de un medio
de transmisión con el objeto de intercambiar información, transferir archivos,
ejecutar comandos remotos y un sin fin de otras actividades. El punto crucial
de estos sistemas es que el usuario debe saber la sintaxis de un conjunto de
comandos o llamadas al sistema para ejecutar estas operaciones, además de la
ubicación de los recursos que se desee acceder. Por ejemplo, si un usuario en
la computadora hidalgo necesita el archivo matriz.pas que se localiza en el
directorio /software/código en la computadora modelos bajo el sistema operativo
UNIX, dicho usuario podría copiarlo a través de la red con los comandos
siguientes: hidalgo% hidalgo% rcp morelos:/software/codigo/matriz.pas. hidalgo%
En este caso, el comando rcp que significa "remote copy" trae el
archivo indicado de la computadora morelos y lo coloca en el directorio donde
se ejecutó el mencionado comando. Lo importante es hacer ver que el usuario
puede acceder y compartir muchos recursos.
Sistemas
Operativos Distribuidos
Los sistemas
operativos distribuidos abarcan los servicios de los de red, logrando integrar
recursos (impresoras, unidades de respaldo, memoria, procesos, unidades
centrales de proceso) en una sola máquina virtual que el usuario accesa en
forma transparente. Es decir, ahora el usuario ya no necesita saber la
ubicación de los recursos, sino que los conoce por nombre y simplemente los usa
como si todos ellos fuesen locales a su lugar de trabajo habitual. Todo lo
anterior es el marco teórico de lo que se desearía tener como sistema operativo
distribuido, pero en la realidad no se ha conseguido crear uno del todo, por la
complejidad que suponen: distribuir los procesos en las varias unidades de
procesamiento, reintegrar sub-resultados, resolver problemas de concurrencia y
paralelismo, recuperarse de fallas de algunos recursos distribuidos y
consolidar la protección y seguridad entre los diferentes componentes del
sistema y los usuarios. [Tan92]. Los avances tecnológicos en las redes de área
local y la creación de microprocesadores de 32 y 64 bits lograron que
computadoras mas o menos baratas tuvieran el suficiente poder en forma autónoma
para desafiar en cierto grado a los mainframes, y a la vez se dio la
posibilidad de intercomunicarlas, sugiriendo la oportunidad de partir procesos
muy pesados en cálculo en unidades más pequeñas y distribuirlas en los varios
microprocesadores para luego reunir los sub-resultados, creando así una máquina
virtual en la red que exceda en poder a un mainframe. El sistema integrador de
los microprocesadores que hacer ver a las varias memorias, procesadores, y
todos los demás recursos como una sola entidad en forma transparente se le
llama sistema operativo distribuido. Las razones para crear o adoptar sistemas
distribuidos se dan por dos razones principales: por necesidad (debido a que
los problemas a resolver son inherentemente distribuidos) o porque se desea
tener más confiabilidad y disponibilidad de recursos.