Tienes razon en buena parte, pero veo que no se me entendio mi intencion al comparar un microkernel con una maquina virtual completa como la usada en Java.
Puse el caso de Java por ser un ejemplo popular que haga uso abundante de la abstraccion entre los niveles fisicos y logicos, o sea, en el que mediante capas logicas de abstraccion separamos los niveles mas cercanos al hardware, del sistema operativo (cualesquiera que sean las capas intermedias, segun cada caso) y a su vez de las aplicaciones que corran encima.
Una maquina virtual java ya monta el chiringuito ella solita, para que las aplicaciones corran encima. Por tanto sus binarios son siempre los mismos, independientemente del sistema operativo o el hardware que haya debajo, y el trabajo de la JVM será precisamente traducir ese bytecode a código ejecutable por la máquina real que hay debajo.
En un modelo microkernel no se llega a tanto, ya que lo que se busca es aislar el sistema operativo que pongamos encima, del hardware en el que corra, sobre todo para los aspectos más basicos: procesador, memoria, I/O, etc. El sistema operativo que pongas encima se desentiende de todo eso. Los que apoyan el modelo microkernel te podrian decir de carrerilla todas sus ventajas, pero son conscientes de que tiene sus desventajas claras, sobre todo por perdida de rendimiento, que tendrás que compensar afinando la optimizacion todo lo que puedas. Y que casualidad, Java tambien sufre esos problemas de rendimiento (ves como si que habia algunos aspectos comunes? :-)
A lo que ibamos. Mientras mas aislas el sistema operativo del hardware que hay debajo, más te despreocupas de él, y más cerca tienes el objetivo de ser multiplataforma que comentábamos. Una vez que portas las capas bajas (la chicha del microkernel), la portabilidad del sistema operativo que tienes encima es practicamente inmediata.
Decias: "Si, claro, igual que un binario Linux corre sin problemas sobre x86, PowerPC o sobre Sparc sin necesidad de recompilarlo. Lo que me faltaba por oir. Y no me digas que Linux es macrokernel, porque no tiene nada que ver en este caso."
La portabilidad de aplicaciones linux de una plataforma a otra es casi inmediata a nivel fuente. Tienes toda la razon en que no hay compatibilidad binaria ninguna. Es de cajón precisamente por ser monolitico. Sin embargo, si tu objetivo es tender a ser multiplataforma, y al mismo tiempo hacerte más modular y facilitar el desarrollo del SO y de lo que corras encima, puedes acercarte a él precisamente aislándote lo más posible del hardware subyacente. Esa es la linea de trabajo de la que estábamos hablando.
El tema es interesante, pero está ya muy manido, esta discusion viene del lejos, y tanto el modelo monolítico como el microkernel tienen sus pros y sus contras. Darwin y OS X han apostado por el microkernel mientras que Linux ha apostado por el modelo monolítico. Aunque existen proyectos como MkLinux que puso Linux precisamente encima de March3 para dar el salto al mundo microkernel.
No te sabria decir si PPC es big o little-endian, habria que mirarlo, pero si que tienes razon en que habrá cierta pérdida de rendimiento de todas todas (todos los microkernels implican una cierta degradación de rendimiento en mayor o menor medida). Por mucho que se optimice, siempre será menos eficiente que un monolítico optimizado.
Pero el microkernel tiene precisamente la tarea de independizar el sistema operativo del procesador y la memoria. No es una maquina virtual estrictamente hablando, vale, pero sí que consigue esa abstracción entre el sistema y el hardware, por lo que el núcleo del sistema operativo se desentiende de ese tema.
Vale, si yo lo de si es microkernel o macrokernel me trae al fresco :-) Cada cual tiene sus pros y sus contras. Lo que no existe en ninguno de los dos casos es compatibilidad de binarios entre distintas plataformas. No hay más remedio que recompilar y tener binarios independientes para cada una de las plataformas. Si luego tienes un empaquetado que facilita la distribución y el manejo de estos binarios (como yo decía en el primer mensaje) pues mejor que mejor.
--
Salu2.
_______________
Frodo Xtampida
See you space cowboy...
Re:No nos liemos con los mach y los binarios...
(Puntos:2)( http://barrapunto.com/ )
Puse el caso de Java por ser un ejemplo popular que haga uso abundante de la abstraccion entre los niveles fisicos y logicos, o sea, en el que mediante capas logicas de abstraccion separamos los niveles mas cercanos al hardware, del sistema operativo (cualesquiera que sean las capas intermedias, segun cada caso) y a su vez de las aplicaciones que corran encima.
Una maquina virtual java ya monta el chiringuito ella solita, para que las aplicaciones corran encima. Por tanto sus binarios son siempre los mismos, independientemente del sistema operativo o el hardware que haya debajo, y el trabajo de la JVM será precisamente traducir ese bytecode a código ejecutable por la máquina real que hay debajo.
En un modelo microkernel no se llega a tanto, ya que lo que se busca es aislar el sistema operativo que pongamos encima, del hardware en el que corra, sobre todo para los aspectos más basicos: procesador, memoria, I/O, etc. El sistema operativo que pongas encima se desentiende de todo eso. Los que apoyan el modelo microkernel te podrian decir de carrerilla todas sus ventajas, pero son conscientes de que tiene sus desventajas claras, sobre todo por perdida de rendimiento, que tendrás que compensar afinando la optimizacion todo lo que puedas. Y que casualidad, Java tambien sufre esos problemas de rendimiento (ves como si que habia algunos aspectos comunes? :-)
A lo que ibamos. Mientras mas aislas el sistema operativo del hardware que hay debajo, más te despreocupas de él, y más cerca tienes el objetivo de ser multiplataforma que comentábamos. Una vez que portas las capas bajas (la chicha del microkernel), la portabilidad del sistema operativo que tienes encima es practicamente inmediata.
Decias: "Si, claro, igual que un binario Linux corre sin problemas sobre x86, PowerPC o sobre Sparc sin necesidad de recompilarlo. Lo que me faltaba por oir. Y no me digas que Linux es macrokernel, porque no tiene nada que ver en este caso."
La portabilidad de aplicaciones linux de una plataforma a otra es casi inmediata a nivel fuente. Tienes toda la razon en que no hay compatibilidad binaria ninguna. Es de cajón precisamente por ser monolitico. Sin embargo, si tu objetivo es tender a ser multiplataforma, y al mismo tiempo hacerte más modular y facilitar el desarrollo del SO y de lo que corras encima, puedes acercarte a él precisamente aislándote lo más posible del hardware subyacente. Esa es la linea de trabajo de la que estábamos hablando.
El tema es interesante, pero está ya muy manido, esta discusion viene del lejos, y tanto el modelo monolítico como el microkernel tienen sus pros y sus contras. Darwin y OS X han apostado por el microkernel mientras que Linux ha apostado por el modelo monolítico. Aunque existen proyectos como MkLinux que puso Linux precisamente encima de March3 para dar el salto al mundo microkernel.
Uff no me he enrollao ni ná...
Re:john brown was a little endian....
(Puntos:2)( http://barrapunto.com/ )
Pero el microkernel tiene precisamente la tarea de independizar el sistema operativo del procesador y la memoria. No es una maquina virtual estrictamente hablando, vale, pero sí que consigue esa abstracción entre el sistema y el hardware, por lo que el núcleo del sistema operativo se desentiende de ese tema.
Re:No nos liemos con los mach y los binarios...
(Puntos:1)( http://www.xtampida.com/ )
Salu2. ...
_______________
Frodo Xtampida
See you space cowboy