...

Instituto Politécnico Nacional

Escuela Superior de Cómputo

Recurso Didáctico Digital

Unidad 1: Estructura de un sistema operativo
...
1.2.1 Tipos: Monolítico, por capas, micro núcleo y máquina virtual

Las estructuras internas de los sistemas operativos son importantes para el buen funcionamiento y se clasifican en:

Este sistema es conocido como el más común debido a que todo el sistema operativo se ejecuta con un solo programa en modo kernel, en donde este se genera por medio de procedimientos enlazados entre sí en un solo programa binario ejecutable en forma extensa.

Cuando se utiliza este tipo de procedimiento o técnica el sistema tiene la libertad de llamar a cualquiera en otro proceso.

Los sistemas monolíticos son la estructura más simple para un Sistema Operativo, también llamados de Estructura Modular, fueron escritos para proporcionar una máxima funcionalidad dentro del menor espacio posible. Se caracterizan porque no tienen una estructura totalmente clara, con esto nos referimos a sus rutinas y funcionalidades (ej. manejo de drivers, sistemas de archivos, gestión de memoria, etc.), se encuentran agrupados en un solo programa (Sistema Operativo).

Ahora bien, para construir el programa objeto del sistema operativo se debe de utilizar un diseño que permita la compilación en forma individual para después vincularlos y ejecutarlos como un archivo en conjunto, esto con el fin de que los procedimientos sean visibles para cualquier otro procedimiento.

Sin embargo, hasta en los sistemas monolíticos es posible tener cierta estructura, para poder solicitar los servicios(llamadas al sistema) que proporciona el sistema operativo, en donde los parámetros se colocan en lugares bien definidos por ejemplo un pila, y posteriormente se ejecuta una instrucción conocida como TRAP; esta instrucción se encarga de cambiar el modo de usuario a modo kernel y transfiere el control al sistema operativo, con ello este obtiene los parámetros y determina cual es la llamada al sistema que se ejecutar.

Este tipo de organización requiere una estructura básica para el sistema operativo que es:

  1. Un programa principal que invoque al procedimiento del servicio solicitado.
  2. Un conjunto de procedimientos de servicio que lleven a cabo las llamadas al sistema.
  3. Un conjunto de procedimientos utilitarios que ayudan al procedimiento de servicio.

En este modelo, para cada llamada al sistema hay un procedimiento de servicio que se encarga de la llamada y la ejecuta. Los procedimientos utilitarios realizan acciones que requieren varios procedimientos de servicios, como por ejemplo obtener datos de los programas de usuario, por ello existen tres niveles para esta división de procesos que son:

Fig 5. Un modelo de estructura simple para un sistema monolítico

Por lo que el núcleo del sistema operativo es el que se encarga de arrancar la computadora, por lo que muchos sistemas operativos soportan extensiones que se pueden cargar, como los drivers de dispositivos de Entrada y Salida y sistemas de archivos.

La estructura del sistema operativo queda definida por divisiones en capas o niveles cuya organización se establece por jerarquía de capas en donde cada capa ofrece una interfaz clara y bien definida, la capa superior utiliza los servicios y funciones que ofrece la capa inferior, es decir, la capa n solo se comunica para obtener lo requerido con la capa n 1 donde la capa inferior es la de mayores privilegios. Por lo que el responsable de que exista comunicación entre las capas adyacentes es el procesador.

La capa más interna o inferior capa 0 corresponde al hardware, muestran que la más alta o externa corresponde a la interfaz del usuario.

El primer sistema construido de esta manera fue el sistema THE (Technische Hogeschool Eindhoven), desarrollado en Holanda por E. W. Dijkstra (1968) y sus estudiantes; el cual consta de 6 capas que son:

  • Capa 5: Se encuentra la interfaz de usuario. La cual provee una interfaz de comunicación entre los usuarios y el sistema operativo. Esta capa utiliza las facilidades provistas por las capas anteriores para aceptar comandos de un usuario. Los sistemas operativos modernos proveen una interfaz gráfica de usuario (GUI). Las GUI suministran un entorno gráfico para que los usuarios se comuniquen con el sistema operativo.
  • Capa 4: Aloja los programas de usuario y el sistema de archivos, en donde la funciones para la gestión de la información son implementadas en esta capa. Formas más sofisticadas para la reserva y distribución de espacio y para el acceso a datos en dispositivos de almacenamiento secundarios, que aquellas provistas por la capa 3, son implementadas en esta capa.
  • Capa 3: Se controlan los dispositivos E/S (entrada y salida). En donde se provee funcionalidades para el manejo de dispositivos de almacenamiento secundario, así como el intercambio de memoria.
  • Capa 2: Se administra la comunicación inter-proceso y la consola del operador, así mismo como la gestión de memoria y las funciones para el manejo de memoria son implementadas en esta capa. Se reserva memoria para que las aplicaciones puedan ser cargadas y ejecutadas, y se libera cuando no se necesita más.
  • Capa 1: Administración de memoria y discos y Kernel, donde se usa los objetos y operaciones provistas por el hardware. Las funciones típicas de un kernel son:
    • Gestión de procesos
    • Manejo de interrupciones
    • Intercambio de memoria
    • Gestión de memoria virtual
    • Comunicación inter-procesos
    • Mecanismos de red
    • Gestión de entradas/salidas
  • Capa 0: Correspondiente al hardware, realizando asignación del procesador, también alterna entre procesos cuando ocurren interrupciones o se han expirado y proporciona multiprogramación básica de la CPU, como se muestra en la siguiente imagen.

    Fig 6. Modelo jerárquico de un sistema operativo

Los microkernels tienen como proceso el de gestionar las funciones básicas de la computadora en donde administra las interrupciones y las excepciones de los dispositivos, así mismo administra los procesos en tiempo real como son sus comunicaciones, basado en el modelo cliente servidor, repartiendo la memoria y los multiprocesadores en donde controlar el número de procesadores que se estén ejecutando por el usuario.

El diseño inicial del microkernel debe contener una alta confiabilidad al dividir el sistema operativo en módulos pequeños y bien definidos, sólo uno de los cuales (el microkernel) se ejecuta en modo kernel y el resto se ejecuta como procesos de usuario ordinarios, al ejecutar cada driver de dispositivo y sistema de archivos como un proceso de usuario separado por lo que un error en alguno de estos procesos puede hacer que falle ese componente, pero no puede hacer que falle todo el sistema en su totalidad.

La estructura de microkernels, permite que el núcleo sea pequeño dentro del sistema operativo, así con ello contiene sólo las operaciones esenciales de las funciones del sistema operativo, por lo que muchos de servicios son subsistemas externos como son:

  • Controladores de dispositivos.
  • Sistemas de archivos.
  • Manejo de la memoria virtual.
  • Sistemas de ventanas.
  • Servicios de seguridad.

Esto conlleva a la estructura del kernel como se muestra en la siguiente figura

Fig 7. Estructura del Kernel

Dentro de un cliente servidor los microkernel tienen una variación en diferenciar dos clases de procesos:

  • Servidor: En donde cada uno proporciona cierto servicio, y los clientes, que utilizan estos servicios.
  • Cliente: Son quienes utilizan dichos servicios.

Este modelo se conoce como cliente-servidor. esto parte de la capa inferior el cual se encuentra el microkernel y su esencia es la presencia de procesos cliente y procesos servidor.

La comunicación entre clientes y servidores se lleva a cabo comúnmente mediante el paso de mensajes. Para obtener un servicio, un proceso llamado cliente construye un mensaje indicando lo que desea y lo envía al servicio apropiado. Después el servicio hace el trabajo y envía de vuelta la respuesta.

Si el cliente y el servidor se ejecutan en el mismo equipo se pueden hacer ciertas optimizaciones, considerando que cada uno de ellos se ejecutan en máquinas diferentes en donde estas se encuentran conectadas mediante una red de área local o amplia, como se describe muestra en la siguiente imagen.

Fig 8. El modelo cliente-servidor sobre una red

Como los clientes se comunican con los servidores mediante el envío de mensajes, no necesitan saber si los mensajes se manejan en forma local en sus propios equipos o si se envían a través de una red a servidores en un equipo remoto.

Dentro del funcionamiento de los sistemas operativos, la máquina virtual es considerada como la abstracción del hardware de una computadora en varios ambientes en ejecución, creando con ello que cada ambiente se ejecute con su propia computadora, por lo que provee de una interfaz que permite presentar diferentes procesos y en donde cada uno se ejecuta utilizando su propio procesador con su memoria virtual.

Sus antecedentes surgen con IBM en 1972 en los mainframes de esa época en donde su principal función era de tener varios ambientes en ejecución y pudiesen compartir el mismo hardware y asu vez se protegieran uno al otro en una forma controlada y en donde compartieran archivos por medio del uso de la red.

Open Virtual Machine Format, se estableció como un formato estándar de máquinas virtuales (VM), en donde permite correr dentro de diferentes plataformas (host) de cada máquina virtuales, como lo muestra la siguiente imagen.

Fig 9. Máquinas Virtuales

Las VM, crean, administran y ejecutan computadoras virtuales en donde tiene una clasificación que son:

    Tipo 0: Son soluciones basadas en el hardware y provee de soporte para la creación y administración vía el firmware o soporte lógico inalterable con de es un conjunto de instrucciones de un programa informático básico que controla los circuitos electrónicos de cualquier dispositivo. Gracias a dicho software, se puede proporcionar un entorno para que funcione un sistema operativo interno, como se muestra en la siguiente imagen.

    Fig 10. Máquina virtual tipo 0

    Tipo 1: Hypervisors o monitor de máquinas virtuales son aquellos que se ejecutan directamente sobre el hardware de la computadora por medio de un proceso que crea y ejecuta, en el cual permite que una máquina (host/anfitrión) preste soporte a VM invitadas mediante el uso compartido de sus recursos como son la memoria y el procesamiento, como se muestra en la siguiente imagen.

    Fig 11. Máquina virtual tipo 1

    Tipo 2: Hypervisors Se ejecuta sobre el sistema operativo host que provee los servicios de virtualización.

    Fig 12. Máquina virtual tipo 2

Para la virtualización se utiliza una técnica en la cual el sistema operativo es invitado a trabajar en cooperación con VMM(Administrador de máquinas virtuales) para optimizar su rendimiento, por lo que los invitados deben de ser modificados para que puedan correr en un hardware y así puedan ser virtualizados, una gran ventaja del uso de esto es que se alcanza su mayor eficiencia en el uso de los recursos y una capa de virtualización de menor tamaño.

Su trabajo principal es asignar recursos a las máquinas virtuales y verificar los intentos de utilizarlos para asegurarse de que ninguna máquina trate de usar los recursos de la otra.

La ventaja del esquema del exokernel es que ahora en la asignación, ya que en otros diseños cada máquina virtual piensa que tiene su propio disco con bloques que van desde 0 hasta un valor máximo, por lo que el monitor debe mantener las tablas para asignar las direcciones del disco y todos los demás recursos requeridos, pero no es necesario ya que solo necesita llevar el control del registro para saber a cuál máquina virtual pertenece.

Por lo que la ventaja es separar la multiprogramación del código del sistema operativo del usuario, pero el exokernel solo debe mantener las máquinas virtuales separadas una de la otra, lo que reduce la sobrecarga.