Download 2. Multikernel

Document related concepts

Anillo (seguridad informática) wikipedia , lookup

Windows NT wikipedia , lookup

Arquitectura de Windows NT wikipedia , lookup

Sistema operativo wikipedia , lookup

RC 4000 wikipedia , lookup

Transcript
Multikernel
Arquitectura de Sistema Operativo
para sistemas con múltiples núcleos
Microprocesadores para Comunicaciones
Jesús A. Díaz Sánchez
Curso 2010/2011
Índice
1. Introducción
2. Multikernel
3. Implementación: Barrelfish
3.1. Controladores de CPU (CPU Drivers)
3.2. Monitores
4. Conclusiones
5. Referencias
1
2
3
5
6
6
7
8
1. Introducción
Los nuevos sistemas informáticos contienen cada vez más núcleos en los procesadores,
los cuales presentan ventajas y desventajas, al ser las arquitecturas cada vez más
diversas, incluyendo jerarquías de memoria, interconexiones, conjunto de
instrucciones y las configuraciones de E/S.
El uso compartido de memoria y la interconexión entre núcleos, obliga actualmente a
desarrollar cachés exclusivos, cachés compartidos con protocolos de coherencia y
drivers que intentan traducir las instrucciones entre el software y los componentes del
sistema. Esta mezcla no tiene una buena escalabilidad, y se hace más ineficiente,
cuantos más componentes se añaden al sistema. En este contexto, un CPU adicional,
no aporta rendimiento e incluso, puede perjudicar la eficiencia de los restantes.
En este trabajo, se va a realizar una introducción al Multikernel, una nueva
arquitectura de sistema operativo que permite utilizar los conceptos de los sistemas
distribuidos.
La investigación de esta nueva estructura se basa en el concepto de pensar en la
máquina como una red de núcleos independientes, sin asumir ninguna distribución
entre núcleos en el nivel más bajo. Esto produce una modificación en la funcionalidad
de los sistemas operativos tradicionales hacia los sistemas distribuidos de procesos,
que mantienen una comunicación por medio del paso de mensajes.
Se ha implementado un sistema operativo Multikernel, para demostrar que el enfoque
dado es prometedor, y se describe cómo los problemas tradicionales de escalabilidad
de los sistemas operativos (como la gestión de memoria), se pueden corregir mediante
el uso de mensajes y utilizando los conceptos de los sistemas distribuidos y en red.
La evaluación de este prototipo, en sistemas múltiples núcleos, muestra que incluso en
las máquinas actuales, el rendimiento del Multikernel es comparable con un sistema
operativo convencional, y permite mayor escalabilidad para soportar el hardware
futuro.
2
2. Multikernel
El hardware informático está cambiando y se diversifica mucho más rápido que el
software de los sistemas. Una mezcla diversa de núcleos, cachés, enlaces de
interconexión, dispositivos aceleradores y de E/S, en combinación con el incremento
de los núcleos, lleva a una sustancial escalabilidad y al desafío a los diseñadores para
los cambios correctos en los sistemas operativos.
Este hardware, que en algunos aspectos es similar al de los sistemas paralelos, está
cambiando el dominio de computación de propósito general. Cada vez se encuentran
más sistemas de múltiples núcleos en una variedad de ambientes que pueden ir desde
computadoras personales a los centros de control de datos más dispares, con cargas
de trabajo que son menos predecibles y sistemas operativos más exhaustivos, que las
aplicaciones tradicionales de computación de alto rendimiento. Ya no es aceptable o
útil, implementar un diseño de sistema operativo de propósito general para un modelo
particular de hardware, ya que éste varía enormemente, y las optimizaciones quedan
obsoletas tras unos años, por la llegada de nuevo hardware.
Por otra parte, estas optimizaciones involucran compensaciones especificas para los
parámetros hardware como pueden ser la jerarquía de caché, el modelo de la
consistencia de la memoria, y los costes relativos al acceso a la caché local y remota,
por lo que no son portables entre los distintos tipos de hardware. A menudo, ni
siquiera son aplicables a las siguientes generaciones de la misma arquitectura. Por lo
general, debido a estas dificultades, un problema de escalabilidad debe afectar a un
grupo sustancial de usuarios antes de que reciban la atención de los desarrolladores
del software.
Se atribuyen estas dificultades de ingeniería a la estructura básica de un núcleo de
memoria compartida, con estructuras de datos protegidos por cerraduras (locks). Los
desarrolladores del Multikernel, argumentan un nuevo planteamiento de estructura
de sistema operativo, configurándolo como un sistema distribuido de unidades
funcionales con comunicación a través de mensajes explícitos. Se identifican tres
principios de diseño:
1. Hacer toda la comunicación explicita entre núcleos.
2. Hacer una estructura de sistema operativo neutral al hardware.
3. Ver el estado como replicado en lugar de compartido.
3
La arquitectura del Multikernel se muestra en la siguiente figura:
No sólo saca mejores prestaciones al hardware subyacente, que está en red, es
heterogéneo y dinámico. Si no que también permite aplicar los conocimientos de
sistemas distribuidos a los problemas de adaptabilidad, diversidad y escalabilidad en
los sistemas operativos para el hardware futuro.
Incluso en los sistemas actuales con eficiencia en la memoria compartida por la
coherencia de las cachés, la creación de un sistema operativo basado en el paso de
mensajes, en lugar de compartir los datos de comunicación tiene beneficios
perceptibles: en lugar de manipular secuencialmente las estructuras de datos
compartidas, limitadas por la latencia del acceso a los datos remotos, la capacidad de
operaciones de pipeline y la codificación de mensajes por lotes en los entornos
remotos, permite que a un solo núcleo lograr un mayor rendimiento y reduce la
utilización y el tiempo de interconexión. Además, este concepto tiene naturalmente
capacidad para ser utilizado con hardware heterogéneo.
4
3. Implementación: Barrelfish
Barrelfish es sólo una manera de implementar un Multikernel, no la única forma. Este
proyecto, lo están llevando a cabo investigadores de la ETH Zürich y miembros de
Microsoft Research, en Cambridge, en conjunto con el ENS Cachan Bretagne.
Barrelfish está escrito en C, aunque también contiene algo de ensamblador, Prolog,
Haskell y DSLs. Actualmente se ejecuta en multiprocesadores basados en los modelos
x86 de 64bits, aunque un puerto para el ARM está actualmente implementándose. Se
ha testeado en los siguientes sistemas:
2X4-core Intel system
2X2-core AMD system
4X4-core AMD system
8X4-core AMD system
El modelo Multikernel, se ha llamado así por las múltiples instancias de sistemas
operativos independientes con comunicación por medio de mensajes explícitos. En
Barrelfish, se introduce la instancia del sistema operativo en cada núcleo dentro de un
controlador de CPU (CPU Driver) en modo privilegiado y se hace la distinción de un
proceso modo usuario llamado monitor, como se muestra en la siguiente figura:
Los controladores de CPU, son locales a cada núcleo y toda la coordinación entre los
núcleos está realizada por los monitores. El sistema distribuido de los monitores
asociado con los controladores de CPU encapsulan la funcionalidad típica de un
monolítico microkernel: la programación, la comunicación y la asignación de los
recursos a bajo nivel.
5
El resto del modelo Barrelfish, consiste en controladores de dispositivos y de servicios
de sistemas, como pueden ser las pilas de red, los asignadores de memoria, etc. Los
cuales se ejecutan en los procesos a nivel de usuario como en un microkernel. Las
interrupciones de los dispositivos son enviadas en hardware al núcleo apropiado,
demultiplexados por el controlador de CPU para ese núcleo específico, y entregado al
proceso controlador por medio de un mensaje.
3.1. Controladores de CPU (CPU drivers)
Cada controlador de CPU refuerza la protección, se encarga de la autorización, de los
intervalos de tiempo para cada proceso, y es el mediador en el acceso al núcleo y su
hardware asociado (MMU, APIC, etc.). Ya que no comparte su estado con otros
núcleos, puede ser totalmente controlado por eventos, por un solo hilo de ejecución
(sigle-threaded) y no priorizable. La serialización de los eventos de los procesos en
forma de traps para cada proceso de usuario o interrupciones de los dispositivos o de
otros núcleos. Esto significa que es más fácil escribir y depurar que un kernel
convencional, y al ser pequeño, permite que su texto y sus datos se encuentren en la
memoria local del núcleo.
El controlador de CPU realiza el envío de la mensajería local de manera rápida entre los
procesos del núcleo. También ofrece interrupciones hardware a los drivers del espacio
de usuario, y localmente controla los tiempos de los procesos.
Se invoca a través de las instrucciones estándar de llamadas al sistema con un coste
comparable al de Linux en el mismo hardware.
3.2 . Monitores
Los monitores coordinan el estado de todo el sistema y encapsulan la mayor parte de
los mecanismos y políticas que se encuentran en el núcleo de un sistema operativo
tradicional. Los monitores pertenecen a un solo núcleo, los procesos de espacio de
usuario y por lo tanto, es planificable. De esta forma, se adaptan a la división de fase,
la comunicación entre núcleos orientado al paso de mensajes del modelo Multikernel,
en particular a la manipulación de colas de mensajes y las operaciones remotas de alta
duración.
En cada núcleo, se replican las estructuras de datos, como pueden ser las tablas de
asignación de memoria y el mapeado del espacio de direcciones, que se mantiene
globalmente consistente por medio de un protocolo de conformidad dirigido por los
monitores. Las peticiones de las aplicaciones que mantienen el estado global, son
manipuladas por los monitores, que coordinan el acceso a las copias remotas del
estado.
6
4 Conclusiones
Este nuevo modelo, no está destinado a reemplazar la línea de los sistemas operativos
actuales, sino que es un proyecto paralelo, de carácter gratuito y de código abierto,
algo que se explica porque toma y reutiliza varios componentes BSD.
En el planteamiento de Barrelfish, los núcleos no son necesariamente núcleos de CPU,
sino que el GPU también es un núcleo, al igual que los componentes ARM de una
controladora, por poner algunos ejemplos.
Aunque da la impresión de que en plataformas sencillas, este modelo no puede
competir contra el enfoque actual, donde toda la comunicación se maneja por medio
del hardware y punto a punto. Pero parece que a medida que añadimos más
componentes y núcleos a nuestro sistema, el enfoque dado el Multikernel si podría ser
una ventaja.
Por ejemplo, hoy se podría construir un servidor con 8 sockets, cada uno con un
procesador quad-core, más dos tarjetas graficas dual GPU, sólo en este modelo
tendríamos ya 36 procesadores para manejar.
Aunque por otro lado, en la práctica no hay ningún sistema operativo basado en el
paso de mensajes que haya llegado a ser razonablemente eficiente y extendido su uso.
Aparte del Barrelfish, Microsoft también está implementando otro sistema operativo
basado en Windows, denominado Singularity Operating System, basado totalmente
en aplicaciones .Net y pensado para una plataforma de Multikernel.
7
5 Referencias
•
•
•
•
•
•
•
•
•
•
•
Andrew Baumann, Paul Barham, Pierre-Evariste Dagand, y otros. The
Multikernel: A new OS architecture for scalable multicore systems. Systems
Groups, ETH Zurich, Microsoft Research, Cambridge, ENS Cachan Bretagne.
Octubre 2009
www.barrelfish.org
http://research.microsoft.com/en-us/projects/Barrelfish/
www.eetimes.eu
http://en.wikipedia.org
http://www.chw.net/2009/09/microsoft-barrelfish-os-multikernel-open-source/
http://www.osnews.com/story/22241/Microsoft_Releases_Code_for_Multikernel_Res
earch_OS_Barrelfish_
http://www.linux-magazine.com/Online/News/Barrelfish-Multikernel-OperatingSystem-out-of-Zurich
http://www.muywindows.com/2009/09/25/barrelfish-microsoft-inventa-otro-sistemaoperativo
http://www.dosideas.com/noticias/actualidad/487-los-lenguajes-especificos-dedominio.html
http://www.thalskarth.com.ar/2010/08/25/10-diferencias-entre-bsd-y-gnulinux/
8