¿Crees que los sistemas operativos administrados son una buena idea? [cerrado]

15

Sistemas operativos administrados como Microsoft Singularity y JNode son un concepto bastante interesante. Esencialmente, el sistema operativo se inicia con código escrito en un lenguaje de bajo nivel (C / C ++ / Assembly), que esencialmente implementa una máquina virtual. El resto del sistema operativo (y todas las aplicaciones de usuario) se ejecutan en la máquina virtual. Hay algunas grandes cosas sobre esto. Por ejemplo, de repente haces punteros arbitrarios obsoletos. Y si está bien escrito, se deshace de una tonelada de basura heredada que la mayoría de los sistemas operativos modernos tienen actualmente.

Sin embargo, como desventaja, está mucho más alejado del hardware y, como desarrollador, pierde la capacidad de descender a un nivel inferior de abstracción y ensuciarse las manos.

¿Qué opinan al respecto?

    
pregunta Chinmay Kanchi 02.09.2010 - 23:50
fuente

8 respuestas

8

Creo que este es otro caso donde "depende".

Si está escribiendo aplicaciones como navegadores web, procesadores de texto, etc. donde el rendimiento a la velocidad de la luz no es necesariamente un problema, este enfoque tiene sus ventajas. Al utilizar este enfoque, puede ofrecer a sus clientes una experiencia más segura y controlada. No solo está limitando el daño que puede hacer el malware, sino que también se está ejecutando en un entorno más consistente.

Es como la diferencia entre juegos de consola y juegos de PC. Los primeros saben exactamente con qué hardware necesitan trabajar, por lo que pueden hacer uso de ese conocimiento, mientras que los últimos deben poder hacer frente a una variedad más amplia de tarjetas gráficas, tarjetas de sonido, velocidades de disco duro, etc.

Sin embargo, habrá aplicaciones (¡como juegos!) que requieren el acceso de bajo nivel y que todavía deberán ejecutarse "de forma nativa".

Al igual que los idiomas administrados, tendrá que usar la herramienta adecuada para el trabajo.

    
respondido por el ChrisF 04.09.2010 - 13:49
fuente
3

En general, creo que son una buena idea, pero como no hay muchos de ellos alrededor o casi totalmente cocidos, es muy difícil decir cómo se desempeñarán en el mundo real. Me gustaría que MS hubiera actualizado el proyecto Singularity para que pudiéramos ver a dónde iba eso, pero supongo que parte de él se está trabajando en alguna versión de Windows

    
respondido por el Walter 04.09.2010 - 14:10
fuente
3

Creo que los beneficios de un sistema operativo totalmente administrado son enormes y que realmente podría ser el futuro, pero requerirá de muchos años.

Un buen sistema operativo administrado le proporcionará todo el punto de entrada administrado que necesita para hacer todo lo que necesita a nivel bajo, independientemente de su administración: captura de interrupciones y realización de E / S con dispositivos. C # también permite el código no seguro (que trata con los punteros) pero solo se permitirá en los "controladores de dispositivo" (que será solo otro tipo de proceso aislado de software).

Los beneficios en cuanto a seguridad, uniformidad, portabilidad y, especialmente, confiabilidad, ciertamente superarán cualquier inconveniente de rendimiento. Entonces, un sistema totalmente administrado es sorprendentemente rápido, ya que ya no es necesario hacer un cambio de contexto.

    
respondido por el Wizard79 04.09.2010 - 13:37
fuente
2

Los sistemas operativos administrados probablemente sean, de alguna manera, como los microkernels: sacrificas el rendimiento en nombre de la seguridad.

Podría haber problemas similares, ya que requiere dividir el código en 2 partes:

  • Kernel de bajo nivel escrito en C / assembler
  • Kernel de nivel superior escrito en lenguaje administrado

Dependiendo del costo de ingresar / salir de forma segura del lenguaje HL, puede imponer problemas similares a los micro-núcleos, posiblemente un poco más rápido (salir de HL es más rápido que el cambio de contexto completo, pero IIRC por ejemplo JNI es bastante costoso).

Es probable que la aplicación de usuario también necesite contextos separados, ya que muchas aplicaciones están escritas en otras plataformas (por ejemplo, C, Java o .Net). En los mismos casos, las aplicaciones pueden estar vinculadas a la CPU (compiladores, convertidores de música, etc.) y necesitan incluso una optimización del ensamblador para funcionar con suficiente velocidad. Además, la protección MMU implementada en el lenguaje HL probablemente no sea tan rápida como la del hardware, incluso si es posible que esté mucho más ajustada.

También el lenguaje HL no domina las operaciones de bajo nivel. Si bien el software generalmente está diseñado con "buenas" prácticas de codificación, los controladores no son necesarios. No creo que protejan contra al menos algunos errores, ya que los kernels a veces requieren la gestión manual de la memoria.

Finalmente, no creo que tal sistema operativo requiera una máquina virtual completa. Dado que el sistema operativo no se puede compilar con el principio compilar una vez que se ejecuta en todas partes, los idiomas HL (incluso con GC & co.) Serían mejores candidatos.

  

Por ejemplo, de repente dejas obsoletos los punteros arbitrarios.

OS es inherentemente de bajo nivel. Se pasa al hardware no solo 'puntero arbitrario' sino también probablemente a una dirección física en lugar de a una virtual. Algunos DMA pueden manejar solo los primeros 16MiB de memoria. Si bien este sistema operativo puede simplificar mucho, no eliminará las direcciones.

  

Y si está bien escrito, se deshace de una tonelada de basura heredada que la mayoría de los sistemas operativos modernos tienen actualmente.

  1. Hay una gran cantidad de hardware heredado. Mucho más que en software. Primero comienza en modo real, luego habilita la puerta A20 (no preguntar) salta al modo protegido y luego al modo largo.
  2. La compatibilidad API / ABI es buena. Diga que han escrito un sistema operativo de este tipo: ¿qué ejecutarían en él? Firefox - nope (C y C ++ usando WinAPI). Java, probablemente necesitaba ser portado o tenía algunos problemas menores a través de ikvm, a menos que tuviera que usar JNI. Supongo que MSSQL (y, por supuesto, Oracle, MySQL, Postgresql ...) no está escrito en un lenguaje administrado, por lo que no sería adecuado para el servidor.
  3. Incluso la compatibilidad de errores es "buena". AFAIK MS pasa mucho tiempo solo comprobando y comprobando si algún software no está utilizando la API de forma inteligente (lectura incorrecta). Como el problema de usar el puntero después de free it cuando Windows realmente comenzó a liberar memoria.

Supongo que ganará popularidad más o menos al mismo tiempo que los microkernels.

    
respondido por el Maciej Piechotka 23.01.2011 - 04:07
fuente
2

Personalmente, creo que la idea de un sistema operativo administrado es un poco como el comunismo: bueno en teoría, pero poco práctico de implementar.

El problema es que simplemente no veo ninguna forma de utilizar el sistema operativo administrado sin tener que reescribir completamente el sistema operativo desde cero (y espero que alguien pueda demostrar que estoy equivocado en esta parte). Además, ¿cómo puede encajar décadas de código no administrado en un sistema operativo administrado?

Los núcleos de los sistemas operativos más populares del mundo están probados en batalla y han madurado a lo largo de un par de décadas. Usted no simplemente los reescribe a su antojo. Sin mencionar que la historia está llena de ejemplos de diseños de procesadores y arquitecturas de kernel que sin duda fueron mejores, pero que nunca pudieron convencer a nadie de que valía la pena el costo de cambiarlos.

Por último, ¿cómo una empresa como Microsoft o Apple va a vender un sistema operativo administrado a los clientes? ¿Le importará al usuario de la computadora promedio si su sistema operativo está administrado o no administrado?

Lo mencionado anteriormente, espero que me equivoque y que los sistemas operativos administrados sean una realidad. Pero soy escéptico. Si alguna vez lo vemos, probablemente no sea por una o dos décadas más.

    
respondido por el Jason Baker 23.01.2011 - 04:17
fuente
2

El código administrado es solo una extrapolación de lo que te ofrece la protección de la memoria virtual, es decir, la capacidad de la computadora para negar el acceso a los recursos.

IBM ya hace esto en sus sistemas mainframe (solo lo llaman otra cosa), por lo que, en mi opinión, es solo una cuestión de tiempo antes de que esto suceda en los sistemas disponibles para el público en general.

¿Le importaría si una computadora portátil de Google (que ejecuta Chrome y básicamente nada más) se ejecuta en código administrado o no?

    
respondido por el user1249 23.01.2011 - 13:21
fuente
1
  

Sin embargo, como desventaja, está mucho más alejado del hardware y, como desarrollador, pierde la capacidad de descender a un nivel inferior de abstracción y ensuciarse las manos.

Esto no es realmente cierto. En JNode, por ejemplo, hay una clase Unsafe (y otras) que le permiten acceder a las ubicaciones de la memoria, etc. También hay algunas clases / métodos "mágicos" que se traducen en instrucciones privilegiadas por el compilador JIT. El acceso a estas clases / métodos está (o estará) restringido por el administrador de seguridad, el compilador JIT, etc. Pero si está escribiendo un código que se ejecuta en el nivel del sistema operativo, estas instalaciones están disponibles para usted.

La advertencia es (por supuesto) que el uso incorrecto de Unsafe y las clases relacionadas pueden provocar fallas en el sistema operativo de inmediato o en el futuro.

    
respondido por el Stephen C 23.01.2011 - 04:26
fuente
0

Dudo de su utilidad para computadoras de escritorio. Pero el tiempo puede demostrar que estoy equivocado en este punto.

Pero un potencial interesante a mis ojos es como un sistema operativo de servidor, más específicamente como un sistema operativo invitado en un entorno virtualizado. Nunca me sentó bien instalar una instalación de servidor de Windows completa en un entorno de servidor virtual, sabiendo cuántos servicios innecesarios se ejecutan, incluida la GUI completa.

Ahora instala algo como Singularity en un servidor virtual para alojar aplicaciones ASP.NET, eso tiene más sentido. Suponiendo que puedan mantenerlo como un sistema operativo ligero.

    
respondido por el Pete 23.01.2011 - 00:15
fuente

Lea otras preguntas en las etiquetas