Modelos de SOD (Kernel)

Universidad Autónoma de Ciudad Juárez Instituto de Ingeniería y Tecnología Modelos de Sistemas Operativos Ensayo: Kerne

Views 80 Downloads 1 File size 274KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Universidad Autónoma de Ciudad Juárez Instituto de Ingeniería y Tecnología

Modelos de Sistemas Operativos Ensayo: Kernel y Microkernel

Nidia Vaquera Chávez Ingeniería en Sistemas Computacionales, Matrícula 105328

Prof. Noé Ramón Rosales Sistemas Operativos Distribuidos Abril 15, 2013

El paradigma del micro núcleo, tuvo una gran relevancia académica durante los años ochenta y principios de los noventa, dentro de lo que se denominó self healing computing, esto es, sistemas independientes que fueran capaces de superar por si mismos errores de software hardware. En un principio pretendía ser una solución a la creciente complejidad de los sistemas operativos. En el artículo “Micro VS Monolítico” de A. Tanenbaum, éste contesta la pregunta de ¿por qué los ordenadores simplemente no pueden funcionar todo el tiempo?”, haciendo referencia a las diferencias entre los modelos de sistemas operativos que utilizan microkernel y kernel monolítico.

Para empezar, una definición de kernel es: Parte más indispensable y por lo tanto, más importante de un sistema operativo que provee los servicios más básicos del sistema. Básicamente, un sistema operativo está compuesto de dos partes: El espacio del Kernel (Modo privilegiado) y el espacio del usuario (Modo no privilegiado).

Históricamente, el enfoque más antiguo es el del kernel monolítico tal como UNIX, MS-DOS y el primer MAC OS. En él se ejecuta cada servicio básico del sistema, como procesos y gestión de memoria, gestión de interrupciones E/S y comunicación, sistema de archivos, etc. en el espacio del kernel. Por lo tanto, la reparación de bugs o la adición de nuevas características significa una recompilación del kernel entero. Esto consume tiempo y recursos porque la compilación de un nuevo kernel puede durar varias horas y una gran cantidad de memoria. Es decir, cada vez que alguien añade una nueva característica o corrige un error, significa recopilar todo el kernel.

Es aquí donde entra la idea del microkernel, que era reducir el kernel a una comunicación básica de procesos y el control básico de E/S, y dejar que los otros servicios del sistema residieran en el espacio de usuario en forma de procesos normales. Un servidor para gestionar los problemas de memoria, un servidor para la gestión de procesos, otro para manejar los controladores, y así sucesivamente. Debido a que los servidores no se ejecutan en el espacio del kernel más, los llamados " con-text switches " eran necesarias para permitir a los procesos de usuario entrar en modo privilegiado (y para salir de nuevo). Dado que la comunicación ya no se lleva a cabo de una manera directa, se introduce un sistema de mensajes, lo que permite la comunicación independiente.

En el artículo de Tanenbaum dice que su sistema MINIX 3 “está diseñado para correr la menor cantidad de código posible en modo kernel, donde los errores pueden ser fácilmente fatales. En vez de 3 ó 4 millones de líneas de código, MINIX 3 cuenta con unas 5000 líneas de código de kernel. A veces, a los kernels de este tamaño se les conoce como microkernels. Manejan la administración de procesos de bajo nivel, scheduling, interrupciones y el reloj, y proveen algunos servicios de bajo nivel a componentes del espacio de usuario. El bloque mayor del sistema operativo se ejecuta como una colección de controladores de dispositivos y servidores, cada uno ejecutándose como un proceso ordinario en espacio de usuario y con permisos restringidos.” “La capa de procesos que se ejecuta en modo usuario directamente sobre el kernel se compone de controladores de dispositivos, con el controlador de disco, el controlador de Ethernet y todos los otros controladores ejecutándose en procesos separados, protegidos por el hardware MMU para que no puedan ejecutar ninguna instrucción privilegiada y para que no puedan escribir en ninguna dirección de memoria que no les pertenezca. Por encima de la capa de controladores viene la capa de servidores, con un servidor de ficheros, de procesos y otros servidores. Los servidores utilizan los controladores así como los servicios del kernel.”

En su sitema Minix, Tanenbaum también habla sobre un servidor de reencarnación. Y lo define como el padre de todos los procesos de controladores y servidores, pues monitoriza su comportamiento. Si éste descubre alguno que falle arranca una nueva copia desde el disco. El sistema está diseñado para que muchos (aunque no todos) los controladores y servidores puedan ser reemplazados automáticamente mientras el sistema esté en funcionamiento y sin molestar a los procesos de usuarios o siquiera notificar al usuario. De esta manera, el sistema es capaz de auto repararse. Se indica que se hicieron varias pruebas con el controlador provocando ciertos fallos a un controlador y en todas las ocasiones (2.4 millones) el sistema pudo reemplazar el controlador mediante el servidor de reencarnación y el sistema no colapsó ni una vez. Esta es la realización de la meta del enfoque de los 80’s self healing computing, y de los requerimientos de la mayoría de usuarios actuales y más populares, los que no tienen conocimiento computacional, de contar con un sistema que no falle.

Algunas personas, como Torvalds mismo expresa en el famoso debate con Tanenbaum, dicen que a pesar de las ventajas del microkernel respecto a la modularización de los fallos y la alta tolerancia a ellos como consecuencia, no se ha logrado que los sistemas con esta orientación alcancen los mismos niveles de rendimiento que los que cuentan con un núcleo monolítico, en sus palabras, el microkernel es una cosa muy buena, si se hiciera como debe ser, pero tristemente, tiene muchísimos problemas de multitarea y acceso al núcleo.

Por otro lado, Tanenbaum contesta la agresiva pregunta de Torvalds "If microkernels are so good, why aren't there any?", - ¿si los microkernels son tan buenos, por qué no hay ninguno?con una lista de sistemas operativos que utilizan microkernel y que tienen como gran prioridad un buen rendimiento del sistema. Por ejemplo:

QNX, que es ampliamente utilizado en los sistemas comerciales reales. Los últimos routers de Cisco los utilizan, por ejemplo, y Cisco se preocupa mucho por el rendimiento.

Otro de los sistemas operativos líderes en los mercados militares y aeroespaciales, donde la fiabilidad es absolutamente fundamental, es “Green Hills' Integrity”, un microkernel.

PikeOS es otro sistema tiempo real basado en microkernel ampliamente utilizado en defensa, aeroespacial, automoción y aplicaciones industriales.

Symbian es otro microkernel popular, utilizado principalmente en los teléfonos celulares. No es un microkernel puro, sin embargo, sino una especie de híbrido, con los conductores en el núcleo, pero el sistema de archivos, redes y telefonía en el espacio de usuario. Mientras que en el mundo del PC encontramos L4Linux. Modelo Cliente-Servidor Una tendencia en los sistemas operativos modernos es llevar aún más lejos esta idea de trasladar código a capas superiores y quitarle lo más que se pueda al sistema operativo, dejando un kernel mínimo. El enfoque usual consiste en implementar la mayor parte de las funciones del sistema operativo en procesos de usuario. Para solicitar un servicio, como leer un bloque de un archivo, un proceso de usuario (ahora llamado proceso cliente) envía la solicitud a un proceso servidor, el cual realiza el trabajo y devuelve la respuesta.

Este modelo se muestra en la Figura, lo único que el kernel hace es manejar la comunicación entre los clientes y los servidores. Al dividir el sistema operativo en partes, cada una de las cuales sólo se encarga de una faceta del sistema, como el servicio de archivos, de procesos, de terminales o de memoria, cada parte puede ser pequeña y manejable. Además, dado que todos los servidores se ejecutan como procesos en modo de usuario, y no en modo de kernel, no tienen acceso directo al hardware. Por tanto, si se activa un error en el servidor de archivos, es posible que el servicio de archivos se caiga, pero normalmente esto no hará que se caiga toda la máquina.

En resumen Cliente-Servidor es un modelo basado en un protocolo solicitud/respuesta sencillo y sin conexión. El cliente envía un mensaje de solicitud al servidor para pedir cierto servicio. El servidor hace el trabajo y regresa los datos solicitados o un código de error para indicar la razón por la cual un trabajo no se pudo llevar a cabo. 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, 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.

Sus principales ventajas son su sencillez y eficiencia. Sencillez porque el cliente envía un mensaje y obtiene una respuesta. No se establece conexión hasta que se utilice. Modelo no orientado a la conexión. Y eficiencia porque la pila del protocolo es más corta y por lo tanto más eficiente.

Debido a esta estructura tan sencilla, se pueden reducir los servicios de comunicación que presta el (micro) núcleo; por ejemplo, reducirse a dos llamadas al sistema, una para el envío de mensajes y otra para la recepción.

Bibliografía  Tanenbaum A. Sistemas Operativos Distribuidos, Prentice Hall Iberoamericana, Primera Edición, México, 1996.

 http://www.linux-magazine.es/  www.minx3.org  www.cs.vu.nl/~ast/reliable-os/  https://sites.google.com/site/osupaep2010/sistemas-operativos/modelo-cliente-servidor  http://oreilly.com/openbook/opensources/book/appa.html  http://linuxkernel51.blogspot.mx/2011/02/difference-between-microkernel-and.html