Estructura de un sistema operativo

De Departamento de Informatica
Saltar a: navegación, buscar

Analizando la historia de los Sistemas Operativos notamos que se puede considerar que éstos surgen desde finales de los 50's con una arquitectura bastante obsoleta comparada con la de la actualidad.

Para poder construir un Sistema Operativo se deben tener en cuenta dos tipos de requisitos, los cuales son:

  • Requisitos de usuario: Un sistema fácil de usar y de aprender, seguro, rápido y adecuado para el uso que se le necesita dar.
  • Requisitos del software: Considera el continuo mantenimiento, forma de operación, restricciones de uso, eficiencia, tolerancia frente a los errores y flexibilidad.

El objetivo de la estructuración es buscar una organización interna que facilite la comprensión, incremente la portabilidad, extensión y favorecer el mantenimiento de los Sistemas Operativos.

A continuación se describen las distintas estructuras que presentan los actuales Sistemas Operativos para satisfacer las necesidades que de ellos se quieren obtener. Éstas no son de ninguna manera las únicas estructuras posibles, pero nos darán una idea de algunos diseños que se han llevado a la práctica.

Los cuatro diseños son:

Contenido

Los Sistemas Monolíticos. (Estructuras Simples)

Según la Real Academia Española Monolítico es algo de una pieza, sin fisuras o rígido, inflexible.
Los sistemas Monolíticos son la estructura más simple para un Sistema Operativo. También llamados de Estructura Modular, fue escrito para proporcionar una máxima funcionalidad dentro del menor espacio posible.
Se caracteriza porque no tienen una estructura totalmente clara, con ésto nos referimos a que sus rutinas y funcionalidades (ej. manejo de drivers, sistemas de archivos, gestión de memoria, etc.), se encuentran agrupados en un solo programa (el Sistema Operativo).
Este sistema está descrito como un conjunto de procedimientos o rutinas entrelazadas de tal forma que cada una tiene la posibilidad de llamar a las otras rutinas cada vez que así lo requiera. Sin embargo, cabe destacar las falencias en este tipo de estructura que radica principalmente en la poca confiabilidad otorgada, ya que todo el sistema, al no tener una estructura definida, se ejecuta todo en el mismo nivel del núcleo (kernel) lo que lo hace altamente vulnerable, por esta razón cuando falla un programa se produce un error en todo el sistema.
Además, otro problema inherente al Sistema Monolítico es que si se modifica el hardware por lo general es necesario recompilar el kernel para poder disponer de las funcionalidades. Ésto consume tiempo y recursos porque la compilación de un nuevo kernel puede durar varias horas y necesita de una gran cantidad de memoria. Cada vez que alguien añade una nueva característica o corrige un error, significa que se necesitará hacer una recompilación del kernel entero, un ejemplo de ésto podemos verlo en Linux. También el hecho de que en el espacio del kernel están incluidos todos los servicios básicos, tiene tres grandes inconvenientes: el tamaño del núcleo, la falta de extensibilidad y la mala capacidad de mantenimiento.

Esquema Sistema Monolítico


EJEMPLOS SISTEMAS MONOLÍTICOS:

Los ejemplos típicos de este sistema son Unix, MS-DOS y Mac OS hasta Mac OS 8.6. Otros ejemplos son:

  • Linux
  • Syllable
  • Núcleos tipo DOS
  • DR-DOS
  • Familia Microsoft Windows 9x (95, 98, 98SE, Me)

Los sistemas de Micronúcleo o Microkernel

El Micronúcleo surge como una nueva forma de organización para un Sistema Operativo, es un término algo tedioso de entender ya que puede no ser relativo a su tamaño, pero si a su diseño.

En este sistema las funciones centrales son manejadas por el núcleo(kernel) y la interfaz de usuario es manejada por el entorno(shell). El Microkernel se encarga de todo el código de un sistema, y de planificar los hilos(threads) con la finalidad de tener multitareas.

Algunas ventajas que podemos destacar de los Micronúcleos son los siguientes:

•Uniformidad de interfaces: disponen de una interfaz única para las solicitudes de los procesos, el paso de mensajes.

•Portabilidad: reduciendo el núcleo e implementando casi todo en servidores, para implementarlo en arquitecturas diferentes, sólo habría que modificar el núcleo haciendo más simple su portabilidad.

•Fiabilidad: es más fácil corregir fallas en un sistema pequeño ya que se pueden realizar pruebas más rigurosas que en un sistema mucho más grande.


ALGUNOS EJEMPLOS DE SISTEMAS MICRONÚCLEO SON:

  • AIX
  • BeOS
  • Mach
  • MorphOS
  • QNX
  • Minix
  • Hurd
  • L4
  • RadiOS
  • Symbian
  • VSTa

A continuación examinaremos cuáles son las principales características de un sistema Monolítico y un Micronúcleo, además se podrá notar por qué el Sistema Micronúcleo supera algunas problemáticas relativas al diseño de un sistema Monolítico:

Sistema Monolítico Micronúcleo o Microkernel
Sin estructura definida
Todo sistema operativo se ejecuta en modo supervisor Todo el núcleo se ejecuta en modo supervisor
Menos robusto Más robusto
El sistema operativo es interrumpible El sistema operativo es interrumpible
Mayor rendimiento, eficiencia Menor rendimiento debido a la sobrecarga de comunicaciones
Difícil de modificar en tiempo de ejecución Fácil de modificar en tiempo de ejecución
Menos adaptable Más adaptable
Realiza todas las funciones con un único programa
El sistema es escrito como una colección de procedimientos y no existe "ocultación de información" ya que cualquier procedimiento puede ser invocado por otros
Un error o una vulnerabilidad de seguridad puede expandirse y afectar a todo el núcleo
Cualquier cambio a realizar requiere el reinicio del sistema para que este se haga efectivo


Esquema Sistema Monolítico-Micronúcleo


Intentemos finalmente entender el Sistema Monolítico y Micronúcleo con una historieta


Historieta explicativa


Sistema Cliente-Servidor:

Dentro de esta estructura también podríamos incluir el Sistema Cliente-Servidor ya que presenta una ligera variación en la idea del Microkernel la cual es que este sistema hace la diferencia entre dos clases de procesos: los servidores, cada uno de los cuales proporciona cierto servicio, y los clientes, que utilizan estos servicios. A menudo la capa inferior es un microkernel, pero eso no es requerido. La esencia es la presencia de procesos cliente y procesos servidor.

En los sistemas operativos modernos, los sistemas cliente-servidor nacen con la finalidad de minimizar el núcleo (kernel), trasladando el código de todos sus servicios a las capas superiores; y el núcleo sólo deberá controlar la comunicación, que se realiza mediante mensajes, entre clientes y servidores o servidores y hardware.

El objetivo es desarrollar la mayoría de las funciones del sistema operativos como procesos de usuario. Un proceso de usuario, llamado en este caso proceso cliente, envía una solicitud a un proceso servidor, que realiza el trabajo y devuelve la respuesta.

El sistema operativo se divide en partes donde cada una controla una faceta del sistema, entre ellos servicios a archivos, servicios a procesos, servicios a terminales, o servicios a la memoria, donde cada una es pequeña y controlable, así al ejecutar los procesos en modo usuario y no en modo núcleo si hay algún error en algún servidor, este afectará sólo a dicha parte y no a toda la máquina, ya que no se tiene acceso al hardware.


5.png


Un caso sencillo de cliente, en este caso, es un programa de aplicación que llama al servidor para acceder a un archivo, otro ejemplo es cuando el programa de aplicación realiza una operación de entrada o salida a un dispositivo concreto. En cada uno de estos casos el cliente a su vez puede ser servidor de otros servicios. Esta idea se refleja a continuación:


Modelo Cliente Servidor

Los sistemas por capas o jerárquica (Estructura por niveles)

Utilización de servicios de capas inferiores.

En esta estructura el Sistema Operativo queda definido modularmente por divisiones en capas o niveles, cuya organización está dada como una jerarquía de capas donde cada una de ellas ofrece una interfaz clara y bien definida, la capa superior solamente utiliza los servicios y funciones que ofrece la capa inferior, es decir, la capa n sólo se comunica para obtener lo requerido con la capa n-1 (Ver imagen derecha), donde la capa inferior es la más privilegiada. El encargado de que solamente haya comunicación entre capas adyacentes es el procesador.

La capa más interna o inferior (capa 0) corresponde al Hardware, mientras que la más alta o externa corresponde a la interfaz de 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 sistema original consta de 6 capas:

Capa 5: Se encuentra la interfaz de usuario.

Capa 4: Aloja los programas de usuario.

Capa 3: Se controlan los dispositivos E/S (entrada y salida).

Capa 2: Se administra la comunicación inter-proceso y la consola del operador.

Capa 1: Administración de memoria y discos.

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.

Organización de Sistema por capas


Como ventajas de este sistema podemos mencionar que al tener una organización modularizada, otorga facilidad en construcción y depuración del sistema. La facilidad de construcción se respalda porque al existir esta división en módulos (capas) se produce una abstracción del problema, simplificándose solamente a la función que realiza el módulo correspondiente a una capa N. También al lograr esta abstracción, no es necesario saber detalles de implementación de las capas inferiores, sólo se utilizan. La facilidad de depuración, quiere decir, que sea más simple la tarea de encontrar errores en el código y corregirlos. Otro aspecto positivo relacionado con la modularidad existente, cuando ocurre un error o falla en una de las capas, no se compromete a todo el sistema, sólo a la capa relacionada con la falla.


Con respecto a las desventajas de esta organización, al realizar la construcción de las capas, la problemática es la forma de realizar la división y definición de las funcionalidades, ya que se tiene considerar que las capas superiores solamente pueden utilizar los servicios de la capa que se encuentra inferior, por lo tanto, se debe tener mucho cuidado en la planificación del sistema para que exista un óptimo funcionamiento. Otra desventaja que podemos mencionar es el gasto de tiempo que se genera en ir de una capa a otra, cada capa implica un gasto extra.


EJEMPLOS DE SISTEMAS POR CAPAS:

  • THE (Technische Hogeschool Eindhoven)
  • Venus
  • MULTICS (Multiplexed Information and Computing Service)

Sistemas por módulos

La mayoría de los sistemas operativos modernos implementan este enfoque. Lo que caracteriza este tipo de estructura es que el kernel se compone por módulos, y cada uno de estos módulos se encuentra separado de forma independiente, tal que, si alguno falla no afecta a los otros, ni al núcleo, por ejemplo, si el módulo de software que se encarga de controlar el proceso de Telnet en una unidad se bloquea o es atacado, sólo este proceso se verá afectado. El resto de las operaciones siguen sus funciones habituales. Los módulos se pueden cargar dinámicamente en el núcleo cuando se necesiten, ya sea, en tiempo de ejecución o durante el arranque del sistema. El kernel dispone de los componentes fundamentales y se conectan directamente con servicios adicionales. Además otros componentes pueden cargarse dinámicamente al núcleo. Este enfoque modular utiliza la programación orientada a objetos.

En general, esta estructura se parece bastante a la de capas, pero es mucho más flexible debido a que cualquier módulo de esta estructura puede llamar a otro. Es similar a la estructura de microkernel, pues el kernel también tiene las funciones esenciales , pero este es más eficiente ya que, no necesitan un mecanismo de paso de mensajes para comunicarse, sólo interfaces conocidas.


Tabla comparativa sobre algunas funcionalidades entre Sistemas Monolítico y Sistemas por Módulos:

Funcionalidad Sistema Monolítico Sistema Modular
Arquitectura Cerrada, es decir, inmodificable a los programadores ajenos a la compañía propietaria del código fuente. Abierta, es decir, que todos los componentes del sistema del computador sean compatibles en cualquier ambiente sin importar la compañía que lo haya producido.
Dependencia de Hardware Absolutamente dependiente. No existe dependencia.
Escalabilidad No existe. Las funciones nuevas requieren un reinicio de la unidad, son instaladas como un nuevo SO.
Vulnerabilidad frente a los ataques Muy Vulnerable Existe una vulnerabilidad controlada.
Ejecución de Scripts Ejecución limitada, difícil realizar ejecuciones de instrucciones externas, ya que el sistema carga al inicio las funciones a realizar. Control total de ejecución de comandos externos.
Extensibilidad No es posible extender las capacidades del SO sin crear un nuevo código. Es posible extender sus capacidades hacia operaciones con agentes externos mediante API’s en un modelo cliente-servidor.
Niveles de Disponibilidad Muy bajos, ya que si se produce un error local, puede ocasionar un sistema inestable, detenido o un error en todo el sistema. Altos. Al existir un error de programación, este sucede localmente en un componente del sistema, el cual puede ser fácilmente reparado, sin afectar al resto.
Soporte para Redes Convergentes Este tipo de sistemas no es adecuado para realizar funciones en línea, como por ejemplo sincronización de voz, datos y videos. Óptimo soporte, a causa de su alta disponibilidad.
Cambios dinámicos en el software Al estar todo integrado conjuntamente, no es posible. Posibles, ya que cada módulo independientemente puede ser dado de alta o baja de manera independiente.


EJEMPLOS DE COMANDOS LINUX PARA GESTIONAR MÓDULOS:

•lsmod: Muestra todos los módulos que están cargados en el kernel Linux.

•modprobe: Se utiliza para agregar, ver y eliminar módulos.

•rmmod: Utilizado para descargar módulos del kernel, con la restricción de que no estén siendo utilizados y que no sean llamados por otros módulos.


EJEMPLOS SISTEMA POR MÓDULOS:

  • Unix modernos
  • Solaris
  • Linux
  • Mac OSX
Esquema Módulo Solaris
Núcleo Unix Moderno

Referencias

  • Abraham Silberschatz, Greg Gagne, Peter Baer Galvin (2006). “Fundamentos de sistemas operativos” (7ª edición). Mcgraw-hill.
  • Sistemas Operativos Modernos, Andrew S. Tanenbaum (3ª edición).

Artículos

Enlaces

Herramientas personales
Espacios de nombres
Variantes
Acciones
Navegación
Herramientas