Exokernel no tiene nada que ver con L4. Mi proyecto de fin de carrera se basó en implementar un so sobre L4, así q aqui os saco mas o menos algunos parrafillos de mi PFC para aclarar las cosas ( o liarlas mas :):
Sobre exokernel:
"Este kernel desarrollado en el MIT, no es propiamente un microkernel, pues va más allá en la minimización de funciones, y sus desarrolladores propugnan incluso la eliminación del sistema operativo. La idea se basa en que el sistema operativo proporcione únicamente una multiplexación segura de los recursos (Bastante similar a la de L4). Su filosofía es que la aplicación es la que más conoce como va a necesitar los recursos y por ello debe gestionarla ella. Así. el sistema operativo como tal se implementa en forma de librería en modo usuario, que se enlaza con la aplicación. Con esto podemos tener una librería UNIX, otra WINDOWS, etc."
Sus caracteristicas principales son la de utilizar transferencias de control (algo más bajo de las llamadas ipc de L4, más todabia!) y útilizar downloading de código, es decir, bajar código de usuario a modo kernel y ejecutarlo como una especie de sandboxing (por explicarlo de una forma similar a unix :)
Sobre L4:
L4 es un microkernel de segunda generación desarrollado originalmente por Jochen Liedtke en colaboración con IBM. Sucesor de los sistemas Eumel (1979) y L3 (1987). Su filosofía es que la única función del sistema operativo es la de compartir los recursos de forma segura. Separa los mecanismos (forma de obtener los recursos) de la política (como distribuir estos recursos), que se ejecuta en modo usuario. Actualmente existen bastantes implementaciones de las APIs para diferentes arquitecturas.
Las dos ideas en las que se basa L4 son los hilos y los espacios de direcciones.
En L4 la optimización de las IPC es fundamental, es una comunicación entre espacios de direcciones con menor abstracción que los microkernels de primera generación como MACH. El paso de mensajes de más alto nivel, como por ejemplo las RPC, se implementan en modo usuario.
Otra de las características de L4 es la construcción recursiva del espacio de direcciones. Existe un espacio de direcciones inicial llamado sigma0 que contiene todas las páginas físicas de la máquina. Cuando se crea un espacio de direcciones nuevo, éste pide a sigma0 que le comparta una serie de páginas, a su vez otro espacio de direcciones puede hacer lo mismo con el anterior, etc. Así se construyen los espacios de direcciones. Cada espacio de direcciones puede compartir (map) o asignar (grant) una página a otro. También pueden desasignar una página (unmap) y recursivamente se desasigna de todos los que tuviesen esa página. Para que esto sea seguro y una tarea no pueda desasignar páginas que no posee, se usa la dirección virtual de la página y no la física, de manera que antes se la tienen que haber asignado.
Como L4 basa su filosofía en que todo lo que pueda estar fuera del kernel tiene que estar fuera, los drivers de los dispositivos están fuera del kernel. Para ello mapea los puertos de E/S en el espacio de direcciones (esto depende del arquitectura). Las interrupciones funcionan de forma similar a los fallos de página: Las aplicaciones en modo usuario se asocian a una interrupción (sólo puede haber una, y hasta que no la deje no puede asociarse otra), y cuando ocurre la interrupción el kernel la transforma en un mensaje al hilo que está escuchando la interrupción.
L4 solo tiene 7 llamadas al sistema (12 en la versión Pistachio).
Bueno, con esto espero haber aclarado algo a alguien :), tengo q subir el pfc a mi web algun dia :).
Teneis más información sobre L4 en www.k4ka.org y en http://os.inf.tu-dresden.de/L4/
Y si alguien está interesado en montar un so sobre L4 que me avise que yo tambien lo estoy :D
--
---------
Algún dia encontraré una frase interesante...
Buenas, es exactamente la idea que tengo yo. De dar servicios con espacios de nombres. Lo que pasa que al final el conjunto de espacios de nombres forman el sistema de ficheros quieras o no :), vamos que puede ser mas flexible en cuanto a que no es un sistema de ficheros para todo el sistema, sino por cada usuario o incluso proceso o hilo.
La cosa sería que algunos espacios de nombres no exportarián objetos con la interfaz fichero, sinó con otra interfaz: dispositivo,servicio de memoria, etc.
En L4 las interfaces son muy faciles de definir con IDL4 (un compilador de interfaces CORBA y DCE que genera los stubs necesarios y optimizados para L4 y la máquina). La cosa sería primero definir todas las interfaces que compondrían el sistema y luego montar todos los servicios sobre estas interfaces,
Por ejemplo interfaces básicas que debería tener (sacadas en parte de chacmOS):
-generico (Este servicio se encargaría de informar de que interfaces exporta el servicio y lo tendrían todos los servicios)
-espacio_de_nombres
mount
unmount
-directorio
resolve
link
unlink
-fichero
open
read
close
etc...
a partir de aquí se podría pensar en más interfaces para servicios.
Sobre lo de meterse con un procesador de 64 bits a mi tambien me gustaría, pero a dia de hoy como que estan poco asequibles jeje :), al menos la arquitectura IA-64 que es donde me gustaria desarrollar.
--
---------
Algún dia encontraré una frase interesante...
[OT]: Exokernel y L4
(Puntos:1)( http://barrapunto.com/index.pl?section=mbp-activez | Última bitácora: Martes, 13 Mayo de 2003, 00:42h )
Sobre exokernel:
"Este kernel desarrollado en el MIT, no es propiamente un microkernel, pues va más allá en la minimización de funciones, y sus desarrolladores propugnan incluso la eliminación del sistema operativo. La idea se basa en que el sistema operativo proporcione únicamente una multiplexación segura de los recursos (Bastante similar a la de L4). Su filosofía es que la aplicación es la que más conoce como va a necesitar los recursos y por ello debe gestionarla ella. Así. el sistema operativo como tal se implementa en forma de librería en modo usuario, que se enlaza con la aplicación. Con esto podemos tener una librería UNIX, otra WINDOWS, etc."
Sus caracteristicas principales son la de utilizar transferencias de control (algo más bajo de las llamadas ipc de L4, más todabia!) y útilizar downloading de código, es decir, bajar código de usuario a modo kernel y ejecutarlo como una especie de sandboxing (por explicarlo de una forma similar a unix :)
Sobre L4:
L4 es un microkernel de segunda generación desarrollado originalmente por Jochen Liedtke en colaboración con IBM. Sucesor de los sistemas Eumel (1979) y L3 (1987). Su filosofía es que la única función del sistema operativo es la de compartir los recursos de forma segura. Separa los mecanismos (forma de obtener los recursos) de la política (como distribuir estos recursos), que se ejecuta en modo usuario. Actualmente existen bastantes implementaciones de las APIs para diferentes arquitecturas.
Las dos ideas en las que se basa L4 son los hilos y los espacios de direcciones.
En L4 la optimización de las IPC es fundamental, es una comunicación entre espacios de direcciones con menor abstracción que los microkernels de primera generación como MACH. El paso de mensajes de más alto nivel, como por ejemplo las RPC, se implementan en modo usuario.
Otra de las características de L4 es la construcción recursiva del espacio de direcciones. Existe un espacio de direcciones inicial llamado sigma0 que contiene todas las páginas físicas de la máquina. Cuando se crea un espacio de direcciones nuevo, éste pide a sigma0 que le comparta una serie de páginas, a su vez otro espacio de direcciones puede hacer lo mismo con el anterior, etc. Así se construyen los espacios de direcciones. Cada espacio de direcciones puede compartir (map) o asignar (grant) una página a otro. También pueden desasignar una página (unmap) y recursivamente se desasigna de todos los que tuviesen esa página. Para que esto sea seguro y una tarea no pueda desasignar páginas que no posee, se usa la dirección virtual de la página y no la física, de manera que antes se la tienen que haber asignado.
Como L4 basa su filosofía en que todo lo que pueda estar fuera del kernel tiene que estar fuera, los drivers de los dispositivos están fuera del kernel. Para ello mapea los puertos de E/S en el espacio de direcciones (esto depende del arquitectura). Las interrupciones funcionan de forma similar a los fallos de página: Las aplicaciones en modo usuario se asocian a una interrupción (sólo puede haber una, y hasta que no la deje no puede asociarse otra), y cuando ocurre la interrupción el kernel la transforma en un mensaje al hilo que está escuchando la interrupción.
L4 solo tiene 7 llamadas al sistema (12 en la versión Pistachio).
Bueno, con esto espero haber aclarado algo a alguien :), tengo q subir el pfc a mi web algun dia :).
Teneis más información sobre L4 en www.k4ka.org y en http://os.inf.tu-dresden.de/L4/
Y si alguien está interesado en montar un so sobre L4 que me avise que yo tambien lo estoy :D
---------
Algún dia encontraré una frase interesante...
Re:[OT]: Exokernel y L4
(Puntos:1)( http://barrapunto.com/index.pl?section=mbp-activez | Última bitácora: Martes, 13 Mayo de 2003, 00:42h )
La cosa sería que algunos espacios de nombres no exportarián objetos con la interfaz fichero, sinó con otra interfaz: dispositivo,servicio de memoria, etc.
En L4 las interfaces son muy faciles de definir con IDL4 (un compilador de interfaces CORBA y DCE que genera los stubs necesarios y optimizados para L4 y la máquina). La cosa sería primero definir todas las interfaces que compondrían el sistema y luego montar todos los servicios sobre estas interfaces,
Por ejemplo interfaces básicas que debería tener (sacadas en parte de chacmOS):
-generico (Este servicio se encargaría de informar de que interfaces exporta el servicio y lo tendrían todos los servicios)
-espacio_de_nombres
mount
unmount
-directorio
resolve
link
unlink
-fichero
open
read
close
etc...
a partir de aquí se podría pensar en más interfaces para servicios.
Sobre lo de meterse con un procesador de 64 bits a mi tambien me gustaría, pero a dia de hoy como que estan poco asequibles jeje :), al menos la arquitectura IA-64 que es donde me gustaria desarrollar.
---------
Algún dia encontraré una frase interesante...